网站大量收购独家精品文档,联系QQ:2885784924

avr单片机异步串行偷抹信(USART)实验.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
avr单片机异步串行偷抹信(USART)实验

AVR单片机异步串行通信(USART)实验 -------基于LT_Mini_M16 5.1.3、电路 本实例的电路包含RS323的串口电平转换芯片MAX3232,电路图如下图所示。 1、电路原理 在本实例中利用MAX3232芯片使单片机输出的TTL电平转换为标准的RS232电平,从而使计算机能够识别。同时将计算机输出的RS232电平转换为单片机可以识别的TTL电平。 2、电路连接 电路中MAX3232芯片的9、10引脚分别连接单片机的PD0、PD1端口,MAX3232的13、14引脚分别连接计算机串口线的3、2脚。 3、特别说明 本学习板采用的是串口插座是公头的,所以与计算机相连的串口连接线应该是交叉串口线,而不是串口延长线。 5.1.4、程序设计 1、程序功能 程序的功能是使用单片机的串行接口PD0、PD1设计串口通信程序,通过单片机向计算机发送一个字节的数据。 程序调试的时候需要在计算机上安装串口助手,以观察接收的串口数据。 2、 单片机与计算机串行通信结果的观察 在本例中,只是简单的发送一个字节到计算机,由于单片机运行速度比较快,所以当程序烧写到单片机后再打开串口助手观察接收到的数据的时候,可能会看不到接收的数据,我们可以提前打开串口助手以便观察。也可以按一下学习板上的复位按键,这时候程序会重新运行,这样就可以在串口助手上观察到接收的数据了 3、数据通信格式的设定 要实现单片机和计算机的串行通信,首先要使双方的通信波特率和数据格式一致,这样才能观察到正确的结果。 在本例中,单片机发送串口数据采用的波特率是9600bps,数据格式是8位数据位,1位停止位,无奇偶校验。在计算机上的串口助手里面,我们也要将波特率和数据格式设置成一样的。 4、关于串行数据发送函数的编写 由于我们在这个实例中只是实现了从单片机发送一个字节的数据到计算机,所以编写起来相对比较简单。首先我们要设置好串口寄存器的内容,然后查询数据缓冲器是否为空,如果数据缓冲器为空,则表示可以发送数据,这时候我们就可以将要发送的那个字节写入数据发送寄存器中。 5、程序的简单模块化 从这个程序开始,我们试着将程序模块化。程序模块化有两个好处: ● 程序结构清晰,容易读懂。 ● 程序便于移植 程序的模块化是一个系统的工程,在本实例中,我们先简单的把程序的不同功能封装成不同的函数,然后再主程序里面调用这些函数;这样编写出来的程序,主程序比较简洁,并且易读。而每一个函数都具有各自不同的功能,以后我们用到这些功能的时候,就可以直接调用这些函数了。 本实例用到了3个函数,分别是:端口初始化函数,串口初始化函数,字节发送函数。 6、使用WINAVR开发环境,从这个例子开始,我们要使用外部晶振了,所以makefile文件中的时钟频率要修改一下,我们使用的是外部12M的晶振,所以需要将MAKEFILE文件中的时钟频率修改为12M。另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序。我今天就犯了这样的错误,最后只好用外部振荡器恢复了一下才把单片机弄正常了)。 7、程序代码 #include avr/io.h #include util/delay.h #include avr/interrupt.h //中断函数头文件 //常量声明 #define BAUD 9600 //波特率定义 //全局变量声明 unsigned char Transmit; //函数声明 void Port_Init(void); //端口初始化配置 void Usart_Init(void); //USART寄存器设置 void Usart_PutChar(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 = 0X00; UCSRC |= (1UR

文档评论(0)

ayangjiayu3 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档