[AVR单片机] 一个串口问题,由于找不到51的板块,只能发到这里了

[复制链接]
2600|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;被执行
从而导致了无限重发
zhchyl 发表于 2008-1-6 12:43 | 显示全部楼层

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

68

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部