打印

一个串口问题,由于找不到51的板块,只能发到这里了

[复制链接]
1622|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
frankfly|  楼主 | 2008-1-2 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一段程序,大家看一下,有什么问题
#include <reg52.h>

void initial();
void Uart_SendByte(char buf);

void delay(int count);
void main()
{
    initial(); 
    Uart_SendByte('U');
//    while(1);
}


void initial()
{
  IE=0x90;   //中断允许寄存器 
  SCON=0x50; //串行口控制寄存器 方式1
  TMOD=0x20; //timer1 方式2
  PCON=0x80; //波特率加倍                                
  TH1=0xFA;                                      
  TR1=1;
    }

void Uart_SendByte(char buf)
{
       SBUF = buf;      
       while(TI == 0);
       TI = 0;      
}
void delay(int count)
{
for(;count>0;count--);
}

void serial () interrupt 4 using 3 
{
    unsigned char temp;
    if(RI)
    {
        RI = 0;
        temp = SBUF;
    }
    Uart_SendByte(temp);
}

程序结果就是单片机不停的发U;
如果加上main()函数中的while(1),单片机就在发了一个U之后,不停的发0x00;
如果去掉void serial () interrupt 4 的中断接受函数,同时去掉main()中的while(1),程序才得以正常。
不明白串口的中断接受函数为何有此影响,请指教。 

相关帖子

沙发
NE5532| | 2008-1-2 21:23 | 只看该作者

发和收是同一个中断入口。

确认你没有犯低级错误。
不使用while(1);绝对是错的。
PS:第一步,关总中断测试
第二部,观察接收中断是否被错误触发,若是,找原因。

使用特权

评论回复
板凳
westsfw| | 2008-1-3 08:42 | 只看该作者

有意思

是不是 while(TI == 0);这句等待的时候产生了中断,然后又要接着发送了。而且把中断函数里的Uart_SendByte(temp);放到IF块里应该更好吧。

使用特权

评论回复
地板
jx_207| | 2008-1-3 16:48 | 只看该作者

中断中函数问题

如三楼所说,中断中发送造成,不断发.

使用特权

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

本版积分规则

21

主题

68

帖子

0

粉丝