【文档说明】第6章+MCS-51单片机内部资源及编程课件.ppt,共(107)页,4.198 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45471.html
以下为本文档部分文字说明:
第6章51单片机内部资源及编程第6章MCS-51单片机内部资源及编程6.1并行输入/输出接口6.2定时/计数器接口6.3串行接口6.4中断系统第6章51单片机内部资源及编程6.1并行输入/输出接口MCS-51单片机的内部资源主要有:1、并行I/O口;2、定时器/
计数器;3、串行接口;4、中断系统。6.1.1并行口应用与编程【例5-1】利用单片机的P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应的发光二极管亮或灭。C51语言程序:#include<reg51.h>voidmain(void){unsignedchari
;P0=0xFF;for(;;){i=P0;P1=i;}}只须把P0口的内容读入后,通过P1口输出即可。汇编程序:ORG0100HMOVP0,#0FFHLOOP:MOVA,P0MOVP1,ASJMPLOOPMCS-51P1.7P1.6P1.1P1.0……P0.7P0.6P0.5P0.4P0.
3P0.2P0.1P0.0第6章51单片机内部资源及编程6.2定时/计数器接口定时方法:1、硬件定时:较长时间;不够灵活、方便;2、软件定时:编循环程序,时间精确;占用CPU;3、可编程定时器定时:对系统时钟脉冲记数,灵活方便。计数器有加1计数或减1计数两
种形式。加1计数:计满回0溢出;减1计数:计满回0。第6章51单片机内部资源及编程6.2.1定时/计数器的主要特性1、MCS-51系列中:•51子系列有2个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T
1;•52子系列有3个:还有一个定时/计数器T2。2、每个定时/计数器通过编程设定来实现:•对系统时钟(fosc)计数实现定时;•对外部信号(T0/T1引脚)计数实现计数功能。3、每个定时/计数器都有多种工作方式,通过编程可设
定工作于某种方式。T0有4种工作方式;T1有3种工作方式;T2有3种工作方式。4、每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。第6章51单片机内部资源及编程6.2.2定时/计数器T0、T1的结构及工作原理TH1TL1TH0TL0TCON
TMOD启动启动溢出溢出工作方式工作方式中断请求内部总线TcyT1T0第6章51单片机内部资源及编程加法计数器在使用时注意两个方面:1、由于它是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到
全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有:初值X=最大计数值(满值)M-计数值N在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于n位计数方式时,它的最大计数值(满值)为M
=2n。第6章51单片机内部资源及编程2、当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周期的S5P2时刻对T0(P3.4)或T1(
P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。第6章51单片机内部资源及编程6.2.3定时/计数器的方式和控制寄存
器一.定时/计数器的方式寄存器TMODTMODD7D6D5D4D3D2D1D0(89H)GATEC/TM1M0GATEC/TM1M0←定时器1→←定时器0→其中:C/T:定时或计数方式选择位:当C/T=1时工作
于计数方式:计数引脚T0(T1)输入的负脉冲;当C/T=0时工作于定时方式:计数内部机器周期脉冲。GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。M1、M0为工作方式选择位,用于对T0的4种工作方式,T1的3种工作方
式进行选择,选择情况如下:M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器1028位自动重置定时/计数器1132个8位定时/计数器(只有T0有)第6章51单片机内部资源及编程二.定时/计数器的控制
寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0其中:TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中
断。进入中断处理后由内部硬件电路自动清除。TR1:定时/计数器T1的启动位,可由软件置位或清零:当TR1=1时启动;TR1=0时停止。TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬件使它置位,如中断允许则触发T0中断。进入中断处理后由
内部硬件电路自动清除。TR0:定时/计数器T0的启动位,可由软件置位或清零:当TR0=1时启动;TR0=0时停止。第6章51单片机内部资源及编程5.2.3定时/计数器的工作方式一、方式0方式0是13位的定时/计数方式,
因而最大计数值(满值)为M=213=8192。如计数值为N,则置入的初值X为:X=8192-N如定时/计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000B=E0H,TL0=00011000B=
18H。fosc第6章51单片机内部资源及编程方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。TF1TR1TF0TR0GATEC/TM
1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断1第6章51单片机内部资源及编程二、方式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=18H。振荡器÷12TFx&≥11THxTLx&Tx引脚GATEINTxTRx启动控制C/
T=0C/T=1加1脉冲溢出ETx中断允许中断请求D15D8D7D0(定时)(记数)(8位)(8位)fosc第6章51单片机内部资源及编程16X=2-N方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。TF1TR1TF0TR0GATEC/TM1M0GA
TEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断计数个数与计数初值的关系为:第6章51单片机内部资源及编程三、方式2方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1)
的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发上图中的三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。振荡
器÷12TFx&≥11TLx&Tx引脚GATEINTxTRx启动控制C/T=0C/T=1加1脉冲溢出ETx中断允许中断请求D7D0(定时)(记数)(8位)THx(8位)重装初值控制8fosc第6章51单片机内部资源及编程
由于是8位的定时/计数方式,因而最大计数值(满值)为M=28=256。如计数值为N,则置入的初值X为:X=256-N如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为100111
00B,则TH0=TL0=10011100B。注意:由于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。第6章51单片机内部资源及编程8X=2-N方式2为自动
重装初值的8位计数方式。工作方式2特别适合于用作较精确的脉冲信号发生器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCO
NTMODD0D7D7D0申请中断计数个数与计数初值的关系为:第6章51单片机内部资源及编程四、方式3方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3,方式3的结构如下图。fosc振荡器INT0T0第6章51
单片机内部资源及编程方式3下T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的
中断资源。fosc振荡器INT0T0第6章51单片机内部资源及编程方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。工作方式3将T0分成为两个独立的8位计数器TL0和TH0。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥1
10T0引脚INT0引脚11机器周期TH0TL08位溢出TCONTMODD0D7D0申请中断机器周期8位申请中断溢出第6章51单片机内部资源及编程6.2.4定时/计数器的初始化编程及应用一.定时/计数器的编程MCS-51单片机定时/计数器初始化过程如下:1.根据要求选择方式,确定
方式控制字,写入方式控制寄存器TMOD。2.计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器(TL/TH)。3.开放定时/计数器中断(后面须编写中断服务程序)。4.设置定时/计数器控制寄存器
TCON的值,启动定时/计数器开始工作。5.等待定时/计数时间到,定时/计数到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。第6章51单片机内部资源及编程例:T0运行于定时器状态,时钟振荡周期为12MHz,要求定时100
µs。求不同工作方式时的定时初值C。解:fosc=12MHzT=1µsX=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注意:工作方式0的初值装入方法:
1F9CH=1111110011100B可见,TH0=0FCH,TL0=1CHTL0的低5位TH0的8位MOVTH0,#0FCHMOVTL0,#1CHT=12/fosc第6章51单片机内部资源及编程二.定时/计数器的应用通常利用定时/计数器
来产生周期性的事件。例如:产生周期性波形。思路:利用周期性的定时,定时时间到则对输出端进行相应的处理。如:产生周期性的方波只须定时时间到对输出端取反一次即可。第6章51单片机内部资源及编程【例6-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。500µsGATEC/TM1M0GATEC/TM1M0T1T0第
6章51单片机内部资源及编程汇编程序:ORG0000HLJMPMAINORG000BH;T0中断处理程序CPLP1.0RETIORG0100H;主程序MAIN:MOVTMOD,#02H;选择T0的方式2,定时功能MOVT
H0,#06HMOVTL0,#06HSETBEASETBET0SETBTR0;启动T0SJMP$ENDC语言程序:#include<reg51.h>//包含特殊功能寄存器库sbitP1_0=P1^0;
voidmain(void){TMOD=0x02;TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;while(1);}voidtime0_int(void)interrupt1//中断服务程序{
P1_0=!P1_0;}(1)采用中断处理方式的程序:第6章51单片机内部资源及编程/*--------------------------------------------------------------------------REG51.HHeaderfilefo
rgeneric80C51and80C31microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreser
ved.--------------------------------------------------------------------------*/#ifndef__REG51_H__#define__REG51_H__/*BYTERegister*/sfrP0=0x80;s
frP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x8
9;sfrTL0=0x8A;第6章51单片机内部资源及编程sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/*BITRegister*//*P
SW*/sbitCY=0xD7;sbitAC=0xD6;sbitF0=0xD5;sbitRS1=0xD4;sbitRS0=0xD3;sbitOV=0xD2;sbitP=0xD0;/*TCON*/sbitTF1=0x8
F;sbitTR1=0x8E;sbitTF0=0x8D;sbitTR0=0x8C;sbitIE1=0x8B;sbitIT1=0x8A;sbitIE0=0x89;sbitIT0=0x88;/*IE*/sbitEA=0xAF
;sbitES=0xAC;sbitET1=0xAB;sbitEX1=0xAA;sbitET0=0xA9;sbitEX0=0xA8;/*IP*/sbitPS=0xBC;sbitPT1=0xBB;sbitPX1=0xBA;sbitPT0=0xB9;sbitPX0=0xB8;
/*P3*/sbitRD=0xB7;sbitWR=0xB6;sbitT1=0xB5;sbitT0=0xB4;sbitINT1=0xB3;sbitINT0=0xB2;sbitTXD=0xB1;sbitRX
D=0xB0;/*SCON*/sbitSM0=0x9F;sbitSM1=0x9E;sbitSM2=0x9D;sbitREN=0x9C;sbitTB8=0x9B;sbitRB8=0x9A;sbitTI=0x99;sbitRI=0x98;#endif第6章51单片
机内部资源及编程(2)采用查询方式处理的程序:C语言程序:#include<reg51.h>//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){chari;TMOD=0x02;TH0=0x06;TL
0=0x06;TR0=1;for(;;){if(TF0){TF0=0;P1_0=!P1_0;}//查询计数溢出}}汇编程序:ORG0000HLJMPMAINORG0100H;主程序MAIN:MOVTMOD,#02HMOVT
H0,#06HMOVTL0,#06HSETBTR0LOOP:JBCTF0,NEXT;查询T0计数溢出位SJMPLOOPNEXT:CPLP1.0SJMPLOOPSJMP$END第6章51单片机内部资源及编程如
果定时时间大于65536µs,这时用一个定时/计数器直接处理不能实现,这时可用:1、2个定时/计数器共同处理;2、1个定时/计数器配合软件计数方式处理。【例6-3】设系统时钟频率为12MHz,编程实现从P1.1输出周期为1s的方波。第6章51单片机内部资源及编程这
时应产生500ms的周期定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或T1对T0输出的20ms计数脉
冲计数25次实现。系统时钟12MHz,T0定时10ms,计数值N为10000,只能选方式1,(R2对10ms计数50次)方式控制字为00000001B(01H)。求初值X:X=65536-10000=55536=1101100011110000BTH0=11011000B=D8H,TL0
=11110000B=F0H。P1.180C5120ms定时500ms1个定时器无法直接实现T0定时10msT1计数25次1S1S:1个定时器无法直接实现T0T11s1s每20ms输出1个下降沿计25次分析:第6章51单片机内部资源及编程(1)用寄存
器R2作计数器软件计数,中断处理方式。汇编程序:ORG0000HLJMPMAINORG000BHLJMPINTT0ORG0100HMAIN:MOVTMOD,#01HMOVTH0,#0D8HMOVTL0,#0F0HMOVR2,#00HSETBEASETBET0SE
TBTR0SJMP$INTT0:MOVTH0,#0D8HMOVTL0,#0F0HINCR2CJNER2,#32H,NEXTCPLP1.1MOVR2,#00HNEXT:RETIENDC语言程序:#include<reg51.h>//包含特殊功能寄存器库sbitP1_1
=P1^1;chari;voidmain(){TMOD=0x01;TH0=0xD8;TL0=0xF0;EA=1;ET0=1;i=0;TR0=1;while(1);}voidtime0_int(void)interrupt1//
中断服务程序{TH0=0xD8;TL0=0xF0;i++;if(i==50){P1_1=!P1_1;i=0;}}第6章51单片机内部资源及编程(2)用定时/计数器T1计数实现:T1工作于计数方式时,计数脉冲通过T1(P3.5)输入。T0定时时间到对T1(P3.5
)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次。第6章51单片机内部资源及编程设定时/计数器T1工作于方式2,计数模式,初值X=256-25=231=11100111B=E7H,TH1=TL1=E7H。定时/计数器T0工作于方式1,定时模式,方式控制字为
01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。第6章51单片机内部资源及编程汇编程序如下:ORG0000HLJMPMAINORG000BH;T0中断入口MOVTH0,#0D8HMOVTL0
,#0F0HCPLP3.5RETIORG001BH;T1中断入口CPLP1.1RETIORG0100H;主程序入口MAIN:MOVTMOD,#61HMOVTH0,#0D8HMOVTL0,#0F0HMO
VTH1,#0E7HMOVTL1,#0E7HSETBEA;开总中断SETBET0;允许T0中断SETBET1;允许T1中断SETBTR0;qidongSETBTR1SJMP$ENDC语言程序如下:#include<reg51.h>//包含特殊功能寄存器库sbitP1
_1=P1^1;sbitP3_5=P3^5;voidmain(){TMOD=0x61;TH0=0xD8;TL0=0xF0;TH1=0xE7;TL1=0xE7;EA=1;ET0=1;ET1=1;TR0=1
;TR1=1;while(1);}voidtime0_int(void)interrupt1//T0中断服务程序{TH0=0xD8;TL0=0xF0;P3_5=!P3_5;}voidtime1_int(void)interrupt3//T1中断服务程序{P1_
1=!P1_1;}第6章51单片机内部资源及编程6.3串行接口6.3.1通讯的基本概念一、并行通信和串行通信计算机与外界的通信有两种基本方式:并行通信和串行通信。并行数据传送同步串行异步(用于单片机中)计算机01001001计算机01001001(或外设)D0D1D2D3D4
D5D6D7控制或选通状态计算机计算机(或外设)第6章51单片机内部资源及编程并行数据传送串行数据传送原理各数据位同时传送数据位按位顺序进行优点传送速度快、效率高最少只需一根传输线即可完成:成本低缺点数据位数→传输线根数:成本高速度慢应用传送距离<30米,用于计算机内部几米~几千公里,用于计算
机与外设之间根据信息传送的方向,串行通信可以分为单工、半双工和全双工3种:(a)AB(b)(c)ABABss第6章51单片机内部资源及编程二、同步通信和异步通信串行通信按信息的格式又可分为异步通信和同步通信两种方式。1、串行异步通信方式特点:数据在线路上传送时是以一个字符(字节
)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。传送一个字符又称为一帧信息,传送时每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是5~8位,低位在前,高位在后,数据位后可以带一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位。
格式如图:由于一次只传送一个字符,因而一次传送的位数比较少,对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。第n+1个字符起始位奇偶校验位停止位下一个起始位D2D1D0D3D4D5D6D7数据位D0D10010/10/10/10
/10/10/10/10/10/10/10/1D2……第n个字符空闲“1”第6章51单片机内部资源及编程2、串行同步通信方式串行同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符,
格式如图:同步字符1同步字符2数据块校验字符1校验字符2同步方式时一次连续传送多个字符,传送的位数多,对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。三、波特率波特率是指
串行通信中,单位时间传送的二进制位数,单位为bps。在异步通信中,传输速度往往又可用每秒传送多少个字节来表示(Bps)。它与波特率的关系为:波特率(bps)=1个字符的二进制位数×字符/秒(Bps)例如:每秒传送200个字符,每个字符1位起始位、8个数
据位、1个校验位和1个停止位。则波特率为2200bps。第6章51单片机内部资源及编程异步串行通信的信号形式:1、远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线。方法:通常使
用频率调制法(频带传送方式)。发方收方解调器调制器“0”“1”“0”市话线电平信号频率信号“1”通常:“1”:1270Hz或2225Hz;“0”:1070Hz或2025Hz。第6章51单片机内部资源及编程2、因通信时(
有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错:RS232负逻辑(EIA电平):“0”:+3V—+25V;“1”:-3V—-25V。最大传输信息的长度为15米。TTL正逻辑:“0”:0—2.4V;“1”:3.6V—+5V
;高阻:2.4V—3.6V。TTL电平直接传输距离一般不超过1.5米。RS232负逻辑:“0”:+5V—+15V;“1”:-5V—-15V。最大传输信息的长度为15米。RS-232C(电平转换芯片为MAX232)RS-422RS-4
85第6章51单片机内部资源及编程6.3.2MCS-51单片机串行口功能与结构一.功能MCS-51单片机具有一个全双工的串行异步通信接口,可以同时发送、接收数据,发送、接收数据可通过查询或中断方式处理,使用十分灵活。它有四种工作方式
,分别是方式0、方式1、方式2和方式3。其中:方式0:称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1:8位的异步通信方式,通常用于双机通信。方式2和方式3:9位的异步通信方式,通常用于多机通信。第6章51单片机内部资源及编程三.串行口控制寄
存器SCON(98H)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI其中:SM0、SM1:串行口工作方式选择位。用于选择四种工作方式:SM0SM1方式功能波特率00方式0移位寄存器方式fosc/1201方式1
8位异步通信方式可变10方式29位异步通信方式fosc/32或fosc/6411方式39位异步通信方式可变SM2:多机通信控制位。REN:允许接收控制位,当REN=1,则允许接收;当REN=0,则禁止接收。TB8:发送的第9位数据位,可
用作校验位和地址/数据标识位。RB8:接收的第9位数据位或停止位。TI:发送中断标志位,发送一帧结束,TI=1,必须用软件清零。RI:接收中断标志位,接收一帧结束,RI=1,必须用软件清零。第6章51单片机内部资源及编程9位数据传送时:数据由8
+1位组成,通常附加的一位(TB8/RB8)用于“奇偶校验”。☞奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。换言之:如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。☞奇校验:8位有效数据连同1位附加
位中,二进制“1”的个数为奇数。偶校验:8位有效数据连同1位附加位中,二进制“1”的个数为偶数。第6章51单片机内部资源及编程☞约定接收采用奇校验:若接收到的9位数据中“1”的个数为奇数,则表明接收正确,取出8位有效数据即可;若接收到的9位数据中“1”的个数为
偶数,则表明接收出错!应当进行出错处理。☞约定发送采用奇校验:若发送的8位有效数据中“1”的个数为偶数,则要人为添加一个附加位“1”一起发送;若发送的8位有效数据中“1”的个数为奇数,则要人为添加一个附加位“0”一起发送。采用偶校验时,处理方法与奇校验相反。第6章51单片机内部资源及编程程序状态
字寄存器PSW中有一个奇偶状态位P。PSW.7PSW.0P(PSW.0):奇偶状态位。P=1表示目前累加器中“1”的个数为奇数;P=0表示目前累加器中“1”的个数为偶数;CPU随时监视着Acc的“1”的个数并自动反映在位P。奇偶校验用法:CYA
CF0RS0OVPRS1第6章51单片机内部资源及编程MCS-51单片机串行口由发送数据寄存器、发送控制器、输出控制门、接收数据寄存器、接收控制器、输入移位寄存器等组成。从用户使用的角度,它由三个SFR组成:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄
存器SBUF(串行口数据寄存器),串行口控制寄存器SCON和电源控制寄存器PCON。SBUF(发)SBUF(收)发送控制器TI接收控制器RI移位寄存器波特率发生器T11(门)移位寄存器RXDTXD去申请中断引脚引脚A累加器二.结构第6章51单片机内部资源
及编程四.电源控制寄存器PCON(87H)D7D6D5D4D3D2D1D0SMOD当SMOD位为1,则串行口方式1、方式2、方式3的波特率加倍。第6章51单片机内部资源及编程6.3.3串行口的工作方式一.方式0:同步移位寄存
器方式用于扩展并行I/O接口。1.一帧8位,无起始位和停止位。2.RXD:数据输入/输出端。TXD:同步脉冲输出端,每个脉冲对应一个数据位。3.波特率B=fosc/12如:fosc=12MHz,B=1Mbps,每位数据占1µs。4.发送过程:写入SBUF,启动发送,
一帧发送结束,TI=1。接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。第6章51单片机内部资源及编程发送时序写入SBUFRXD输出TXDTID0D1D2D3D4D5D6D7写REN=1RI=0RXD输入RI接收时序(a)(b)方式0时序图:第6章51单片机
内部资源及编程对于串行输出,采用“低电平送数据,上升沿锁存”方式,即在移位脉冲上升沿串行数据稳定出现在RXD引脚,外部“串入并出”芯片可利用TXD引脚移位脉冲的上升沿锁存数据;第6章51单片机内部资源及编程二.方式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。第6章51单片机内部资源及编程当REN=1,CPU开始采样RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若
第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。第6章51单片机内部资源及编程写入SBUF采样(a)发送时序图TXD数据输出TI
D0D1D2D3D4D5D6D7停止位起始位RXD输入数据(b)接收时序图D0D1D2D3D4D5D6D7停止位起始位RI检测负跳变方式1时序图:第6章51单片机内部资源及编程三.方式2和方式3:9位数据异步
通讯方式1.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。2.RXD:接收数据端,TXD:发送数据端。3.波特率:方式2:B=(2SMOD/64)×fo
sc。方式3:B=(2SMOD/32)×T1溢出率。4.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若RI=0且第9位为1(或SM2=0),将接收数据装入接收SBUF
,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI。第6章51单片机内部资源及编程(a)发送时序图写入SBUFTXD输出TIRXD输入(b)接收时序图RID0D1D2D3D4D5D6TB8停止位起始
位D7D0D1D2D3D4D5D6RB8停止位起始位D7检测负跳变方式2、3时序图:第6章51单片机内部资源及编程6.3.4串行口的编程及应用一.串行口的初始化编程1.串行口控制寄存器SCON位的确定。根据工作方式确定SM0、SM1位;对于方式2和方式3还要确定SM2位;如果是
接收端,则置允许接收位REN为1;如果方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。2.设置波特率。对于方式0,不需要对波特率进行设置。对于方式2,设置波特率仅须对PCON中的SMOD位进行设置。第6章51单片机内部资
源及编程对于方式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)第6章51单片机内部资源及编程小结:计算波特率方式0为固定波特率:B=fosc/12方式2可选两种波特率:B=(2SMOD/64)×fosc方式1、3为可变波特率,用T1作波特率发生器。B=(2SMOD/32)×T1溢出率T1为方式2的时间常数:X=28-t/T溢出时间:t=(2
8-X)T=(28-X)×12/foscT1溢出率=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。第6章51单片机内部资源及编程4种方式比较:方式波特率传送位数发送端接收端用途01/12fosc(固定不变)8(数据)RXD
RXD接移位寄存器,扩充并口12SMOD/32T1溢出率10(起始位、8位数据位、停止位)TXDRXD单机通讯22SMOD/64fosc11(第9位为1:地址;为0:数据)TXDRXD多机通讯32SMOD/32T1溢出率11位(同方式2)TXDRX
D多机通讯第6章51单片机内部资源及编程二.串行口的应用通常用于三种情况:利用方式0扩展并行I/O口;利用方式1实现点对点的双机通信;利用方式2或方式3实现多机通信。1.利用方式0扩展并行I/O口MCS-51单片机的串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输
出口,当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。第6章51单片机内部资源及编程【例6-4】用8051单片机的串行口外接串入并出的芯片CD4094扩展并行输出口控制一组发光二极管,使发光二极管从左至右延时轮流显示。8051RXDTXD
P1.0DATACLKSTBCD4094Q7Q0STB=0:数据串入1:数据并出CD4094是8位的串入并出的芯片,带有一个控制端STB第6章51单片机内部资源及编程分析:当STB=0时,打开串行输入控制门,在时钟信号CLK的控制下,数据从串行
输入端DATA一个时钟周期一位依次输入;当STB=1,打开并行输出控制门,CD4094中的8位数据并行输出。使用时,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DATA,STB用P1
.0控制,8位并行输出端接8个发光二极管。8051RXDTXDP1.0DATACLKSTBCD4094Q7Q0STB=0:数据串入1:数据并出第6章51单片机内部资源及编程设串行口采用查询方式,显示的延时依靠调用延时子
程序来实现。程序如下:汇编程序:ORG0000HLJMPMAINORG0100HMAIN:MOVSCON,#00HMOVA,#01HCLRP1.0START:MOVSBUF,ALOOP:JNBTI,LOOPSETBP1.0ACALLDELA
YCLRTIRLACLRP1.0SJMPSTARTDELAY:MOVR7,#05HLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1DJNZR7,LOOP2RETENDC语言程序:#include<reg51.h>//包含特殊功能寄存器
库sbitP1_0=P1^0;voidmain(){unsignedchari,j;SCON=0x00;j=0x01;for(;;){P1_0=0;SBUF=j;while(!TI){;}P1_0=1
;TI=0;for(i=0;i<=254;i++){;}j=j*2;if(j==0x00)j=0x01;}}设置方式0,并使TI=0移位之前对并行输出端锁存启动数据传输查询数据移位传输是否结束移位结束,并行输出到引脚延迟让灯亮一会准备端口
数据:让下一个灯亮再移位之前对并行输出端锁存设置方式0,并使TI=0移位之前对并行输出端锁存启动数据传输查询数据移位传输是否结束移位结束,并行输出到引脚延迟让灯亮一会准备端口数据:让下一个灯亮8个灯依次亮一个循环后,再来一次循环第6章51单
片机内部资源及编程【例6-5】用8051单片机的串行口外接并入串出的芯片CD4014扩展并行输入口,输入一组开关的信息。CD4014是一块8位的并入串出的芯片,带有一个控制端P/S,当P/S=1时,8位并行数据置入到内部的寄存器;当P/S=
0时,在时钟信号CLK的控制下,内部寄存器的内容按低位在前从QB串行输出端依次输出;使用时,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行数据的置入。8051RXDTXDP1.0QBCLKP/SP1.1K0K7
KCD4014P/S=1:数据并入0:数据串出第6章51单片机内部资源及编程串行口方式0数据的接收,用SCON寄存器中的REN位来控制,采用查询RI的方式来判断数据是否输入。程序如下:汇编程序:ORG0000HLJMPMAINORG0100HMAIN:SETBP1.1;输入前输出1START:
JBP1.1,STARTSETBP1.0CLRP1.0MOVSCON,#10HLOOP:JNBRI,LOOPCLRRIMOVA,SBUF……C语言程序:#include<reg51.h>//包含特殊功能寄存器库sbitP1_0=P1^0;sbitP1_1=P1^
1;voidmain(){unsignedchari;P1_1=1;输入前输出1while(P1_1==1){;}P1_0=1;P1_0=0;SCON=0x10;while(!RI){;}RI=0;i=SBUF;……}查询K闭合?K闭合,加载并行数据加载完毕,开始移位输
入RI=0,REN=1允许接收,方式0接收数据送ACC查询是否接收完毕接收完毕,先RI=0,为下一次接收作准备K没闭合,则等待加载并行数据开始移位RI=0,REN=1允许接收RI!=1说明没有接收完接收数据送ACCRI=0,为
下一次接收作准备第6章51单片机内部资源及编程应用串行口方式0:串行口通过接口74LS164实现:串行→并行的数据转换(显示器接口);通过接口74LS165实现:并行→串行的数据转换。SM0SM1SM
2RENTB8RB8TIRI80C51RXDTXD74LS164...波特率为fosc/12的同步移位脉冲+5V共阳极Q7Q1Q0D(0)74LS164...Q7Q1Q0D(1)74LS164...Q7Q1Q0D(7)(7)(0)(1).........数据低→高串入并出80C51
RXDTXD74LS165...QHS/LCLK(2)数据低→高并入串出P1.0SIN74LS165...QHS/LCLK(1)用于接移位寄存器扩充并口。第6章51单片机内部资源及编程例:显示80C51片内RAM中以30H为首地址的8位字形数
的程序:80C51RXDTXD74LS164...波特率为fosc/12的同步移位脉冲+5V共阳极Q7Q1Q0D(0)74LS164...Q7Q1Q0D(1)74LS164...Q7Q1Q0D(7)(7)(0)(1).........数据低→高串入
并出静态显示电路“0”第6章51单片机内部资源及编程DIR:PUSHACC;保护现场PUSHDPHPUSHDPLMOVR2,#08H;显示8个数MOVR0,#30H;显示缓冲区地址送入R0DL0:MOVA,@R0;取要显示的数作查表偏移量MOVDP
TR,#TAB;指向字形码表首MOVCA,@A+DPTR;查表得字形码MOVSBUF,A;发送显示DL1:JNBTI,DL1;等待发送完一桢数据CLRTI;清标志,准备继续发送INCR0;更新显示单元DJ
NZR2,DL0;重复显示所有数码管POPDPL;恢复现场POPDPHPOPACCRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4DB92H,82H,0F8H,80
H,90H,88H;5,6,7,8,9,ADB83H,0C6H,0A1H,86H,8EH;B,C,D,E,F共阳极程序:第6章51单片机内部资源及编程80C51RXDTXD74LS165...QHS/LCLK(2)数据低→高并入串出P1.0SIN74LS
165...QHS/LCLK(1)例:通过接口74LS165实现:并行→串行的数据转换。第6章51单片机内部资源及编程2)利用方式1实现点对点的双机通信要实现甲与乙两台单片机点对点的双机通信,线路只须将甲
机的TXD与乙机的RXD相连,将甲机的RXD与乙机的TXD相连,地线与地线相连。【例6-6】用汇编语言编程通过串行实现将甲机的片内RAM中30H~3FH单元的内容传送到乙机的片内RAM的40H~4FH单元中。80518051甲机RXDTXDGNDTX
DRXDGND乙机线路连接如图:甲、乙两机都选择方式1:8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。SM0SM1SM2RENTB8RB8TIRI本题假定要传递的数的最高位(第7位)=0。所以无用,因
此用来放奇偶校验位P,相当于偶校验第6章51单片机内部资源及编程由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。则须对定时/计数器T1初始化。设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选
择为方式2,则初值为:初值=256-fosc×2SMOD/(12×波特率×32)=256-12,000,000/(12×1200×32)≈230=E6H根据要求定时/计数器T1的方式控制字为20H。D7D6D5D4D3D2D1D0GATEC/TM1M0
GATEC/TM1M0第6章51单片机内部资源及编程甲机的发送程序:TSTART:MOVTMOD,#20HMOVTL1,#0E6HMOVTH1,#0E6HMOVPCON,#00HMOVSCON,#40
HMOVR0,#30H;首地址MOVR7,#10H;个数SETBTR1LOOP:MOVA,@R0MOVC,PMOVA.7,CMOVSBUF,AWAIT:JNBTI,WAITCLRTIINCR0DJINZR7,LOOPRET乙
机接收程序:RSTART:MOVTMOD,#20HMOVTL1,#0E6HMOVTH1,#0E6HMOVPCON,#00HMOVR0,#40H;首地址MOVR7,#10H;个数SETBTR1LOOP:MOVSCON,#50HWAIT:JNBRI,WA
ITCLRRIMOVA,SBUFMOVC,PJCERROR;C=1跳ANLA,#7FHMOV@R0,AINCR0DJNZR7,LOOPRETERROR:……T1工作在方式2T1定时器赋初值波特率不倍增串口工作在方式1
,8位启动波特率发生器,为串口提供时钟从甲机内存中取一个数取奇偶校验位,送到ACC.7启动发送查询是否法发送完毕发送完毕后,先轻TI,以便下一次发送取数指针加一没有发送完,继续发送T1工作在方式2T1定时器赋
初值波特率不倍增启动波特率发生器,为串口提供时钟串口工作在方式1,REN=1,RI=0查询是否有数据接收接收数据1的个数为偶数,说明传输错误数据正确,则把最高位去掉保存第6章51单片机内部资源及编程6-7用C语言编程实现双机通信甲乙两机都选择方式1:8位异步
通信方式,波特率为1200bps,甲机,乙机都要即发送也接收,因此甲机的串口控制字为50H,乙机的串口控制字为50H。通信约定:1)甲先发送命令字AA,乙收到后发送BB应答2)甲收到BB后,连续发送10个字节数据(在buf[10]中)
,然后发送一个和校验字节,紧接着进入接收状态。3)乙发送完BB后,进入接收状态,当收到11个字节(包括10个数据和1个字节的校验和)后,比较10个数据的校验和与接收到的最后1个校验字节是否相等,如果校验正确,则向甲发送00H,表示接收正确,否则发送FF,表示接收错误,要求对方重发。然后再
次进入接收状态。4)甲接收到字节FF(表示对方接收数据错误)后,重新发送数据,如果收到00,退出发送程序。第6章51单片机内部资源及编程甲程序:#include<reg51.h>unsignedcharidatabuf
[10];unsignedcharpf;voidmain(void){unsignedchari;TMOD=0x20;TL1=0xe6;TH1=0xe6;PCON=0x00;TR1=1;SCON=0x50;do{SBUF=0xaa;while(TI
==0);TI=0;while(RI==0);RI=0;}while((SBUF^0xbb)!=0));do{Pf=0;For(i=0;i<10;i++){SBUF=bif[i];pf+=buf[i];while(TI==0);TI=0;}SBUF=pf;while(TI==0);TI
=0;While(RI==0);RI=0;}while(SBUF!=0);}串口方式1,1200bps,初始化发送联络信号等待对方应答若收到的数据不是bb,重新发送AA联络信号发送1个字节数据计算校验和发送校验和等待对方应答应答错重发第6章51单片机内部资源及编程乙程序:#include<reg
51.h>unsignedcharidatabuf[10];unsignedcharpf;voidmain(void){unsignedchari;TMOD=0x20;TL1=0xe6;TH1=0xe6;PCON=0x00;TR1=1;SC
ON=0x50;do{while(RI==0);RI=0;}while((SBUF^0xaa)!=0));SBUF=0xbb;while(TI==0);TI=0;while(1){Pf=0;For(i=0;i<10;i++){while(RI==0);RI=0;buf[i]=SBUF
;pf+=buf[i];}while(RI==0);RI=0;if((SBUF^pf)==0){SBUF=0x00;break;}else{SBUF=0xff;while(TI==0);TI=0;}}}串
口方式1,1200bps,初始化等待甲发送数据请求命令发送应答信号:请求允许连续接收10字节,并计算校验和然后接收校验字节比较检验和校验正确发送0,退出while循环校验错误发送ff,不退出while循环第6章51单片机内部资源及编程3.多机通信通过MCS-51单片机串行口能够实现
一台主机与多台从机进行通信,主机和从机之间能够相互发送和接收信息。但从机与从机之间不能相互通信。51串口的方式2和3是9位异步通信,发送时,数据的第9位由TB8取得。接收的第9位放于RB8中,接收是否有效受SM2位影响:当SM2=0时,无论接收的RB8位是0还是
1,接收都有效,RI都置1;当SM2=1时,只有接收的RB8位等于1时,接收才有效,RI才置1。利用这个特性便可以实现多机通信。第6章51单片机内部资源及编程多机通信时,主机每一次都向从机传送两个字节信息,先传送从机的地址信息,再传送数据信息,
处理时,地址信息的TB8位设为1,数据信息的TB8位设为0。第6章51单片机内部资源及编程多机通信过程如下:(1)所有从机的SM2位开始都置为1,都能够接收主机送来的地址。(2)主机发送一帧地址信息,包含8位的从机地址,TB8置1,表示发送的为地址帧。(3)由
于所有从机的SM2位都为1,从机都能接收主机发送来的地址,从机接收到主机送来的地址后与本机的地址相比较,如接收的地址与本机的地址相同,则使SM2位为0,准备接收主机送来的数据,如果不同,则不作处理。第6章51单片机内部资源及编程(4)主机发送数据,发送数据时TB8置为0,表示
为数据帧。(5)对于从机,由于主机发送的第9位TB8为0,那么只有SM2位为0的从机可以接收主机送来的数据。这样就实现主机从多台从机选择一台从机进行通信了。第6章51单片机内部资源及编程6.4中断系统6.4
.1中断的基本概念一、中断概念某人看书执行主程序中断过程电话铃响中断信号INTx=0中断请求暂停看书暂停执行主程序中断响应书中作记号当前PC值入栈保护断点电话谈话执行中断程序中断服务继续看书返回主程序中
断返回日常事务程序中断服务程序第6章51单片机内部资源及编程二、两类中断1.可屏蔽中断:可程控“开中断/关中断”。软件设置允许/禁止CPU响应中断。2.非屏蔽中断:不可程控“关中断”。有中断请求信号,CPU必须响应。INTR(InterruptRequest):可屏蔽中断请求NMI
(Non-MaskableInterrupt):非屏蔽中断INTXNMI微型机第6章51单片机内部资源及编程引起CPU中断的根源,称为中断源。中断源如向CPU提出中断请求,若被响应,CPU就暂时中断原来的事件A,转去处理事件B。对事件B处理完毕后,再回到原来
被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。主程序A响应返回断点RETI„„中断服务程序B事件B第6章51单片机内部资源及编程三、MCS-51中断系统的逻辑结构2、中断允许控制:总允许开关:EA
;源允许开关:ES、ET1、EX1、ET0、EX0。3、2级中断优先级控制:优先级选择开关:PS、PT1、PX1、PT0、PX0。1、中断源信号:2个外部中断源信号:INT0、INT1;2个定时器T0、T1溢出中断请求
:TF0、TF1;1个串行口数据发送、接收结束中断请求:TI、RI。EX0EAPX001ET0PT001EX1PX101ET1PT101ESPS01≥1RITISCONTCONIE0TF0IE1TF110101IT0IT1IN
T0INT1T0T1RXDTXDIEIP1111111硬件查询自然优先级自然优先级中断入口中断入口高级低级中断源中断源第6章51单片机内部资源及编程一、中断源能发出中断请求信号的各种事件。如I/O设备、定时时钟、系统故障、软件设定等。有3类共5个中断:1、外中断
2个:INT0、INT1由引脚INT0(P3.2)和INT1(P3.3)引入。2、定时中断2个:T0、T1无引入端,请求在芯片内部发生。以记数溢出信号作为中断请求,去置位一个溢出标志位。3、串行中断1个:RI/TI无引入端,请求在芯片内部发生。接收或发送完一帧串行数据
时,就产生一个中断请求。6.4.2MCS-51单片机的中断系统第6章51单片机内部资源及编程TCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0IT0(IT1)
:外部中断0(或1)触发方式控制位。IT0(或IT1)=0:外部中断为电平触发方式;IT0(或IT1)=1:外部中断为边沿触发方式。IE0(IE1):外部中断0(或1)的中断请求标志位。1.外部中断INT0和INT1外部引脚P3.2和P3.3输入,有
两种触发方式:电平触发及跳变(边沿)触发。由特殊功能寄存器TCON来管理。第6章51单片机内部资源及编程①在电平触发方式时:CPU在每个机器周期的S5P2采样P3.2(或P3.3):若P3.2(或P3.3)引脚为高电平:IE0(IE1)清0;若P3.2(或P3.3)引脚为低电平:I
E0(IE1)置1,向CPU请求中断。CPU响应后不能由硬件自动将IE0(或IE1)清零。②在边沿触发方式时:若第一个机器周期采样到P3.2(或P3.3)引脚为高电平,第二个机器周期采样到P3.2(或P3.3)引脚为低电平时,由IE0(或IE1)置1,向CP
U请求中断。CPU响应后由硬件自动将IE0(或IE1)清零第6章51单片机内部资源及编程2.定时/计数器T0和T1中断当定时/计数器T0(或T1)溢出时,由硬件置TF0(或TF1)为“1”,向CPU发送中断请求,当CPU响应中断后,将由硬件自动清除TF0(或TF1)。3.串行口中断MCS-5
1的串行口中断源对应两个中断标志位:串行口发送中断标志位TI和串行口接收中断标志位RI。无论哪个标志位置“1”,都请求串行口中断,到底是发送中断TI还是接收中断RI,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清“0”,必须由软件对TI或
RI清“0”。第6章51单片机内部资源及编程寄存器名称D7D6D5D4D3D2D1D0TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0定时器控制寄存器位地址8FH8EH8DH8CH8BH8AH89H88HSC
ON(98H)TIRI串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98HIE(A8H)EA——ESET1EX1ET0EX0中断允许寄存器位地址AFHACHABHAAHA9HA8HIP
(B8H)———PSPT1PX1PT0PX0中断优先级寄存器位地址BCHBBHBAHB9HB8H2.外部中断触发方式选择位:IT0、IT1=1:负边沿触发中断请求;=0:低电平触发中断请求。1.中断标志位:TF1、TF0
、IE1、IE0、RI、TI登记各中断源请求信号:=1,有中断请求;=0,无中断请求。CPU响应中断后,该中断标志自动清零。TI、RI标志必须软件清零。第6章51单片机内部资源及编程3.中断允许控制位:EA、ES、ET
1、EX1、ET0、EX0=1开中断;=0关中断。例:允许CPU响应INT0的中断请求。SETBEX0SETBEA寄存器名称D7D6D5D4D3D2D1D0TCON(88H)TF1TR1TF0TR0IE1IT1IE0I
T0定时器控制寄存器位地址8FH8EH8DH8CH8BH8AH89H88HSCON(98H)TIRI串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98HIE(A8H)EA——ESET1EX1ET0E
X0中断允许寄存器位地址AFHACHABHAAHA9HA8HIP(B8H)———PSPT1PX1PT0PX0中断优先级寄存器位地址BCHBBHBAHB9HB8H4.中断优先级控制位:PS、PT1、PX1、PT0、PX02级优先级:=1为高优先级;=0为低优先级。同一优先
级别按内部查询顺序排列优先级:高INT0、T0、INT1、T1、TI/RI低。三、优先级控制二、中断允许控制第6章51单片机内部资源及编程通过中断优先级寄存器IP改变中断源的优先级顺序可以实现两个方面的功能:改变系统中断源的优先权顺序和实现二级中断嵌套。000BHTF0定时/计数器0(T
0)002BHTF2定时/计数器2(T2)0023HRI/TI串行口接收/发送001BHTF1定时/计数器1(T1)0013HIE1外部中断1(INT1)0003HIE0外部中断0(INT0)中断优先
级中断矢量申请标志中断源最高优先级最低优先级第6章51单片机内部资源及编程对于中断优先权和中断嵌套,MCS-51单片机有以下三条规定。(1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才
响应新的中断请求。(2)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。(3)CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。第6章51单片机内部资源及编程五、中断响应1、中断响应的条件(1)
无同级或高级中断正在处理;(2)现行指令执行到最后一个机器周期且已结束;(3)若现行指令为RETI或访问IE、IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。中断响应阻断:(1)CPU正处在为一个同级或高级的中断服务中。即当有同
级或高级中断服务。(2)查询中断请求的机器周期不是当前指令的最后一个机器周期。即当CPU未执行完一条指令。(3)当前执行返回指令RET/RETI或访问IE、IP的指令后,不能立即响应中断,还应再执行一条指令,然后才能响应中断。程序单步执行就是利用此原理,借助单片机的外部中断功能来实现的。第6章51
单片机内部资源及编程单步工作方式:按一次键执行一条主程序的指令。1、建立单步执行的外部控制电路。ORG0000HSJMPSTARTORG0003H;中断程序JNBP3.2,$;=0则“原地踏步”JBP3.2,$;=1则“原地踏步”RETISTART:MOVIE,#81H;主程序MOVTCON,#
00HLOOP:INCAMOVP1,ASJMPLOOPEND入口返回YNP3.2=0?P3.2=1?NYINT0中断服务程序流程图开始N允许INT0中断低电平引起中断A←A+1P1←A主程序流程图&&80C51INT0+
5VK74LS002、编写外部中断的中断服务程序(INT0低电平有效):第6章51单片机内部资源及编程2、中断响应过程1、中断查询:单片机在每个机器周期的S5P2期间,按优先级顺序对中断请求标志位进行查询,即先查询高级
中断后再查询低级中断,同级中断按“INT0→T0→INT1→T1→RI/TI”的顺序查询。在S6时找到中断源,如果查询到有标志位为“1”,则表明有中断请求发生,接着就从相邻的下一个机器周期的S1状态开始进行中断响应。中断请求随机发生,CPU无法预先得知,因此在程序执行过程中,中断查询要在指令执行
的每个机器周期中不停地重复进行。第6章51单片机内部资源及编程2、中断响应:当查询到有效的中断请求时,就进行中断响应。其主要内容:1、相应的优先级状态触发器置位;2、保护断点3、清除内部硬件可清除的中断请求标志位(IE0,IE1,
TF0,TF1);4、中断服务程序入口地址送PC。中断源INT0T0INT1T1RI/TI中断入口地址0003H000BH0013H001BH0023H各中断源中断服务程序的入口地址如右表:第6章51单片机内部资源及编程3、中断响应时间每个机器周期的最后一个状态(S6)采样中
断标志位,若有中断请求,将在下一个机器周期的第一个状态(S1)按优先级顺序进行中断查询。中断响应时间:正常中断响应时间为3~8个机器周期,如果有同级或高级中断服务,将延长中断响应时间。3T:中断请求标志查询:1T产生、执行LCALL:2T8T:执行RET/RETI(访问IP/IE):
2T主程序中MUL/DIV指令:4T执行LCALL指令:2T第6章51单片机内部资源及编程4、中断请求的撤消中断响应后,TCON或SCON中的中断请求标志应及时清除,否则就意味着中断请求仍然存在。①定时中断硬件自动撤除定时:中断响应后,
硬件自动把标志位(TF0/TF1)清0,因此定时中断的中断请求是硬件自动撤除的,不需用户干预。②脉冲方式(下降沿触发中断)外部中断请求的撤消:硬件自动撤除。外部中断的撤消包括两项内容:(1)中断标志位的置“0”:中断响应后由硬件电路自动完成;(2)
外中断请求信号的撤消:随脉冲信号过后消失随即自动撤消。第6章51单片机内部资源及编程③电平方式外部中断请求的撤消:通过软件使标志位(IE0或IE1)清0。电平请求方式光靠清除中断标志,并不能彻底解决中断请求的撤除
问题。需在中断响应后把中断请求输入端从低电平强制改为高电平。D触发器的直接置位端SD(得到负脉冲)ANLP1,#0FEH;P1输出低电平:ORLP1,#01H;P1输出高电平80C51直接置位端第6章51单片机内部资源及编程④串行中断请求的
撤除:由软件方法完成串行中断的标志位是TI和RI,但对这两个中断标志不进行自动清0。因为在中断响应后还需测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行中断请求的撤除也应使用软件方法,在中断服务程序中,需由用户完成。第6章51单片机内部资源及编程6
.4.3MCS-51中断系统的应用【例6-9】某工业监控系统,具有温度、压力、PH值等多路监控功能,中断源的连接如图6.26所示。对于PH值,在小于7时向CPU申请中断,CPU响应中断后使P3.0引脚输出高电平,经驱动,使加碱管道电磁阀接通1秒钟,以调整PH值。电磁阀P3.
2INT0P3.08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7QRDCLK温度1超限温度2超限PH值超限压力超限+5V第6章51单片机内部资源及编程电磁阀P3.2INT0P3.080
51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7QRDCLK温度1超限温度2超限PH值超限压力超限+5V系统监控通过外中断INT0来实现,多个中断源处理时往往通过中断加查询的方法。中断源通过“线或”接于INT0上。那么无论
哪个中断源提出请求,系统都会响应中断,进入中断服务程序,在中断服务程序中通过对P1口线的逐一检测来确定哪一个中断源提出了中断请求,进一步转到对应的中断服务程序入口位置执行对应的处理程序。高电平的时间不固定ABCD第6章51单片机内部资源及编程汇编程序如下:(只涉及中断程序,注意外中断IN
T0中断允许,且为电平触发。)电磁阀P3.2INT0P3.08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7QRDCLK温度1超限温度2超限PH值超限压力超限+5V直接复位端这里只对PH<7时的中断构造了相应的中断服务程序INT02,接通电磁
阀延时1秒钟的延时子程序DELAY已经构造好了,只须调用即可。第6章51单片机内部资源及编程ORG0003H;外部中断0中断服务程序入口JBP1.0,INT00;查询中断源,转对应的中断服务子程序JBP1.1,INT01JBP1.2
,INT02JBP1.3,INT03ORG0080H;PH值超限中断服务程序INT02:PUSHPSW;保护现场PUSHACCSETBPSW.3;工作寄存器设置为1组,以保护原0组的内容SETBP3.0;接通加碱管道电磁阀ACALLDELAY;调延时1秒子程序CLRP3.0
;1秒钟到关加碱管道电磁阀ANLP1,#0BFH;10111111ORLP1,#40H;这两条用来产生一个P1.6的负脉冲,用来撤除PH<7的中断请求POPACCPOPPSWRETIRETI=RET指令+通知CPU中断服务已结束(复位优先级触发器)第6章51单片
机内部资源及编程C语言程序:#include<reg51.h>sbitP10=P1^0;sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;sbitP16=P1^6;sbitP30=P3^0;voidint0()interrupt0us
ing1{voidint00();//温度1voidint01();//温度2voidint02();//PHvoidint03();//压力if(P10==1){int00();}//查询调用对应的函数elseif(P11==1){int01();}el
seif(P12==1){int02();}elseif(P13==1){int03();}}voidint02(){unsignedchari;P30=1;for(i=0;i<255;i++);P30=0;P16=0;P16=1;//撤销中断条件}第6章51单片机内部资源及编程【
例6-10】利用定时/计数器中断抗干扰防死机。利用定时/计数器防止死机:先估算出系统主程序执行一次循环所需要的时间t1,然后设置定时/计数器的定时时间为t2,其中t2略大于t1。在主程序的循环部分包括对定时/计数器初始化。如果系统正常运行,则由于定时时间t2比t1大,所以定时还未到时,主程序
已完成一次循环,定时器被重新初始化,定时时间始终不会到,定时/计数器不会溢出中断;第6章51单片机内部资源及编程只有当系统受干扰死机,主程序不能被重新执行,定时/计数器不会被重新初始化,则经过时间t2后,定时时间到,溢出中断,中断后由硬件实现转到中断服务程序。如果用户在中断服
务程序中安排回到主程序中的命令,那么系统可以重新运行主程序,这就达到了防止死机的目的。第6章51单片机内部资源及编程设选择定时/计数器T0,方式2,定时。方式控制字为02H,初值为YYH,由于C语言处理不方便,只编写了汇编程
序:中断服务程序:ORG000BHAJMPINTT0INTT0:POPACCPOPACCMOVA,#MAINADRLPUSHACCMOVA,#MAINADRHPUSHACCRETI主程序:MAIN:MOVTMOD,#20HMOVTL0,#YYHMO
VTH0,#YYHSETBET0SETBPT0SETBEASETBTR0……功能程序段……LJMPMAIN