历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2019年10月12日 | AVR单片机串口USART与PC通讯实例,讲解原理和程序

发布者:sumig 来源: eefocus关键字:AVR  单片机  串口  USART  通讯实例 手机看文章 扫描二维码
随时随地手机看文章

“并行”通讯:是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。


“串行”通讯:形容一下就是 一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是并口快,由于8位通道之间的互相干扰。传输时速度就受到了限制。而且当传输出错时,要同时重新传8个位的数据。串口没有干扰,传输重发一位就可以了。所以要比并口快。


串行通讯协议较多,单片机常用的有USART,SPI,TWI,1-Wire 等。

串行通讯有分为同步和异步通讯:通俗讲 同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉


你听到了,才一起去吃饭。异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。


同步通讯:收信发信双方在使用同步时钟,在同一时刻传输线上的数据就是要传输的信息。


异步通讯:以字符为传输单位,字符与字符之间是异步的,而字符的位是同步的

USART:异步串行通讯,常用与单片机和单片机,单片机和PC电脑间的数据传输。


波特率:表征通讯速度的参数,单位是位/秒(b/s),即每秒钟传输的二进制位数,如 波特率9600,表示每秒钟传输9600个二进制位数据。收发双方必须采用同样的波特率。波特率不同将无法正常通讯。


全双工通讯:指是的是可以同时发送和接收数据。

半双工通讯:指的是在同一时刻只能发送或只能接收数据。


单片机与PC通讯的电平转换:单片机的电压一般是TTL电平,电压0v-5v,PC机串口采用的是RS-232协议,它的的电压范围是-15-+15v, 电平不同,无法通讯。要实现通讯,必须进行电平和逻辑关系的转换,一般用MAX232集成芯片进行电平的转换。


ATmega16 串口结构:有一个全双工的串行口,有两条通讯线,TXD:数据发送线,RXD:数据接收线,对应的单片机外部引脚为PD1,PD0


相关寄存器

UDR  串口数据寄存器

UCSRA   串口控制与状态寄存器A

UCSRB   串口控制与状态寄存器B

UCSRC  串口控制与状态寄存器C

UBRRH,UBRRL  波特率寄存器 


发生器对波特率发生器的输出时钟进行2、8或16 的分频,具体情况取决于工作模式,如下图:



如:系统时钟频率f=8MHZ,异步正常模式(16分频),波特率9600


则: UBRR=8000000/16*9600-1=52-1=51;   波特率寄存器赋值:UBRRH=0;  UBRRL=51;


操作步骤:


一、设置异步模式: UCSRC|=(1<

二、设置数据帧格式: 8位数据位,一位停止位,UCSRC|=(1<

三、设置波特率寄存器: UBRRL=51;UBRRH=0;


四、使能发送接收:         UCSRB|=(1<


五、 中断总使能: SREG=0X80;


//函数功能:通过PC 串口向单片发送数据,单片机接收数据后,送到PA口显示,再送回到PC机


单片机源程序如下:

  1. #include

  2. #include

  3. #define fosc 8000000  //晶振8MHZ

  4. #define baud 9600     //波特率定义

  5. /*端口初始化函数*/

  6. void  init(void)

  7. {

  8. PORTA = 0xFF;   //PA口输出高电平

  9. DDRA  = 0xFF;  //PA口 设置为输出 

  10. PORTD = 0X00;       //USART的发送接收端口分别为PD0和PD1

  11. DDRD|=(1<

  12. }

  13. /*串口初始化函数*/

  14. void uart_init(void) 

  15. {

  16. UCSRB = 0x00;

  17. UCSRA = 0x00;

  18. UCSRC |= (1<

  19. //UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC时,URSEL应设置为1。

  20. UBRRL=51;      //设置波特率寄存器

  21. UBRRH=0;

  22. UCSRB |= (1 << TXEN)|(1 << RXEN);    //发送接收使能 

  23. }

  24. /*发送数据函数*/

  25. void send(unsigned char i)

  26. {

  27. while(!(UCSRA&(1<

  28. UDR=i;

  29. }

  30. /*以下是接收数据函数*/

  31. unsigned char  receive(void) 

  32. {

  33. while(!(UCSRA&(1<

  34. return UDR;

  35. }

  36. /*主函数*/

  37. void main(void) 

  38. {

  39. unsigned char temp;

  40. init();

  41. uart_init();

  42. while(1) 

  43. {

  44.   temp=receive();    //接收数据

  45.   PORTA=~temp;      //将接收的数据取反后送PA口显示   

  46.   send(temp);     //向PC机发送数据

  47. }

  48. }


关键字:AVR  单片机  串口  USART  通讯实例 引用地址:AVR单片机串口USART与PC通讯实例,讲解原理和程序

上一篇:第一页
下一篇:分享:LCD1602温度检测显示程序(ATmega16)

推荐阅读

在10月11日召开的纪念集成电路发明60周年学术会议上,中科院院士、中国科学院上海微系统与信息技术研究所所长王曦表示,传感器是未来智能感知时代的重要基础,根据调研机构Yole数据,传感器市场已经超过400亿美元,到2020年则接近600亿美元。目前,我国传感器芯片市场国有化率不足10%,进口依赖问题较集成电路整体情况更为严重。 王曦表示,智能传感器是人...
在工业自动化机械中,再生制动是一种利用电机(及其驱动器)的现有结构和能量以及专用子组件来减慢、停止和重新驱动电机轴的技术。再生制动技术为摩擦离合器和制动器提供了高度可控和效率较高(且不说结构紧凑)的替代品。简而言之,与再生制动有关的电路会将电机旋转转子和任何附加负载的动态机械能转化为电能。接着电能被回馈到电力线路中,用于其他用途...
10月11日,纳思达披露2021年三季度业绩预告,预计2021年前三季度归属于上市公司股东的净利润6.3亿元-7.3亿元,比上年同期增长51.8%-75.9%;基本每股收益0.5857元-0.6786元。预计2021年第三季度归属于上市公司股东的净利润2.05亿元–3.05亿元,比上年同期增长265.35%-443.57%;基本每股收益0.1905元–0.2835元。纳思达称,业绩变动主要原因如下:1、打印机业...

史海拾趣

问答坊 | AI 解惑

飞思卡尔单片机_SDIDE软件

飞思卡尔单片机_SDIDE软件 …

查看全部问答∨

今天是世界电信日

不知各位节日过的怎么样?…

查看全部问答∨

关于sources.cmn和sources的问题,请大家帮忙指点,谢谢!

大家好请问:         1.sources.cmn和sources有什么区别?       2.sources.cmn里面的这些环境变量代表的是什么???       希望大家能给个注释!!!!!    &nbs ...…

查看全部问答∨

根据定时器的值求延时

已知TH2,TL2中是工件转一圈的计时值,我要在工件上等距的采样128个点,那么采样两个点之间的间隔是不是就是由(TH2<<8+TL2)/128得到啊…

查看全部问答∨

请问:arm7 IO口的访问?

   目前用的LPC2220,菲利普的一款。 GPIO的访问,有4个口,P0~P3,想问P3口的怎么访问?    如  引脚 P3.27  怎么给设置0或1 ?…

查看全部问答∨

驱动加载程序中,在StartService()后,通过GetLastError()返回3错误(〖3〗-系统找不到指定的路径。)

    驱动加载程序中,在StartService()后,通过GetLastError()返回3(〖3〗-系统找不到指定的路径。)    在虚拟机运行的,一开始是好的,暂停第二次打开 ,无论如何加载时运行到StartService()后的GetLastError()返回都是 ...…

查看全部问答∨

哪位高手帮我看懂十二页的代码

哪位高手帮我看懂十二页的代码,主要问题是要用C语言在At89s52单片机上实现对自行车行驶时的路程和速度的显示,这里有用C语言写好的代码,前面还有一些1602LCD的一些输入,不是太能看懂,那位高手能帮我看懂具体的流程,然后能告诉我路程的输出到LC ...…

查看全部问答∨

寻:windows ce驱动及底层开发人员

现有一国外项目需要有windows ce驱动或底层开发经验的人, 有意者请msn或邮件联系:jackin_lau@hotmail.com…

查看全部问答∨

也来秀一下DIY,160*80带触摸液晶模块做的多功能时钟~~~~~~

哈哈,其实这个屏是去年电赛的时候买的,正好也用上了,不过用得比较简单,感觉有点可惜了就干脆做了一个完整的模块,估计有的朋友还记得之前小弟发的第一次做PCB的帖子吧,就是给这个做的,这个是当时的链接 https://bbs.eeworld.com.cn/threa ...…

查看全部问答∨

micrf506

用起来比较麻烦,但不加PA情况下可以到450米(实测)。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved