ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:185.51KB ,
资源ID:15696288      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15696288.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(avr单片机异步串行通信USART实验文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

avr单片机异步串行通信USART实验文档格式.docx

1、要实现单片机和计算机的串行通信,首先要使双方的通信波特率和数据格式一致,这样才能观察到正确的结果。在本例中,单片机发送串口数据采用的波特率是9600bps,数据格式是8位数据位,1位停止位,无奇偶校验。在计算机上的串口助手里面,我们也要将波特率和数据格式设置成一样的。4、关于串行数据发送函数的编写由于我们在这个实例中只是实现了从单片机发送一个字节的数据到计算机,所以编写起来相对比较简单。首先我们要设置好串口寄存器的内容,然后查询数据缓冲器是否为空,如果数据缓冲器为空,则表示可以发送数据,这时候我们就可以将要发送的那个字节写入数据发送寄存器中。5、程序的简单模块化从这个程序开始,我们试着将程序模

2、块化。程序模块化有两个好处: 程序结构清晰,容易读懂。 程序便于移植程序的模块化是一个系统的工程,在本实例中,我们先简单的把程序的不同功能封装成不同的函数,然后再主程序里面调用这些函数;这样编写出来的程序,主程序比较简洁,并且易读。而每一个函数都具有各自不同的功能,以后我们用到这些功能的时候,就可以直接调用这些函数了。本实例用到了3个函数,分别是:端口初始化函数,串口初始化函数,字节发送函数。 6、使用WINAVR开发环境,从这个例子开始,我们要使用外部晶振了,所以makefile文件中的时钟频率要修改一下,我们使用的是外部12M的晶振,所以需要将MAKEFILE文件中的时钟频率修改为12M。

3、另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序。我今天就犯了这样的错误,最后只好用外部振荡器恢复了一下才把单片机弄正常了)。 7、程序代码#include util/delay.havr/interrupt.h /中断函数头文件/常量声明#define BAUD 9600 /波特率定义/全局变量声明unsigned char Transmit;/函数声明void Port_Init(void); /端口初始化配置void Usart_Init(void); /USART寄存器设置void Usart_P

4、utChar(unsigned char cTXData); /字节发送函数int main(void) Port_Init(); Usart_Init(); Transmit = 0X31; Usart_PutChar(Transmit); sei(); /使能全局中断 while(1) /端口状态初始化设置函数void Port_Init() PORTD = 0X00; /USART的发送接收端口分别为PD0和PD1 DDRD |= (1 PD1); /PD0为接收端口,置为输入口;PD1为发送端口,置为输出口/USART寄存器配置函数void Usart_Init() UCSRA = 0

5、X00; UCSRC |= (1URSEL) | (1 UCSZ1) | (1 UCSZ0); /异步,数据格式8,N,1/UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时,URSEL 应设置为 1。 UBRRL = (F_CPU / BAUD / 16 - 1) % 256; /波特率设置 UBRRH = (F_CPU / BAUD / 16 - 1) / 256; UCSRB |= (1 TXEN); /发送使能/字节发送函数void Usart_PutChar(unsigned char cTXData) while( !(UCSRA & (1 UDRE) );

6、 /只有数据寄存器为空时才能发送数据 UDR = cTXData;5.2 USART的接收发送实验5.2.1、实例功能在上一个实例中,我们已经用单片机的串口实现了向计算机发送一个字节的例子。在本实例中,我们将编写程序实现将计算机发送过来的串口数据原样再发送回计算机。本实例共有3个功能模块,分别描述如下: 单片机系统:使用单片机的串口实现将接收到的数据原样发送回去的功能。 外围电路:RS232电平转换电路,DB9串行接口插座。 软件程序:进一步熟悉单片机的串行通信5.2.2、器件和原理关于串行接口的原理已接单片机与计算机的串口的连接在上一实例中进行了描述,在本实例中不再重复。本实例只介绍单片机在

7、同时收发数据模式下寄存器的配置。1、ATmega16单片机的串口收发模式时的寄存器设置 寄存器在不同模式下的设置各不相同,混在一起介绍不容易记住。在这里只介绍本实例中用到的寄存器设置。(1)在编写程序的时候,我们可以不必理会过多,只要知道接收串口数据的时候,把UDR中的数据送到我们定义的接收变量中,发送数据的时候,把要发送的数据送入UDR中就可以了。(2)该寄存器主要是发送、接收结束的结束标志,以及各种数据错误检查方式。在一般的串口通信中,我们可以不必关心。一般我们只关心第五位的设置。Bit 5 UDRE: USART数据寄存器空UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDR

8、E为1说明缓冲器为空,已准备。在非中断方式发送数据的时候,每发送一个字节都要检测缓冲期是否为空,即检测UDRE是否为1,只有在UDRE为1的情况下,才能向缓冲器UDR中写入数据。在本例中我们就用查询的方式发送数据,所以要检测这一位是否为1.(3) Bit 7 RXCIE: 接收结束中断使能置位后使能 RXC 中断。当 RXCIE 为 1,全局中断标志位 SREG 置位, UCSRA 寄存器的 RXC 亦为 1 时可以产生 USART 接收结束中断。 Bit 4 RXEN: 接收使能置位后将启动 USART 接收器。 RxD 引脚的通用端口功能被 USART 功能所取代。禁止接收器将刷新接收缓冲

9、器,并使 FE、 DOR 及 PE 标志无效。 Bit 3 TXEN: 发送使能置位后将启动将启动 USART 发送器。TxD 引脚的通用端口功能被 USART 功能所取代。TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。 Bit 2 UCSZ2: 字符长度UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。该寄存器主要设置接受和发送寄存器的使能以及接收和发送中断标志,在本例中我们只是既用到了串口数据的发送功能,也用到了数据的接收功

10、能,所以要将TXEN和RXEN这两位使能,同时我们还用到了数据接收中断,所以还要设置接收中断允许。(4)UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。如果对UCSRC执行写操作,则URSEL应设置为1。 Bit 7 URSEL: 寄存器选择通过该位选择访问 UCSRC 寄存器或 UBRRH 寄存器。当读 UCSRC 时,该位为 1 ;当写 UCSRC 时, URSEL 为 1。 Bit 6 UMSEL: USART模式选择通过这一位来选择同步或异步工作模式。 Bit 5:4 UPM1:0: 奇偶校验模式这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发送器

11、都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与 UPM0 所设置的值进行比较。如果不匹配,那么就将 UCSRA 中的 PE 置位。 Bit 3 USBS: 停止位选择通过这一位可以设置停止位的位数。接收器忽略这一位的设置。 Bit 2:1 UCSZ1:UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 Bit 0 UCPOL: 时钟极性这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数据采样,以及同步时钟 XCK之间的关系。本例中,我们使用异步通信模式,数据格式为:一

12、位停止位,无校验,8位数据位。需要注意的是:在写这个寄存器的时候,需要将bit7位置1.(5) Bit 15 URSEL:当读 UBRRH 时,该位为 0 ;当写 UBRRH 时, URSEL 为 0。 Bit 14:12 保留位这些位是为以后的使用而保留的。为了与以后的器件兼容,写 UBRRH 时将这些位清零。 Bit 11:0 UBRR11: USART 波特率寄存器这个 12 位的寄存器包含了 USART 的波特率信息。其中 UBRRH 包含了 USART 波特率高 4 位,UBRRL 包含了低 8 位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL 将立即更新波特率分频器。5.2.3、电路本实例的电路与上一实例完全相同,这里不再重复。5.2.4、程序设计程序的功能是通过单片机的串行

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1