/***************************************************************************/
/*串口0测试程序 */
/*目标器件:ATmega168 */
/*晶振:RC 8MHZ */
/***************************************************************************/
/*********************************包含头文件********************************/
#include<_iom88to328v.h>
#include<macros.h>
/***********************************宏定义**********************************/
#define fosc 8000000 //晶振8MHZ
#define baud 2400 //波特率
void uart0_init(void)
{
UCSR0B = 0x00; //关闭UART00
UCSR0A = 0x00; //不使用倍速发送(异步)
UCSR0C =(1<<UCSZ01)|(1<<UCSZ00); //数据位为8位
UBRR0L=(fosc/16/(baud+1))%256; //异步正常情况下的计算公式
UBRR0H=(fosc/16/(baud+1))/256;
UCSR0B =(1<<RXEN0)|(1<<TXEN0); //接收使能和发送使能
}
void putchar0(unsigned char c)
{
while (!(UCSR0A&(1<<UDRE0)));//表明发送器已经准备就绪
UDR0=c; //将要发送的数据装入UDR0寄存器
}
unsigned char getchar0(void)
{
while(!(UCSR0A& (1<<RXC0)));//表明已经接收完毕
return UDR0;
}
void puts0(char *s)
{
while (*s)
{
putchar0(*s);
s++;
}
putchar0(0x0a);//回车换行
putchar0(0x0d);
}
void delay()
{
unsigned int i;
for(i=0;i<65000;i++)
;
}
void main(void)
{
unsigned char i;
uart0_init();//UART0初始化
puts0("HELLO!");
while(1)
{
puts0("Haha!");
//putchar0(0x30) ;
delay();
}
}
完整资料打包(含仿真):