AVR的说明书上说:
“TXC标志位可以用来检验一个数据帧的发送是否已经完成,RXC标志位可以用来检验接收缓冲器中是否还有数据未读出。在每次发送数据之前(在写发送数据寄存器UDR前)TXC标志位必须清零。”
“数据寄存器空UDRE标志位表示发送缓冲器是否可以接受一个新的数据。该位在发送缓冲器空时被置"1”;当发送缓冲器包含需要发送的数据时清零。”
“当整个数据帧移出发送移位寄存器,同时发送缓冲器中又没有新的数据时,发送结束标志TXC置位。TXC在传送结束中断执行时自动清零,也可在该位写"1”来清零。”
看完上述的说明之后,我一直疑惑在发送数据时,是不是要同时进行两种操作:
1、判断UDRE为1。
2、清除TXC标识。
但是在网上见到的实用程序中,并没有上面的第二项操作,似乎也可以行得通。带着这个疑惑,我在网上搜到了一个比较好的回答:
“关于AVR的串口,解释如下:
对于发送,有一个UDR缓冲寄存器,还有一个移位寄存器。当你写一次UDR时,单片机会立即把这个数据转到移位寄存器,所以你还可以立即写第二个数据。以后每当UDR缓冲寄存器空的时候,就会产生UDRE中断,而要产生TXC中断,就必须等移位寄存器的数据都发送完毕后才会产生。
对于接收,有两个UDR缓冲寄存器,还有一个移位寄存器。两个接收缓冲器相当于一个FIFO结构。当有数据接收时,如果一个完整的数据被接收到移位寄存器,会将其转到缓冲寄存器。这样会产生RXC中断。
AVR和51不同,这样的结构会更好。例如当你的程序很忙在另外一个中断里,这时有串口接收数据。两个缓冲器会为你赢得时间,而不会丢失数据。发送数据也一样。而51就不是这样的。”
“如果连续写两个缓冲器数据时,因为刚写缓冲的一个数据被移位到了移位寄存器,所以可以立刻再写一个数据。就是说UDRE置位时,单片机还有一个字节在移位寄存器里正在发送。”
结论就是:
常见的循环发送程序(即只判UDRE而不判TXC的发送程序)可以工作,究根结底在于发送数据的连续性:即起始时TXC=0,满足发送条件;而连续发送数据时,因为UDRE置位时,而移位寄存器中仍有数据在发送,故TXC没有置位,也满足发送条件。直到全部数据发送完成,移位寄存器和发送缓冲器都没有数据后,TXC才置位。
需要注意的是:
1、如果之前发送过一轮数据后,再次发送时,必须清除TXC标识,即对该位写“1”。最好是在一轮数据发送完成后检测TXC标识将其清除。
2、如果采用了发送完成中断,则不必手动清除,因为进入发送中断程序后,硬件可自动清除TXC标识。
3、如果不使用中断发送而采用循环发送时,发送过程中因其他中断的缘故,使发送程序暂停超过了一定时间的话,就会导致移位寄存器中的数据发送完成后置TXC标识位,则之后的发送就无法进行了。
4、如果采用485进行通讯,只有在检测到TXC置位时才改变485的状态。因为只有TXC置位时,才代表发送过程的完成。
我认为比较好的发送程序如下:
void uart_putchar(unsigned char c)
{
while(!(UCSR0A&(1<
if(UCSR0A&(1<
UCSR0A|=(1<
UDR0 = c;
}
关键字:AVR 单片机通讯 发送标识 UDRE TXC
引用地址:
AVR单片机通讯用发送标识UDRE与TXC的区别
推荐阅读最新更新时间:2024-11-18 12:22
基于时间触发嵌入式系统的设计与应用(3)
简介:本文设计了基于AVR微控制器的时间触发多任务调度器并应用于实际。该调度器使用传递消息(message)的方式使得微控制器在多个任务及设备间切换。 5.应用实验 以电磁炉系统为例,进一步介绍基于AVR微控制器的时间触发嵌入式系统的具体应用。 电磁炉系统是一个复杂的嵌入式系统,如图2所示,AVR要处理大量的外围设备,为便于开发,将整个程序按照硬件及功能进行模块划分,各个功能模块之间通过传递消息的方式来完成多任务的处理。 针对该应用,可设计功能模块:MSGMap ,该数组由各个功能模块组成,具体子函数如表1所列,使用函数数组的方式可以增强程序的扩展能力。如果有新的外设,只需在这里添加对应的模块入口,并完成相应的模块就可
[单片机]
基于AVR内核的宠物狗无线感知交互系统
一、项目概述 1.1 引言 维基百科中对于环保的内涵定义可分为三个方面:对自然环境的保护、对人类居住环境的保护、对地球生物的保护。在提到对地球生物保护时,很重要的一点就是人与动物的和谐共处。 宠物狗作为人类最亲近的动物之一,为我们的生活带来了欢乐与便利,但大多数人在饲养宠物狗时却由于无法理解宠物狗的真实想法而导致各种问题的出现。因此我们想通过这款基于AVR内核的宠物狗无线感知交互系统让宠物狗主人更加了解宠物狗,增进与身边动物的感情,进而实现人与动物的和谐共处。 1.2 项目背景/选题动机 在当今社会,宠物已融入到人们的日常生活之中。单就中国而言,宠物数量已突破一亿,平均每三个家庭就有一只宠物,此时宠物的作用已不再局限于为人
[单片机]
基于AVR单片机的时间继电器的设计
随着微机控制技术的发展,以各种微处理器为控制核心的新型控制装置全面取代了原有的继电器。在现代自动控制设备中,都存在一个电子电路和电气电路的互相连接问题,一方面要电子电路的控制信号能够控制电气电路的执行元件,另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和人身的安全,时间继电器便能起到这一桥梁作用。时间继电器是一种将电子定时电路与继电器组合在一起的延时控制装置,在电子设备的自动控制中使用较多,通过它可以定时控制电路的换接,具有使用方便、定时可调、使用寿命长的特点。 1 系统构成 本文设计的时间继电器外围包括如下几部分:电源部分、键盘部分、LCD液晶屏显示部分、继电器、状态指示和报警等。系统框图如图1所示。
[单片机]
超声波测距-AVR程序代码
#include #include #define uchar unsigned char #define uint unsigned int uchar int_flag; uint qian,bai,shi,ge; uint i; float distance; // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include // External Interrupt 0 service routine interrupt void ext_int0_isr(void) {#asm( sei ) if
[单片机]
自制AVR单片机ISP下载线电路解析
自制AVR 单片机 ISP下载线 单片机编程器的作用是将调试好的程序烧写到单片机的 存储器 中。本文介绍的AVR单片机ISP下载线的成本只有10元左右,非常适合初学者自制。 AVR单片机的程序可以使用串行在线编程(ISP)方式下载写入,即可直接在 电路 板上进行程序的烧写和修改,所需的装置就是一根ISP下载线。 本文介绍的ISP下载线使用计算机的并口对单片机编程.不仅支持AVR单片机,也支持对51单片机中AT89S系列单片机的编程。 一、下载线电路 下载线的电路见图1。该下载线是STK200/300型的下载线。74HC244是8 缓冲器 电路,用来作计算机并口和单片机的缓冲隔离。图1中的LPT连接到计算机的并口,作计算
[单片机]
利用AVR单片机制作电压表
通过研究和实验,用mega16可以制作5V电压。电压值从LED显示出来。 下面是部分源程序: uint mega16_ad() { uint addata; DDRD|=BIT(4)|BIT(5)|BIT(6); DDRA&=~BIT(PA3); PORTA&=~BIT(PA3); ADMUX=0x03; ADCSR=0X80;//转换使能 ADCSR|=BIT(ADSC);//开始转换 while(!(ADCSR&(BIT(ADIF))));//等待转换结束. addata=ADC*4.8876; //转换为四位5V电压数 return addata; } void main() {
[单片机]
avr内部EEPROM实验
学习了AVR内部EEPROM的使用。 内部flash中保存的是烧录进去的程序。 内部EEPROM可以保存数据,并且断电后还保存着。 内部SRAM可以保存变量数据,断电后不保存。 仿真图片 程序代码 #include iom16v.h #include macros.h #include delay.h #define uchar unsigned char #define uint unsigned int uchar led7 ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳7段数码管显示0-9对应的8bit uchar temp; vo
[单片机]
基于AVR单片机的LED显示屏的灰度设计与实现
LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介 AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结
[工业控制]