用于ATmega128的软件UART范例程序_第1页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用于atmega128的软件uart范例程序普通教科书上提供的uart收发的程序往往是一段采纳轮循(polling)方式完成收发的容易代码。但对于高速的来讲,采纳这种方式大大降低了 muc的效率。在用法avr时,应按照芯片本身的特点(片内大容量数据存储器ram,更适合采纳高级语言编写系统程序),编写高效牢靠的uart收发接口(低层)程序。下面是一个典型的atmega128的软件usart的接口程序。includedefine rxb8 1define txb8 0define upe 2define ovr 3define fe 4define udre 5define rxc 7define

2、 framing_error (1/ declare your global variables herevoid main(void)/ usart0 initialization/ communication parameters: 8 data, 1 stop, no parity/ usart0 receiver: on/ usart0 transmitter: on/ usart0 mode: asynchronous/ usart0 baud rate: 9600u0a=0x00;ucsr0b=0xd8;ucsr0c=0x06;ubrr0h=0x00;ubrr0l=0x67;/ g

3、lobal enable interruptsasm("sei")while (1)/ place your code here;这段由cvavr程序生成器产生的uart接口代码是一个十分好的、高效牢靠,并且值得仔细学习和体味的。其特点如下:1. 它采纳两个8字节的接收和发送缓冲器来提高的效率,如当主程序调用putchar()发送数据时,假如uart口不空闲,就将数据放入发送缓冲器中,mcu不必等待,可以继续执行其它的工作。而uart的硬件发送完一个数据后,产生中断,由中断服务程序负责将发送缓冲器中数据依次送出。2.数据缓冲器结构是一个线性的循环队列,由读、写和队列计数器3

4、个指针控制,用于推断队列是否空、溢出,以及当前数据在队列中的位置。3. 用编译控制指令pragma savereg-和pragma savereg+,使得由cvavr在生成的中断服务程序中不举行中断庇护(cvavr生成中断庇护会将比较多的寄存器压入堆栈中),而在中断中嵌入汇编,只将5个在本中断中必需要庇护的寄存器压栈。这样提高了uart中断处理的速度,也意味着提高了mcu的效率。4.因为在接口程序putchar()、getchar()和中断服务程序中都要对数据缓冲器的读、写和队列计数器3个指针推断和操作,为了防止矛盾,在putchar()、getchar()中对3个指针操作时暂时将中断关闭,提高了程序的牢靠性。建议读者能逐字逐句地认真分析该段代码,真正理解和领悟每一句语句(包括编译控制指令的作用)的作用,从中体味和学习如何编写效率高,牢靠性好,结构优良的系统代码。这段程序用法的办法和技巧,对编写spi、i2c的串行通信接口程序都是十分好的借鉴。作为现在的和系统的工程师,不仅要深化全面的把握芯片和各种器件的性能,具备丰盛的硬件设计能力;同时也必需提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论