1、1.每行代码的含义每行代码的含义?SETB PT1SETB PX0CLR PSSETB ET1SETB EX0CLR IT0 SETB EA3.(A)=20H,(B)=40H执行以下程序后执行以下程序后(A)=?(B)=?PUSH APUSH BPOP APOP B 2.ORG 2000HADD A,#2NOP MOVC A,A+PCNOPRETTAB:DB Y,Y,Y问问(PC)为多少为多少?作业评讲作业评讲P113-1,2P96-7,8ORG 0000HMOV 20H,#0AHLOOP2:JB P3.若前后两次读的(THX)有变化,则再重复上述过程,这次重复读得的内容就应是正确的。LOOP
2、1:JNB TF0,LOOP1 ;MOV 42H,AT1定义为方式2定时。CLR TR1;MAIN:MOV TMOD,#27H;SETB ET089C51有一个全双工的串行接口,两个物理上独立地接收和发送缓冲器,可同时收、发数据,内部结构如下图。因为:(216-X)210-6=10-1MOV TH0,#3CH2 特殊功能寄存器PCONdata为波特率常数6.4 6.4 定时器定时器/计数器的编程和应用计数器的编程和应用 4 4种工作方式中,方式种工作方式中,方式0 0与方式与方式1 1基本相同,由于方式基本相同,由于方式0 0是为兼容是为兼容MCS-48MCS-48而设,初值计算复杂,在实际应
3、用而设,初值计算复杂,在实际应用中,一般不用方式中,一般不用方式0 0,而采用方式,而采用方式1 1。6.4.1 6.4.1 方式方式1 1应用应用 例例6-16-1 假设系统时钟频率采用假设系统时钟频率采用6 6MHzMHz,要在上输出一个要在上输出一个周期为周期为2 2msms的方波,如图所示。的方波,如图所示。方波的周期用方波的周期用T0T0来确定,让来确定,让T0T0每隔每隔1 1msms计数溢出计数溢出1 1次,次,既既T0T0每隔每隔1 1msms产生一次中断产生一次中断,CPUCPU相应中断后,在中相应中断后,在中断服务程序中对取反。断服务程序中对取反。(1)(1)计算初值计算初
4、值X X 设初值为设初值为X X,则有则有:(2(21616-X)210X)210-6-6=110=110-3-3 2 21616-X=500 X=65036-X=500 X=65036 X X化为化为1616进制,即进制,即 所以,所以,T0T0的初值为:的初值为:TH0=0FEH TL0=0CHTH0=0FEH TL0=0CH(2)(2)初始化程序设计初始化程序设计 主要是对寄存器主要是对寄存器IPIP、IEIE、TCONTCON、TMODTMOD的相应位进行正的相应位进行正确设置,将计数初值送入定时器中。确设置,将计数初值送入定时器中。(3)(3)程序设计程序设计 中断服务程序除了完成要
5、求的产生方波这一工作之外,中断服务程序除了完成要求的产生方波这一工作之外,还要注意将计数初值重新装入定时器中,为下一次还要注意将计数初值重新装入定时器中,为下一次产生中断作准备。产生中断作准备。参考程序:参考程序:ORG 0000HORG 0000HRESET:AJMP MAIN RESET:AJMP MAIN ;转主程序转主程序 ORG 000BH ORG 000BH ;T0T0的中断入口的中断入口 AJMP IT0P AJMP IT0P ;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 0100H ORG 0100HMAIN:MOV SP,#60H MAIN:MOV SP,#
6、60H ;设堆栈指针设堆栈指针 MOV TMOD,#01HMOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 ACALL PT0M0ACALL PT0M0;调用子程序调用子程序PT0M0PT0M0HERE:AJMP HEREHERE:AJMP HERE ;自身跳转自身跳转PT0M0:MOV TL0,#0CHPT0M0:MOV TL0,#0CH;T0T0中断服务程序,中断服务程序,T0T0重新置初值重新置初值 MOV TH0,#0FEH MOV TH0,#0FEH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断
7、 SETB EA SETB EA ;CPUCPU开中断开中断 RETRETITOP:MOV TL0,#0CH ITOP:MOV TL0,#0CH ;T0T0中断服务子程序,中断服务子程序,T0T0置初值置初值 MOV TH0,#0FEHMOV TH0,#0FEH的状态取反的状态取反 RETIRETI查询方式的参考程序查询方式的参考程序:MOV TMOD,#01H MOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 SETB TR0 SETB TR0 ;接通接通T0T0LOOP:MOV TH0,#0FEH LOOP:MOV TH0,#0FEH ;T0T0置初值置初值 MOV TL0
8、,#0CH MOV TL0,#0CHLOOP1LOOP1:JNB TF0,LOOP1 JNB TF0,LOOP1 ;查询查询TF0TF0标志标志 CLR TR0 CLR TR0 ;T0T0溢出,关闭溢出,关闭T0T0的状态求反的状态求反 SJMP LOOP SJMP LOOP例例6-26-2 假假设设系系统统时时钟钟为为6 6MHzMHz,编编写写定定时时器器T0T0产产生生1 1秒秒定时的程序。定时的程序。(1 1)T0T0工作方式的确定工作方式的确定因定时时间较长,采用哪一种工作方式?因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:由各种工作方式的特性,可计算出:msm
9、s;ms;ms;方式方式2 2最长可定时最长可定时512512 s s。选方式选方式1 1,每隔,每隔100100msms中断一次,中断中断一次,中断1010次为次为1 1s s。(2 2)计算计数初值)计算计数初值因为:因为:(2(21616-X)210X)210-6-6=10=10-1-1所以:所以:X=15536=3CB0HX=15536=3CB0H因此:因此:TH0=3CHTH0=3CH,TL0=B0H TL0=B0H(3 3)1010次计数的实现次计数的实现对于中断对于中断1010次计数,可使次计数,可使T0T0工作在计数方式,也可工作在计数方式,也可用循环程序的方法实现。本例采用循
10、环程序法。用循环程序的方法实现。本例采用循环程序法。(4 4)程序设计)程序设计 参考程序参考程序:ORG 0000HORG 0000HRESETRESET:LJMP MAIN LJMP MAIN ;上电,转主程序入口上电,转主程序入口MAINMAIN ORG 000BHORG 000BH ;T0T0的中断入口的中断入口 LJMP IT0PLJMP IT0P;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 1000HORG 1000H MAIN MAIN:MOV SP,#60H MOV SP,#60H;设堆栈指针设堆栈指针 MOV B,#0AH MOV B,#0AH ;设循环次数
11、设循环次数1010次次 MOV TMOD,#01H MOV TMOD,#01H ;设设T0T0工作在方式工作在方式1 1 MOV TL0,#0B0H MOV TL0,#0B0H ;给给T0T0设初值设初值 MOV TH0,#3CHMOV TH0,#3CH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 SETB EA SETB EA ;CPUCPU开放中断开放中断 HERE HERE:SJMP HERE SJMP HERE ;等待中断等待中断 ITOPITOP:MOV TL0,#0B0H MOV TL0,#0B0H;T0T
12、0中断子程序,重装初值中断子程序,重装初值 MOV TH0,#3CH MOV TH0,#3CH ;DJNZ B DJNZ B,LOOPLOOP CLR TR0 CLR TR0 ;1s1s定时时间到,停止定时时间到,停止T0T0工作工作 LOOP LOOP:RETI RETI 6.4.2 6.4.2 方式方式2 2的应用的应用省省去去程程序序中中重重装装初初值值的的指指令令,并并可可产产生生相相当当精精确确的的定定时时时间。时间。例例6-36-3 当当T0T0(P3.4P3.4)引引脚脚上上发发生生负负跳跳变变时时,从从引引脚脚上上输输出出一一个个周周期期为为1 1msms的的方方波波,如如图图
13、所所示示。(系系统统时时钟钟为为6 6MHzMHz)(1 1)工作方式选择)工作方式选择T0T0为方式为方式1 1计数,初值计数,初值 0 0FFFFHFFFFH,即外部计数输入端即外部计数输入端T0T0(P3.4P3.4)发生一次负跳变时,发生一次负跳变时,T0T0加加1 1且溢出,溢出且溢出,溢出标志标志TF0TF0置置“1”“1”,发中断请求。在进入,发中断请求。在进入T0T0中断程序中断程序后,把后,把F0F0标志置标志置“1”“1”,说明,说明T0T0引脚上已接收了负跳引脚上已接收了负跳变信号。变信号。T1T1定义为方式定义为方式2 2定时。在定时。在T0T0引脚产生一次负引脚产生一
14、次负跳变跳变后,后,启动启动T1T1每每500500 s s产生一次中断,在中断服务程序中对求产生一次中断,在中断服务程序中对求反,使产生周期反,使产生周期1 1msms的方波。的方波。(2 2)计算)计算T1T1初值初值设设T1T1的初值为的初值为X X:则则 (2(28 8-X)210X)210-6-6=510=510-4-4 X=2 X=28 8-250=6=06H-250=6=06H(3 3)程序设计程序设计 ORG 0000H ORG 0000H RESET:LJMP MAIN RESET:LJMP MAIN ;复位入口转主程序复位入口转主程序 ORG 000BHORG 000BH
15、JMP IT0P JMP IT0P ;转转T0T0中断服务程序中断服务程序 ORG 001BHORG 001BH LJMP IT1P LJMP IT1P ;转转T1T1中断服务程序中断服务程序 ORG 0100HORG 0100HMAIN:MOV SP,#60HMAIN:MOV SP,#60H ACALL PT0M2 ACALL PT0M2;调用对调用对T0T0,T1T1初始化子程序初始化子程序LOOP:MOV C,F0 LOOP:MOV C,F0 ;T0T0产生过中断了吗,产生过产生过中断了吗,产生过 中断,则中断,则F0=1F0=1 JNC LOOP JNC LOOP;T0T0没有产生过中
16、断,则跳到没有产生过中断,则跳到 LOOPLOOP,等待等待T0T0中断中断 SETB TR1 SETB TR1 ;启动启动T1T1 SETB ET1 SETB ET1 ;允许允许T1T1中断中断HERE:AJMP HEREHERE:AJMP HERE PT0M2:MOV TMOD,#26H PT0M2:MOV TMOD,#26H;初始化,初始化,T1T1为方式为方式2 2定定 时,时,T0T0为方式为方式1 1计数计数 MOV TL0,#0FFH MOV TL0,#0FFH;T0T0置初值置初值 MOV TH0,#0FFHMOV TH0,#0FFH SETB TR0 SETB TR0 ;启动
17、启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 MOV TL1,#06H MOV TL1,#06H ;T1T1置初值置初值 MOV TH1,#06HMOV TH1,#06H CLR F0 CLR F0;把把T0T0已发生中断标志已发生中断标志F0F0清清0 0 SETB EASETB EA RETRET IT0P:CLR TR0 IT0P:CLR TR0;T0T0中断服务程序,停止中断服务程序,停止T0T0计数计数 SETB F0 SETB F0;建立产生中断标志建立产生中断标志 RETIRETIIT1P:CPL P1.0IT1P:CPL P1.0;T1T1中断服
18、务,位取反中断服务,位取反 RETI RETI在在T1T1定时中断服务程序定时中断服务程序IT1PIT1P中,省去了中,省去了T1T1中断服务程中断服务程序中重新装入初值序中重新装入初值0606H H的指令。的指令。例例6-46-4 利用利用T1T1的方式的方式2 2对外部信号计数,对外部信号计数,要求每计满要求每计满100100个数,将取反。个数,将取反。本例是本例是方式方式2 2计数模式计数模式的应用。的应用。(1 1)选择工作方式)选择工作方式 外部信号由外部信号由T1(P3.5)T1(P3.5)脚输入脚输入,每发生一次负跳变计数每发生一次负跳变计数器加器加1 1,每输入,每输入1001
19、00个脉冲,计数器产生溢出中断,个脉冲,计数器产生溢出中断,在中断服务程序中将取反一次。在中断服务程序中将取反一次。T1 T1 方式方式2 2的控制字为的控制字为TMOD=60HTMOD=60H。不使用不使用T0T0时,时,TMODTMOD的的低低4 4位可任取,但不能使位可任取,但不能使T0T0进入方式进入方式3 3,这里取全,这里取全0 0。(2 2)计算)计算T1T1的初值的初值X=2X=28 8-100=156=9CH-100=156=9CH 因此,因此,TL1TL1的初值为的初值为9 9CHCH,重装初值寄存器重装初值寄存器TH1=9CHTH1=9CH(3 3)程序设计程序设计 OR
20、G 0000HORG 0000HLJMP MAINLJMP MAINORG 001BHORG 001BH;T1T1中断服务程序入口中断服务程序入口 位取反位取反 RETIRETI ORG 0100HORG 0100H MAIN:MAIN:MOV TMOD,#60H MOV TMOD,#60H;设设T1T1为方式为方式2 2计数计数 MOV TL0,#9CH MOV TL0,#9CH ;T0T0置初值置初值 MOV TH0,#9CH MOV TH0,#9CH SETB TR1SETB TR1 ;启动启动T1T1 HERE:HERE:AJMP HEREAJMP HERE6.4.3 6.4.3 方式
21、方式3 3的应用的应用T0 T0 方式方式3 3时,时,TL0TL0和和TH0TH0被分成两个独立的被分成两个独立的8 8位定时器位定时器/计数器。其中,计数器。其中,TL0TL0:8 8位定时器位定时器/计数器;计数器;TH0 TH0:8 8位定时器。位定时器。当当T1T1作串行口波特率发生器时,作串行口波特率发生器时,T0T0才设置为方式才设置为方式3 3。例例6-56-5 假设某假设某MCS-51MCS-51应用系统的两个外中断源已被占应用系统的两个外中断源已被占用,设置用,设置T1T1工作在方式工作在方式2 2,作波特率发生器用。现要,作波特率发生器用。现要求增加一个外部中断源,并控制
22、引脚输出一个求增加一个外部中断源,并控制引脚输出一个5 5kHzkHz的的方波。设系统时钟为方波。设系统时钟为6 6MHzMHz。(1 1)选择工作方式)选择工作方式TL0TL0为为方方式式3 3计计数数,把把T0T0引引脚脚(P3.4P3.4)作作附附加加的的外外中中断断输输入入端端,TL0TL0初初值值设设为为0 0FFHFFH,当当检检测测到到T0T0引引脚脚电电平平出出现现负负跳跳变变时时,TL0TL0溢溢出出,申申请请中中断断,这这相相当当于于跳跳沿沿触触发发的外部中断源。的外部中断源。TH0TH0为为8 8位位方方式式3 3定定时时,控控制制输输出出5 5kHzkHz的的方方波波信
23、信号号。如如图图所示。所示。(2 2)初值计算)初值计算TL0TL0的初值设为的初值设为0 0FFHFFH。5kHz5kHz的方波的周期为的方波的周期为200200 s s,TH0TH0的定时时间为的定时时间为100100 s s。TH0TH0初值初值X X计算如下:计算如下:(2(28 8-X)210X)210-6-6=110=110-4-4 X=2 X=28 8-100=156=9CH-100=156=9CH(3 3)程序设计)程序设计 ORG 0000HORG 0000H LJMP MAIN LJMP MAIN ORG 000BHORG 000BH ;T0T0中断入口中断入口 LJMP
24、TL0INTLJMP TL0INT;跳跳T0T0中断服务程序中断服务程序 ORG 001BHORG 001BH ;在在T1T1方式方式3 3时,时,TH0TH0占用占用T1T1的中断的中断 LJMP TH0INT LJMP TH0INT;跳跳TH0TH0中断服务程序中断服务程序 ORG 0100HORG 0100HMAINMAIN:MOV TMOD,#27H MOV TMOD,#27H;T0T0方式方式3 3计数,计数,T1T1方式方式2 2定定 时时 MOV TL0,#0FFH MOV TL0,#0FFH ;置置TL0TL0初值初值 MOV TH0,#9CH MOV TH0,#9CH ;置;
25、置TH0TH0初值初值 MOV TL1,#dataL MOV TL1,#dataL;datadata为波特率常数为波特率常数 MOV TH1,#dataHMOV TH1,#dataH MOV TCON,#55H MOV TCON,#55H;允许允许T0T0中断中断 MOV IE,#9FHMOV IE,#9FH ;启动启动T1T1HERE:AJMP HEREHERE:AJMP HERETL0INTTL0INT:MOV TL0,#0FFH MOV TL0,#0FFH ;TL0TL0重新装入初值重新装入初值 SETB TR1 SETB TR1 RETI RETI TH0INTTH0INT:MOV T
26、H0,#9CHMOV TH0,#9CH ;TH0TH0重新装入初值重新装入初值 位取反输出位取反输出 RETI RETI 6.4.4 6.4.4 门控制位门控制位GATEGATE的应用的应用测量脉冲宽度测量脉冲宽度GATE1GATE1可使定时器可使定时器/计数器计数器T1T1的启动计数受的启动计数受INT1INT1*的控制,的控制,可测量引脚可测量引脚INT1INT1*(P3.3P3.3)上正脉冲的宽度上正脉冲的宽度(机器周(机器周期数)。期数)。参考程序:参考程序:ORG 0000HORG 0000HRESET:AJMP MAIN RESET:AJMP MAIN ;复位入口转主程序复位入口转
27、主程序 ORG 0100HORG 0100H MAIN:MOV SP,#60H MAIN:MOV SP,#60H MOV TMOD,#90H MOV TMOD,#90H ;T1T1为方式为方式1 1定时控制字定时控制字 MOV TL1,#00HMOV TL1,#00H MOV TH1,#00H MOV TH1,#00H LOOP:JB P3.3,LOOP0 LOOP:JB P3.3,LOOP0;等待等待INT1INT1*低低 SETB TR1SETB TR1;如如INT1INT1*为低,启动为低,启动T1T1LOOP1:JNB P3.3,LOOP1LOOP1:JNB P3.3,LOOP1;等待
28、等待INT1INT1*升高升高LOOP2:JB P3.3,LOOP2 LOOP2:JB P3.3,LOOP2;等待等待INT1INT1*降低降低 CLR TR1CLR TR1;停止停止T1T1计数计数 MOV A,TL1MOV A,TL1;T1T1计数值送计数值送A A将将A A中的中的T1T1计数计数值送显示缓冲区值送显示缓冲区转换成显示的代码转换成显示的代码 LOOP3:LCALL DIR LOOP3:LCALL DIR ;调用显示子程序调用显示子程序DIRDIR;显示显示T1T1计数值计数值 AJMP LOOP3 AJMP LOOP3 ;执执行行程程序序,使使INT1INT1*引引脚脚上
29、上出出现现的的正正脉脉冲冲宽宽度度以以机机器器周周期数的形式显示在显示器上。期数的形式显示在显示器上。6.4.5 6.4.5 实时时钟的设计实时时钟的设计 1 1实时时钟实现的基本思想实时时钟实现的基本思想 如何获得如何获得1 1秒的定时,秒的定时,可把定时时间定为可把定时时间定为100100msms,采用采用中断方式进行溢出次数的累计,计满中断方式进行溢出次数的累计,计满1010次,即得到次,即得到秒计时。秒计时。片内片内RAMRAM中规定中规定3 3个单元作为秒、分、时单元,具体安个单元作为秒、分、时单元,具体安排如下:排如下:4242H H:“秒秒”单元单元 ;4141H H:“分分”单
30、元;单元;4040H H:“时时”单元单元从秒到分,从分到时是通过软件累加并进行比较的方从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。法来实现的。2 2程序设计程序设计 (1 1)主程序的设计)主程序的设计流程如图所示。流程如图所示。(2 2)中断服务程序的设计)中断服务程序的设计中断服务程序的主要功能是实中断服务程序的主要功能是实现秒、分、时的计时处理。参现秒、分、时的计时处理。参考程序略。考程序略。ORG 1000HORG 1000H AJMP MAINAJMP MAIN ORG 000BH ORG 000BH AJMP ITOP AJMP ITOPMAIN:MOV TMOD,
31、#01HMAIN:MOV TMOD,#01H MOV 20H,#0AH MOV 20H,#0AH CLR A CLR A MOV 40H,A MOV 40H,A MOV 41H,A MOV 41H,A MOV 42H,A MOV 42H,A MOV TH0,#3CHMOV TH0,#3CH MOV TL0,#0BH MOV TL0,#0BH SETB ET0 SETB ET0 SETB EA SETB EA SETB TR0 SETB TR0HER:AJMP HEREHER:AJMP HEREITOP:PUSH PSWITOP:PUSH PSW PUSH ACC PUSH ACC MOV TH
32、0,#3CH MOV TH0,#3CH MOV TL0,#0B0H MOV TL0,#0B0H DJNZ 20H,RETURN DJNZ 20H,RETURN MOV 20H,#0AH MOV 20H,#0AH /MOV A,#01H MOV A,#01H ADD A,42H ADD A,42H DA A DA A MOV 42H,A MOV 42H,A CJNE A,#60H,RETURN CJNE A,#60H,RETURN /MOV 42H,#00H MOV 42H,#00H /MOV A,#01H MOV A,#01H ADD A,41H ADD A,41H DA A DA A MOV
33、 41H,A MOV 41H,A CJNE A,#60H,RETURN CJNE A,#60H,RETURN /MOV 41H,#00HMOV 41H,#00H /MOV A,#01H MOV A,#01H ADD A,40H ADD A,40H DA A DA A MOV 40H,A MOV 40H,A CJNE A,#24H,RETURN CJNE A,#24H,RETURN /MOV 40H,#00H MOV 40H,#00H RETURN:POP ACCRETURN:POP ACC POP PSW POP PSW RETI RETI END END 6.4.6 6.4.6 定时器定时器
34、/计数器作为外部中断源的使用方法计数器作为外部中断源的使用方法 原原理理:89C5189C51定定时时器器/计计数数器器作作为为计计数数模模式式时时,工工作作方方式式2,2,计计数数初初值值均均为为0FFH,0FFH,允允许许中中断断,当当T0/T1T0/T1引引脚脚的的信信号号有有负负跳跳变变时时,T0/T1T0/T1计计数数器器溢溢出,出,TF0/TF1TF0/TF1发出中断请求。发出中断请求。利利用用这这一一特特性性,可可以以把把TO/T1TO/T1引引脚脚作作为为外外部部中中断断请请求求输输入入引引脚脚,TF0/TF1,TF0/TF1可可作作为为外外部部中中断断请请求求标志。标志。OR
35、G OOOHORG OOOH AJMP IINI AJMP IINI IINI:MOV TMOD,#06HIINI:MOV TMOD,#06H MOV TL0,#0FFH MOV TL0,#0FFH MOV TH0,#0FFH MOV TH0,#0FFH SETB ET0 SETB ET0 SETB EA SETB EA SETB TR0 SETB TR0 6.4.6.4.7 7 运行中读定时器运行中读定时器/计数器计数器在在读读取取运运行行中中的的定定时时器器/计计数数器器时时,需需注注意意:若若恰恰好好出出现现TLXTLX溢溢出出向向THXTHX进进位位的的情情况况,则则读读得得的的(TL
36、XTLX)值值就就完完全全不不对对。同同样样,先先读读(THXTHX)再再读读(TLXTLX)也也可可能能出错。出错。方法:先读(方法:先读(THXTHX),),后读(后读(TLXTLX),),再读(再读(THXTHX)。)。若若两次读得(两次读得(THXTHX)相同,则读的内容正确。相同,则读的内容正确。若前后两若前后两次读的(次读的(THXTHX)有变化,则再重复上述过程,这次重有变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,复读得的内容就应是正确的。下面是有关的程序,读得的(读得的(TH0TH0)和(和(TL0TL0)放置在放置在R1R1和和R0R0内。内。R
37、DTIME:MOV A,TH0RDTIME:MOV A,TH0;读(读(TH0TH0)MOV R0,TL0 MOV R0,TL0;读(读(TL0TL0)CJNE CJNE A,TH0,RDTIMEA,TH0,RDTIME;比较比较2 2次读得的(次读得的(TH0TH0);不相等则重复读;不相等则重复读 MOV R1,AMOV R1,A;(;(TH0TH0)送入送入R1R1中中 RETRET 第第7 7章章 MCS-51MCS-51的串行口的串行口 串行通信的基本概念串行通信的基本概念1)全双工全双工2)异步异步波特率波特率-:串行口每秒钟发送(或接收)的位数称为波特串行口每秒钟发送(或接收)的
38、位数称为波特 率。位率。位/秒秒3)同步同步4)串串-并转换并转换7.1 串行口的结构串行口的结构89C51有一个全双工的串行接口有一个全双工的串行接口,两个物理上独立地接收和发两个物理上独立地接收和发送缓冲器,可同时收、发数据送缓冲器,可同时收、发数据,内部结构如下图。发送缓冲器内部结构如下图。发送缓冲器只能写入不能读出,接受缓冲器只能读出不能写入。只能写入不能读出,接受缓冲器只能读出不能写入。两个缓冲器共用一个特殊功能寄存器字节地址:两个缓冲器共用一个特殊功能寄存器字节地址:SBUF(99H)。)。两个控制寄存器:特殊功能寄存器两个控制寄存器:特殊功能寄存器SCON和和PCON。控制串控制
39、串行口的工作方式,波特率。行口的工作方式,波特率。7.1.1 7.1.1 串行口控制寄存器串行口控制寄存器SCONSCON 字节地址字节地址9898H H,可位寻址,格式如图所示可位寻址,格式如图所示。当串行口以当串行口以方式方式2 2或方式或方式3 3接收接收时,时,如如果果SM2=1SM2=1,只只有有当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“1”“1”时时,才才将将接接收收到到的的前前8 8位位数数据据送送入入SBUFSBUF,并并置置“1”“1”RIRI,产产生生中中断断请请求求;当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“0”“0”时,则将接
40、收到的前时,则将接收到的前8 8位数据丢弃。位数据丢弃。如如果果SM2=0SM2=0,则则不不论论第第9 9位位数数据据是是“1”“1”还还是是“0”“0”,都都将将 前前8 8位位数数据据送送入入SBUFSBUF中中,并并置置“1”“1”RIRI,产产生中断请求。生中断请求。在在方方式式1 1时时,如如果果SM2=1SM2=1,则则只只有有收收到到停停止止位位时时才才会会激激活活RIRI。在方式在方式0 0时,时,SM2SM2必须为必须为0 0。(3 3)RENREN允许串行接收位允许串行接收位 由软件置由软件置“1”“1”或清或清“0”“0”。REN=1 REN=1 允许串行口接收数据。允
41、许串行口接收数据。REN=0 REN=0 禁止串行口接收数据。禁止串行口接收数据。(4 4)TB8TB8发送的第发送的第9 9位数据位数据方式方式2 2和和3 3时,时,TB8TB8是要发送的第是要发送的第9 9位数据,可作为奇偶位数据,可作为奇偶校验位使用,也可作为地址帧或数据帧的标志。校验位使用,也可作为地址帧或数据帧的标志。=1 =1为地址帧为地址帧,=0=0为数据帧为数据帧 (5 5)RB8RB8接收到的第接收到的第9 9位数据位数据方方式式2 2和和3 3时时,RB8RB8存存放放接接收收到到的的第第9 9位位数数据据。在在方方式式1 1,如如果果SM2=0SM2=0,RB8RB8是
42、是接接收收到到的的停停止止位位。在在方方式式0 0,不不使用使用RB8RB8。(6 6)TITI发送中断标志位发送中断标志位 方式方式0 0时时,串行发送第,串行发送第8 8位数据结束时由硬件置位数据结束时由硬件置“1”“1”,其它工作方式其它工作方式,串行口发送停止位的开始时置,串行口发送停止位的开始时置“1”“1”。TI=1TI=1,表示一帧数据发送结束,可供软件查询,也表示一帧数据发送结束,可供软件查询,也可申请中断。可申请中断。CPUCPU响应中断后响应中断后,在中断服务程序中向在中断服务程序中向SBUFSBUF写入要发送的下一帧数据。写入要发送的下一帧数据。TITI必须由软件清必须由
43、软件清0 0。(7 7)RIRI接收中断标志位接收中断标志位 方式方式0 0时时,接收完第,接收完第8 8位数据时,位数据时,RIRI由硬件置由硬件置1 1。其其它它工工作作方方式式,串串行行接接收收到到停停止止位位时时,该该位位置置“1”“1”。RI=1RI=1,表表示示一一帧帧数数据据接接收收完完毕毕,并并申申请请中中断断,要要求求CPUCPU从从接接收收SBUFSBUF取取走走数数据据。该该位位的的状状态态也也可可供供软软件件查查询。询。RIRI必须由软件清必须由软件清“0”“0”。7.1.2 7.1.2 特殊功能寄存器特殊功能寄存器PCONPCON 字节地址为字节地址为87H,没有位寻
44、址功能没有位寻址功能。SMODSMOD:波特率选择位波特率选择位。例如:方式例如:方式1 1的波特率的计算公式为:的波特率的计算公式为:方方式式1 1波波特特率率=(2 2SMODSMOD/32/32)定定时时器器T1T1的的溢溢出率出率当当SMOD=1SMOD=1时时,要要比比SMOD=0SMOD=0时时的的波波特特率率加加倍倍,也也称称SMODSMOD位为位为波特率倍增位波特率倍增位。课堂作业课堂作业2.P109,6-5MOV TCON,#55HMOV IE,#9FH请用位寻址方式实现上两行代码请用位寻址方式实现上两行代码 1.107,6-4中请用中请用T0,工作方式工作方式1完成程序完成程序课后作业课后作业P113-10,123.编程实现编程实现:引脚输出周期为引脚输出周期为2s的方波的方波,系统时钟系统时钟频率频率12MHZ。要求用要求用T1完成,工作方式自选。完成,工作方式自选。