51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。
当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。
无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。
在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。
常用的方法有:
接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
PC与单片机串口通信的程序,要求如下:
1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。
2、如果接收到1,则将P00置高电平,接收到0,P10置低电平。(用来控制一个LED)
单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。
注意:调试软件我选择“串口猎人”,串口猎人中选择“字符格式发送” 。当然STC-ISP也是可以的
*********************************************************************************/
#include
sbit LED=P0^0;
unsigned char UART_buff;
bit New_rec = 0, Send_ed = 1, Money = 0;
void main ()
{
SCON = 0x50; //串口方式1, 10位UART(一个起始位“0”八个数据位一个停止位“1”), 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; //装入自动重加载的处置,9600bps@11.0592MHz
TL1 = 0xFD; //装入初值
TR1 = 1; //启动定时器T1
ES = 1; //开串口中断,但不开定时器中断,不允许定时器中断
EA = 1;
while(Money == 0); //等着交费,呵呵,等着接收$.
while(1)
{
if ((New_rec == 1) && (Send_ed == 1))
{ //如果收到新数据及发送完毕
SBUF = UART_buff; //那就发送.
New_rec = 0;
Send_ed = 0;
}
}
}
//----------------------------------------------
void ser_int (void) interrupt 4
{
if(RI == 1) //如果收到.
{
RI = 0; //清除标志.
New_rec = 1;
UART_buff = SBUF; //接收.
if(UART_buff == '1') LED = 1;
if(UART_buff == '0') LED = 0;
if(UART_buff == '$') Money = 1;
}
else //如果送毕.
{
TI = 0; //清除标志.
Send_ed = 1;
}
}
上一篇:基于单片机直流电机PWM控制系统设计
下一篇:51单片机双向通信实例
推荐阅读
史海拾趣
在第二次世界大战期间,Eagle-Picher公司利用其在材料科学方面的专长,为美国军队生产蓄电池。公司使用硅藻土和锌等材料,为军队的通信设备和其他电子设备提供可靠的电源。这一时期的业务扩张不仅增强了Eagle-Picher的技术实力,也为其在电子行业树立了良好的声誉。
方舟公司高度重视产品品质管理,从原材料采购到生产加工,再到成品检验,每一个环节都严格把关。公司引进了先进的生产设备和检测仪器,建立了完善的质量管理体系。通过ISO9001质量管理体系认证,方舟公司的产品质量得到了有效保障,赢得了客户的信赖和支持。
随着公司的发展,浙江东亚电子不断拓展其产业布局。除了传统的电力电子元件、分流器等产品外,公司还涉足新能源汽车、充电桩、变频器和储能等领域。特别是在新能源汽车和充电桩领域,公司紧跟国家“新基建”发展战略,推出了一系列具有竞争力的产品,为公司带来了新的增长点。
为了保持市场竞争力,杰力不断投入研发资源,致力于技术创新和产品升级。公司成功研发出多款高性能、低功耗的功率组件和集成电路产品,并获得了多项专利。这些产品不仅满足了客户对高品质电子元件的需求,还推动了整个电子行业的发展。同时,杰力还密切关注市场动态和技术趋势,不断调整产品策略,以适应市场的变化。
作为一家有社会责任感的企业,Electrocube Inc公司始终关注环保问题。公司积极采用环保材料和生产工艺,减少生产过程中的污染排放。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。这种对环保的关注和践行,使得Electrocube Inc公司在业界树立了良好的形象。
随着全球对环境保护意识的增强,ddm hopt + schuler公司开始关注绿色制造和可持续发展。公司投入大量资源进行绿色生产技术的研发,成功开发出一系列节能、环保的电子生产设备。这些设备在保障生产效率和产品质量的同时,显著降低了能源消耗和废弃物排放。这一举措不仅提升了公司的品牌形象,也赢得了客户和市场的广泛赞誉。
第一:现在正是大赛高峰,下载的人很多,可以考虑多派送一点芯币以解燃眉之急额! 第二:对于一个附件分卷压缩,如果很小的话,的确有刷分的嫌疑,建议斑竹,管理员整理。 第三:如果是很多,确实需要分开,是不是可以考虑一下多多补偿芯币。。。 ...… 查看全部问答∨ |
|
小弟刚开始学protues软件,遇到了这样的问题,哪位能帮我解决一下,谢谢了!!! 我在选择components选项选择元件时怎么出现了如下的提示No Libraries Found!的提示,而不能像教程那样挑选元件?… 查看全部问答∨ |
C#.NET开发的程序,如何访问WINCE5.0移动设备的内存?? 通讯的红外驱动已经装好,在电脑里可以看到有 "移动设备"这个\'盘\',但不知道如何用代码实现把这个\'盘\'里的数据拷贝到PC上,请指点.谢谢!!!… 查看全部问答∨ |
用TI的lm3s811板子下不进去程序,本来好好的,突然就下不进去了,提示的错误是Could not initialize target device!Please power cycle the board and try again!哪位朋友知道是什么问题啊,我一开始还能下程序,就是突然就开始跳这个错误了,我 ...… 查看全部问答∨ |
|
假设结构体a已经定义,成员变量都是整形,那么怎样才能实现下面函数的功能呢? fun(类型定义 variable, int vlu) { a->variable = vlu; }… 查看全部问答∨ |
module paomadeng(clk,ret_n,led); input clk,ret_n; output [7:0] led; reg [7:0] ledn; reg [3:0] led_cnt; reg [3:0] cnt; always @(posedge clk or negedge ret_n) if(!ret_n)& ...… 查看全部问答∨ |
看看下列名字,估计就知道这些芯片的大概功能。收藏吧 LM2930T-5.0 5.0V低压差稳压器 LM2930T-8.0 8.0V低压差稳压器 LM2931AZ-5.0 5.0V低压差稳压器(TO-92) LM2931T-5.0 5.0V低压差稳压器 LM2931CT 3V to 29V低压差稳压器(TO-220,5PIN) ...… 查看全部问答∨ |
最近新开项目在犹豫选用Cortex-A8的TI AM335X还是Cortex-A5的ATMEL SAMA5D3X,对收集的资料进行了整理,在此分享给大家。 1. 内核对比 Cortex-A8:指令集ARMv7-A,13级整数流水线,超标量双发射,2.0DMIPS/MHz,标配N ...… 查看全部问答∨ |