1 / 102

第 5 章 MCS-51 单片机内部资源及编程

单片机. 第 5 章 MCS-51 单片机内部资源及编程. 5.1 并行输入 / 输出接口. 5.2 定时 / 计数器接口. 5.3 串行接口. 5.4 中断系统. 5.1 并行输入 / 输出接口. MCS-51 单片机的内部资源主要有: 1 、并行 I/O 口; 2 、定时器 / 计数器; 3 、串行接口; 4 、中断系统。 MCS-51 单片机的大部分功能就是通过对这些资源的利用来实现的。. 5.1.1 并行口应用与编程.

donnan
Télécharger la présentation

第 5 章 MCS-51 单片机内部资源及编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单片机 第5章 MCS-51单片机内部资源及编程 5.1 并行输入/输出接口 5.2 定时/计数器接口 5.3 串行接口 5.4 中断系统

  2. 5.1 并行输入/输出接口 MCS-51单片机的内部资源主要有: 1、并行I/O口; 2、定时器/计数器; 3、串行接口; 4、中断系统。 MCS-51单片机的大部分功能就是通过对这些资源的利用来实现的。 5.1.1 并行口应用与编程 【例5-1】 利用单片机的P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应的发光二极管亮或灭。

  3. MCS-51 P1.7 P1.6 P1.1 P1.0 … … P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 只须把P0口的内容读入后,通过P1口输出即可。 汇编程序: ORG 0100H MOV P0,#0FFH LOOP:MOV A,P0 MOV P1,A SJMP LOOP C51语言程序: #include <reg51.h> void main(void) { unsigned char i; P0=0xFF; for(;;) { i=P0;P1=i; } }

  4. 5.2 定时/计数器接口 定时方法: 1、硬件定时:较长时间;不够灵活、方便; 2、软件定时:编循环程序,时间精确;占用CPU; 3、可编程定时器定时:对系统时钟脉冲记数, 灵活、方便。 计数器有加1计数或减1计数两种形式。 加1计数:计满回0溢出; 减1计数:计满回0。

  5. 5.2.1 定时/计数器的主要特性 • 1、MCS-51系列中: • 51子系列有2个16位的可编程定时/计数器: • 定时/计数器T0和定时/计数器T1; • 52子系列有3个:还有一个定时/计数器T2。 • 2、每个定时/计数器通过编程设定来实现: • 对系统时钟(fosc)计数实现定时; • 对外部信号(T0/T1引脚)计数实现计数功能。 • 3、每个定时/计数器都有多种工作方式,通过编程可设定工作于某种方式。 • T0有4种工作方式; • T1有3种工作方式; • T2有3种工作方式。 • 4、每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。

  6. Tcy T1 T0 TH1 TL1 TH0 TL0 内部总线 启动 工作方式 溢出 工作方式 溢出 启动 TCON TMOD 中断请求 5.2.1 定时/计数器T0、T1的结构及工作原理

  7. 加法计数器在使用时注意两个方面: 1、由于它是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有: 初值X=最大计数值(满值)M-计数值N 在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于n位计数方式时,它的最大计数值(满值)为M=2n。 2、当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。

  8. 5.2.2 定时/计数器的方式和控制寄存器 一.定时/计数器的方式寄存器TMOD 其中:C/T:定时或计数方式选择位: 当C/T=1时工作于计数方式:计数引脚T0(T1)输入的负脉冲; 当C/T=0时工作于定时方式:计数内部机器周期脉冲。 GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。 M1、M0为工作方式选择位 ,用于对T0的4种工作方式,T1的3种工作方式进行选择,选择情况如下:

  9. 二.定时/计数器的控制寄存器TCON 其中: TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬件电路自动清除。 TR1:定时/计数器T1的启动位,可由软件置位或清零: 当TR1=1时启动;TR1=0时停止。 TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬件使它置位,如中断允许则触发T0中断。进入中断处理后由内部硬件电路自动清除。 TR0:定时/计数器T0的启动位,可由软件置位或清零: 当TR0=1时启动;TR0=0时停止。

  10. fosc 5.2.3 定时/计数器的工作方式 一、方式0 方式0是13位的定时/计数方式,因而最大计数值(满值)为M=213=8192。如计数值为N,则置入的初值X为: X=8192-N 如定时/计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000B=E0H,TL0=00011000B=18H。

  11. 方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

  12. 二、方式1 方式1的结构与方式0结构相同,只是把13位变成16位,16位的加法计数器被全部用上。 由于是16位的定时/计数方式,因而最大计数值(满值)为M=216=65536。如计数值为N,则置入的初值X为: X=65536-N 如定时/计数器T0的计数值为1000,则初值为 65536-1000=64536,转换成二进制数为1111110000011000B,则 TH0=11111100B=FCH, TL0=00011000B=18 H。

  13. 方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。 计数个数与计数初值的关系为:

  14. 三、方式2 方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发上图中的三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。 由于是8位的定时/计数方式,因而最大计数值(满值)为M=28=256。如计数值为N,则置入的初值X为:X=256-N 如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为10011100B,则TH0=TL0=10011100B。 注意:由于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。

  15. 方式2为自动重装初值的8位计数方式。 计数个数与计数初值的关系为: 工作方式2特别适合于用作较精确的脉冲信号发生器。

  16. fosc 振荡器 T0 INT0 四、方式3 方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3,方式3的结构如下图。 方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。

  17. 方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 工作方式3将T0分成为两个独立的8位计数器TL0和TH0。

  18. 5.2.4 定时/计数器的初始化编程及应用 一.定时/计数器的编程 MCS-51单片机定时/计数器初始化过程如下: 1.根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。 2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器(TL/TH)。 3.根据需要开放定时/计数器中断(后面须编写中断服务程序)。 4.设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。 5.等待定时/计数时间到,定时/计数到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。

  19. T0运行于定时器状态,时钟振荡周期为12MHz,要求定时100µs。求不同工作方式时的定时初值C。 解:fosc=12MHz T=1µs X=100µs/1µs=(100)D= 64H 方式0(13位方式): C=213- 64H=1F9CH 方式1(16位方式): C=216- 64H=FF9CH 方式2、3(8位方式):C=28 - 64H=9CH 例: T=12/ fosc 注意:工作方式0的初值装入方法: 1F9CH=1 1111 1001 1100 B 可见,TH0=0FCH,TL0=1CH MOV TH0,#0FCH MOV TL0,#1CH TH0的8位 TL0的低5位

  20. 500µs T1 T0 二.定时/计数器的应用 通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时间到对输出端取反一次即可。 【例5-2】设系统时钟频率为12MHz,用定时/计数器T0编程实现从P1.0输出周期为500µs的方波。 分析:从P1.0输出周期为500µs的方波,只须P1.0每250µs取反一次则可。当系统时钟为12MHz,定时/计数器T0工作于方式2时,最大的定时时间为256µs,满足250µs的定时要求,方式控制字应设定为00000010B(02H)。系统时钟为12MHz,定时250µs,计数值N为250,初值X=256-250=6,则TH0=TL0=06H。

  21. (1)采用中断处理方式的程序: 汇编程序: ORG 0000H LJMP MAIN ORG 000BH ;T0中断处理程序 CPL P1.0 RETI ORG 0100H ;主程序MAIN:MOV TMOD,#02H ;选择T0的方式2,定时功能 MOV TH0,#06H MOV TL0,#06H SETB EA SETB ET0 SETB TR0 ;启动T0 SJMP $ END C语言程序: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_0=P1^0; void main( ) { TMOD=0x02; TH0=0x06;TL0=0x06; EA=1;ET0=1; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 { P1_0=!P1_0; }

  22. (2)采用查询方式处理的程序: C语言程序: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_0=P1^0; void main( ) { char i; TMOD=0x02; TH0=0x06;TL0=0x06; TR0=1; for(;;) { if (TF0) { TF0=0;P1_0=! P1_0;} //查询计数溢出 } } 汇编程序: ORG 0000H LJMP MAIN ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 LOOP:JBC TF0,NEXT ;查询T0计数溢出位 SJMP LOOP NEXT:CPL P1.0 SJMP LOOP SJMP $ END

  23. 如果定时时间大于65536µs,这时用一个定时/计数器直接处理不能实现,这时可用:如果定时时间大于65536µs,这时用一个定时/计数器直接处理不能实现,这时可用: 1、2个定时/计数器共同处理; 2、1个定时/计数器配合软件计数方式处理。 【例5-3】设系统时钟频率为12MHz,编程实现从P1.1输出周期为1s的方波。

  24. 根据例5-2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数25次实现。根据例5-2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数25次实现。 系统时钟为12MHz,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H), 求初值X: X=65536-10000=55536 =1101100011110000B 则TH0=11011000B=D8H,TL0=11110000B=F0H。 每20ms输出1次 计25次

  25. (1)用寄存器R2作计数器软件计数,中断处理方式。(1)用寄存器R2作计数器软件计数,中断处理方式。 汇编程序: ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 ORG 0100H MAIN:MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0 SETB TR0 SJMP $ INTT0:MOV TH0,#0D8H MOV TL0,#0F0H INC R2 CJNE R2,#32H,NEXT CPL P1.1 MOV R2,#00H NEXT:RETI END C语言程序: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_1=P1^1; char i; void main( ) { TMOD=0x01; TH0=0xD8;TL0=0xF0; EA=1;ET0=1; i=0; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 { TH0=0xD8;TL0=0xF0; i++; if (i= =50) {P1_1=! P1_1;i=0;} }

  26. (2) 用定时/计数器T1计数实现: 定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1(P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次。 设定时/计数器T1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。 定时/计数器T0工作于方式1,定时,则这时方式控制字为01100001B(61H)。 定时/计数器T0和T1都采用中断方式工作。

  27. C语言程序如下: # include <reg51.h> //包含特殊功能寄存器库 sbit P1_1=P1^1; sbit P3_5=P3^5; void main( ) { TMOD=0x61; TH0=0xD8;TL0=0xF0; TH1=0xE7; TL1=0xE7; EA=1; ET0=1;ET1=1; TR0=1;TR1=1; while(1); } void time0_int(void) interrupt 1 //T0中断服务程序 { TH0=0xD8;TL0=0xF0; P3_5=!P3_5; } void time1_int(void) interrupt 3 //T1中断服务程序 { P1_1=! P1_1; } 汇编程序如下: ORG 0000H LJMP MAIN ORG 000BH MOV TH0,#0D8H MOV TL0,#0F0H CPL P3.5 RETI ORG 001BH CPL P1.1 RETI ORG 0100H MAIN: MOV TMOD,#61H MOV TH0,#0D8H MOV TL0,#0F0H MOV TH1,#0E7H MOV TL1,#0E7H SETB EA SETB ET0 SETB ET1 SETB TR0 SETB TR1 SJMP $ END

  28. P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。 例: T=2µs,X=5×105个T,而最大只能65536个T, 不能满足要求,必须借助硬件计数器或软件循环。 T0定时初值: (方式1) t=10ms,X=5000D=1388H,C=216- 5000=EC78H T1计数初值: (方式2) X=50D,C=28- 50=CDH 本题采用硬件方式: T0定时,定时10ms; T1计数T0的定时跳变信号P1.0的负跳变次数,计满50个跳变为1秒。(查询方法) • 长定时方法:增加一个软件 • 计数器或一个硬件计数器。 START: MOV TMOD,#61H MOV TL1,#0CDH MOV TH1,#0CDH CLR P1.0 SETB TR1 LOOP1: CPL P1.7 LOOP2: MOV TL0 ,#78H MOV TH0,#0ECH SETB TR0 LOOP3: JBC TF0,LOOP4 SJMP LOOP3 LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 JBC TF1,LOOP1 SJMP LOOP2

  29. reg51.h文件定义了所有8051的特殊功能寄存器及中断reg51.h文件定义了所有8051的特殊功能寄存器及中断 利用C51程序实现 • #include<reg51.h> • sbit P1_0=P1^0; • sbit P1_7=P1^7; • timer0 interrupt 1 using 1 { /*T0中断服务程序*/ • P1_0=! P1_0; /*10ms定时时间到, P1.0反相*/ • TH0=(65536-5000)/256; /*计数初值重装载*/ • TL0=(65536-5000)%256; • } • timer1 interrupt 3 using 2 { /*T1中断服务程序入口*/ • P1_7=! P1_7; /*1s定时时间到, 灯改变状态*/ • } • main( ) { • P1_7=0; /*置灯初始灭*/ • P1_0=1; /*保证第一次反相便开始计数*/ • TMOD=0x61; • /*定时器0工作在方式1定时,定时器1工作在方式2计数 */ • TH0=(65536-5000)/256; /*预置计数初值*/ • TL0=(65536-5000)%256; • TH1=256-50; • TL1=256-50; • IP=0x08; /*置优先级寄存器*/ • EA=1; /*CPU开中断*/ • ET0=1; /*开T0中断*/ • ET1=1; /*开T1中断*/ • TR0=1; /*启动T0*/ • TR1=1; /*启动T1*/ • for (;;){ • } • }

  30. D0 D1 D2 D3 D4 D5 D6 D7 计 算 机 计 算 机 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 计 算 机 计 算 机 (或外设) (或外设) 控制或选通 状态 5.3 串行接口 5.3.1 通讯的基本概念 一、并行通信和串行通信 计算机与外界的通信有两种基本方式:并行通信和串行通信。 • 并行 • 数据传送 同步 • 串行 异步(用于单片机中)

  31. 并行数据传送 串行数据传送 原理 各数据位同时传送 数据位按位顺序进行 优点 传送速度快、效率高 最少只需一根传输线即可完成:成本低 缺点 数据位数→传输线根数:成本高 速度慢 应用 传送距离<30米,用于计算机内部 几米~几千公里,用于计算机与外设之间 A B A B A B s s (a) (b) (c) 根据信息传送的方向,串行通信可以分为单工、半双工和全双工3种:

  32. 第n个字符 第n+1个字符 空闲 D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 “1” 0 …… 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1 0/1 0/1 0/1 0 下一个起始位 奇偶校验位 起始位 数据位 停止位 二、同步通信和异步通信 串行通信按信息的格式又可分为异步通信和同步通信两种方式。 1、串行异步通信方式 串行异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。传送一个字符又称为一帧信息,传送时每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是5~8位,低位在前,高位在后,数据位后可以带一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位。格式如图: 由于一次只传送一个字符,因而一次传送的位数比较少,对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。

  33. 2、串行同步通信方式 串行同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符,格式如图: 同步方式时一次连续传送多个字符,传送的位数多,对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。 三、波特率 波特率是指串行通信中,单位时间传送的二进制位数,单位为bps。 在异步通信中,传输速度往往又可用每秒传送多少个字节来表示(Bps)。它与波特率的关系为: 波特率(bps)=1个字符的二进制位数×字符/秒(Bps) 例如:每秒传送200个字符,每个字符1位起始位、8个数据位、1个校验位和1个停止位。则波特率为2200bps。

  34. 异步串行通信的信号形式: • 1、远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线。 • 方法:通常使用频率调制法(频带传送方式)。 通常: “1”:1270Hz或2225Hz; “0”:1070Hz或2025Hz。

  35. 2、因通信时(有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错:2、因通信时(有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错: TTL正逻辑: “0”: 0 —2.4V; “1”: 3.6V—+5V; 高阻:2.4V—3.6V。 TTL电平直接传输距 离一般不超过1.5米。 RS232负逻辑(EIA电平): “0”:+3V—+25V; “1”: -3V— -25V。 最大传输信息的长度为15米。 RS232负逻辑: “0”:+5V—+15V; “1”: -5V— -15V。 最大传输信息的长度为15米。 RS-232C (电平转换芯片为MAX232) RS-422 RS-485

  36. 5.3.2 MCS-51单片机串行口功能与结构 一.功能 MCS-51单片机具有一个全双工的串行异步通信接口,可以同时发送、接收数据,发送、接收数据可通过查询或中断方式处理,使用十分灵活。 它有四种工作方式,分别是方式0、方式1、方式2和方式3。其中: 方式0:称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。 方式1:8位的异步通信方式,通常用于双机通信。 方式2和方式3:9位的异步通信方式,通常用于多机通信。

  37. 三.串行口控制寄存器SCON(98H) 其中: SM0、SM1:串行口工作方式选择位。用于选择四种工作方式: SM2:多机通信控制位。 REN:允许接收控制位。当REN=1,则允许接收; 当REN=0,则禁止接收。 TB8:发送的第9位数据位,可用作校验位和地址/数据标识位。 RB8:接收的第9位数据位或停止位。 TI:发送中断标志位,发送一帧结束,TI=1,必须用软件清零。 RI:接收中断标志位,接收一帧结束,RI=1,必须用软件清零。

  38. ☞数据由8+1位组成,通常附加的一位(TB8/RB8)用于“奇偶校验”。 ☞奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。 换言之: 如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。 ☞奇校验:8位有效数据连同1位附加位中, 二进制“1”的个数为奇数。 偶校验:8位有效数据连同1位附加位中, 二进制“1”的个数为偶数。

  39. ☞约定发送采用奇校验: 若发送的8位有效数据中“1”的个数为偶数, 则要人为添加一个附加位“1”一起发送; 若发送的8位有效数据中“1”的个数为奇数, 则要人为添加一个附加位“0”一起发送。 ☞约定接收采用奇校验: 若接收到的9位数据中“1”的个数为奇数, 则表明接收正确,取出8位有效数据即可; 若接收到的9位数据中“1”的个数为偶数, 则表明接收出错!应当进行出错处理。 采用偶校验时,处理方法与奇校验相反。

  40. CY AC F0 RS1 RS0 OV P 奇偶校验用法: 程序状态字寄存器PSW中有一个奇偶状态位 P。 PSW.7 PSW.0 P(PSW.0):奇偶状态位。 P=1 表示目前累加器中 “1”的个数为奇数; P=0 表示目前累加器中 “1”的个数为偶数; CPU随时监视着Acc的“1”的个数并自动反映在 位P。

  41. 引脚 SBUF(发) (门)移位寄存器 TXD 波特率发生器T1 发送控制器 TI A累加器 1 接收控制器 RI 引脚 SBUF(收) 移位寄存器 RXD 去申请中断 二.结构 MCS-51单片机串行口主要由发送数据寄存器、发送控制器、输出控制门、接收数据寄存器、接收控制器、输入移位寄存器等组成。 从用户使用的角度,它由三个特殊功能寄存器组成:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),串行口控制寄存器SCON和电源控制寄存器PCON。

  42. 四.电源控制寄存器PCON(87H) 当SMOD位为1,则串行口方式1、方式2、方式3的波特率加倍。

  43. 5.3.3 串行口的工作方式 一.方式0:同步移位寄存器方式 用于扩展并行I/O接口。 1. 一帧8位,无起始位和停止位。 2. RXD:数据输入/输出端。 TXD:同步脉冲输出端,每个脉冲对应一个数据位。 3. 波特率B=fosc/12 如:fosc=12MHz,B=1bps,每位数据占1µs。 4. 发送过程:写入SBUF,启动发送, 一帧发送结束,TI=1。 接收过程:REN=1且RI=0,启动接收, 一帧接收完毕,RI=1。

  44. TXD 写入 SBUF 发送时序 (a) D1 D2 D7 D0 D5 D6 D4 D3 RXD输出 TI 写REN=1 RI=0 接收时序 (b) RXD输入 RI 方式0时序图:

  45. 二.方式1: 8位数据异步通讯方式 1. 一帧10位:8位数据位,1个起始位(0),1个停止位(1)。 2. RXD:接收数据端。 TXD:发送数据端。 3.波特率:用T1作为波特率发生器, B=(2SMOD/32)×T1溢出率。 4.发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。 接收:REN=1,允许接收。 接收完一帧,若RI=0且停止位为1 (或SM2=0),将接 收数据装入SBUF,停止位装入RB8,并使RI=1; 否则丢弃接收数据,不置位RI。 当REN=1,CPU开始采样RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。 数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。

  46. 写入 SBUF 起始位 TXD 数据输出 D0 D2 D3 D4 D6 D7 D1 D5 停止位 TI (a) 发送时序图 检测 负跳变 RXD 输入数据 起始位 D6 D3 D7 D2 D4 D0 D5 停止位 D1 采样 RI (b) 接收时序图 方式1时序图:

  47. 三.方式2和方式3: 9位数据异步通讯方式 1.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。 第9位数据位在TB8/RB8中,常用作校验位和多机通讯 标识位。 2.RXD:接收数据端, TXD:发送数据端。 3.波特率:方式2:B=(2SMOD/64)×fosc 。 方式3:B=(2SMOD/32)×T1溢出率 。 4.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1。 接收:REN=1,允许接收。 接收完一帧,若RI=0且第9位为1 (或SM2=0),将接收数据 装入接收SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据, 不置位RI。

  48. 写入 SBUF 起始位 D5 D1 D7 D6 D0 D2 D3 D4 TB8 TXD输出 停止位 TI (a) 发送时序图 检测 负跳变 起始位 RXD输入 D0 D3 D6 D5 RB8 D1 D2 D4 D7 停止位 RI (b) 接收时序图 方式2、3时序图:

  49. 5.3.4 串行口的编程及应用 一.串行口的初始化编程 1.串行口控制寄存器SCON位的确定。 根据工作方式确定SM0、SM1位;对于方式2和方式3还要确定SM2位;如果是接收端,则置允许接收位REN为1;如果方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。 2.设置波特率。 对于方式0,不需要对波特率进行设置。 对于方式2,设置波特率仅须对PCON中的SMOD位进行设置。 对于方式1和方式3,设置波特率不仅须对PCON中的SMOD位进行设置,还要对定时/计数器T1进行设置,这时定时/计数器T1一般工作于方式2—8位可重置方式,初值可由下面公式求得: 由于: 波特率=2SMOD×(T1的溢出率)/32 则: T1的溢出率=波特率×32/2SMOD 而T1工作于方式2的溢出率又可由下式表示: T1的溢出率=fosc/[12×(256-初值)] 所以:T1的初值=256 - fosc×2SMOD /(12×波特率×32)

  50. 小结:计算波特率 • 方式0为固定波特率:B=fosc/12 • 方式2可选两种波特率:B=(2SMOD /64)×fosc • 方式1、3为可变波特率,用T1作波特率发生器。 • B=(2SMOD/32)×T1溢出率 • T1为方式2的时间常数: X = 28- t /T • 溢出时间: t= (28-X)T = (28-X)×12/ fosc • T1溢出率=1/t= fosc / [12×(2n-X) ] • 波特率B=(2SMOD /32)×fosc / [12×(28-X) ] • 串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。 • T1选方式2: TH1=X= 28-fosc/12×2SMOD/(32×B) • T1选方式1用于低波特率,需考虑T1重装时间常数时间。 • 也可选工作方式3。

More Related