#include "iom16v.h"
#include "macros.h"
//波特率,晶振
#define BAUD 9600
#define FXTAL 8000000
void delay_ms(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=1200;y>0;y--);
}
//串口IO初始化函数
void USART_IO_Init(void)
{
DDRD|=BIT(PD1); //PD1:TX为输出状态
}
//串口初始化函数
void USART_Init(void)
{
unsigned int Temp;
USART_IO_Init(); //串口IO初始化函数调用
UCSRA=0; //串口控制器A清零
//UCSRB=0x00; //串口控制器B清零
UCSRC|=BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0); //选择USCRC,异步操作,禁止检验危,1个停止位,八位数据
Temp=(FXTAL/BAUD/16)-1; //求出9600波特率的赋值
UBRRH=((Temp>>8)&0x00ff); //波特率寄存器高八位赋值
UBRRL=(Temp&0x00ff); //波特率寄存器低八位赋值
//UBRR=51; //从手册中直接取得赋值,9600kbps
UCSRB|=BIT(TXEN); //发送使能
//SREG|=BIT(7); //全局中断使能
}
//串口发送函数
void USART_Send(unsigned char Data)
{
while(!(UCSRA&(BIT(UDRE)))); //数据寄存器UDR是否为空?
UDR=Data; //UDR赋值
while(!(UCSRA&(BIT(TXC)))); //数据是否已经发送完毕?
UCSRA|=BIT(TXC); //清除发送完毕标志位
}
//主函数
void main()
{
unsigned char a=20;
USART_Init();
while(1)
{
USART_Send(a);
delay_ms(1000);
}
}
|