1、串行中断寄存器控制串行通信中断及应用1中断允许控制寄存器IE 只开启串行通信 SETB EA SETB ES 或者 MOV IE,#90H2设置串行中断优先级(控制寄存器IP、IPH)中断源的中断优先级由IPH、IP对应位编码决定IPH.X位 IP.X位 优先级 0 0 0级(优先级最低) 0 1 1级 1 0 2级 1 1 3级(优先级最高)例如串行中断优先级最高 MOV IP,#0C0H MOV IPE,#0C0H 或者 SETB PS MOV IPE,#0C0H(IPH没有位地址功能)3 入口地址定时/计数器T1溢出中断 001BH串行口中断 0023H ORG 00H AJMP ? O
2、RG 1BH AJMP ? ORG 23H AJMP ? 4串行口控制寄存器SCON 5 进入中断服务程序后,(1)CPU能自动清除下列中断请求标志位: 定时器T0中断请求标志TF0; 定时器T1中断请求标志TF1; 边沿触发方式下外中断的中断请求标志IE0; 边沿触发方式下外中断的中断请求标志IE1。不自动清除串行发送结束中断标志TI、串行接收有效中断标志RI、定时/计数器T2溢出中断标志TF2、定时/计数器T2外触发标志EXF2(2)每一次发送和接受后都要软件清零 :串行发送结束中断标志TI、串行接收有效中断标志RI、如 CLR TICLR RI可用T1,T2溢出率的(16或)32分频作为
3、串行口发送、接收波特率 9电源控制寄存器 PCON(电源控制寄存器PCON不能对位操作)SMODGF1GF0PDIDLSMOD=0 SMOD=1位被称为波特率倍增位 为了避免重装初值造成的定时误差,定时器T1最好工作在可自动重装初值的方式2,并禁止定时器T1中断。 TL1=?、TH1= TL1=?做TL1的备份(自动重装初值,TH1和TL1初装相同的值)串行通信系统中常用波特率衡量通信的快慢,含义是每秒中传送的二进制数码的位数,单位是位/秒(b/s或Kb/s),方式1、方式3计算公式串行方式1串行数据(低位在前,高位在后) 10位0B0B1B6B71起始位 低位数据数据数据数据数据数据高位停止
4、位串行方式3起始位(0)、9位串行数据、一位停止位(1)共11位 例 假设系统晶振频率为11.0592 MHz,通信方式约定为:波特率2400,8位数据,奇校验。利用串行口方式3,将存放在内部RAM 30H4FH单元中32字节数据发送给串行接收设备。如果接收方正确接收了32字节信息,则回送AAH;否则回送55H。 根据系统晶振频率及通信波特率,用定时器T1工作在方式2的溢出率作为波特率发生器(16分频器)的输入信号,参考程序如下: ; 初始化定时器T1 FHbit BIT 07H ; 07H位单元作为通信成功标志,0表示通信成功;1表示失败 MOV A, TMOD ANL A, #0FH OR
5、L A, #00100000B ; 定时器T1工作在方式2(即自动重装初值),定时状态,由TR1控制 MOV TMOD, A MOV TL1, #0F4H MOV TH1, #0F4H ; 波特率为2400 CLR ET1 ; T1用作波特率发生器,禁止T1中断 SETB TR1 ; 启动定时器T1 ; 初始化串行通信口MOV SCON, #11000000B ; 方式3,SM2位为0,以便接收奇偶校验位MOV PCON, #00H ; 波特率不倍增; 将304FH缓冲区内32字节发送给接收方CLR FHbit ; 成功标志清零 MOV R0, #30H ; 发送数据缓冲区首地址送R0 MOV
6、 R7, #20H ; 发送字节数送R7 CLR TI ; 清除TILOOP1: MOV A, R0 ; 取发送数据 MOV C, PSW.0 ; 取奇偶标志 MOV TB8, C ; 奇偶标志送TB8 MOV SBUF, A ; 数据送SBUF寄存器,启动发送过程LOOP2: JNB TI, LOOP2 ; 如果TI不是1就循环,等待发送中断标志有效 CLR TI ; 清除TI,以便发送下一字节 INC R0 ; 数据指针加1,指向缓冲区内下一数据 DJNZ R7, LOOP1 ; 指定字节数据未发送结束,循环 ; 发送结束,准备接收返回码 CLR RI ; 清除接收中断标志 SETB RE
7、N ; 允许接收 LOOP3: JNB RI, LOOP3 ; 等待接收中断有效 CLR REN ; 停止接收 MOV A, SBUF ; 把结果送A XRL A, #0AAH ; 返回码与AAH异或 JZ REEND ; 如果返回码是AAH,则退出 SETB FHbit ; 如果返回码不是AA,则将接收成,功标志为1(即失败)REEND: RET当串行通信的波特率较高时,多采用查询方式来确定一帧信息是否发送结束,如本例所示。对于接收过程来说,如果不能确定发送方是否会发送信息以及什么时候发送时,最好使用中断方式。为此,上例发送、接收程序段改为(发送过程采用查询方式;接收过程采用中断方式; 初始
8、化定时器T1FHbit BIT 07H ; 07H位单元作为通信成功标志,0表示通信成功;1表示失败。MOV A, TMODANL A, #0FHORL A, #00100000B ; 定时器T1工作在方式2(即自动重装初值),定时状态,由TR1控制MOV TMOD, AMOV TL1, #0F4HMOV TH1, #0F4H ; 波特率为2400CLR ET1 ; T1用作波特率发生器,禁止T1中断SETB TR1 ; 启动定时器T1;初始化串行通信口MOV SCON, #11000000B ; 方式3,SM2位为0,以便接收奇偶校验位MOV PCON, #00H ; 波特率不倍增; 将30
9、4FH缓冲区内32字节发送给接收方CLR FHbit ; 成功标志清零MOV R0, #30H ; 发送数据缓冲区首地址送R0MOV R7, #20H ; 发送字节数送R7CLR ES ; 禁止串行中断,即在发送过程中,采用查询方式CLR TI ; 清除TI LOOP1: MOV A, R0 ; 取发送数据 MOV C, PSW.0 ; 取奇偶标志 MOV TB8, C ; 奇偶标志送TB8 MOV SBUF, A ; 数据送SBUF寄存器,启动发送过程 LOOP2: JNB TI, LOOP2 ; 如果TI不是1就循环,等待发送中断标志有效 CLR TI ; 清除TI,以便发送下一字节 IN
10、C R0 ; 数据指针加1,指向缓冲区内下一数据 DJNZ R7, LOOP1 ; 指定字节数据未发送结束,循环 ; 发送结束,准备接收返回码 CLR RI ; 清除接收中断标志 SETB REN ; 允许接收 SETB ES ; 允许串行中断,即在接收过程中采用中断方式 RET ; 返回 ; 串行口中断服务程序UART: PUSH Acc ; 保护累加器Acc PUSH PSW MOV A, SBUF ; 把结果送A XRL A, #0AAH ; 返回码与AAH异或 JZ REEND ; 如果返回码是AAH,则退出 SETB FHbit ; 如果返回码不是AA,则将接收成功标志 为1(即失败
11、)REEND: CLR REN ; 停止接收 CLR RI ; 清除接收中断标志 POP PSW POP Acc RETI 多机通信 主机与特定从机的通信过程如下: (1) 主机发送从机地址(TB8位为1),然后进入接收状态,接收从机应答信号(实际上就是相应从机的地址信息)。 (2) 所有从机均接收主机送出的地址信息,并与本机地址比较,当接收到的地址信息与本机地址相符时,表示被选中,将本机地址信息发给主机,然后执行“CLR SM2”指令,使SM2位为0,以便接收主机随后送出的数据信息。对于未被选中的从机,SM2位依然为1,因此不接收主机送出的数据信息。 (3) 主机收到从机的应答信号后,发出数
12、据信息(TB8位为0)。 (4) 从机正确接收主机数据信息后,发应答信号给主机,并将SM2置1,主机与从机通信过程结束。 从机与主机的通信过程如下: (1) 发送前从机先检测TXD引脚,如果在(20/波特率)时间内,TXD引脚依然为高电平,则表明没有其他从机给主机发送信息,主机的RXD引脚处于空闲状态。 (2) 从机确认主机的RXD引脚处于空闲状态后,发出地址信息 (TB8位为1) 到主机。 (3) 从机收到主机的应答信号(实际是从机地址信息)后,发送数据(TB8位为0)给主机,然后令从机的SM2为0,以便接收主机发送的接收正确信号。 (4) 主机正确接收后,再发接收正确信号给从机。 (5)
13、从机收到主机发来的“接收正确”信号后,表明通信过程结束可将SM2位置1,以便从机能接收主机发送的地址信息。 帧错误检测 增强型UART口通过检测“停止位”的有无来判别方式2、3下的串行接收是否正确,这就是所谓的“帧错误检测”功能。在增强型UART口中,SCON寄存器的b7位具有SM0/FE(Fram Error)双重功能(由PCON寄存器的b6,即SMOD0位控制:当SMOD0位为0时,SCON寄存器的b7位是SM0;而当SMOD0位为1时,SCON寄存器的b7位是FE)。当接收不到有效停止位时,SCON寄存器的b7位(即FE)置1。当FE为1时,表示接收的数据无效,不装入SBUF寄存器,RI
14、也不置1。 帧错误检测仅对方式2、3有效,原因是方式0不能用于串行通信,而方式1本身就具有停止位检测功能,只是没有记录检测结果而已,因为在方式1中,只有接收到有效的停止位时,RI才有效启用帧错误检测功能的串行口初始化过程如下: 初始化定时器T1或T2,定义串行口接收波特率初始化SCON寄存器,定义串行口工作方式(只能是2或3)执行“ORL PCON, #40H”指令将PCON.6位置1,使SCON.7位具有FE功能执行“CLR RI”指令,清除接收中断执行“SETB REN”启动接收过程检测FE标志(如果FE标志有效,则说明收不到有效停止位,数据出错;反之,如果FE无效,而RI有效,则说明数据
15、接收正确)。 值得注意的是,FE有效后,即使下一数据帧能正确接收也不自动清除,因此FE有效,在完成错误信号处理后需要手工清除。 地址自动识别 在方式2、3中,SM2位可作多机通信控制位。当SM2位为1时,只有收到的第九位数据,即RB8为1时,RI才有效;而当SM2位为0时,便放弃对地址的识别,一律视为数据处理。采用硬件地址自动识别技术后,只要从机的SM2位为1,则收到的第一帧信息必然是本机的地址信息,可立即将从机的SM2位置0,接收主机随后送来的数据信息,无须判别所收到的地址信息是否就是本机地址,待数据接收结束后,便立刻将SM2位置1,等待下一次通信,于是提高了主从机之间的通信效率。 从图4-
16、26中看出,采用地址自动识别功能后,有效接收条件是:主机发出的地址与从地址屏蔽码SADEN按位相与后和从机地址寄存器SADDR比较,若相同,则相应从机接收中断有效。这样主机通过发出特定从机地址与单一从机通信、通过发出给定地址与一组从机通信、通过发出广播地址与所有从机通信。构造从机地址编码、从机地址屏蔽码的方法很多,例如在一主四从多机系统中,从机地址码和从机地址屏蔽码可按如下方法构造: 从机编号 0机 1机 2机 3机从机地址屏蔽码 1010 0001 1010 0010 1010 0100 1010 1000从机地址码 1111 0000 1111 0000 1111 0000 1111 00
17、00SADEN和SADDR相与 1010 *0 1010 *0* 1010 *0* 1111 0*选定123机地址1010 0001 不 中 中 中选定023机地址 1010 0010 中 不 中 中选定013机地址 1010 0100 中 中 不 中选定012机地址 1010 1000 中 中 中 不选定0机地址1010 1110 中 不 不 不选定1机地址1010 1101 不 中 不 不选定2机地址1010 1011 不 不 中 不选定2机地址1010 0111 不 不 不 中广播地址码 1111 0000 中 中 中 中 RS-232C串行接口标准中主信道重要信号含义 RS-232C串
18、行接口标准主信道重要信号含义: TXD:串行数据发送引脚,输出。 RXD:串行数据接收引脚,输入。 DSR:数据设备(DCE)准备就绪信号,输入,主要用于接收联络。当DSR信号有效时,表明本地的数据设备(DCE)处于就绪状态。 DTR:数据终端(DTE)就绪信号,输出。用于DTE向DCE发送联络,当DTR有效时,表示DTE可以接收来自DCE的数据。 RTS: 发送请求,输出。当DTE需要向DCE发送数据时,向接收方(DCE)输出RTS信号。 CTS:发送允许或清除发送,输入。作为“清除发送”信号使用时,由DCE输出,当CTS有效时,DTE将终止发送(如DCE忙或有重要数据要回送DTE);而作为
19、“允许发送”信号使用时,情况刚好相反:当接收方接收到RTS信号后进入接收状态,就绪后向请求发送方回送CTS信号,发送方检测到CTS有效后,启动发送过程。 图4-27 RS-232C接口插座25芯D型插座RS-232C接口信号名称及主要信号流向;9芯D型插座上的RS-232C接口信号名称及流向 3. 电平转换 为保证数据可靠传送,RS-232C标准规定发送数据线TXD和接收数据线RXD均采用EIA电平,即传送数字“1”时,传输线上的电平在-3-15 V之间;传送数字“0”时,传输线上的电平在+3+15 V之间。但单片机串行口采用正逻辑的TTL电平,这样就存在TTL电平与EIA电平之间的转换问题,
20、例如当单片机与PC机进行串行通信时,PC机COM1或COM2口发送引脚TXD信号是EIA电平,不能直接与单片机串行口接收端RXD引脚相连;同样单片机串行口发送端TXD引脚输出信号采用正逻辑的TTL电平,也不能直接与PC机串行口COM1或COM2的RXD端相连。 RS-232C与TTL之间电平转换芯片主要有传输线发送器MC1488(把TTL电平转成EIA电平)、传输线接收器MC1489(把EIA电平转成TTL电平)以及MAX232系列RS232电平转换专用芯片。 其中传输线发送器MC1488含有4个门电路发送器,TTL电平输入,EIA电平输出;而传输线接收器MC1489也含有4个接收器,EIA电
21、平输入,TTL电平输出,但由MC1488和MC1489构成的EIA与TTL电平转换器需要12 V双电源,而单片机应用系统中一般只有+5 V电源,如果仅为了实现电平转换增加12V电源,体积大、成本高。而MAX232系列芯片集成度高,单+5 V电源(内置了电压倍增电路及负电源电路)工作,只需外接5个容量为0.11 F的小电容即可完成两路RS-232与TTL电平之间转换,是单片机应用系统中最常用的RS-232电平转换芯片,其内部结构及典型应用如图4-28所示。 图4-29 只有RTS、CTS联络信号的串行通信 图4-30 没有联络信号的串行通信 在MCS-51单片机应用系统中,由于彼此之间需要传输的
22、数量少,就常使用没有联络信号的串行通信,只需明确如下的收发条件即可:波特率(CPS)。发送、接收双方的波特率必须相同,误差不得超过一定的范围,否则不能正确接收。数据位长度(8位还是9位)。 校验有无及校验方式。在串行通讯中,除了使用奇偶校验方式,还可以使用其他的检验方式和校验(往往仅保留和的低8位,甚至低4位)、某一特征数码的倍数等,或同时使用两种校验方式。正确接收后的应答信号。 确定信息帧起始标志。常使用发送信息(命令、数据)中不可能出现的状态编码作为信息帧的起始标志。 确定信息帧结束标志。 4.5 增强型MCS-51芯片识别和仿真 1. 判别芯片内核类型 方法一:由于增强型MCS-51内核
23、一般提供关闭ALE功能,因此对于采用片内程序存储器系统,在一简单循环程序前插入“MOV 8EH,#01H”(AUXR特殊功能寄存器字节地址为8EH),然后用逻辑笔观察ALE引脚是否还有脉冲输出,即可判别该芯片是否支持ALE关闭功能,从而判别该芯片是否是增强型MCS-51内核。方法二:由于增强型MCS-51内核定时器T2具有时钟输出功能,因此将定时器T2定义为自动重装初值的定时状态,并允许在P1.0引脚输出时钟信号,然后用逻辑笔或万用表交流挡观察P1.0引脚状态,也能迅速判别该芯片采用何种内核。 2. 在标准MCS-51仿真器使用增强型MCS-51新增硬件功能 目前市面上多数MCS-51及兼容芯
24、片采用增强型MCS-51内核,但国内大多数用户使用的MCS-51仿真开发设备仿真器或仿真头之一可能不支持增强型MCS-51内核芯片,只能仿真标准MCS-51,甚至随仿真开发器提供的汇编器(汇编程序)不识别增强型MCS-51新增特殊功能寄存器。在这种情况下又如何使用增强型MCS-51及兼容芯片新增功能呢? 由于增强型MCS-51硬件资源与标准MCS-51保持兼容,因此先当标准MCS-51使用,即程序中暂时不出现增强型MCS-51新增特殊功能寄存器(位),如在涉及这些特殊功能寄存器(位)的程序段及指令前加“;”(分号)暂时注销,待程序调试无误后采用如下方法之一使用新增的硬件资源: (1) 用支持8
25、9C51RX系列CPU仿真器(头)仿真8XC5X、8XC5XX2系列增强型MCS-51 内核CPU。例如“伟福”E2000系列仿真器不能仿真8XC5X、8XC5XX2系列增强型MCS-51 CPU。但配合“POP-89C51RX”仿真头可以仿真89C51RX系列CPU,而89C51RX硬件资源与8XC5X、8XC5XX2系列增强型MCS-51内核芯片保持兼容,因此可用E2000系列仿真器,配合POP-89C51RX仿真头仿真8XC5X、8XC5XX2系列增强型MCS-51 CPU。 (2) 如果没有89C51RX系列仿真器、仿真头,可使用软件仿真方式。例如在“伟福”汇编器中,在“仿真器”选择窗
26、内,选用“伟福软件模拟器”选项,并选择E2000系列仿真器和“POP-89C51RX”仿真头。这样就可以在“伟福软件模拟器”中直接引用8XC5X、8XC5XX2系列增强型MCS-51内核芯片新增特殊功能寄存器和寄存器位,经编译、调试(当然只能在软件模拟器环境下进行)后,将代码直接写入目标芯片,在用户板上测试。不满意,再检查源程序,找出其中的错误并修正即可。(3) 如果汇编器不支持89C51RX芯片,不能使用“软件模拟仿真”方式时,可将源程序中涉及到的新增特殊功能寄存器名用直接地址取代,即在程序头变量定义区内插入新增特殊功能寄存器伪定义指令,如:AUXR DATA 8EHAUXR1 DATA 0A2HIPH DATA 0B7H 汇编后将代码直接写入目标芯片,在用户板上测试。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1