初入单片机,菜鸟问题,请高手指点..在线等
我做一个USART接口与PC机通讯程序,下面是部分代码:
flash uchar led_7[10] = {0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};
interrupt [USART_RXC] void usart_rx_isr(void)
{
uchar status,data;
status = UCSRA;
data = UDR;
if((status & (FRAMING_ERROR|PARITY_ERROR|DATA_OVERRUN)) == 0)
{
write_command(0x01);
write_command(0x80);
write_data(0xa3);
write_data(led_7[data]);
delay_ms(1);
}
}
void USART_Transmit(uchar data)
{
while(!(UCSRA & DATA_REGISTER_EMPTY)); //等待寄存器空
{
UDR = data; //发送数据
}
}
void main(void)
{
uchar i = 0;
PORTD=0x03;
DDRD=0xE2;
delay(2000);
UCSRA = 0x00; //USART 初始化
UCSRB = 0xd8; //RXD中断。TXD中断 接收允许,发送允许
UCSRC = 0x86; //8位数据位 1位停止位 无奇偶位
UBRRH = 0x00;
UBRRL = 0X67;
#asm("sei")
//初始化LCD//
while(1)
{
if(++i < 10)
{
USART_Transmit(i);
delay_ms(1);
}
else
i = 0;
delay(800);
};
}
其中write_command和write_data是向LCD写数据.LCD串口联接
问: 为什么串口调试工具输出不是0--9这10个数.是一大堆乱码..而且没有什么规律...但在跟踪的时候感觉所有正常..
请高手帮忙看看.是不是程序不执行中断呀.我该怎么修改呢?
[解决办法]
问题出在这里:USART_Transmit(i);
试试USART_Transmit('1');
[解决办法]
首先,检查你的波特率。看你的程序USART_Transmit(..)是输出函数吧。如果想输出0-9,那实际上应该输出0x30-0x39,这个才是ASCII码中的0-9呢。
也就是说,输出0应该是USART_Transmit(0x30)