自学AVR编了个串口调试程序不知道是哪里有问题。。请教各位高手帮忙指点指点,我的MCU是ATmega128,编程环境是AVR GCC,用的是JTAG仿真器,程序如下:
#include <avr/io.h>
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
//串口0初始化
void usart0_init(void)
{
UCSR0B = 0x00; //禁止发送和接收
UCSR0A = 0x00;
UCSR0C = 0x06; //0000 0110,UCSZ01=1,UCSZ00=1;8位字符,1位停止位
UBRR0L=0x44;
UBRR0H=0x00; //设置波特率寄存器
UCSR0B = 0x18; //允许发送和接收
}
//发送一个字符
void usart0_char_send(uchar i)
{
while(!(UCSR0A&(1<<UDRE0)));//发送缓冲器为空
UDR0=i;
}
//发送一个字符串
void usart0_str_send(char *s)
{
while(*s)
{
usart0_char_send(*s);
s++;
}
}
//接收一个字符
uchar usart0_char_receive(void)
{
while(!(UCSR0A&(1<<RXC0)));//接收数据完毕
return UDR0;
}
//主函数
void main(void)
{
uchar usart0_temp;
usart0_init();
while(1)
{
usart0_temp=usart0_char_receive(); //等待接收数据
usart0_str_send("data is:"); //发送数据
usart0_char_send(usart0_temp);
}
}
接上串口线后用串口调试助手测试了下,调试助手界面里显示出来的是16进制乱码而且也没有我程序里想发送的“data is”字符串。。。检查了好久都没发现问题出在哪里,恳请哪位高手路过的时候帮忙指点一下,感激不尽! |
|