《单片机原理》PPT课件.ppt

上传人:小飞机 文档编号:5475489 上传时间:2023-07-11 格式:PPT 页数:59 大小:446.50KB
返回 下载 相关 举报
《单片机原理》PPT课件.ppt_第1页
第1页 / 共59页
《单片机原理》PPT课件.ppt_第2页
第2页 / 共59页
《单片机原理》PPT课件.ppt_第3页
第3页 / 共59页
《单片机原理》PPT课件.ppt_第4页
第4页 / 共59页
《单片机原理》PPT课件.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《《单片机原理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《单片机原理》PPT课件.ppt(59页珍藏版)》请在三一办公上搜索。

1、第5章 单片机内部功能的应用实例,5.1 I/O端口的应用实例,第5章 单片机内部功能的应用实例,P1.7P1.4驱动负载,P1.3P1.0输入K0K3状态。1输出控制 首先P1.7P1.4均输出高电平,各灯均灭;然后从P1.4开始依次轮流输出0,控制各灯轮流点亮,其间隔时间为1秒钟,最后使4个灯全暗再全亮,延时一段时间后又重新不断循环。实现上述功能的 控制程序,5.1.1 用P1口作基本输入/输出口控制,图5-1,如下,下一节,第5章 单片机内部功能的应用实例,2输入开关数据控制 读K0K3状态,送P1.7P1.4驱动亮或灭,控制程序如下:START:MOV A,#0FFH MOV P1,A

2、;使4个灯全灭 MOV A,P1;读入开关状态 SWAP A;读低4位交换到高4位 MOV P1,A;输出驱动相应灯亮 ACALL DELAY;延时 SJMP START;循环读入 外部有扩展存储时,P0口用作低8位地址/数据口;P1口仍可作通用I/O口;P2口作通用I/O口(外存256)或作高8位专用地址口(256外存64K);P3口工作于第二功能的输入/输出。,5.1.2 用I/O端口直接控制LED,第5章 单片机内部功能的应用实例,若使用P1.0P1.7控制LED(共阴)的段选位,用P3.0P3.3分别控制4个LED的位选,电路连接如 所示。,编程在四个LED上交叉轮流显示22和88字符

3、,用LED0、LED1为一组,显示内容相同;LED2、LED3为一组,显示内容相同,两组每隔1秒钟轮流交叉显示。设LED为共阴极,控制程序,图5-2,如下,第5章 单片机内部功能的应用实例,5.1.3 编码拨盘预置输入电路,8421拨盘的结构原理见 所示。,拨盘的工作原理,当要置入09的数时,对应的8421位开关与公共控制端A接通,8421引脚将输出相应的数。BCD码拨盘与单片机的接口见 所示,其中二极管隔离作用,为防止拨盘之间的窜扰。,试编程读入4#1#BCD拨盘置入的数据,并将读入的数据存入片内RAM的40H43H单元中,其程序,图5-3,图5-4,如下,5.1.4 交通信号灯控制,第5章

4、 单片机内部功能的应用实例,用I/O口直接控制交通灯,其控制电路如 所示。交通信号灯的控制方法如 所示。,图5-5,图5-6,当东西方向通车时绿灯亮,而南北方向红灯亮;当通车的时间到后,东西方向的绿灯灭,而黄灯亮,黄灯闪烁若干次后由东西方向切换到南北方向通车。此时东西方向黄灯灭,而红灯亮,南北方向红灯灭,而绿灯亮,南北方向开始通车。通车时间到后,南北方向绿灯灭,黄灯闪烁若干次后由南北方向切换到东西方向,南北方向黄灯灭,红灯亮;而东西方向红灯灭,绿灯亮如此不断循环。其控制,程序如下,5.2.1 定时计数器门控位的应用,第5章 单片机内部功能的应用实例,5.2 定时计数及中断功能的应用实例,例1.

5、一个外部脉冲高电平的宽度小于65536个机器周期,将此脉冲信号接到89C51的INT1(P3.3)引脚上,作为T1的门控启动信号,试测其正脉冲的宽度。已知fosc=12MHz,将所测得的高8位值存入片内41H,低8位存入40H单元中。,程序如下,上一节,下一节,5.2.2 定时/计数功能的综合应用举例,第5章 单片机内部功能的应用实例,例2试用89C51定时器0作外部工件计数值,外部工作信号由T0端引入,T1作定时器,每隔一秒钟检测一次T0中的计数值,当检测到100个工件数时,使P1.0端口输出信号变反,程序不断循环控制P1.0的输出,设fosc=12MHz。模式字:00010110=16H

6、T0计数:X0=256-100=156 T1定时:X1=65536-(50*12*1000)/12=3CB0H R7软件计数:R7=1*1000/50=20,程序如下,5.2.3 实时时钟中断,第5章 单片机内部功能的应用实例,T1定时加软件计数实现实时时钟控制。用T1定时50ms,工作于模式1,设fosc=12MHz,设置软件计数单元:20H单元为秒计数,计满20次为1秒钟;21H单元为分计数,计满60次为1分钟;22H单元为时计数,计满60次为1小时;23H单元为日计数,计满24次为1日;然后程序不断循环。,程序如下,5.2.4 航标灯控制,第5章 单片机内部功能的应用实例,(1)航标灯在

7、黑夜应能定时闪闪发光,设定时间隔为2s,即亮2s,熄灭2s周期循环进行;(2)当白天到来时,航标灯应熄灭,停止定时器工作。,解:方案一(1)航标灯的控制电路见;89C51定时的启停控制信号由INT0来控制。(2)采用T0定时加软件计数的方法实现定时2s钟。(3)可以用如图5-7所示的光敏三极管来区分白天与黑夜。,程序如下,图5-7,第5章 单片机内部功能的应用实例,方案二 将光敏管放大电路的输出端仍接INT0引脚作为T0的门控信号,此时T0的门控位应设置为1。电路中去掉非门,使INT0为高时触发T0定时器启动,否则停止T0工作。,程序如下,5.3.1 用单片机串行通信口扩展并行输入/输出口,第

8、5章 单片机内部功能的应用实例,5.3 单片机串行通信口的应用实例,是利用3根I/O口线扩展一个8位的并行输入口和一个8位的并行输出口的实用电路。用并行输入串行输出移位寄存器CD4014(类似74LS165)作并行开关状态的输入口;用串行输入并行输出移位寄存CD4094(类似74LS164)作显示输出口。编程读入开关状态存入片内RAM的40H单元中,并同时输出到LED上显示出来。,程序如下,图5-8,上一节,5.3.2 用单片机串行通信口作异步通信接口,第5章 单片机内部功能的应用实例,1.用串行口发送带奇校验的数据块 编程从片内RAM 20H3FH取出ASCII码数据,在最高位上加奇偶校验位

9、后由串行口发送,采用8位数据异步通信,串行口采用方式1发送,用T2作波特率发生器,设波特为1200波特,fosc=12MHz,12时钟模式。,解题思路及程序如下,2.用串行口接收带奇偶校验位的数据块,程序如下,5.3.3 用单片机串行通信口作多机通信接口,第5章 单片机内部功能的应用实例,单片机串行口多机通信的几条简单通信协议:,(1)系统中允许接有255台从机,地址分别为00HFFH。,(2)地址FFH是对所有从机都起作用的一条控制命令:该命令使各从机恢复SM2=1的状态。,(3)主机发送的控制命令代码为 00H:要求从机接收数据块;01H:要求从机发送数据块;其他:非法命令,(4)数据块长

10、度:16个字节;,第5章 单片机内部功能的应用实例,串行口,是多机通信程序流程图,通信程序,图5-9,(5)从机状态字格式为:,AU3:MOVX A,DPTR MOV R0,A INC R0 INC DPTR DJNZ R2,AU3 MOV DPTR,#9000H MOV R0,#50H MOV R2,#10HAU4:MOV A,R0 MOVX DPTR,A INC DPTR INC R0 DJNZ R2,AU4 MOV 3EH,#1AH MOV 3DH,#1AH MOV 3CH,#1AH MOV 3BH,#1AH MOV 3AH,#0EH MOV 39H,#0DHHERE:LCALL 002

11、6H SJMP HERE END,数据传送实验程序CAS02.ASMORG 8000H LJMP MAIN ORG 8030HMAIN:MOV R0,#40H MOV R2,#10H CLR AAU1:MOV R0,A INC R0 ADD A,#2 DJNZ R2,AU1 MOV R0,#40H MOV DPTR,#7E00H MOV R2,#10HAU2:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,AU2 MOV R0,#50H MOV DPTR,#7E00H MOV R2,#10H,定时计数器程序设计 CAS03.ASM ORG 8000HC

12、ART:LJMP CAIN ORG 800BH LJMP CIT0 ORG 8030HCAIN:MOV SP,#60H MOV R0,#39H MOV R7,#06HCL1:MOV R0,#00H INC R0 DJNZ R7,CL1 MOV TMOD,#01H MOV TL0,#00H MOV TH0,#00H SETB TR0 MOV IE,#82H MOV 30H,#08HCL0:LCALL 0026H LJMP CL0,CIT0:PUSH PSW PUSH ACC SETB PSW.3 MOV TH0,#00H MOV TL0,#00H MOV A,30H DEC A MOV 30H,

13、A JNZ CRET MOV 30H,#08H MOV R0,#3AH LCALL CAAD MOV A,R2 XRL A,#60H JNZ CRET LCALL CLR0 MOV R0,#3CH LCALL CAAD,MOV A,R2 XRL A,#60H JNZ CRET LCALL CLR0 MOV R0,#3EH LCALL CAAD MOV A,R2 XRL A,#24H JNZ CRET LCALL CLR0CRET:POP ACC POP PSW RETICAAD:MOV A,R0 DEC R0 SWAP A ORL A,R0,ADD A,#01H DA A MOV R2,A A

14、NL A,#0FH MOV R0,A MOV A,R2 INC R0 ANL A,#0F0H SWAP A MOV R0,A RETCLR0:CLR A MOV R0,A DEC R0 MOV R0,A RET END,实验四 数字电子钟的实现,编程实现:分别从EICE51上键入或从主机键盘上输入时间初值。用T0定时256s,加软件计数4000次实现 1秒定时,对实时时钟计数器进行计数,并将时钟值实时地分另送EICE51和主机显示器上输出显示。相关说明:1、相关位的功能:位0:键入(或发送)两位数结束标志位;位1:输出两位数送EICE51显示结束标志位;位2:EICE51键入时间初值(6位)结

15、束标志位;,位F0:1秒定时到标志位。2、相关单元的功能:30H、31H、32H:时间初值存储和时、分、秒计数器;36H、37H:1秒定时的软件计数器(250*16=4000);39H3EH:显示存储单元;7F03H:8155的端口C,定义为EICE51的键入口。3、相关ASCII码:0DH:回车;0AH:换行;3AH:“:”冒号(分隔符);8HH:退格;30H39H:数字09的ASCII码。,电子钟的实现 CAS9254.ASM(定时、中断、串行口综合实验)ORG8000HCOCK:SJMPCXT4ORG800BHYTF0:DJNZ 36H,FT4RMOV 36H,#250DJNZ 37H,

16、FT4RMOV 37H,#16SETB F0FT4R:RETICXT4:MOVSP,#60H MOV R7,#6 MOV R0,#39HCELL:MOV R0,A INC R0 DJNZ R7,CELLMOV TMOD,#022HMOV SCON,#0DAHMOV TCON,#50H,WINT:MOV DPTR,#7F03H MOVX A,DPTR CPL A ANL A,#0FH JNZ KBIN;6位初值小键盘输入 JNB RI,WINT;主机输入显示处理 CLR 2 CLR RI ACALL YOUT;主机提示显示 DBINPUT TIME:,0;BP2GT41:MOV R0,#30H

17、CLR 0GT42:JNB RI,GT42;主机实现09的输入 CLR RI MOV A,SBUF CJNE A,#0DH,GT43;0DH回车HT4W:JNB TI,HT4WCLR TIMOV SBUF,#0AH;0AH换行SJMP GT44GT43:CJNE A,#3AH,GT46;主机输入9GT45:JNB TI,GT45;3AH:CLR TIMOV SBUF,A,SJMP GT42GT46:JNC CERRCJNE A,#30H,GT47GT47:JC CERR;主机输入0GT49:JNB TI,GT49CLRTIMOV SBUF,ASUBB A,#30HJBC0,GT4ASETB 0

18、SWAP AMOV R0,ASJMP GT42GT4A:XCHD A,R0INCR0SJMP GT42CERR:MOV SBUF,#08;08退格QRR1:SJMP GT42GT44:CJNE R0,#33H,QRR1BGIN:MOV IE,#82H;BP3MOV 36H,#250MOV 37H,#16,GT4L:JBC F0,GT4PLCALL 0026HSJMP GT4LGT4P:ACALL CCNT;计数并刷新显示 JB 2,$+5;3字节ACALL JOUT;2字节SJMP GT4LKBIN:MOV R0,#3EH;BP1 MOV R1,#30H MOV R7,#6 CLR 0HIL:

19、SETB PSW.3 LCALL 0036H CLR PSW.3 MOV R0,A DEC R0 JBC 0,HIL1 SETB 0 SWAP A MOV R1,AHIL2:DJNZ R7,HIL SETB 2,SJMP BGINHIL1:XCHD A,R1 INC R1 SJMP HIL2CCNT:MOV R0,#32H;BP4ACALL KCT;BCD加1送存CJNE A,#60H,CNTR;6位送显ACALL KCXCJNE A,#60H,CNTRACALL KCXCJNE A,#24H,CNTRACALL KCXCNTR:MOV R1,#39HMOV R0,#32HMOV R7,#3C

20、LR1EDTR:JBC 1,ERT2MOV A,R0ANL A,#0FHMOV R1,AINCR1SETB 1SJMP EDTR,ERT2:MOV A,R0ANL A,#0F0HSWAP AMOV R1,AINC R1DEC R0DJNZ R7,EDTRRETJOUT:ACALLYOUTDBIT IS:,0MOV R7,#3MOV R0,#30HCLR 0XT3:MOV A,R0;发主机显示XT1:JNB TI,XT1CLR TIJBC 0,XT2SWAP AANL A,#0FHADD A,#30HMOV SBUF,A,SETB0SJMPXT3 XT2:ANLA,#0FHADD A,#30HM

21、OVSBUF,ADJNZR7,XT4XTL:JNBTI,XTLCLR TIMOVSBUF,#0DHRETXT4:JNBTI,XT4CLR TIMOVSBUF,#3AHINCR0SJMPXT3YOUT:POPDPHPOP DPLSETBTI,JT0:CLRAMOVCA,A+DPTRINC DPTRCJNEA,#0,JT1PUSHDPLPUSHDPHRETJT1:JNBTI,JT1CLR TIMOVSBUF,ASJMPJT0KCX:CLRAMOVR0,ADEC R0KCT:MOVA,R0ADD A,#1DA AMOVR0,ARET END;,习题5,第5章 单片机内部功能的应用实例,1试用89C5

22、1的P0口外接8个LED,P1口和P2口外接8个BCD码拨盘。请画出该功能要求的连接电路图,并编程依次读入8个BCD拨盘数据存入片内40H47H单元中,然后依次取出送P0中显示,每次同时显示2个相邻的数据。2利用89C51单片机定时器的门控位测量某正脉冲高电平的宽度。已知正脉冲宽度小于10ms,fosc=6MHz.试编程测量脉宽,并把测得的结果转换为BCD码存入片内50H开始的连接单元,十位和个位存50H单元中。,1试用89C51的P0口外接8个LED,P1口和P2口外接8个BCD码拨盘。请画出该功能要求的连接电路图,并编程依次读入8个BCD拨盘数据存入片内40H47H单元中,然后依次取出送P

23、0中显示,每次同时显示2个相邻的数据,方案一:8个拨盘分别接P2.0P2.7作为输入数据及P1.0P1.3作为拨盘的片选信号,LED发光二极管负极接P0.0P0.7。RDIN:MOV R7,#08 MOV R0,#40H MOV A,#0FEHRDIN1:MOV R2,A MOV P2,A MOV A,P1 CPL A ANL A,#0FH MOV R0,A INC R0 MOV A,R2,RL A DJNZ R7,RDIN1 MOV R7,#04H MOV R0,#40HOUTRUT:MOV A,R0 SWAP A INC R0 XCHD A,R0 CPL A MOV P0,A CALL D

24、EALY INC R0 DJNZ R7,OUTRUT AJMP RDIN END,方案二:8个拨盘分别接P2.0P2.7及P1.0P1.3,8只数码管的段码由P0.0P0.7输出,位选信号由P3.0P3.7输出,读取拨盘的程序同方法一,其输出显示程序如下:,START:MOV A,#0FEH MOV P3,A MOV R2,A MOV DPTR,#TAB MOV R0,#40H SETB C LP:MOV A,R0 MOVC A,A+DPTR MOV P0,A CALL DELAY MOV A,R2 RLC A MOV R2,A MOV P3,A INC R0,LP1:MOV A,R0 MOV

25、C A,A+DPTR MOV P0,A CALL DELAY MOV A,R2 RLC A MOV R2,A MOV P3,A JNB C,LP2 INC R0 AJMP LPLP2:START 或 RETTAB:DB 3FH,06H,5BH,4FH,68H DB 6DH,7DH,07H,7FH,6FH(共阴LED显示段码),3 试用中断技术设计一个频闪电路,用以控制P1口上的8个彩灯闪烁,其闪烁频率为50Hz,设fosc=6MHz。,ORG 0000H AJMP STAR ORG 000BH AJMP INTR0 ORG 2000HSTAR:MOV TMOD,#01H MOV TL0,#78

26、H MOV TH0,#0ECH MOV IE,#82H SETB TR0 LOOP:SJMP$,INTR0:MOV TL0,#78H MOV TH0,#0ECH MOV A,P1 CPL A MOV P1,A RETI,第5章 单片机内部功能的应用实例,3 试用中断技术设计一个频闪电路,用以控制P1口上的8个彩灯闪烁,其闪烁频率为50Hz,设fosc=6MHz。4用89C51串行口设计一个4位静态LCD的接口电路,画出电路连接图并编程每隔1秒钟交替显示“GOOD”,“YOUR”。5设计一个89C51单片机的双机通信系统,试编程将甲机片外8000H9000H的数据块通过串行口发送到乙机片外RAM

27、的3000H4000H单元中去。要求接收和发送均采用中断方式。,第5章 单片机内部功能的应用实例,START:MOV A,#0FFH MOV P1,A;P1口输出“全1”,使灯均灭 ANL A,#0EFH;指向P1.4位的灯,使其点亮 SETB C;进位置1LOOP:MOV P1,A;控制相应位的灯亮 ACALL DELAY1s;延时1s RLC A;指向下一个灯 JC LOOP;到第4个灯吗?若C=1转 MOV P1,A;到了使4个灯全灭 ACALL DELAY;延时 CLR P1.4;使4个灯均亮 CLR P1.5 CLR P1.6 CLR P1.7 ACALL DELAY;延时 AJMP

28、 START;重新循环,第5章 单片机内部功能的应用实例,图5-1 I/O控制电路,第5章 单片机内部功能的应用实例,图5-2 LED与89C51连接图,第5章 单片机内部功能的应用实例,START:MOV A,#0FFH MOV P3,A;使4个LED均不亮 LP0:MOV R7,#50;循环次数 LP1:MOV P1,#5BH;2字符的段码5BH输出 MOV P3,#0FCH;选中LED0、LED1 ACALL DELAY10ms;延时10ms MOV P1,7FH;8字符的段码7FH输出 MOV P3,0F3H;选中LED2、LED3 ACALL DELAY10ms;延时10ms DJN

29、Z R7,LP1;循环显示 MOV R7,#50 LP2:MOV P1,#7FH;8字符的段码 MOV P3,#0FCH;LED0、LED1显示8字符 ACALL DELAY10ms;延时 MOV P1,#5BH;2字符的段码 MOV P3,#0F3H;LED2、LED3显示2字符 ACALL DELAY10ms;延时 DJNZ R7,LP2 AJMP LP0;重新循环,第5章 单片机内部功能的应用实例,图5-3 拨盘结构图 5-4 BCD拨盘与89C51接口图,第5章 单片机内部功能的应用实例,RDIN:MOV R7,#04H;读入次数计数 MOV R0,40H;片内RAM的首址送R0 MO

30、V A,#0EFH;选通1#拨盘,使A1=0 RDIN1:MOV R2,A;暂存R2中 MOV P1,A;输出位选控制信号 MOV A,P1;读入拨盘数据 CPL A;取反使之为高电平有效 ANL A,#0FH;屏蔽高4位 MOV R0,A;存入片内RAM INC R0;指向下一个RAM单元 MOV A,R2 RL A;指向下一个拨盘 DJNZ R7,RDIN1;4个拨盘未读完转 RET;读完返回,第5章 单片机内部功能的应用实例,图5-5 单片机与交通灯的接口 5-6 四个路口信号灯示意图,第5章 单片机内部功能的应用实例,START:MOV R7,#0AH;黄灯闪烁次数 MOV A,#00

31、H MOV P1,A;灯全灭 MOV P0,ALP:SETB P0.0;南北红灯亮 SETB P0.1 SETB P1.2;东西绿灯亮 SETB P1.3 LCALL DELAY50s;延时50s CLR P1.2;东西绿灯灭 CLR P1.3LP1:SETB P0.6;东西黄灯亮 SETB P0.7 LCALL DELAY;延时 CLR P0.6;东西黄灯灭 CLR P0.7 LCALL DELAY DJNZ R7,LP1;黄灯闪烁10次未到转,第5章 单片机内部功能的应用实例,MOV R7,#0AH SETB P0.2;东西红灯亮 SETB P0.3 CLR P0.0;南北红灯灭 CLR

32、P0.1 SETB P1.0;南北绿灯亮 SETB P1.1 LCALL DELAY50s;延时50s CLR P1.0;南北绿灯灭 CLR P1.1LP2:SETB P0.4;南北黄灯亮 SETB P0.5 LCALL DELAY CLR P0.4;南北黄灯灭 CLR P0.5 LCALL DELAY DJNZ R7,LP2;黄灯闪烁10次未到转 MOV R7,#0AH AJMP LP;重新循环,第5章 单片机内部功能的应用实例,MOV TMOD,#90H;T1定时,模式1,GATE=1MOV TL1,#00H;T1从0000H开始计数MOV TH1,#00HMOV R0,#40HJB P3

33、.3,$;等待P3.3变低SETB TR1;P3.3变低,准备启动T1JNB P3.3,$;等待P3.3变高,启动计数JB P3.3,$;等待P3.3再次变低CLR TR1;停止计数MOV R0,TL1;存计数值INC R0MOV R0,TH1,第5章 单片机内部功能的应用实例,MOV TMOD,#16H;T1模式1,定时,T0模式2,计数 MOV TH1,#3CH;T1计数初值,定时50ms MOV TL1,#0B0H MOV TH0,#156;T0计数初值,计数100次 MOV TL0,#156 MOV R7,20;R7软件计数20次 CLR EA;屏蔽所有中断(关CPU中断)SETB T

34、R1;启动T1 SETB TR0;启动T0LOOP:JBC TF1,LQ;T1溢出转 SJMP LOOP;否等待LQ:MOV TH1,#3CH;重装T1计数初值 MOV TL1,#0B0H DJNZ R7,LOOP;1秒未到转 MOV R7,#20;1秒到重装软件计数值LP:JNB TF0,LOOP;T0未溢出转 CPL P1.0;100个工件计满P1.0输出变反 SJMP LOOP;返回重复循环,第5章 单片机内部功能的应用实例,主程序如下:ORG 0000H SJMP START ORG 001BH AJMP SERVE;T1中断服务程序入口 ORG 0100HSTART:MOV TMOD

35、,#10H;T1定时,模式1 MOV TH1,#3CH;T1计数初值 MOV TL1,#0B0H MOV IE,#88H;CPU T1开中断 SETB TR1;启动T1 MOV 20H,#20;1秒计数值 MOV 21H,#60;1分计数值 MOV 22H,#60;1小时计数值 MOV 23H,#24;1日计数值LOOP:SJMP$;等待T1 50ms到中断 SJMP LOOP,第5章 单片机内部功能的应用实例,;T1中断服务程序(由001BH转来)SERVE:MOV TH1,#3CH;T1重赋计数初值 MOV TL1,#0B0H DJNZ 20H,EXIT;1秒未到转 MOV 20H,#20

36、;1秒到重写计数值 LCALL DISP;可加入输出显示DISP DJNZ 21H,EXIT;1分未到转 MOV 21H,#60;1分到重写计数值 DJNZ 22H,EXIT;1小时未到转 MOV 22H,#60;1小时到重写计数值 DJNZ 23H,EXIT;1日未到转 MOV 23H,24;1日到重写计数值EXIT:MOV IE,#88H RETI,第5章 单片机内部功能的应用实例,图5-7 航标灯控制电路,第5章 单片机内部功能的应用实例,主程序:(中断嵌套加软件查询)ORG 0000H AJMP MAIN ORG 0003H;外部中断0入口地址 AJMP WBINT ORG 000BH

37、;T0中断入口地址 AJMP T0INT ORG 0100H MAIN:MOV SP,#30H;设置堆栈指针 CLR P1.7;设灯亮的初态为灭 CLR IT0;外部中断0为电平触发方式 CLR PX0;外部中断0为低优先级 SETB EX0;允许外部中断0中断 SETB EA;允许CPU中断 HERE:AJMP HERE;等待外部中断请求,第5章 单片机内部功能的应用实例,外部中断0中断服务程序(由0003H转来)WBINT:MOV TMOD,#01H;T0定时,模式1 MOV TL0,#0B0H;T0计数初值 MOV TH0,#3CH SETB PT0;设T0为高优先级中断 SETB TR

38、0;启动T0 SETB ET0;T0开中断 MOV R7,#40;软件计数值 HERE1:JNB P3.2,HERE1;查询引脚电平,为低等待T0中断 CLR ET0;为高禁止T0中断 CLR TR0;关T0 CLR P1.7;熄灯 RETI;返回主程序 定时器0中断服务程序(由000BH转来)T0INT:MOV TL0,#0B0H;重赋T0初值 MOV TH0,#3CH DJNZ R7,EXIT;软件计数为0吗?MOV R7,#40;计数已到,重赋初值 CPL P1.7;输出取反控制灯亮或灭 EXIT:RETI;中断返回 END,第5章 单片机内部功能的应用实例,主程序:ORG 0000H

39、AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN:MOV SP,#30H GAT0:CLR P1.7 MOV TMOD,#09H;T0定时,模式1,GATE=1 MOV TL0,#0B0H;T0赋计数初值 MOV TH0,#3CH MOV R7,#40;软件计数初值 HERE1:JNB P3.2,HERE1;黑夜降临了吗?SETB TR0;到了启动T0 SETB ET0;允许T0中断 SETB EA;CPU开中断,第5章 单片机内部功能的应用实例,HERE2:JB P3.2,HERE2;白天到吗?CLR TR0;到了关T0 CLR ET0;禁止T0中断

40、 CLR EA;关CPU中断 AJMP GAT0 定时器0中断服务程序(由000BH转来)T0INT:MOV TL0,#0B0H;T0重赋初值 MOV TH0,#3CH DJNZ R7,EXIT;软件计数到了吗?MOV R7,#40;重赋软件计数初值 CPL P1.7;输出控灯亮与灭 EXIT:RETI END,第5章 单片机内部功能的应用实例,图5-8 利用串行口扩展I/O口,第5章 单片机内部功能的应用实例,RX0:SETB P1.0;允许并行输入开关数据 CLR P1.0;允许串行移位 MOV SCON,#10H;串行口方式0,REN=1允许接收数据 JNB RI,$;等待一帧数据接收结

41、束 CLR RI;接收结束,清RI中断标志 MOV A,SBUF;读取接收到的数据 MOV 40H,A;存入片内RAM中TX0:MOV SCON,#00H;设串行口方式0,发送数 MOV SBUF,A;启动串行口发送数据 JNB TI,$;等待一帧发送结束 CLR TI;清TI中断标志 SETB P1.0;数据选通输出显示 RX0为读入开关状态的接收数据程序段,TX0为输出数据显示的程序段。,第5章 单片机内部功能的应用实例,解:T2波特率发生器,波特率不增倍SMOD=0,计数初值X为:X=65536-(fosc/(n波特率)=65536-(fosc/(32波特率))=65536-(12106

42、/(321200)=65224=FEC8H 注:n=16(为6时钟模式);n=32(为12时钟模式)主程序:MOV T2CON,#32H;T2波特率,定时,RCLK=TCLK=1 MOV TL2,#0C8H;T2计数初值 MOV TH2,#0FEH MOV RCAP2H,#0FEH;同时装入捕获寄存器 MOV RCAP2L,#0C8H SETB TR2;启动T2 MOV SCON,#40H;串口方式1 MOV PCON,#00H;SMOD=0,波特率不增倍,第5章 单片机内部功能的应用实例,MOV R0,#20H MOV R7,#32 LOOP:MOV A,R0;取发送的数据 CALL TXD

43、;调发送子程序 JC ERR;传输出错处理 INC R0 DJNZ R7,LOOP;未发送完重复.;串行口发送子程序 TXD:MOV C,P;设置奇校验位,P=1为奇校 CPL C MOV Acc.7,C;数据最高位加上奇校位 MOV SBUF,A;启动串行口发送过程 JNB TI,$;等待发送结束 CLR TI;清发送中断标志 ERR:出错处理程序(略),第5章 单片机内部功能的应用实例,本例与上例相似,串行口接收器把接收到的32个字节数据存入片内RAM 20H3FH单元,波特率同上。若奇校验出错则将进位位置1。主程序:MOV T2CON,#32H MOV TL2,#0C8H MOV TH2

44、,#0FEH MOV RCAP2H,#0FEH MOV RCAP2L,#0C8H SETB TR2 MOV R0,#20H MOV R7,#32 MOV PCON,#00H LOOP:CALL RXD;调接收子程序 JC ERR MOV R0,A;接收的数据存入片内RAM INC R0 DJNZ R7,LOOP,第5章 单片机内部功能的应用实例,接收子程序:RXD:MOV SCON,#50H;串行口方式1,REN=1允许接收 JNB RI,$;等待接收一帧数据 CLR RI MOV A,SBUF;取一帧数据 MOV C,P CPL C ANL A,#7FH;去掉奇校验位 RET ERR:出错处

45、理程序略,第5章 单片机内部功能的应用实例,1.主机串行通信子程序:入口参数:R2被寻址从机的地址;R3主机命令;R4数据块长度 R0主机发送的数据块首地址;R1主机接收的数据块首地址 MS10:MOV SCON,#0D8H;串口方式3,允许接收,TB8=1 MS11:MOV A,R2;发送地址帧 MOV SBUF,A JNB RI,$;等待从机应答 CLR RI MOV A,SBUF XRL A,R2;判应答地址是否相符 JZ MS13;相同转发送命令 MS12:MOV SBUF,#0FFH;不相同重新联络 SETB TB8 SJMP MS11 MS13:CLR TB8;地址符合,清地址标志

46、 MOV SBUF,R3;发送主机命令 JNB RI,$;等待从机应答 CLR RI MOV A,SBUF,第5章 单片机内部功能的应用实例,JNB Acc.7,MS14;判命令是否出错 SJMP MS12;从机接收命令出错重新联络 MS14:CJNE R3,#00H,MS15;不是要求从机接收数据则转 JNB Acc.0,MS12;从机接收数据未准备好转重新联络 LPT:MOV SBUF,R0;主机发送数据块 JNB TI,$;等待发送一帧结束 CLR TI INC R0 DJNZ R4,LPT RET MS15:JNB Acc.1,MS12;从机发送数据准备好吗?LPR:JNB RI,$;

47、主机接收数据块 CLR RI MOV A,SBUF MOV R1,A INC R1 DJNZ R4,LPR RET,第5章 单片机内部功能的应用实例,若主机向10号从机发送数据块,数据存入片内RAM的40H4FH单元中,则任务程序中调用上述子程序的方法是:.MOV R2,#0AH MOV R3,#01H MOV R4,#10H MOV R0,#40H LCALL MS10.,第5章 单片机内部功能的应用实例,2.从机串行通信的中断服务程序 从机背景程序片段如下:MOV SP,#1FH;设置堆栈指针 MOV SCON,#0F0H;串口方式3,SM2=1 MOV 08H,#40H;接收缓冲区首址送

48、第一区工作寄存器R0 MOV 09H,#50H;发送缓冲区首址送第一区R1 MOV 0AH,#10H;发送接收字节数送R2 串行口中断服务程序(由0023H单元转来)SS10:CLR RI PUSH A;保护现场 PUSH PSW SETB RS0;选第一区工作寄存器 CLR RS1 MOV A,SBUF XRL A,#SLAVE;SLAVE为本从机地址 JZ SSI1,第5章 单片机内部功能的应用实例,RE1:POP PSW POP A CLR RS0 RETI SSI1:CLR SM2;地址相符,清SM2位 MOV SBUF,#SLAVE;从机地址回送主机 JNB RI,$;等待接收一帧结

49、束 CLR RI JNB RB8,SS12;是命令帧转 SETB SM2;是复位信号,SM2置1后返回 SJMP RE1 SS12:MOV A,SBUF;命令分析 CJNE A,#01H,S0H;是要求从机发送数据命令否?SJMP CMD1 S0:JZ CMD0;是要求从机接收数据吗?MOV SUBF,#80H;非法命令,ERR位置1,第5章 单片机内部功能的应用实例,SJMP RE1 SS13:JZ CMD0 CMD1:JB F0,SS14;F0为发送准备就绪标志 MOV SBUF,#00H;回答未准备就绪信号 SJMP RE1 SS14:MOV SBUF,#02H;TRDY=1,发送准备就

50、绪 CLR F0 LOOP1:MOV SBUF,R0;发送数据块 JNB TI,$CLR TI INC R0 DJNZ R2,LOOP1 SETB SM2;发送完,SM2置1后返回 SJMP RE1,第5章 单片机内部功能的应用实例,CMD0:JB PSW.1,SS15;PSW.1为接收准备就绪标志 MOV SBUF,#00H;送回答未准备好信号 SJMP RE1 SS15:MOV SBUF,#01H;RRDY=1接收准备就绪 CLR PSW.1 LOOP2:JNB RI,$;接收数据块 CLR RI MOV R1,SBUF INC R1 DJNZ R2,LOOP2 SETB SM2;接收完,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号