编程目标:使用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; //仅供实验 }
|