打印
[AVR单片机]

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

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

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

void delay(int count);
void main()
{
    initial(); 
    Uart_SendByte(0x55);
//    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),程序才得以正常。
不明白串口的中断接受函数为何有此影响,请指教。

相关帖子

沙发
pantodd| | 2008-1-2 20:01 | 只看该作者

51中,中断程序中调用函数要定义为再入函数。

使用特权

评论回复
板凳
frankfly|  楼主 | 2008-1-2 21:08 | 只看该作者

多谢2楼

使用特权

评论回复
地板
AIRWILL| | 2008-1-4 12:50 | 只看该作者

TI 也会引发串口的中断

串口的中断服务却没有处理(清除其标志)
串口的中断先于 TI = 0;被执行
从而导致了无限重发

使用特权

评论回复
5
zhchyl| | 2008-1-6 12:43 | 只看该作者

keil 默认的情况下,main函数是不断循环执行的

使用特权

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

本版积分规则

21

主题

68

帖子

0

粉丝