《单片机的内部资源及应》由会员分享,可在线阅读,更多相关《单片机的内部资源及应(104页珍藏版)》请在金锄头文库上搜索。
1、第3章 MCS-51单片机的内部资源及应用主要内容: MCS-51单片机内部各器件的具体结构、组成原理、工作方式的设置及典型应用,为读者后续学习单片机应用系统设计、充分利用单片机内部资源解决工程实际问题奠定基础。重点在于各器件工作方式的设置及灵活应用,难点在于中断系统和定时器/计数器的应用。 3.1.1 MCS-51 3.1.1 MCS-51内部并行内部并行I/OI/O口口 8051有4个8位并行I/O口,分别命名为P0, P1, P2和P3口。 1 1P0P0口口 P0口为双向三态输入/输出口, P0口既可作为地址/数据总线口,又可作为通用I/O口,可驱动8个TTL输入。在访问3.1 MCS
2、-513.1 MCS-51单片机的并行单片机的并行I/OI/O口口 外部存储器时,P0口作地址/数据总线复用口,是一个真正的双向口,并分时送出地址的低8位和送出(或接收)相应存储单元的数据。作通用I/O口时,P0口只是一个准双向口,需要在外部引脚处外接上拉电阻。 P0口的位结构如右图所示。2 2P2P2口口 P2口常用做外部存储器的高8位地址口。当不用做地址口时,P2口也可作为通用I/O口,这时它也是一个准双向I/O口。不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P2口的位结构如右图所示。3 3P1P1口口 P1口常用做通用I/O口,它也是一个标准的准双向I/O口,
3、不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P1口的位结构如右图所示。4 4P3P3口口 P3口是一个双功能口,第一功能与P1口一样可用做通用I/O口,也是一个准双向I/O口,能驱动4个TTL输入。另外还具有第二功能。P3口工作在第二功能时各管脚定义如下表所示。 P3口的位结构图如右图所示。 3.1.2 MCS-513.1.2 MCS-51内部并行内部并行I/OI/O口的应用口的应用 MCS-51I/OMCS-51I/O端口的操作方式:端口的操作方式:(1)输出数据方式:CPU通过一条数据传送指令就可以把输出数据写入P0P3的端口锁存器,然后通过输出驱动器送到端口引
4、脚线。例如,下面的指令均可在P0口输出数据。 MOV P0, A ANL P0, #data ORL P0, A(2)读端口数据方式: CPU读入的这个数据并非端口引脚线上的数据。读端口数据可以直接读端口。例如,下面的指令均可以从P1口输入数据,这是锁存器上的数据。 MOV A, P1 MOV 20H, P1 MOV R0, P1 MOV R0, P1(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,然后才能读端口引脚。因此,用户在读引脚时必须先置位锁存器后读,连续使用两条指令。例如,下面的程序可以读P1引脚上的信号。
5、MOV P1, #0FFH ; 置位P1引脚的锁存器 MOV A, P1 ; 读P1引脚上的信号送累加器A 注意:写引脚时是直接向端口输出要写的数据, 读引脚时就要区分是读端口的引脚信号还是读锁存器信 号。 读端口信号是必须先向端口写“1”,然后再读,这就是单片机口信号的准双向的含义。切记!(见P106) 在I/O口直接用做输入/输出时,CPU既可以把它们看做数据口,也可以看做状态口,这是由用户决定的。 例题例题11要求设计跑马灯。 硬件电路设计: 各引脚功能如下: VCC:接正电源; Vss:接地; 1 1I/OI/O口直接用于输入口直接用于输入/ /输出输出 程序设计:程序设计:;实验一:
6、单片机最小系统及流水灯程序实验一:单片机最小系统及流水灯程序 org 00h ;源程序起始地址源程序起始地址jmp main ;跳转到跳转到MAINorg 0050h ;主程序开始地址主程序开始地址main:mov a,#11111110B ;立即数送入立即数送入Aloop: mov p1,a ;数据送数据送P1口口 rr a ;右循环一下;右循环一下 lcall delay ;延时子程序延时子程序 ajmp loop;重复循环;重复循环delay: mov r3,#250 ;延时子程序;延时子程序d1:mov r4,#235d2:nopnopnopdjnz r4,d2djnz r3,d1 r
7、etend2 2I/OI/O口扩展外部锁存器口扩展外部锁存器 为了输出数据并保持这个输出状态,MCS-51单片机常常需要使I/O口通过外部锁存器和输出设备相连。如下图所示为8051通过74LS273与输出设备连接的接口图。8051通过下面的指令输出数据至数码管: MOV DPTR, #7FFFH ; DPTR指向74LS273端口,地址为7FFFH) MOVX DPTR ,A ; 输出数据到数码管上 74LS273是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。 CPU 的ALE信号必须经过反相器反相之后才能与74LS273的控制端
8、CLK 端相连。 地址锁存器使用74LS373较多。引脚图如下页图所示。与8051连接电路如下页图所示。WR 上图中的ag七个笔划(段)及小数点dp均为发光二极管。数码管显示器根据公共端的连接方式,可以分为共阴极数码管(将所有发光二极管的阴极连在一起)和共阳极数码管(将所有发光二极管的阳极连在一起)。 单片机系统扩展LED数码管时多用共阳LED。共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。但是共阴管的亮度比共阳管的要亮些。 通常每个段笔画要串一个数百欧姆的降压电阻。 笔画的选择称为段选,公共端的选择称为位选。
9、; 八个数码管动态显示程序org 00hajmp mainorg 50hmain:mov r2,#00h;将要显示的数字送R2sss:mov dptr,#tab;查表取得数字的字型码送R0mov a,r2movc a,a+dptrmov r0,amov r6,#40h;循环调用显示程序延时xsh1:lcall disp1djnz r6,xsh1inc r2;将下一个要显示数字送R2cjne r2,#0ah,sss;判断数字9显示完否?ajmp maindisp1:mov r5,#08h;显示程序开始,将要显示的位数送R5mov r1,#0feh;将要显示的位码送R1dis00:mov dptr
10、,#7fffh;将要显示的字型码送74LS273mov a,r0movx dptr,amov a,r1;将位选码送入R1mov p2,alcall delay;调延时1MS子程序rl a;位选左移,选中下一位,如果8位数字mov r1,a;显示完了则返回djnz r5,dis00retdelay:mov r3,#08h ;延时1MS程序loop:mov r4,#0a0hdjnz r4,$djnz r3,looprettab:db 0c0h,0f9h,0a4h,0b0h,99h;字型表db 92h,82h,0f8h,80h,90hend3.2 MCS-51单片机的中断系统单片机的中断系统 计算机
11、与外界的联系是通过外部设备(也称为外设、输入/输出设备或I/O设备)与外界联系的。计算机与外设之间不是直接相连的,而是通过不同的接口电路来达到彼此间的信息传送的目的。计算机与外设之间交换信息的方式:计算机与外设之间交换信息的方式: (1)无条件传送方式:外设对计算机来说总是准备好的。 (2)查询传送方式:传送前计算机先查询外设的状态,若已经准备好就传送,否则就继续查询/等待。 (3)中断传送方式:外设通过申请中断的方式与计算机进行数据传送。 (4)直接存储器存取方式(DMA):传送数据的双方直接通过总线传送数据, 不经CPU中转。3.2.1 3.2.1 中断的基本概念中断的基本概念 1 1中断
12、的定义中断的定义 所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程。 作用:作用:采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。 中断与子程序的最主要区别:中断与子程序的最主要区别:子程序是预先安排好的,中断是随机发生的。 中中断断涉涉及及的的几几个个环环节节:中断源、 中断申请、开放中断、保护现场、中断服务、恢复现场、中断返回。 2. 2. 中断源中断源 中断源是指引
13、起中断的设备或事件,或发出中断请求的源头。 3. 3. 中断的分类中断的分类 中断按功能通常可分为可屏蔽中断、非屏蔽中断和软件中断三类。 可屏蔽中断是指CPU可以通过指令来允许或屏蔽中断的请求。 非屏蔽中断是指CPU对中断请求是不可屏蔽的,一旦出现,CPU必须响应。 软件中断则是指通过相应的中断指令使CPU响应中断。 4. 4. 中断优先权与中断嵌套中断优先权与中断嵌套 中中断断优优先先级级(也也称称为为中中断断优优先先权权):给每个中断源指定中断响应的优先级别, CPU按中断源的优先级高低顺序响应各中断源发出的中断请求。 中中断断嵌嵌套套:在某一瞬间,CPU因响应某一中断源的中断请求而正在执
14、行它的中断服务程序时,若又有一级别高的中断源向CPU发出中断请求,且CPU的中断是开放的,CPU可以把正在执行的中断服务程序暂停下来,转而响应和处理优先权更高的中断源的中断请求,等处理完后再转回来,继续执行原来的中断服务程序,这就是中断嵌套。 中断嵌套的过程和子程序嵌套过程类似,子程序的返回指令是RET,而中断服务程序的返回指令是RETI。5. 5. 中断响应及处理过程中断响应及处理过程 保护断点 寻找中断源 中断处理 中断返回保护断点和寻找中断源都是由硬件自动自动完成的,用户不用考虑。6. 6. 中断系统的功能中断系统的功能中断系统:中断系统:能够实现中断功能的硬件电路和软件程序。中中断断系
15、系统统的的功功能能:能够实现中断优先权排队、中断嵌套、自动响应中断和中断返回等功能。 MCS-51单片机的大部分中断电路都是集成在芯片内部的,只有外部中断请求信号产生电路才分散在各中断源电路和接口电路中。3.2.2 MCS-513.2.2 MCS-51的中断系统的中断系统 MCS-51提供了5个中断源,2个中断优先级控制,可实现2个中断服务嵌套。可通过程序设置中断的允许或屏蔽,设置中断的优先级。1 1MCS-51MCS-51的中断源的中断源 8051允许5个中断源:(1)外部中断源(中断标志为IE0和IE1 ) 由 ( P3.2 )端口线引入,低电平或下降沿引起。 由 ( P3.3 )端口线引
16、入,低电平或下降沿引起。(2)内部中断源 (中断标志为TF0、TF1和TI/RI ) T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 TI/RI:串行I/O中断,完成一帧字符发送/接收引起。8051的中断结构如下图所示。 CPU识别中断申请的依据:识别中断申请的依据: CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。2 2中断控制中断控制 MCS-51单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。(1)定时器控制寄存器TCON (88H) TF1TF1 TR1TR
17、1 TF0TF0 TR0TR0 IE1IE1 IT1IT1 IE0IE0 IT0IT0TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。 =0:定时器未溢出; =1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。TR0/TR1:定时器运行启停控制位(可由用户通过软件设置 )。 =0:定时器停止运行; =1:定时器启动运行。IE0/IE1:外部中断申请标志位(由硬件自动置位 ,中断响应后转向中断服务程序时,由硬件自动清0 )。 =0:没有外部中断申请; =1:有外部中断申请。IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软
18、件设置 )。 =0:在INT0/INT1端申请中断的信号低电平有效; =1:在INT0/INT1端申请中断的信号负跳变有效。(2)串行口控制寄存器SCON (98H) TI/RI:串行口发送/接收中断申请标志位(由硬件自动置位,必须由用户在中断服务程序中用软件清0)。 =0:没有串行口发送/接收中断申请; =1:有串行口发送/接收中断申请。 SCON的高6位用于串行口工作方式设置和串行口发送/接收控制。 (3)中断允许控制寄存器IE (0A8H) SM0SM0 SM1SM1 SM2SM2 RENREN TB8 TB8 RB8RB8 TI RI TI RI EAEA ES ET1 EX1 ET0
19、 EX0ES ET1 EX1 ET0 EX0(3)中断允许控制寄存器IE (0A8H) EA EA ES ET1 EX1 ET0 EX0ES ET1 EX1 ET0 EX0EX0/EX1/ET1/ET0/ES 位:分别是 / ,T0/T1,串行口的中断允许控制位。 =0 :禁止中断; =1 :允许中断。EA:总的中断允许控制位(总开关): =0 :禁止全部中断; =1 :允许中断。(4)中断优先级控制寄存器IP (0B8H) 8051有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级,以便CPU对所有的中断实现两级中断嵌套。 8051内部中断系统对各中断源的中断优先级
20、有一个统一的规定,称为自然优先级(也称为系统缺省优先级)。如下表所示。 8051单片机的中断优先级采用了自然优先级和人工设置高、低优先级的策略,中断处于同一级别时,就由自然优先级确定。开机时,每个中断都处于低优先级,中断优先级可以通过程序来设定,由中断优先级寄存器IP来统一管理。 (4)中断优先级控制寄存器IP (0B8H) PS PT1 PS PT1 PX1 PX1 PT0 PX0PT0 PX0PX0/PX1: / 优先级控制位: =0 :属低优先级; =1 :属高优先级。PT0/PT1:T0/T1中断优先级控制位: =0 :属低优先级; =1 :属高优先级。PS1:串行口中断优先级控制位:
21、 =0 :属低优先级; =1 :属高优先级。中断优先级处理原则: 对同时发生多个中断申请时: 不同优先级的中断同时申请:先高后低 相同优先级的中断同时申请:按序执行 正处理低优先级中断又接到高级别中断:高打断低 正处理高优先级中断又接到低级别中断:高不理低3中断响应中断响应 (1)中断响应的条件 MCS-51单片机工作时,在每个机器周期中都会去查询各个中断标志,如果有中断请求。必须满足下列条件单片机才能响应中断。 相应的中断是开放的; 没有同级的中断或更高级别的中断正在处理; 正在执行的指令必须执行完最后 1个机器周期; 若正在执行RETI,或正在访问IE或IP寄存器,则必须执行完当前指令的下
22、一条指令。后方能响应中断。(2)中断响应的过程 中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。 中中断断请请求求:中断源将相应请求中断的标志位置 “1”,表示发出请求,并由CPU 查询。 中中断断响响应应:在中断允许条件下相应中断。断点入栈撤除中断标志关闭低同级中断允许中断入口地址送PC。 这些工作都是由硬件自动完成的。 中中断断服服务务:根据入口地址转中断服务程序,包含保护现场、执行中断主体、恢复现场。 中中断断返返回回:执行中断返回RETI指令断点出栈开放中断允许返回原程序。中断服务程序入口地址:中断服务程序入口地址: 中断响应的主要内容就是由硬件自动生成一条长调用指令(LC
23、ALL addr16),CPU执行这条长调用指令便响应中断,转入相应的中断服务程序。这里的addr16就是程序存储器中相应的中断服务程序的入口地址,MCS-51的5个中断源的中断服务程序入口地址是固定的,如下表所示。 8051的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:ORG 0000HLJMP START ; 转入主程序,START为主程序地址标号ORG 0003HLJMP INT0 ; 转外中断中断服务程序ORG 000BHLJM
24、P T0 ; 转定时器T0中断服务程序ORG 0030HSTART: ; 主程序开始(3)中断响应时间 正常中断响应时间至少为38个机器周期,如果有同级或高级中断服务,将延长中断响应时间。4中断请求的撤除中断请求的撤除 为了避免中断请求标志没有及时撤除而造成的重复响应同一中断请求的错误, CPU在相应中断时必须及时将其中断请求标志位撤除。 8051的5个中断源的中断请求撤除的方法是不同的。(1)定时器溢出中断请求的撤除 定时器溢出中断得到响应后,其中断请求的标志位TF0和TF1由硬件自动自动复位。(2)串行口中断请求的撤除 串行口中断得到响应后,其中断请求的标志位TI和RI不能由硬件自动复位,
25、必须由用户在中断服务程序的适当位置通过如下指令将它们撤除。 CLR TI ; 撤除发送中断请求标志 CLR RI ; 撤除接收中断请求标志 或采用字节型指令:ANL SCON, #0FCH(3)外部中断请求的撤除 外部中断请求的两种触发方式(电平触发和负边沿触发)的中断请求撤除的方法是不同的。 负负边边沿沿触触发发方方式式:CPU在前一机器周期采到 / 引脚为高,后一机器周期采到为低才认为是一次中断请求,即依靠CPU两次检测 (或 )上的负边沿触发电平状态而置位外部中断标志位IE0或IE1 。CPU 可记忆申请、可由硬件自自动动撤除中断申请。 电电平平触触发发方方式式: / 引脚上的低电平须持
26、续到中断发生。若中断返回前仍未及时撤除低电平,虽然CPU在响应中断时能由硬件自动复位IE0或IE1,但引脚上的低电平仍会使已经复位的IE0或IE1再次置位,产生重复中断的错误。 电平触发型外部中断请求的撤除必须由外部硬件使(或)上的低电平随着其中断被响应而变为高电平。其中断请求撤除的电路如下图所示。 外来的低电平反相CP端产生上跳沿 D端的“0”输出到Q端申请中断,中断服务返回前对送中断服务返回前对送“0” “0” 令令Q Q端变为端变为“1”“1” 指令如下:指令如下: ANL P1,#0FEH (或(或CLR P1.0 ) ;令令Q端置端置“1” ORL P1, #01H ( SETB P
27、1.0 ) ;令令SD端置端置“1”,以免下次中断来时以免下次中断来时Q端不能变端不能变“0”3.2.3 MCS-513.2.3 MCS-51中断系统的编程中断系统的编程 (1)中断初始化设置:开相应中断允许( IE )、根据需要选择优先级( IP )和选择外中断触发方式(TCON),设置计数器、串行口的有关参数。(2)中断服务程序的编写:中断入口、保护现场、关中断、中断服务主体程序、恢复现场、开中断、设置计数器、串行口的有关参数、中断返回指令RETI 。 例例题题2 2 设8051外部中断源接引脚 ,中断触发方式为电平触发,试编制8051中断系统的初始化程序。解:采用位操作指令实现(也可以采
28、用传送指令和逻辑指令)。 SETB EA ; 开总中断 SETB EX0 ; 开中断 SETB PX0 ; 设置为高优先级 CLR IT0 ; 设置为电平触发方式 例题例题3 3 通过通过外部中断控制八盏灯循环点亮。解:解:通过P1口扩展八盏灯,在 引脚接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。程序如下:程序如下: ORG 0000H LJMP MAIN ORG 0013H ; 中断服务程序入口地址 LJMP IN11 MAIN:SETB EA ; 开总中断允许“开关” SETB EX1 ; 开分中断允许
29、“开关” CLR PX1 ; 低 优先级(也可不要此句) SETB IT1 ; 边沿触发 MOV A , #01H ; 给累加器A赋初值 SJMP $ ; 原地等待中断申请 IN11:RL A ; 左环移一次 MOV P1,A ; 输出到P1口 RETI ; 中断返回 END3.2.4 MCS-51扩展外部中断请求输入口扩展外部中断请求输入口 8051单片机只提供了两个外部中断请求输入端,如果需要使用多于两个的中断源,就必须扩展外部中断请求输入口。 1 1定时器定时器/ /计数器用于扩展外部中断请求输入口计数器用于扩展外部中断请求输入口 8051单片机有两个定时器/计数器,它们作为计数器使用时
30、,计数输入端T0(或T1)发生负跳变将使计数器加1,利用此特性,适当设置计数初值,就可以把计数输入端T0(或T1)作为外部中断请求输入口。其特点是以占用内部定时中断为代价的。中断服务程序的入口地址仍然为000BH或001BH。2 2查询方式扩展外部中断请求输入口查询方式扩展外部中断请求输入口 把多个中断源通过硬件(如与非门)引入外部中断输入端,同时又连到某个I/O口。当有中断源申请中断时,在中断服务程序中通过软件查询可确定哪一个是正在申请的中断源,其查询的次序可由中断优先级决定。其特点是中断响应速度较慢。 适用于外部中断源较多的场合。下页例题中,我们采用74LS21A四输入端双与门实现该任务。
31、 3 3使用专用芯片扩展外部中断请求输入口使用专用芯片扩展外部中断请求输入口 当外部中断源较多,同时又要求中断响应速度很高时,查询方式扩展外部中断请求输入口的方法很难满足要求。这时可以使用专用接口芯片进行外部中断请求输入口的扩展。下面例题中,我们采用74LS21A四输入端双与门实现该任务。 查询方式扩展外部中断请求输入口的查询方式扩展外部中断请求输入口的电路实现:74ls21的逻辑表是:当输入全高时输出为高,任一输入低则输出就为低。电路分析:当没有按键按下时,由于上拉电阻的作用,74ls21输出高,使INT0口为高电平,此时中断程序不被触发。如果任何一个按键按下,则74ls21输出低电平,触发
32、中断程序。中断程序设计为:如果程序设计检测次序是、口,优先级即按顺序排列,如果同时有多个键被按下,可根据实际要求设定为 1、仅仅只响应最优先中断;2、按优先级顺序依次执行各个中断。 设计程序如下:设计程序如下:ORG 0000HLJMP MAINORG 0003H; 外部中断0中断服务入口地址LJMP INT; 转中断服务ORG 0100H MAIN: SETB EA; 开总中断允许SETB EX0; 开INT0中断SETB IT0 ; 下降沿有效中断服务程序清单如下: INTI CALL D20; 延时去抖动MOV P1,#0FFH;P1口送全1值(准双向口原因)MOV A, P1; 读P1
33、口各引脚(设另四口未用) CJNE A, #0FFH,CLOSE; 验证是否确实有键闭合 AJMP INT0; 无键按下(按键时间过短)则退;出中断 CLOSE: JNB ACC.3, KEY 0; 查询0号键 JNB ACC.2, KEY 1; 查询1号键 JNB ACC.1, KEY 2; 查询2号键 ,KEY 3; 查询3号键 INT0:RETI KEY 0:; 7号键处理程序 KEY 01:MOV A, P1; 再读P1口各引脚 JNB ACC.0, FUNC71; 确认键是否释放 RETI KEY 1:; 其他键处理程序 D20: ; 20ms延时子程序 END 3.3 MCS-51
34、单片机的定时器单片机的定时器/计数计数器器 3.3.1 定时器定时器/计数器计数器 1 1基本概念基本概念(1)计数:计数是指对外部事件的个数进行计量。其实质就是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。(2)定时:8051单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。这个计数源是由单片机的晶振经过12分频后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。(3)定时的种类 软软件件定定时时:利用执行一个循环程序进行时间延迟。其特点是定时时间精确,不需外加硬件电路,但占用CPU时间。
35、因此软件定时的时间不宜过长。 硬硬件件定定时时:利用硬件电路实现定时。其特点是不占用CPU时间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。 可可编编程程定定时时器器:通过专用的定时器/计数器芯片实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时时间可通过程序设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。 MCS-51单片机内部有两个16位可编程的定时器/计数器,简称为T0和T1,均可作定时器用也可计数器,它们均是二进制加法计数器,当计数器计满回零时能自动产生溢出中断请求,表示定时时间已到或计数已终止。适用于定时控制、延时、外
36、部计数和检测等。计数器:计数器:对引脚T0(P 3.4 )和T1(P3.5.)输入的外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。定时器:定时器:对系统晶振振荡脉冲的12分频输出进行计数。 (1)定时器/计数器的结构组成:组成:16位加法计数器、工作方式寄存器TMOD和控制寄存器TCON。 T0: TL0(低8位)和TH0(高8位) T1: TL1(低8位)和TH1(高8位)2MCS-51内部定时器内部定时器/计数器计数器 8051单片机内部的定时器/计数器的结构如下图所示。(2)控制寄存器TCON (88H) TF1 TR1 T
37、F0 TR0 IE1 IT1 IE0 IT0TF0/TF1:T0/1计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。 =1 :计数溢出; =0 :计数未满。TR0/TR1:T0/1启停控制位。 =1 :启动计数; =0: 停止计数。IE0/IE1和IT0/IT1:用于管理外部中断(前面已介绍过)。 M1,M0:工作方式选择位 。 =00:13位定时器/计数器; =01:16位定时器/计数器(常用); =10:可自动重装的8位定时器/计数器(常用); =11:T0 分为2个8位定时器/计数器;仅适用于T0。 C/ :定时方式/计数方式选择
38、位。 = 1:选择计数器工作方式,对T0/T1引脚输入的外部事件的负脉冲计数; = 0 :选择定时器工作方式,对机器周期脉冲计数定时。 如下页图所示。(2)工作方式寄存器TMOD GATE C / T M1 M0 GATE C / T M1 M0T1T2GATE:门控位,定时器/计数器的启/停可由软件与硬件两者控制 = 0 :软件控制,只由TCON中的启/停控制位TR0/TR1控制定时器/计数器的启/停。 = 1 :硬件控制,由外部中断请求信号 / 和TCON中的启/停控制位TR0/TR1组合状态控制定时器/计数器的启/停。 其控制逻辑如下图所示。3.3.2 3.3.2 定时器定时器/ /计数
39、器的工作方式计数器的工作方式 8051单片机的定时器/计数器共有四种工作模式,现以T0为例加以介绍,T1与T0的工作原理相同,但方式3下T1停止计数。方式(如F0)和用户定义名称等几种方式。1工作方式工作方式0( M1M0=00 ,13位定时器位定时器/计数器)计数器) 由TH0的全部8位和TL0的低5位( TL0的高3位未用)构成13位加1计数器,当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,溢出标志位TF0置“1”。2工作方式工作方式1 ( M1M0=01 ,16位定时器位定时器/计数器)计数器) 由TH0和TL0构成16位加1计数器,其他特性与工作方式0相同。3工工
40、作作方方式式2 ( M1M0=10 ,自自动动重重装装计计数数初初值值的的8位位定定时时器器/计数器)计数器) 16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。这种工作方式很适合于那些重复计数的应用场合(如串行数据通信的波特率发生器)。4工作方式3 ( M1M0=11 , 2个8位定时器/计数器,仅适用于T0)TL0:8位定时器/计数器,使用T0原有控制资源TR0和TF0,其功能和操作与方式0或方式1完全相同。T
41、H0:只能作为8位定时器,借用T1的控制位TR1和TF1,只能对片内机器周期脉冲计数。 在方式3模式下,定时器/计数器0可以构成两个定时器或者一个定时器和一个计数器。 T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更为合适。 定时器/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数。在应用时,其工作方式和工作过程均可通过程序设定和控制,因此,定时器/计数器在工作前必须先对其进行初始化,计算和设置初值。 1. 定时器定时器T0/T1 中断申请过程中断申请过程 (1)在已经开放T0/T1中断允许且已被启动的前提下,T0/T1加1计满溢出时 TF0/TF
42、1标志位自动置“1” ; (2)CPU 检测到TCON中TF0/TF1变“1”后,将产生指令:LCALL 000BH/LCALL 001BH 执行中断服务程序; (3)TF0/TF1标志位由硬件自动清“0”,以备下次中断申请。3.3.3 定时器定时器/计数器的应用计数器的应用 2. 定时器/计数器初始化的步骤 (1)写TMOD,设置定时器/计数器的工作方式; (2)计算定时器/计数器的初值,写入TH0/TH1、TL0/TL1。 (3)设置IE、IP,以开放相应的中断和设定中断优先级。 3. 定时器/计数器的定时器/计数器范围 (1)工作方式0:13位定时器/计数器方式 最大计数值= 213 =
43、 8192 (2)工作方式1:16位定时器/计数器方式 最大计数值= 216 = 65536 (3)工作方式2和工作方式3:8位的定时器/计数器方式因此, 最大计数值= 28 = 256 3. 计数器初值的计算计数器初值的计算 方法:方法:用最大计数量减去需要的计数次数。即: TC=MC 其中:其中:TC计数器需要预置的初值; M计数器的模值(最大计数值); 方式0时,M=213;方式1时,M=216;方式2, 3时,M=28; C计数器计满回0所需的计数值,即设计任务要求的计数值。例如:例如:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,则应当预置的初值
44、为: TC = M C = 213 12=81804. 定时器初值的计算定时器初值的计算 定时时间的计算公式为:定时时间的计算公式为: T=(MTC)T0 (或TC=MT/T0 )其中:其中:T定时器的定时时间,即设计任务要求的定时时间; T0计数器计数脉冲的周期,即单片机系统主频周期的12倍; M计数器的模值; TC定时器需要预置的初值。 若设初值TC=0,则定时器定时时间为最大。若设单片机系统主频为12MHz,则各种工作方式定时器的最大定时时间为:工作方式工作方式0 0: Tmax=2131工作方式工作方式1 1: Tmax=2161工作方式工作方式2 2和和3 3:Tmax=2815.
45、5. 定时器定时器/ /计数器应用举例计数器应用举例 例例题题 设一只发光二极管LED和8051的脚相连。当脚是高电平时,LED发亮;当脚是低电平时,LED不亮。编制程序用定时器来实现发光二极管LED的闪烁功能,设置LED每1s闪烁一次。已知单片机系统主频为12MHz(这意味着每个时钟周期121/(12100000012=1 s。见p127和p29)。要是主频为的话,就是12/11.0592 s。解解:定时器/计数器的最长的定时是,无法实现1s的定时。可以采用软件计数器来进行设计。设设计计思思想想:定义一个软件计数器单元30H,先用定时器/计数器0做一个50ms的定时器,定时时间到了以后将软件
46、计数器中的值加1,如果软件计数器计到了20,取反,并清掉软件计数器中的值,否则直接返回。则完成了20次定时中断才取反一次,因此定时时间就为2050=1000ms=1s。定时器/计数器0采用工作方式1,其初值为: 21650ms/1s=6553650000=15536=3CB0H电路图如下:程序如下:程序如下: ORG 0000H AJMP START ; 转入主程序 ORG 000BH ; 定时器/计数器0的中断服务程序入口地址 AJMP TIME0 ; 跳转到真正的定时器中断服务程序处 ORG 0030H START: MOV SP, #60H ; 设置堆栈指针 MOV P1, #0FFH
47、; 关发光二极管LED(使其灭) MOV 30H, #00H ; 软件计数器预清0 MOV TMOD, # 01H ; 定时器/计数器0工作于方式1 MOV TH0, #3CH ; 设置定时器/计数器的初值 MOV TL0, #0B0H SETB EA ; 开总中断允许 SETB ET0 ; 开定时器/计数器0中断允许 SETB TR0; 启动定时器/计数器0 LOOP: AJMP LOOP ; 循环等待(真正工作时,这里可写任意其他程序)定时器定时器/ /计数器计数器0 0的中断服务程序如下:的中断服务程序如下: TIME0: PUSH ACC ; 将PSW和ACC推入堆栈保护 PUSH P
48、SW INC 30H ; 软件计数器加1 MOV A, 30H CJNE A, #20, T_LP2 ; 软件计数器单元中的值到了20了吗? 到了,继续执行; 否则,转入T_LP2 T_LP1: CPL P1.0 ; 到了,取反 MOV 30H, #00H; 清软件计数器 T_LP2: MOV TH0, #3CH; 重置定时器/计数器的初值 MOV TL0, #0B0H POP PSW ; 恢复PSW和ACC POP ACC RETI; 中断返回 END 例例题题 设电路图如本课件第10页所示(或见01计本实验ddb图)编制程序,对RAM中某单元内容进行显示。解解:设使用内存70H75H 6个
49、单元存放当前时钟数据,用定时器功能以及数码管动态显示技术可该值显示出来。程序如下:程序如下:;YanQing于2006年5月7日调试成功.org 0000hjmp mainorg 001bhjmp displayorg 50hmain: nopmov tmod,#00hmov tl1,#0b0hmov th1,#00h setb easetb et1setb tr1mov 70h,#1mov 71h,#2mov 72h,#7mov 73h,#4mov 74h,#5mov 75h,#0sss:jmp sssdisplay:mov r1,#6fhmov r4,#11011111bplay:mov
50、a,r4mov p2,ainc r1mov a,r4rr a mov r4,amov a,r1mov dptr,#tabmovc a,a+dptrmov dptr,#7fffhmovx dptr,adl1ms: mov r6,#14hdl1:mov r7,#19hdjnz r7,$djnz r6,dl1mov a,r4jb acc.7,playretitab:db 0c0h,0f9h,0a4h,0b0h,99hdb 92h,82h,0f8h,80h,90hend 该程序的实用意义在于:不论主程序是怎么运行,该程序的实用意义在于:不论主程序是怎么运行,显示数码管总能显示特定单元的内容,电子钟、温
51、度控显示数码管总能显示特定单元的内容,电子钟、温度控制、制、GPSGPS数据等等都可以使用。只要你把数据送到指定数据等等都可以使用。只要你把数据送到指定的内存单元即可。的内存单元即可。3.4 MCS-51 3.4 MCS-51 单片机的串行通信单片机的串行通信 3.4.1 3.4.1 概述概述 通信:通信:单片机与外界进行信息交换统称为通信。80518051单片机的通信方式有两种:单片机的通信方式有两种:并并行行通通信信:数据的各位同时发送或接收。特点是传送速度快、效率高,但成本高。适用于短距离传送数据。计算机内部的数据传送一般均采用并行方式。串行通信:串行通信:数据一位一位顺序发送或接收。特
52、点是传送速度慢,但成本低。适用于较长距离传送数据。计算机与外界的数据传送一般均采用串行方式。 2. 2. 数据通信的制式数据通信的制式单工方式:单工方式:数据仅按一个固定方向传送;半双工方式:半双工方式:数据可实现双向传送,但不能同时进行;全双工方式:全双工方式:允许双方同时进行数据双向传送;多工方式:多工方式:在同一线路上实现资源共享。 3. 3. 串行通信的分类串行通信的分类 串行数据通信按数据传送方式可分为异步通信和同步通信两种形式:同同步步方方式式:以数据块为单位进行数据传送,包括同步字符、数据块和校验字符CRC。优点是数据传输速率较高,缺点是要求发送时钟和接收时钟保持严格同步。数据格
53、式如下图所示。 异异步步方方式式:以字符为单位进行数据传送,每一个字符均按固定的字符格式传送,又被称为帧。优点是不需要传送同步脉冲,可靠性高,所需设备简单;缺点是字符帧中因包含有起始位和停止位而降低了有效数据的传输速率。数据格式如下图所示:4. 4. 串行数据通信的波特率串行数据通信的波特率 波特率是指每秒钟传送信号的数量,单位为波特(Baud)。而每秒钟传送二进制数的信号数(即二进制数的位数)定义为比特率,单位是bps(bit per second)或写成b/s(位/秒)。 在单片机串行通信中,传送的信号是二进制信号,波特率与比特率数值上相等。单位采用bps。例如,异步串行通信的数据传送的速
54、率是120字符/秒,而每个字符规定包含10位数字,则传输波特率为: 120字符/秒 10位/字符=1200位/秒= 1200bps3.4.2 MCS-513.4.2 MCS-51的串行口的串行口 MCS-51单片机内部有一个全双工的串行通信口(、) ,既可作UART(通用异步接收/发送器)用,也可作同步移位寄存器使用,还可用于网络通信,其帧格式可有8位、10位和11位,并能设置各种波特率。1 1串行口寄存器结构串行口寄存器结构 (1)两个物理上独立的同名的接收/发送缓冲寄存器SBUF 指令 MOV SBUF,A 启动一次数据发送, 指令 MOV A,SBUF 完成一次数据接收, 即向发送缓冲器
55、SBUF写入数据即可发送数据,从接收缓冲器SBUF读出数据即可接收数据。 (2)输入和输出移位寄存器和控制器等组成。 (3)2个SFR寄存器SCON和PCON,用于串行口的初始化编程。 (4)接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对 RI/TI 清0,以备下一次收/发。 SBUF(发)(发)SBUF(收)(收)发送控制器发送控制器 TI接收控制器接收控制器 RI移位寄存器移位寄存器波波特特率率发发生生器器T1 1A累累加加器器(门门)移位寄存器移位寄存器RxD(P3.1)TxD(P3.1)去申请中断去申请中断引脚引脚引脚引脚CPU内内部部 MCS-51串行口
56、的结构如下图所示:2. 串行通信控制寄存器串行通信控制寄存器SCON (98H)SM0 SM1 SM2 REN TB8 RB8 TI R1SM0,SM1:串行口4种工作方式控制位。 =00:方式0,8位同步移位寄存器,其波特率为fosc/12; =01:方式1,10位UART,其波特率为可变,由定时器控制; =10:方式2,11位UART,其波特率为fosc/64或fosc/32; =11:方式3,11位UART,其波特率为可变,由定时器控制。 其中:fosc为系统晶振频率。RI,TI:串行口收/发数据申请中断标志位 1 申请中断; 0 不申请中断。RB8:在方式2、3中,用于存放收到的第9位
57、数据;在双机通信中,作为奇偶校验;在多机通信中,用作区别地址帧/数据帧的标志。TB8:方式2、3中,是要发送的第9位数据;在双机通信中,用于对接收到的数据进行奇偶校验;在多机通信中,用作判断地址帧/数据帧,TB8=0 表示发送的是数据,TB8=1 表示发送的是地址。REN:串行口接收允许控制位 = 1: 表示允许接收; = 0: 禁止接收。SM2:串行口多机通信控制位,作为方式2、方式3的附加控制位。3. 中断允许寄存器中断允许寄存器IE(0A8H) 中断允许寄存器IE在节中已介绍。其中对串行口有影响的位ES。ES为串行中断允许控制位。 ES=1:允许串行中断; ES=0:禁止串行中断。 4.
58、 4. 电源管理寄存器电源管理寄存器PCONPCON(87H87H) 不可位寻址。 PCON主要用于实现电源控制而设置的专用寄存器,已在节中介绍过。其格式如下图所示。SMOD GF1 GF0 PD 1DLSMOD:串行口波特率倍增位 =1:串行口波特率加倍。 =0:串行口波特率不变,系统复位时默认为SMOD=0。3.4.3 3.4.3 串行口的工作方式串行口的工作方式 1. 工作方式0( 8位移位寄存器I/O方式)发送/接收过程:SBUF中的串行数据由RxD逐位移出/移入(低位在先,高位在后);TxD输出移位时钟,频率=fosc1/12;每送出/接收8位数据 TI/ RI自动置1;需要用软件清
59、零 TI/ RI 。注意:注意:串行口在方式0下的工作并非是一种同步通信方式,经常配合“串入并出”“并入串出”移位寄存器一起使用,以达到扩展一个并行口的目的。 扩展电路如下图所示。如要发送数据,查询方式的程序如下: MOV SCON,#00H ;串行口方式0 MOV SBUF,A ;将数据送出 JNB TI,$ ;等待数据发送完毕 CLR TI ;为下次发送作准备注意:注意:复位时,SCON 已经被清零,缺省值为方式0。发送条件:发送条件:TI=0。接收条件接收条件:TI=0,置位 REN=1 (允许接收数据)。2. 方式方式1 (波特率可变的波特率可变的10位异步通信方式位异步通信方式 )发
60、送发送/ /接收数据的格式:接收数据的格式:一帧信息包括1个起始位0,8个数据位和1个停止位1。发送发送/ /接收过程:接收过程:SBUF中的串行数据由RXD逐位移出/移入;TXD输出移位时钟,频率= (2SMOD/32)T1的溢出率,波特率可变。每送出/接收8位数据 TI/ RI自动置1;需要用软件清零 TI/ RI 。工作时,发送端自动添加一个起始位和一个停止位;接收端自动去掉一个起始位和一个停止位。发送发送/ /接收条件:接收条件:同方式0。3. 方式方式2(固定波特率的固定波特率的11位异步接收位异步接收/发送方式发送方式)发发送送/ /接接收收过过程程:方式2的接收/发送过程类似于方
61、式1,所不同的是它比方式1增加了一位“第9位”数据(TB8/RB8),用于“奇偶校验”。方式2常用于单片机间通信。波特率 = fosc 2SMOD/64 。发送发送/ /接收条件:接收条件:同方式0。3. 方式方式3(可变波特率的可变波特率的11位异步接收位异步接收/发送方式发送方式) 方式3和方式2唯一的区别是波特率机制不同,方式3的波特率=(2SMOD/32)T1的溢出率。奇偶校验:奇偶校验:奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。即如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。奇校验规定:奇
62、校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为奇数。偶校验规定:偶校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为偶数。约定发送采用约定发送采用奇校验:奇校验:若发送的8位有效数据中“1”的个数为偶数,则要人为在附加位中添加一个“1”一起发送;若发送的8位有效数据中“1”的个数为奇数,则要人为在附加位中添加一个“0”一起发送。约定接收采用约定接收采用奇校验:奇校验:若接收到的9位数据中“1”的个数为奇数,则表明接收正确,取出8位有效数据即可;若接收到的9位数据中“1”的个数为偶数,则表明接收出错!应当进行出错处理。 采用偶校验时,处理方法与奇校验类似。3.4.4 3.
63、4.4 串行口的通信波特率串行口的通信波特率 串行口的通信波特率恰到好处地反映了串行传输数据的速率。在MCS-51串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率(T1溢出信号的频率)控制。各种方式的通信波特率如下:方式方式0:波特率固定为fosc/12。 其中:其中:fosc系统主机晶振频率方式方式2:波特率由PCON中的选择位SMOD来决定,可由下式表示: 波特率=(2SMOD/64)fosc 方式方式1和方式和方式3:波特率是可变的,由定时器T1的溢出率控制。波特率为: 波特率=(2SMOD/32)定时器T1溢出率 T1溢出率=T1计
64、数率/产生溢出所需的周期 = (fosc/12)/(2KTC) 其其中中:K定时器T1的位数,定时器T1用作波特率发生器时,通常工作在方式2, 所以T1的溢出所需的周期数= 28TC。 TC定时器T1的预置初值。 下表列出了定时器T1工作于方式2的常用波特率及初值。 定时器的工作方式2是自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。为什么51系列单片机常用的晶振设计? 因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。用可以得到准确的数值,
65、而用12MHz就不能得到整数数值。通信是一定要准确发送和接受的,否则积累误差就会产生。 常用波特率通常按规范取常用波特率通常按规范取12001200、24002400、48004800、96009600、,若采用晶振若采用晶振12MHz12MHz和和6MHz6MHz,则计算得出的,则计算得出的T1T1定时初值将不是一定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。解决个整数,产生波特率误差而影响串行通信的同步性能。解决的方法只有调整单片机的时钟频率的方法只有调整单片机的时钟频率foscfosc,通常采用晶振。,通常采用晶振。方式方式1 1波特率可变,由定时波特率可变,由定时/
66、/计数器计数器T1T1的计数溢出率来决定。的计数溢出率来决定。波特率波特率 = 2SMOD = 2SMOD(T1T1溢出率)溢出率)/ 32/ 32其中其中SMODSMOD为为PCONPCON寄存器中最高位的值,寄存器中最高位的值,SMOD=1SMOD=1表示波特率倍表示波特率倍增。增。在在实实际际应应用用时时,通通常常是是先先确确定定波波特特率率,后后根根据据波波特特率率求求T1T1定定时初值,因此上式又可写为:时初值,因此上式又可写为:T1T1初值初值 = 256 = 256 2 2SMODSMOD3232foscfosc12 12 波特率波特率【例题】设晶振fosc为,选定定时器工作方式
67、2,求4800bps、9600bps时的初值。解:定时器方式2的初始值X的公式经过推导可得到: X 256fosc(SMOD1)/(384波特率) 故: X1256(11.05921061)/(3844800) = FAH X2 256(11.05921061)/(3849600) = FDH 看得出来,采用全是整数值结果,而采用12MHz则不是整数结果。网上可以找到程序来快捷计算:51初值设定3.4.5 3.4.5 串行口的应用串行口的应用 1 1串口方式串口方式0 0应用编程应用编程 例题例题66 用8051串行口外接CD4094扩展8位并行输出口,8位并行口的各位都接一个发光二极管,要求
68、发光二极管呈流水灯状态(轮流点亮)。 解:解:硬件连接电路如下图所示。 在开始通信之前,应先对控制寄存器SCON进行初始化。将00H送SCON即设置方式0。数据传送采用查询方式,通过查询TI的状态,来决定是否发送下一帧数据。在串行接收时,通过对RI查询来确定何时接收下一帧数据。程序如下: ORG 1000H START: MOV SCON, #00H; 置串行口工作方式0 MOV A, #80H ; 最高位灯先亮 CLR P1.0 ; 关闭并行输出 OUT0: MOV SBUF, A ; 开始串行输出 OUT1: JNB TI, OUT1; 输出完否?未完,等待;完了,继续执行 CLR TI
69、; 完了,清TI标志,以备下次发送 SETB P1.0; 打开并行口输出 ACALL DELAY; 延时一段时间 RR A ; 循环右移 CLR P1.0; 关闭并行输出 SJMP OUT0 ; 循环 DELAY: MOV R7, #250 ; 延时子程序 D1: MOV R6, #250 D2: DJNZ R6, D2 DJNZ R7, D1 RET END2双机通信双机通信 双机通信的硬件连接图如下图所示。 通信协议如下:通信协议如下: 设1号机是发送方,2号机是接收方。采用串行口方式1进行通信,一帧信息为10位,其中有1个起始位、8个数据位和1个停止位;波特率为2400bps,T1工作在
70、定时器方式2,单片机时钟振荡频率选用,查表可得TH1=TL1=0F4H,PCON寄存器的SMOD位为0。 当1号机发送时,先发送一个“E1”联络信号,2号机收到后回答一个“E2”应答信号,表示同意接收。当1号机收到应答信号“E2”后,开始发送数据,每发送一个字节数据都要计算“校验和”,假定数据块长度为16个字节,起始地址为40H,一个数据块发送完毕后立即发送“校验和”。2号机接收数据并转存到数据缓冲区,起始地址也为40H,每接收到一个字节数据便计算一次“校验和”,当收到一个数据块后,再接收1号机发来的“校验和”,并将它与2号机求出的校验和进行比较。若两者相等,说明接收正确,2号机回答00H;若
71、两者不相等,说明接收不正确,2号机回答0FFH,请求重发。1号机接到00H后结束发送。若收到的答复非零,则重新发送数据一次。程序框图如下页图所示。 发送程序如下:发送程序如下: ORG 1000H ASTART: CLR EA MOV TMOD, #20H; 定时器1置为方式2 MOV TH1, #0F4H; 装载定时器初值,波特率2400 MOV TL1, #0F4H MOV PCON, #00H SETB TR1; 启动定时器 MOV SCON, #50H ; 设定串口方式1,且准备接收应答信号 ALOOP1: MOV SBUF, #0E1H ; 发联络信号 JNB TI, $; 等待一帧
72、发送完毕 CLR TI ; 允许再发送 JNB RI, $; 等待2号机的应答信号 CLR RI ; 允许再接收 MOV A, SBUF ; 2号机应答后,读至A XRL A, #0E2H; 判断2号机是否准备完毕 JNZ ALOOP1; 2号机未准备好,继续联络 ALOOP2: MOV R0, #40H; 2号机准备好,设定数据块地址指针初值 MOV R7, #10H; 设定数据块长度初值 MOV R6, #00H; 清校验和单元 ALOOP3: MOV SBUF, R0 ; 发送一个数据字节 MOV A, R6 ADD A, R0 ; 求校验和 MOV R6, A; 保存校验和 INC R
73、0 JNB TI, $ CLR TI DJNZ R7, ALOOP3; 整个数据块是否发送完毕 MOV SBUF, R6; 发送校验和 JNB TI, $ CLR TI JNB RI, $; 等待2号机的应答信号 CLR RI MOV A, SBUF; 2号机应答,读至A JNZ ALOOP2 ; 2号机应答“错误”,转重新发送 RET; 2号机应答“正确”,返回 END接收程序如下接收程序如下: : ORG 1000H BSTART: CLR EA MOV TMOD, #20H MOV TH1, #0F4H MO V TL1, #0F4H MOV PCON, #00H SETB TR1 MO
74、V SCON, #50H; 设定串口方式1,且准备接收 BLOOP1: JNB RI, $ ; 等待1号机的联络信号 CLR RI MOV A, SBUF; 收到1号机信号 XRL A, #0E1H; 判断是否为1号机联络信号 JNZ BLOOP1 ; 不是1号机联络信号,再等待 MOV SBUF, #0E2H; 是1号机联络信号,发应答信号 JNB TI, $ CLR TI MOV R0, #40H ; 设定数据块地址指针初值 MOV R7, #10H ; 设定数据块长度初值 MOV R6, #00H; 清校验和单元 BLOOP2: JNB RI, $ CLR RI MOV A, SBUF
75、MOV R0, A; 接收数据转储 INC R0 ADD A, R6 ; 求校验和 MOV R6, A DJNZ R7, BLOOP2 ; 判断数据块是否接收完毕 JNB RI, $ ; 完毕,接收1号机发来的校验和 CLR RI MOV A, SBUF XRL A, R6 ; 比较校验和 JZ END1 ; 校验和相等,跳至发正确标志 MOV SBUF, #0FFH ; 校验和不相等,发错误标志 JNB TI, $ ; 转重新接收 CLR TI END1: MOV SBUF, #00H RET END3 3多机通信多机通信(1)硬件连接 单片机构成的多机系统常使串行口工作在方式2和方式3,采
76、用总线型主从式结构(一个是主机,其余的是从机,从机要服从主机的调度、支配)。有时还要对信号进行光电隔离、电平转换等。在实际的多机应用系统中,常采用RS-485串行标准总线进行数据传输。简单的硬件连接如下图所示(图中没有画出RS-485接口)。(2)通信协议主机置SM2位0,所有从机的SM2位置1,处于接收地址帧状态。 主机发送一地址帧,其中,8位是地址,第9位为1表示该帧为地址帧。 所有从机收到地址帧后,都将接收的地址与本机的地址比较。对于地址相符的从机,使自己的SM2位置0(以接收主机随后发来的数据帧),并把本站地址发回主机作为应答;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据
77、帧不予理睬。从机发送数据结束后,要发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束的标志。主机接收数据时先判断数据接收标志(RB8),若接收帧的RB8=0,则存储数据到缓冲区,并准备接收下帧信息。若RB8=1,表示数据传送结束,并比较此帧校验和,若正确则回送正确信号00H,此信号命令该从机复位(即重新等待地址帧);若校验和出错,则发送0FFH,命令该从机重发数据。 发送数据。主机收到从机应答地址后,确认地址是否相符,如果地址不符,发复位信号(数据帧中TB8=1);如果地址相符,则清TB8,开始发送数据。 从机收到复位命令后回到监听地址状态(SM2=1)。否则开始接收数据和命令。(
78、3)应用程序设计设主机发送的地址联络信号为:00H,01H,02H,(即从机设备地址),地址FFH为命令各从机复位,即恢复SM2=1。主机命令编码为:01H,主机命令从机接收数据;02H,主机命令从机发送数据。其他都按02H对待。程序分为主机程序和从机程序。约定一次传递数据为16个字节。 程序清单见教材(略)。 4 4单片机与单片机与PCPC的通信的通信 1台PC既可以与1个8051单片机应用系统通信,也可以与多个8051单片机应用系统通信;可以近距离也可以远距离。单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和通信距离不同的接口等处理技术。 其硬件连接电路如下图 所 示 。
79、 在 Windows的 环 境 下 , 可 使 用 VB通 信 控 件(MSComm)却可以很容易实现PC机与单片机之间的通信。 单片机程序如下:单片机程序如下: ORG 3000H MAIN: MOV TMOD, #20H ; 在下,串行口波特率 MOV TH1, #0FDH ; 9600bps,方式3 MOV TL1, #0FDH MOV PCON, #00H SETB TR1 MOV SCON, #0D8H LOOP: JBC RI, RECEIVE ; 接收到数据后立即发出去 SJMP LOOP RECEIVE: MOV A, SBUF MOV SBUF, A SEND: JBC TI
80、, SENDEND SJMP SENDSENDEND: SJMP LOOP ENDPC程序如下:(程序如下:(VB语言)语言) Sub Form_Load() MSComm1.CommPort=2 MSComm1.PortOpen=TURE MSComm1.Settings=9600, N, 8, 1 End Sub Sub command1_Click() Instring as string MSComm1.InBufferCount=0 MSComm1.Output=A Do Dummy=DoEvents() Loop Until(MSComm1.InBufferCount2) Inst
81、ring=MSComm1.Input End Sub Sub command2_Click() MSComm1.PortOpen=FALSE UnLoad Me End Sub3.4.5 3.4.5 串行芯片串行芯片MAX232MAX232的应用的应用3.4.5.1 EIA RS-232C总线标准与接口电路总线标准与接口电路 EIA RS-232C是异步串行通信中应用最广泛的标准总线,是美国EIA(Electronic Industries Association,电子工业联合会)开发公布的通信协议。适合于数据传输速率在020kb/s范围内的通信,包括了按位串行传输的电气和机械方面的规定。在微
82、机通信接口中被广泛采用。 其特点为: (1)采取不平衡传输方式,是为点对点(即只用一对收、发设备)通信而设计的; (2)采用负逻辑。 (3)适用于传送距离不大于15m,速度不高于20kb/s的本地设备之间通信的场合。2. 连接器连接器(1)DB-25连接器 DB-25型连接器的外形及信号线分配如图右所示。25芯RS-232C接口具有20mA电流环接口功能,用9, 11, 18, 25针来实现。(2)DB-9连接器 DB-9连接器只提供异步通信的9个信号,其外形及信号线分配如图右所示。 DB-25与DB-9型连接器的引脚分配信号完全不同。3. RS-232C的接口信号的接口信号RS-232C标准
83、接口有25条线,其中常用的有如下几条: DSR:数据装置准备好; DTR:数据终端准备好;RTS:请求发送; CTS:允许发送;DCD:接收线信号检出; RI:振铃指示;TXD:发送数据; RXD:接收数据; SGND、PGND:地线,SGND(信号地)、PGND(保护地)。4电平转换电平转换 RS-232C采用负逻辑,为了能够同计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。常用的转换器件是MAX232CPE(16),(完成TTL到EIA的双向电平转换)。 MAX232芯片是Maxim公司生产的低功耗、单电源、双RS-232发送/接收器,可实现
84、TTL到EIA的双向电平转换。其引脚排列如下图所示。 MAX232芯片内部有一个电荷泵,可以把5V电源变换成10V电压,所以采用此芯片的串行通信系统只需要单一的5V电源就可以。这也是它最大的优点。 5. EIA RS-232C5. EIA RS-232C与单片机系统的接口与单片机系统的接口 RS-232C与单片机系统的接口电路如图下所示。MAX232外围的4个电解电容Cl, C2, C3, C4,是内部电源转换所需电容,其取值均为1F/25V,C5为F的去耦电容。MAX232的引脚T1IN, T2IN, R1OUT, R2OUT为接TTL/CMOS电平的引脚,引脚T1OUT, T2OUT, R1IN, R2IN为接RS-232C电平的引脚。 所以,T1IN, T2IN引脚应与MCS-51的串行发送引脚 TXD相 连 接 。 R1OUT, R2OUT应与MCS-51的串行接 收 引 脚 RXD相 连 接 。T1OUT, T2OUT应与PC机的接收端RD相连接。R1IN, R2IN应与PC的发送端TD相连接。 实际设计的电路图如下:作业与练习:3.1 3.3