从单片机基础到程序框架(全集 2019pdf版).pdf - 第751页

SM0=0; SM1=1; //SM0 与 SM 1 的设置:选择 1 0 位异步通信 ,波特率根据 定时器 1 可变 REN=1; //允许串口接 收数据 //为了保证串 口中断接收的 数据不丢失, 必须设 置 IP = 0x10,相 当于把 串口中断设置 为最高优先级, //这个时候, 串口中断可以 打断任何其他 的中断 服务函数实现 嵌套, IP =0x10; //把串 口中断设置为 最高优先级, 必须的 。 ES=1; //允许…

100%1 / 836
上图 127.5.1 灌入式驱动 8 LED
程序功能如下:
波特率 9600,校验位 NONE(无)数据 8,停止 1。在上位机的串口助手里,发送一个十六进(HEX
模式) 01,让单片机的一颗 LED“亮”发送一个十六进制(HEX 模式 00,让单片机的一颗 LED“灭”
上位机的串口助手的使用,请参考前面 11 节的相关内容,或者自己在网上查找串口助手软件的使用方法,
串口助手软件网上很多,我们的使用要求不高,随便选用一家都可以。代码如下:
#include "REG52.H"
void usart(void);
sbit P0_0=P0^0; //一颗 LED
unsigned char Gu8ReceiveData=0; //接收到一个字节的数据
void main()
{
unsigned char u8_TMOD_Temp=0;
P0_0=1; //LED 灭。1 代表 LED 灭, 0 代表亮
//串口的波特率与内置的定时器 1 直接相关,因此配置此定时器 1 就等效于配置波特率。
u8_TMOD_Temp=0x20; //即将把定时 1 设置为:工作方式 2,初值自动重装的 8 位定时器。
TMOD=TMOD&0x0f; //此寄存器低 4 位是跟定时器 0 相关, 4 位是跟定时 1 相关。先清零定时器 1。
TMOD=TMOD|u8_TMOD_Temp; //把高 4 位的定时器 1 填入 0x2,低 4 位的定时器 0 保持不变。
TH1=256-(11059200L/12/32/9600); //波特率为 9600。11059200 代表晶振 11.0592MHz,
TL1=256-(11059200L/12/32/9600); //L long 的长类型数据。根据芯片手册提供的计算公式
TR1=1; //开启定时器 1
SM0=0;
SM1=1; //SM0 SM1 的设置:选择 10 位异步通信,波特率根据定时器 1 可变
REN=1; //允许串口接收数据
//为了保证串口中断接收的数据不丢失,必须设 IP = 0x10,相当于把串口中断设置为最高优先级,
//这个时候,串口中断可以打断任何其他的中断服务函数实现嵌套,
IP =0x10; //把串口中断设置为最高优先级,必须的
ES=1; //允许串口中断
EA=1; //允许总中断
while(1) //主循环
{
}
}
void usart(void) interrupt 4 //串口接发的中断函数,中断号为 4
{
if(1==RI) //接收完一个字节后引起的中断
{
RI = 0; //及时清零,避免一直无缘无故的进入中断。
Gu8ReceiveData=SBUF; //直接读取“串口专用缓存寄存器”SBUF 8 位数据。
if(0x01==Gu8ReceiveData)
{
P0_0=0; //LED 亮。1 代表 LED 灭, 0 代表亮
}
else
{
P0_0=1; //LED 灭。1 代表 LED 灭, 0 代表亮
}
}
else //发送数据引起的中
{
TI = 0; //及时清除发送中断的标志,避免一直无缘无故的进入中断。
//以下可以添加一个全局变量的标志位的相关代码,通知主函数已经发送完一个字节的数据了。
}
}
【127.6 单片机串口电路的简易分析。
上图 127.6.1 232 串口电路
单片机串口对外的引脚是与 IO 口的“P3.1、P3.0”共用的。P3.1 是串口的 TX 引脚,即对外发送数据
引脚。P3.0 是串口的 RX 引脚,即接收外部数据的引脚。一旦项目中用了串口,那么这两个引脚就必须“专
脚专用”只给串口单独使用,不再做 IO 口。平时通信的时候,跟其它单片机或者系统进行串口通除了
TX RX 这两根数据线之外,必须一定把双方的负极 GND “共地”接上,否则双方建立不了同样的电压
参考点,通信毕然失败。因此,串口通信最低标配是 3 根线:RX,TX,GND。
如果两个甲乙单片机都布在一块板子上,距离不超过半米,他们两个要进行串口通信怎么接线?把他
们的 GND 连起来,然后 RX TX“交叉对接,甲的 RX 接到乙的 TX,甲的 TX 接到乙的 RX。这种在短距离通
信的时候,不用增加任何外部辅助压差信号放大芯片,这种方式叫做“串口 TTL”接线方式。
如果两个系统串口通信的距离比较远比如在不同的板子上1 米以 10 米以下的距离,这时就不能
用原始的“串口 TTL”接线方式,因为线缆越长电阻越大,本身就要消耗一些压降, 3.3V 的压降很容易
就会被消耗完,通信的可靠度和抗扰能力就会降低。为了解决这个问题可以引用 232 标准的接线方式,
部需接一压差大的片,从原 3.3V 差放到一倍左,通的距就大提高。具 232
的细节,大家可以网上搜搜“RS232”。注意,采用 232 协议通信,也要注意“共地”和数据线“交叉”的两
个问题,232 通信的最低标配也是 3 根线:R,T,GND。上 SP232E 就是一个压差信号放大的通信专用芯片。