画图
最简单的串口通信代码
*难解释。没了解单片机内部怎么运行,可能看不懂 *
#include #include sbit led=P1^0; void initUart()//最最最基本的 *串口通信初始化* 要熟记 { //首先来个定时器1工作方式2//0010 0000 TMOD = 0x20; TH1 = 0xfd;//波特率9600/晶振11.0592Mhz TL1 = 0xfd; TR1=1; //串口工作方式1为最常用0101 0000 SCON=0x50; //打开总中断 EA=1; //允许串口中断 ES=1; } void main() { initUart(); led=0; while(1); } //这里解释一下TI和RI: /*TI为发送中断标志位, TI=0时开始传送数据, 知道TI=1时结束,当TI一 直为1时就没法传送数据。 同样,RI为接收中断标志位,RI=0开始接收,RI=1接收完毕,不清零无法继续接收, 左移在下面的在中断要手动清零,让单片机可以开始接收下一次的数据*/ void intt() interrupt 4 { if(RI==1)//接收数据完毕 { SBUF='1'; led=~led; RI=0; } } 代码效果:电脑发送数据给单片机,单片机的SBUF接收到之后,触发了中断,中断函数开始工作,RI=1是因为SBUF接收完数据了,然后SBUF=‘1’,是将字符1传给SBUF,然后由SBUF发送给电脑,此时电脑收到1;led=~led:仿真软件里面的LED的在闪。 定时器的初始化知识就先不说了,有机会再说。记吧记吧记吧。 1、不要将串口工作方式和定时器工作方式搞混了。 2、为什么选择定时器1的工作方式2呢? 答:因为工作方式2有自动重装初值的功能,避免了通过程序反复装入初值而引起的定时误差,使得波特率更稳定。 3、定时器与波特率有关。所以串口初始化一定要有定时器的存在,否则波特率都没有,怎么收发数据? 这里可以先硬性记一下定时器的初值TL1=0xfd,TH1=0xfd,对应的波特率是9600,要记住是因为这将是我们最常用的。 4、什么是SBUF? SBUF通俗点说就是一个数据缓冲区,可接受数据,也可发送数据。 比如上面的SBUF=‘1’,就是把字符‘1’存到SBUF中,然后由单片机发给其他终端,比如我的电脑是接收方,则收到了数据1。 打开虚拟串口工具,打开里面的vspd7.2.308.zip,然后一路next、next、next。安装完之后,记的把另一个不起眼的文件(vspdctl.dll)复制到安装目录下,覆盖原来的 打开就这个样(可能win10直接双击快捷方式打不开,右键管理员打开即可): 点击添加虚拟串口后会产生两个COM,第一个用于串口工具,第二个用于单片机,比如我的虚拟串口是com1和com2,然后com1在串口工具那里选择,com2则在单片机的RS232那里选择 具体操作 1画好线路图 2将c代码用keil生成hex文件 3在仿真软件里双击串口接口,设置好波特率为9600,设置好你电脑对应的第二个虚拟COM号 4打开电脑的串口工具sscom5.13.1.exe 选择串口(你电脑对应的第一个虚拟COM号) 5用串口工具发送数据 6此时你会发现单片机返回给串口工具的是一些乱码 7那我们去改一下晶振,也就是晶振频率:双击单片机,讲12改为11.0592 8重新来一遍发送数据,此时返回就正常了
上一篇:c51单片机中断详解
下一篇:c51单片机中断详解--适合初学者
推荐阅读最新更新时间:2024-11-12 11:26