串口TX0中断的初始化程序错在哪儿?

2019-03-24 20:53发布

编程目标:使用AVR128单片机,让TX0以9600的波特率,连续不断地发送数据0X33。 目前存在的问题是:初始化程序中必须加一句UDR0 =0x00,TX0发送中断程序OSUart0TX才被“激活”,才会连续不断地发送0X33。如果去掉这句,一个0X33也发不出。   这是为什么呢? 类似现象还有:如果我在中断程序中OSUart0TX加入IF语句,只有条件符合时,UDR0才被赋值,那么,由于不是连续发送数据,结果一个数据也发不出去。给人的感觉是,必须靠前一个发送数据来“激活”,如果有间断,就“死掉”了,就发不了数据了。   这是怎么回事呢?   紧急求助!!!     我编的程序如下: 一、初始化程序是: {
/***********************************初始化串口*********************************/
 //启用针脚第二功能----CCL设计更改单
 DDRE &= ~BIT(0);     //RX0
 DDRE |= BIT(1);     //TX0
 PORTE |= BIT(0);
 PORTE |= BIT(1);
 
    //串口配置----CCL注
    UCSR0B = 0x00;      //初始化之前要关闭中断----  UCSR0A = 0x00;
  UCSR0C = 0x06;      //八位字符,无校验   异步 一位停止位
                             
  UBRR0L = 104;      //波特率:16000000Hz/16分频/104=9615bit/s----   UBRR0H = 0x00;      //set baud rate hi
  
  UCSR0B = 0xD8;      //使能发送、发送中断、接收、接收中断---- 
 UDR0 =0x00;//随便赋值,以激活发送中断----CCL注 }   二、TX0发送程序是: #pragma interrupt_handler OSUart0TX:21
void OSUart0TX(void)

    UDR0 =0x33; //仅供实验 
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
tiankai001
1楼-- · 2019-03-25 01:03
程序设置有些问题,我记得以前好像碰到这样的问题,是寄存器设置有问题,
sopu7758
2楼-- · 2019-03-25 06:23
我又试了试,发现删除程序其他部分,只保留定时器0、TX0的中断及初始化,故障依旧。
可见,不是其他程序导致本问题。

哪位大哥有TX0中断源程序,发我一份?求助!
sopu7758
3楼-- · 2019-03-25 06:44

我找到问题了:

把UCSR0B = 0xD8; 改成UCSR0B = 0xF8;

就可以了。

 

谢谢关心。

一周热门 更多>