⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usart.c

📁 AVR串口和电脑通讯的UART程序
💻 C
字号:
 #include<iom16v.h>
 #include<macros.h>
 #define uchar unsigned char
 #define uint unsigned int
 #define mclk 7372800      //晶振 7.3728 M
 #pragma interrupt_handler uart_rx:12     //中断向量12,表示USART 的RX结束
 uchar rdata,flag=0;
 void uart_init(uint baud);
 void uart_sendB(uchar data);
 void uart_rx(void);
 void delay(uint ms);
 void main()
 {
 uart_init(9600);					
 while(1)
 {
   if(flag)                                             //flag为1证明进入中断,接收到数据
    {
   	   uart_sendB(rdata);				                //发送接收到的数据
	   flag=0;                                          //将flag清零
    }
 }		 
 }
void uart_init(uint baud)//传输寄存器控制子函数
{
 UCSRA=0x00;                                           //控制寄存器清零
 UCSRB=(1<<RXCIE)|(0<<UCSZ2);                          //接受中断结束使能,8位字符,写UCSRC寄存器
 UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
 baud=mclk/16/baud-1;					               //数据手册自带,波特率计算
 UBRRL=baud;                                            
 UBRRH=baud>>8;
 SREG=BIT(7);						                   //全局中断使能
 UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); 			       //接受结束中断使能,接受使能,发送使能
 DDRD|=0X02;                                           //很重要的一行,PD1口为输出,PD0口为输入
 }
void uart_sendB(uchar data)//发送子函数
{
   while(!(UCSRA&(BIT(UDRE)))) ;                       //判断数据寄存器,为空时跳出循环
   UDR=data;					                       //将发送数值传给UDR
   while(!(UCSRA&(BIT(TXC))));                         //判断发送是否结束,结束则跳出循环
   UCSRA|=BIT(TXC);				                       //清楚发送结束使能位(总是用UDR决定发送使能位)
}
void uart_rx(void)//接受子函数
{
UCSRB&=~BIT(RXCIE);                                   //接受结束中断使能关断
rdata=UDR;					                          //赋值将UDR寄存器得值传给变量rdata
flag=1;                                               //自定义标志,表示接收终端已进入
UCSRB|=BIT(RXCIE);				                      //开启接受结束中断使能
}
 void delay(uint ms)//延时子函数
{
        uint i,j;
	for(i=0;i<ms;i++)
	   {
	   for(j=0;j<11411;j++);
       }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -