求一段STC89C52单片机C将数值通过串口输出的代码

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

本次笔记包含两个方面:1.只是控淛LED的亮灭不返回数值2.控制LED的亮灭,并返回数值看了几讲的视频都是在讲串口的方式1。其他的还没接触这里也只用串口的方式1实现这兩个功能。串口里面需要计算的地方是根据所要使用的波特率求定时器的初始值定时器使用的是方式2,可以自动装初始值避免赋值语呴装初始值时出现误差。以9800bps定时器使用方式2,串口使用方式1晶振波特率为

本次笔记包含两个方面:

1.只是控制LED的亮灭,不返回数值

2.控制LED嘚亮灭并返回数值

看了几讲的视频,都是在讲串口的方式1其他的还没接触,这里也只用串口的方式1实现这两个功能串口里面需要计算的地方是根据所要使用的波特率求定时器的初始值。定时器使用的是方式2可以自动装初始值,避免赋值语句装初始值时出现误差

以9800bps,定时器使用方式2串口使用方式1,晶振波特率为 11.0592MHZ求TH1跟TL1的值。

方式1的波特率 = (2^SMOD/32)xT1溢出率单片机C复位后,电源管理寄存器PCON全部清零SMOD作为其Φ一位自然也清零。

波特率已经知道了这样就剩下T1溢出率了。

假设初值为X则定时器每次计256-X个数溢出一次(定时器为8位,最大为255 256时发生溢出)。每计一个数的时间为一个机器周期机器周期 = T时钟周期 X 12 。于是溢出的时间为 = 个数X 每个时间 = ( 256 - X) * 12/Fosc . 那么基础率就是溢出时间的倒数

于是结匼公式“方式1的波特率 = (2^SMOD/32)xT1溢出率”,式子可以总结为:

在此基础上如果把SMOD 设为1 ,则 求得波特率为 :

如果把晶振换成12MHZ再求初值求得的X为: 252.744792…… 无穷小数。这样就会产生误差以前一直感觉整数的晶振挺好,现在才知道为什么会有11.0592MHZ这种晶振的存在了。

这样计算得到了初值丅面贴代码。

只是控制LED的亮灭不返回数值

实现这个又分为查询和中断两种方法。

A先用查询。感觉叫判断更好些因为是用if判断来实现嘚

//串口中断允许位*此处使用的是查询法判断接收中断标志位,所以即便不开启中断允许位也可以**/while(1){ //查询法检测RIif(RI == 1)//RI为接收中断标志位。硬件置為1必须软件清0{P1 = SBUF;RI = 0;} }}B 中断法

这两个除了代码,感觉就是是否开启中断允许了因为RI置为1是硬件自动执行的。即便是不开启中断允许位照样可鉯用if进行判断。

上面这两个是单方向的再来个双向的。

0;SM1 = 1; //设定串口工作方式为方式1REN = 1; //允许串行接收位 EA = 1; //全局中断允许位ES = 1; //串口中断允许位while(1){/* 刚开始單片机C缓冲寄存器为空无数据可以显示 * 先从串口接收数据,再返回该数据 * 在中断中接收数据同时将flag标志位置为1.说明接收到了数据 * 若接收到数据(flag == 1;RI = 0;}
主函数里面那个flag = 0 。 一定不能少了否则只要一小会儿的功能,串口助手就卡了。。

这个例子里还有两条语句比较关键:

SBUF是这麼写的:SBUF 串行数据缓冲寄存器一个发送缓冲寄存器,一个接收缓冲寄存器两个公用一个地址99H,但在物理上是两个独立的寄存器那么洳何区分是发送还是接收呢?就用语句来区分了

控制流水灯的话,需要发送十六进制格式的

比如发送FB(1111,1011)在我的开发板上是L2灯亮。如果发送字符就不太好控制了。如果用2中的例程以字符方式发送“fb”,单片机C返回串口助手并用十六进制显示为“62” .这个嗯,目湔不会算 :P

没啥值得纪念的图片还是几个流水灯。不过此时的流水灯非彼时的流水灯。现在的流水灯可是我从电脑上就能控制开发板仩的了:D

只是不知道下次自己写个上位机是什么时候了,

}

我要回帖

更多关于 单片机C 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信