#include<iom16v.h>
#include<macros.h>
#pragma interrupt_handler uart_rx:12
#define fosc 1000000
#define BAUD 9600
void Port_Init(void); //端口初始化配置
void Usart_Init(void); //USART寄存器设置
void Usart_PutChar(unsigned char cTXData); //字节发送函数
void Usart_PutString(unsigned char *pcString); //字符串发送函数
int main(void)
{
Port_Init();
Usart_Init();
Usart_PutString("恭喜你!");
Usart_PutString("你的串口程序调试成功了!");
sei(); //使能全局中断
while(1)
{
}
}
//端口状态初始化设置函数
void Port_Init()
{
PORTD = 0X00; //USART的发送接收端口分别为PD0和PD1
DDRD |= (1 << PD1); //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
}
//USART寄存器配置函数
void Usart_Init()
{
UCSRA = 0X00;
UCSRC|= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //异步,数据格式8,N,1
//写 UCSRC 时, URSEL 应设置为 1。
UBRRL=(fosc/BAUD /16-1)%256; //波特率设置
UBRRH=(fosc/BAUD /16-1)/256;
UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //发送使能
}
//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
while( !(UCSRA & (1 << UDRE)) ); //只有数据寄存器为空时才能发送数据
UDR = cTXData; //发送数据送USART I/O数据寄存器-UDR
}
//接收中断函数
void uart_rx(void) //中断函数,接收字符串
{
unsigned char Rev;
Rev = UDR; //从USART I/O数据寄存器-UDR中读出数据
Usart_PutChar(Rev); //将接收到的数据发送
}
//字符串发送函数
void Usart_PutString(unsigned char *pcString)
{
while (*pcString)
{
Usart_PutChar(*pcString++);
}
Usart_PutChar(0x0D);
Usart_PutChar(0x0A); //结尾发送回车换行
}