完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Atmega16单片机串口通信
本篇文章参考自叶大鹏老师于2008年4月5日完成的UART通信PPT制作而成。 串口通信需要使用到的内部寄存器 在进行程序编写前需要对16单片机中的寄存器的作用和使用方法有所了解,下面为16单片机串口通信使用到的几个寄存器: USART I/O 数据寄存器 - UDR (UDR寄存器用于数据在传输中的存储): USART控制和状态寄存器A - UCSRA : void uart_sendB(uchar data) /*发送函数*/ { while(!(UCSRA&(BIT(UDRE)))); //等待发送缓冲器为空 UDR=data; //将数据存入UDR寄存器 } USART控制和状态寄存器B - UCSRB : void uart_rx(void) /*串口接收函数*/ { UCSRB&=~BIT(RXCIE); //校验数据是否传输完成,关闭接收中断 rdata=UDR; //将接收到的数据存入rdata flag=1; //标志位至1 UCSRB|=BIT(RXCIE); //接收完毕,开启中断 } USART控制和状态寄存器C - UCSRC : USART波特率寄存器 - UBRRL和UBRRH : #define mclk 8000000 baud=mclk/16/baud-1; //程序片段 UBRRL=baud; //设置波特率,先写低位再写高位 UBRRH=baud》》8; //设置波特率,先写低位再写高位 程序代码 本段程序编译环境为ICCAVR7 for AVR。 #include《iom16v.h》 #include《macros.h》 #define uchar unsigned char #define uint unsigned int #define mclk 8000000 #pragma interrupt_handler uart_rx:12 uchar rdata,flag=0; void uart_init(uint baud) //串口初始化 { UCSRB=0x00; UCSRA=0x00; UCSRC=(1《《URSEL)|(0《《UPM0)|(3《《UCSZ0); baud=mclk/16/baud-1; UBRRL=baud; UBRRH=baud》》8; UCSRB=(1《《TXEN)|(1《《RXEN)|(1《《RXCIE); SREG=BIT(7); //开中断 DDRD|=0x02; //设计发送口(TX)为输出,这很重要 } void uart_rx(void) //串口接收函数 { UCSRB&=~BIT(RXCIE); //校验数据是否传输完成,关闭接收中断 rdata=UDR; //将接收到的数据存入rdata flag=1; //标志位至1 UCSRB|=BIT(RXCIE); //接收完毕,开启接收中断 } void uart_sendB(uchar data) //发送函数 { while(!(UCSRA&(BIT(UDRE)))); //等待发送缓冲器为空 UDR=data; //将数据存入UDR while(!(UCSRA&(BIT(TXC)))); UCSRA|=BIT(TXC); } void main(void) { uchar i=4; uart_init(19200); while(1) { if(flag) { uart_sendB(i); flag=0; } } } |
|
|
|
只有小组成员才能发言,加入小组>>
1969 浏览 0 评论
1379浏览 4评论
1483浏览 4评论
有网友可以分享一款基于51单片机和MCP23017的IO扩展方案吗?谢谢!
1557浏览 4评论
嵌入式开发工具Keil 5的安装方法介绍(C51与MDK共存)
3918浏览 4评论
1080浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 粤ICP备14022951号 )
GMT+8, 2023-8-1 14:59 , Processed in 0.607002 second(s), Total 65, Slave 57 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:粤 B2-20160233 工商网监 粤ICP备 14022951 号