目前在做一个案子,要求能监测到485、232的数据,这里只说232部分的。
主程序运行之后,根据键盘输入,需要修改232的串口波特率,现在我的情况是根据键盘输入,跟初始化一样,那样子去修改波特率。如下:
初始化::
//UART1 initialize
// desired baud rate:9600
void uart1_init(void)
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0x33; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x18;
}
运行中需要修改波特率时,比如改为2400,我就调用下面的语句:
void uart1_2400(void)
{
uchar i;
CLI(); //disable all interrupts
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;
UCSR1C = 0x06;
UBRR1L = 0xCF; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
UCSR1B = 0x18;
UCSR1A = 0x00;
delay(100);
for(i=0;i<200;i++)
Comm_ReceiveData[0]=UDR1;
SEI(); //re-enable interrupts
}
结果是修改了波特率之后,没有反应,程序中,没有使用中断,我是用查询的方式来做检测是否收到数据,如下:
void new_dat5(void)//数据监视数据更新
{
//baud_chage();
uart1_rx_isr11();
if(oldData_Count!=Data_Count)
{
draw_data();
oldData_Count=Data_Count;
}
}
//uart1_rx的查询处理方式
void uart1_rx_isr11(void)
{
if((UCSR1A&0x80))
{
UCSR1A=0;
Comm_ReceiveData[Data_Count]=UDR1;
Data_Count++;
uart1_tran(UDR1);
}
}
现在是用电脑上串口调试工具,发数据(波特率什么的都设置好了),结果是没有回数据。不知道为什么,请做过的朋友指导一下。谢谢! |