打印

菜鸟再问一个PICC高手一个问题,请看程序。

[复制链接]
1194|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tc9148|  楼主 | 2012-1-31 23:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序1:
#include <pic.h>
#define uchar  unsigned char
#define uint   unsigned int
__CONFIG(0x30D2);
uchar t,x;


void main()
{
    uint j=10,i=50000;
    t=0;
    x=9;
    TRISC=0xc0;
    TRISD4=0; //RD4口定义为输出
    RD4=0;
////////////////////////////////////////////////////////////////////////////
//这段程序放在这里,编译完后,烧写,然后LED确实闪烁5次。
////////////////////////////////////////////////////////////////////////////
    while(j--) //闪烁5次
    {
        while(i--); //
        i=50000;
        RD4=~RD4; //
    }   
///////////////////////////////////////////////////////////////////////////
    SPBRG=0x64;
    TXSTA=0x24;
    RCSTA=0x90;
    RCIE=1;
    TXIE=1;
    PEIE=1;
    GIE=1;


    while(1);

}

void interrupt usart(void)
{
    if(RCIF)//判断是否为串口接受中断
    {
        RCIF=0;
          t=RCREG;
        if(t==1)
        {
            t=0;
            RD4=~RD4;
            TXREG=x;
        }
    }
}







程序2:
#include <pic.h>
#define uchar  unsigned char
#define uint   unsigned int
__CONFIG(0x30D2);
uchar t,x;


void main()
{
    uint j=10,i=50000;
    t=0;
    x=9;
    TRISC=0xc0;
    TRISD4=0; //RD4口定义为输出
    RD4=0;
    SPBRG=0x64;
    TXSTA=0x24;
    RCSTA=0x90;
    RCIE=1;
    TXIE=1;
    PEIE=1;
    GIE=1;

////////////////////////////////////////////////////////////////////////////
//这段程序放在这里,编译完后,烧写,然后LED根本就没有闪烁。
////////////////////////////////////////////////////////////////////////////
    while(j--) //闪烁5次
    {
        while(i--); //
        i=50000;
        RD4=~RD4; //
    }   
///////////////////////////////////////////////////////////////////////////

    while(1);

}

void interrupt usart(void)
{
    if(RCIF)//判断是否为串口接受中断
    {
        RCIF=0;
          t=RCREG;
        if(t==1)
        {
            t=0;
            RD4=~RD4;
            TXREG=x;
        }
    }
}










这是为什么呢?急死我啦,LED闪烁程序放的位置不同,造成的结果不同,但是串口通信和PC机通信是正常的,都可以收到和发送。奇怪啦!哪里有问题?

相关帖子

沙发
sjc_sugar| | 2012-2-1 13:10 | 只看该作者
可能你的程序进入到中断没有返回!第二个程序,你把全局中断关了,再测试下,LED灯闪烁不?

使用特权

评论回复
板凳
ZRL700424| | 2012-2-1 15:12 | 只看该作者
第一个程序,执行LED闪烁的程序时没开串口中断,闪完后就一直亮了(实际上是闪得很快,看起来像是一直亮);
第二个程序,先开了串口中断,执行LED闪烁程序时不断地产生串口中断,在中断程序中又取反了LED口,所以看起来就像一直亮一样。
如果把第二个程序的中断程序中的LED口取反语句去掉,就能看到闪烁了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一回生,两回熟。

137

主题

589

帖子

1

粉丝