历史上的今天
今天是:2025年06月09日(星期一)
2018年06月09日 | c51单片机上的发送中断标志位
2018-06-09 来源:eefocus
对于一些大多数单片机,他有一个专门的标志位来给串口的发送或接受数据做判断。
比如c51中,TIx和RIx。
TIx标识数据缓冲区的数据是否发送完毕,TIx = 1,表示发送完毕,TIx= 0,表示还没发送结束。
所以一个很简单的发送程序:
for(i=0;i { while(!TI0); TI0=0; SBUF0 = s_data[i]; } 像上面程序这样来发送数据。 但是,上面程序有可能出现问题,有时你会发现单片机一直发送不了数据,或发送的数据有些问题。 断点调试下你就会发现,单片机不发送数据的原因就是一直停留在while(!TI0)语句中。还好只是这样,如果是复杂的应用,导致数据错位或其他的,要找到原因还真麻烦啊。 问题原因很简单,就是如果程序在这之前没通过串口发送过数据呢? 比如下面的初始化: void UART0_Init() { unsigned char SFRPAGE_SAVE = SFRPAGE; SFRPAGE = UART0_PAGE; SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX SSTA0 = 0x15; SFRPAGE = TMR2_PAGE; TMR2CN = 0x00; TMR2CF = 0x08; RCAP2L = (-((unsigned int)(SYSCLK / BAUDRATE) >> 4 )); RCAP2H = (-((unsigned int)(SYSCLK / BAUDRATE) >> 4 )>>8); TMR2L = RCAP2L; TMR2H = RCAP2H; TR2 = 1; SFRPAGE = SFRPAGE_SAVE; } 看起来都没问题,但是,TI呢? TI默认0,没错,因为压根没发送数据,哪有发送完成。可巧好我们需要的条件是发送完成... 于是,很简单: for(i=0;i { while(!TI0); TI0=0; SBUF0 = s_data[i]; }
下一篇:51单片机之中断的实现过程
史海拾趣
|
网上找到的资料,感觉不错,与大家分享下 流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。目的是提高数据吞吐率(提高处理速度)。 流水线缩短了在 ...… 查看全部问答> |
|
比尔盖茨曾说过机器人的发展就像当年PC的发展一样,会影响改变人们的生活和工作,如同现在计算机网络,让人们寸步不离。其实机器人的智能完全依靠高速CPU,大容量存储,要想灵活独立运动,最好使用微软的嵌入式系统;当然,如果机器人根本不打 ...… 查看全部问答> |
|
对讲与警报这两个原本各自运作的系统,近年来掀起一股“合而为一”的趋势。原因为何?在整合或独立之间,到底各有哪些优缺点?该如何选择?可视对讲与警报系统,过去是两个完全独立的系统,甚至在全球大部分市场,仍是如此。然而在亚洲市场上,中国 ...… 查看全部问答> |
|
我 现在需要用PIC24FJ16GA002的 flash 来模拟EEPROM,可是在用到TBLRDL 和TBLWRL这两条指令的 时候,编译系统提示说它俩没定义,我是 用C语言做的,这两个指令在C里边 能直接用不 ? 谢谢 看从网络上找到的 例程中就是直接用的啊 ,可我 拿来直接 ...… 查看全部问答> |
|
自己做的STM32F103ZE开发板,支持网卡和USBHost.提供原理图下载 安富莱STM32F103ZE-EK开发板原理图.pdf (151.98 KB) 下载次数: 762 2009-10-12 21:28 安富莱STM32F103ZE-EK开发板用户手册(V1.0).pdf (1.14 MB) 下载次数: 751 2009-10-13 10:08 硬件资源: ■8M晶振作 ...… 查看全部问答> |
|
小弟最近在造循迹小车 关于电机控制的问题想问一下大家 首先红外线探头输入单片机的形式有 高低电平 和 脉冲的形式,那么用pwm控制电机是不是在这两种情况下都适合用 还是只能用在红外线输入脉冲的情况下. 还有个人感觉pwm好像很难学(本人之前没学 ...… 查看全部问答> |




