[工学]单片机原理与应用程序_第1页
[工学]单片机原理与应用程序_第2页
[工学]单片机原理与应用程序_第3页
[工学]单片机原理与应用程序_第4页
[工学]单片机原理与应用程序_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档?单片机原理与应用?参考程序第3章【例3-49】MOVDPTR,#2000H ;源数据区首址PUSHDPL ;源数据区首址压栈保护PUSHDPHMOVDPTR,#3000H ;目的数据区首址MOVR6,DPL ;目的数据区首址存入存放器MOVR7,DPHLP:POPDPH ;取源数据区地址指针POPDPLMOVXA,DPTR ;取源数据INCDPTRPUSHDPLPUSHDPH ;更新源数据地址,并将该新地址压栈保护MOVDPL,R6 ;取目的数据区首地址指针MOV DPH,R7MOVX DPTR,A ;将取得的源数据存入目的数据区INCDPTRMOVR6,DPL MOVR7,DPH

2、;更新目标数据地址,并将该新地址存入到R6和R7中DJNZ30H,LP ;假设数据块未移完即地址30H中的值不为0,那么继续POPDPHPOPDPLSJMP【例3-65】MOVA,P1 ;将8位输入信号传到A中JBA.0,MM ;当A的第0位A.0为1时,转去执行MM SETBC ;当A.0为0时,将C置1 并转去执行OUTSJMPOUT ;X0=1,转出口MM:MOVC,A.1 ;C=X1ANLC,/A.2 ;X1X2JCOUT ;X1X2=1,转出口MOVC,A.2 ;C=X2ANLC,/A.1 ;X1X2JCOUT ;X1X2=1,转出口MOVC,A.7 ;C=X7ANLC,/A.4 ;

3、X4X7ANLC,/A.5 ;X4X5X7ANLC,/A.6 ;X4X5X6X7OUT:MOVP3.0,C3.3实例解析CLRA ;结果单元20H29H清零MOVR0,#10MOVR1,#20HLP:MOVR1,AINCR1DJNZR0,LPMOVR0,#100 ;100个数的计数器READ:MOVA,P1 ;读入P1CHK0:CJNEA,#0,CHK1 ;比拟,不为“0”,继续比拟INC20H ;是“0”,那么“0”计数单元加1SJMPEND0 ;是否全部统计完?CHK1:CJNEA,#1,CHK2INC21H ;是“1”,那么“1”计数单元加1SJMPEND0CHK2:CJNEA,#2,C

4、HK3INC22H ;是“2”,那么“2”计数单元加1SJMPEND0CHK3:CJNEA,#3,CHK4INC23H ;是“3” ,那么“3” 计数单元加1SJMPEND0CHK4:CJNEA,#4,CHK5INC24H ;是“4”,那么“4”计数单元加1SJMPEND0CHK5:CJNEA,#5,CHK6INC25H ;是“5”,那么“5”计数单元加1SJMPEND0CHK6:CJNEA,#6,CHK7INC26H ;是“6”,那么“6”计数单元加1 SJMPEND0CHK7:CJNEA,#7,CHK8INC27H ;是“7”,那么“7”计数单元加1SJMPEND0CHK8:CJNEA,#

5、8,CHK9INC28H ;是“8”,那么“8”计数单元加1SJMPEND0CHK9:CJNEA,#9,ERRINC29H ;是“9”,那么“9”计数单元加1END0:DJNZR0,READ ;判是否全部统计完HERE:SJMPHEREERR: ;非09,出错第4章【例4-13】START:PUSHACC ;将A中内容进栈保护 MOV R0,20H ;将20H地址中的内容送R0 MOV R1,22H ;将22H地址的内容送R1 MOV A,R0 ;被加数低字节内容送A ADD A,R1 ;低字节数相加 MOV R0,A ;低字节数和存20H中 INC R0 ;指向被加数高位字节 INC R1

6、;指向加数高位字节 MOV A,R0 ;被加数高位字节送A ADDC A,R1 ;高字节数带进位相加 MOV R0,A ;高字节数和存21H中 CLR A ADDC A, #00H MOV 10H, A ;进位暂存于10H中 POP ACC ;恢复A原内容【例4-14】ORG 0000HAJMP STARTORG 30HSTART: MOV P1,#0FFH ;关闭所灯MOV TMOD,#00000001B ;定时/计数器0工作于方式1MOV TH0,#15H MOV TL0,#0A0H ;即数5536SETB TR0 ;定时/计数器0开始运行 LOOP:JBC TF0,NEXT ;如果TF0

7、等于1,那么清TF0并转NEXT处AJMP LOOP ;否那么跳转到LOOP处运行 NEXT: CPL P1.0MOV TH0,#15HMOV TL0,#9FH ;重置定时/计数器的初值AJMP LOOPEND AJMP LOOP【例4-15】ORG 000BH ;定时器0的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART: MOV P1,#0FFH ;关闭所灯MOV TMOD,#00000001B ;定时/计数器0工作于方式1MOV TH0,#15H MOV TL0,#0A0H ;即数5536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器

8、0允许SETB TR0 ;定时/计数器0开始运行 LOOP:AJMP LOOP ;真正工作时,这里可写任意程序TIME0: PUSH ACC ;定时器0的中断处理程序PUSH PSW ;将PSW和ACC推入堆栈保护CPL P1.0 MOV TH0,#15HMOV TL0,#0A0H ;重置定时常数POP PSWPOP ACCRETIEND 【例4-17】ORG0000HSTART:MOVA,#aMOVB,AMULAB ;AB= a2MOVR0,A ;R1R0= a2MOVR1,BMOVA,#bCJNEA,#0AH,MMN ;b10那么转移MM:ADD A,R0 ;b10, a2+b=YMOVR

9、0,AMOVA,#00HADDCA,R1MOVR1,AJMPMMNN MMN:JNC MM ;无借位即b>10转MMMOV R3,A ;R3bMOV A,R0CLR CSUBBA,R3 ; R1R0a2bMOV R0,AMOVA,R1SUBBA,#00HMOV R1,AMMNN:MOV Y0,R0 ;Y1Y0结果MOVY1,R1HERE:AJMP HERE【例4-18】CLRCSTART:MOVA,R1SUBBA,#64H ;超过100kg那么报警JNCBJMOVA,R1CJNEA,#32H,LOOP1 ;是否为50kgMOVB,#2HMULA B ;50kg总收费SJMP LOOP3L

10、OOP1: JCLOOP2MOVB,#3HSUBBA,#32H ;超过50kg局部的收费MULA BMOVR0,AMOVA,#32HMOVB,#2HMULA BADDA,R0 ;50kg以上总收费SJMPLOOP3LOOP2:MOVB,#2H ;50kg以下总收费 MULA BLOOP3: MOV80H,ASJMPEOFBJ: ;超重报警程序【例4-21】MOVR0,#DATA ;数据区首地址MOVDPTR,#BUFFER ;数据区长度指针LOOP:MOVA,R0CJNEA,#24H ,LOOP2 ;判是否为“$符(24H)SJMPLOOP1 ;是“$符,那么结束LOOP2:MOVA,R0 ;

11、不是“$符,那么传送 MOVX DPTR,AINC R0 INCDPTR DJNZ20H,LOOP ;数据串未查完,继续LOOP1:RETDATA: ;数据串【例4-22】BCDB: PUSHPSW ;现场保护PUSHA PUSH BMOVR3,00HMOVA,R0MOVR4,A ;BCD码千位送R4 LOOP:MOV A,R4MOVB,10MULABMOVR4,AMOVR5,BMOVB,10 ;R3、R4×10XCHA,R3MULA,BADD A,R5MOVR3,AXCHA,R4INCR0ADDA,R0XCHA,R3 ;R3R4R0送R3R4ADDCA,0MOVR4,ADJNZR2

12、,LOOP1 ;循环n1次POPB ;恢复现场POPAPOPPSWRET ;返回【例4-23】FILLE:PUSHPSW ;PSW及A保护入栈PUSHAMOVA,20H ;取第一个数据CLR CSUBBA,21H ;与第二个数据比拟JNCLOB1 ;第一个数据比第二个数据大,转LOB1MOVA,20H ;第一个数据比第二个数据小,交换二个数的位置XCHA,21HMOV20H,ALOB1:MOVA,22HCLRCSUBBA,20H ;第三个数据与前二个数据中的较大数比拟JNCLOB3 ;第三个数据大于前二个数据中的较大数,转LOB3MOVA,22HCLRCSUBBA,21H ;第三个数据与前二个

13、数据中的较小数比拟JNCLOB4MOVA,21HMOVR0,A AJMPLOB2LOB3:MOV R0,20HAJMPLOB2LOB4:MOV R0,22HLOB2: POPA ;恢复A和PSWPOPPSWRET4.7实例解析主程序:ORG0400HASCB:MOVR0,#61H ;R0指向原始数据的高位MOV R1,#70H ;存放结果数据ACALLCVERT ;调用转换程序,结果放在A中SWAPA ;结果的高位和低位互换MOVR1,A ;保存高位DECR0 ;R0指向原始数据的低位ACALLCVERT ;再次调用转换程序XCHDA,R1 ;低半字节与高半字节交换LOOP: SJMPLOOP

14、子程序:ORG0500HCVERT: MOVA,R0CLRCSUBBA,#30HCJNEA,#0AH,NEQAJMPBIGNEQ: JCCENDBIG:SUBB A,#07H ;大于0AH时再减去07HCEND:RETEND第5章【例5-1】MAIN:MOVSP , #60HLOOP:MOVA , P0ORLA , #10H ;P0.4=1MOVP0 , A ;准备读P0口的P0.4ANLA , #10HJC LOOP ;没有按下返回CALLDELAY ;调用延时程序, 去键盘抖动,再判断键是否按下MOVA , P0ORLA , #10H ;P0.4=1MOVP0 , A ;准备读P0口的P0

15、.4MOVA,P0ANLA , #10HJCLOOP ;没有按下返回MOVA , P0MOVR0 , AMOVA, #0FHSUBBA , R0 ;对P0.0-P0.3 求反ANLA, #0FHMOVP0 , A ;通过P0口输出使D1D4LED亮或者灭CALLDELAYJMPLOOPDELAY:MOVR7,#00FHN1:MOVR6,#0F0HN2:NOPDJNZR6 , N2DJNZR7 , N1RET【例5-2】主机软件设计:初始化程序INIT: MOV TMOD,#20HMOV TH1,#0F9H ;设置波特率为2400MOV TL1,#0F9HMOV SCON,#0F0H ;串行口为

16、方式3,SM2=1,允许接收SETB TR1 ;启动定时器RET通信子程序COM:SETBTB8 ;地址标志MOV SBUF, #ADDR1 ;发送要通信的从机地址LOOP:JNB TI, LOOP ;等待地址发完CLRTICLRTB8 ;数据标志MOVA, R0 ;取要发送的数据MOVSBUF, A ;发数据LOOP1:JNB TI,LOOP1 ;等待数据发完CLRTIRET从机软件设计:初始化程序INIT:MOVTMOD,#20HMOVTH1,#0F9H ;设置波特率为2400MOVTL1,#0F9HMOVSCON,#0F0H ;设置串行口为方式3,SM2=1,允许接收ANLPCON,#7

17、FHSETBTR1SETBES ;允许串行口中断SETBEAWAIT: SJMPWAIT ;听号串口中断效劳通信程序当接收到地址帧“呼号且地址帧与本机地址相符时,要置SM2为0以便准备接收数据帧,同时需要将本机地址发回作为应答,建立与主机的联络。编程如下:SIO:CLRRIPUSHPSW ;现场保护PUSHACCMOVA,SBUF ;接收串行数据XRLA,#ADDR ;判断是否与本机地址相符JNZBACK ;不相符那么返回CLRSM2 ;相符那么SM2为0且发回本机地址CLR ES ;关串口中断,防止中断嵌套MOVA, SBUF ;接收数据WAIT:JNBRI,WAITCLRRIMOVR0,

18、A ;保存数据SETB SM2 ;恢复多机通信,SETB ES ;开串口中断BACK:POPACC ;恢复现场POPPSWRETI【例5-3】MAIN: MOV SP , #60H ;设置堆栈为60HMOV TH1 , #0FDH ;设置波特率为9600MOV TL1 , #0FDHMOV TMOD , #21H ;T1 工作在方式2 MOV PCON , #00H ;SMOD=0MOV SCON , #0D0H ;串行方式3SETBTR1WSIO1: JNB RI , WSIO1CLR RIMOV A , SBUFMOV C , PANL C , /RB8MOV F0 , CMOV C ,

19、RB8ANL C , /PORL C , F0 ;完成P与RB8相异或JCERROR; 转到出错处理MOV C , PMOV TB8, CMOV SBUF , AERROR: JMP WSIO1第6章定时器中断应用实例1主程序代码:ORG 1000HMAIN:MOVSP,#60H ;设置推栈区MOVTMOD,#01H ;空时125msMOVTL0,#0DCHMOVTH0,#0BHSETBEA ;开总中断SETBET0 ;允许TO中断MOVR2,#08H ;计数8次SETBTR0 ;开始计时LOOP1:JBC20H,DY ;20H清零SJMPLOOP1DY:LCALLDISPLAYSJMPLOO

20、P12中断子程序:ORG 2000HT0SERVE: MOV TL0,#0DCH ;重置计数初值MOVTH0,#0BHDJNZR2,LOOP ;8次计数没剩那么继续计时MOV R2,#08H ;R2重置为8SETB 20H ;1s到,置位20HLOOP:RETI3一个实现“间隔一秒调一次显示功能的完整程序如下:ORG0000HAJMPMAINORG000BHAJMPINTT0ORG0050HMAIN: MOVSP,#60H MOV R0,#79HMOV R7,#06HMLO:MOV R0,#08HINCR 0DJNZR7,MLOMOVTMOD,#01HMOVTL0,#0DHMOVTH0,#0B

21、HMOVR2,#08HSETBEASETBET0SETBTR0LOOP: JB20H, LOOP1SJMPLOOPLOOP1: LCALLDISPLAYSJMPLOOPINTT0: MOVTL0,#0DCHMOVTH0,#0BHDJNZR2,RETURNMOVR2,#08HCPL20HRETURN: RETI第7章【例7-2】ORG0000HAJMPMAIN ;转到主程序ORG000BH ;T0中断矢量地址AJMPINQP ;转到中断效劳程序ORG0050HMAIN:MOVTMOD,#00H ;设置T0为方式0定时MOVTH0,#1EH ;装入T0的定时常数MOVTL0,#0CHSETBTR0

22、 ;启动T0SETBET0 ;允许T0中断SETBEA ;CPU开中断SJMP$ ;等待T0中断发生ORG0100H ;中断效劳程序INQP:MOVTH0,1EH ;重装定时常数MOVTL0,0CHCPLP1.0 ;P1.0变反输出RETI ;中断返回【例7-3】ORG0000HAJMPMAIN ;转到主程序ORG000BH ;T0的中断入口AJMPINTS ;转到中断效劳程序ORG0100H ;主程序入口地址MAIN:MOVSP , #60H ;设栈指针MOVTMOD,#06H ;设T0为计数方式2MOVTL0,#0FFH ;设TL0初值MOVTH0,#0FFH ;设TH0初值SETBTR0

23、 ;启动计数SETBET0 ;允许T0中断SETBEA ;中断开放 SJMP$ ;等待T0中断发生;中断处理程序INTS:PUSHA ;现场保护,把存放器A中的值压入堆栈中PUSHDPL ;把数据指针的低位DPL中的值压入堆栈中PUSHDPH ;把数据指针的高位DPH中的值压入堆栈中;现场恢复POPDPH ;把数据指针的高位DPH中的值从堆栈中取出POPDPL ;把数据指针的低位DPL中的值从堆栈中取出POPA ;把存放器A中的值从堆栈中取出RETI7.5实例解析【实例7-1】ORG0000H ;复位地址LJMPMAIN ;转入主程序ORG000BH ;T0中断入口地址LJMPIT0 ;转入T

24、0中断效劳程序ORG0100H ;主程序首地址MAIN:MOVTMOD,#01H ;设置T0为工作方式1MOVTH0,#3CH ;装入定时常数MOVTL0,#0B0HMOVIE,#10000010B ;T0开中断MOVR7,#0AH ;设置循环次数为10次SETBTR0;T0运行CLRP1.7SJMP$ ;等待中断;中断效劳程序:ORG000BHITO:MOVTL0,#0B0H ;重新装入时间常数MOVTH0,#3CHDJNZR7,LOOP ;循环10次CRLP1.7 ;500ms定时到了,P1.7位取反,闪烁效果LOOP:RETI ;中断返回END ;程序结束【实例7-2】ORG0000HA

25、JMPMAINORG000BH ;T0的中断入口AJMPTIME0 ;转入中断程序ORG001BH ;T1的中断入口AJMPTIME1 ;转入中断程序ORG0033HMAIN:MOVSP,#60H ;设置堆栈指针初值MOVR3,#0 ;去除软件计数器SETBP3.2 ;将P3.2,P3.5置1,即为输入状态SETBP3.5MOVTMOD,#59HMOVTH0,#3CH ;装入定时器初值MOVTL0,#0B0HMOVTH1,#0FFH ;装入计数器初值MOVTL1,#0FEHSETBTR0 ;启动定时器、计数器SETBTR1MOVIP,#08H ;T1中断优先于T0SETBET1 ;允许T1中断

26、SETBTF1 ;设TF0、TF1为中断标志 LOOP:SETBTF0SETBET0 ;允许T0中断SETBEA ;中断开放 JBTF0,$ ;判断TF0是否溢出,并一直等待JBTF1,LOOP ;判断TF1是否溢出,如果溢出就转到LOOPRETTIME0:MOVTL0,#0B0H ;设TL0初值MOVTH0,#3CH ;设TH0初值INCR3 ;计数器加1CPLTF0 ;TF0取反RETI ;中断返回TIME1:CLRTF0 ;去除中断标志CLRTF1CLRET0 ;禁止T0、T1中断CLRET1CLREA ;关中断RETI ;中断返回第8章【例8-2】MAIN:MOVSP ,#60HLOO

27、P:MOVA ,P0ORLA,#0FH ;P0.0P0.3=1MOVP0,A ;准备读P0口ANLA, #0FH JNZLOOP ;没有按下返回CALL DELAY ;调用延时程序,去键盘抖动,再判断键是否按下MOV A,P0ORL A,#0FH ;P0.0P0.3=1MOVP0,A ;准备读P0口MOVA,P0ANLA,#01HJZ PP0 ;KEY0按下调用PP0MOVP0,A ;准备读P0口MOVA,P0ANLA,#02HJZPP1 ;KEY1按下调用PP1MOVP0,A ;准备读P0口MOVA,P0ANLA,#04HJZPP2 ;KEY2按下调用PP2MOVP0,A ;准备读P0口MO

28、VA,P0ANL A,#08HJZPP3 ;KEY3按下调用PP3JMPLOOPDELAY: MOV R7,#0F0HN1: MOV R6, #0F0HN2: NOPDJNZ R6,N2DJNZ R7,N1RET【例8-3】MAIN:MOV SP,#60HLOOP:MOVA, #01HMOVR2, #4OUTPUT:MOVP1, ARLACALLDELAY DJNZR2, OUTPUTLJMPLOOPDELAY:MOVR6, #0MOVR7, #0DELAYLOOP:DJNZ R6, DELAYLOOPDJNZ R7, DELAYLOOPRETEND8.3实例解析程序设计如下:OUTBITEQ

29、U 0FE02H ;位控制口CLK164 EQU 0FE04H ;段控制口(接164时钟位)DAT164EQU 0FE06H ;段控制口(接164数据位)IN EQU 0FE00H ;键盘读入口 HASRCVEQU20H.0 ; 接收标志位LEDBUFEQU40H ;显示缓冲RCVBUFEQU50H ;接收缓冲指令ORG0000H一般用在一段源程序的前面,用来说明紧随其后的程序段的起始地址。下面的指令说明指令LJMP START的地址为0000H。ORG0000HLJMPSTART ;执行该指令后将转去执行以START为标号;的程序段,标志着程序的开始执行串行口中断子程序,程序的入口地址为00

30、23H,该段程序首先判断是否有发送中断,假设没有发送中断标志,那么转去执行S0_R程序段,接受数据并保存;假设有发送中断标志,清收发中断标志TI,转去执行S0_RET实现中断返回。程序设计如下:ORG0023HJNBTI, S0_RCLRTI NOPSJMPS0_RETS0_R: ; 接收数据CLRRIMOVRCVBUF,SBUF ;保存数据 SETB HASRCV ;提示收到数据 NOPS0_RET: RETI下面这两条指令用于定义数码管的显示内容,汇编程序将DB指令中的内容依次存入从标号LEDMAP开始的存储单元中。程序代码如下:LEDMAP: ;八段数码管显示码 DB 3FH, 06H,

31、 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H延时子程序,将会在读取键值和显示数码管时用到。程序代码如下:DELAY: ;延时子程序MOVR7, #0DELAYLOOP:DJNZR7, DELAYLOOPDJNZR6, DELAYLOOPRETLED显示子程序,将显示显示缓冲器中的内容。程序代码如下:DISPLAYLED:MOVR0, #LEDBUF ;入口参数MOV R1, #6 ;共6个八段管MOVR2, #00100000B ;从左边开始显示LOOP:MOVDPTR, #OUTBITMOVA,

32、 #0 MOVXDPTR, A ;关所有八段管MOV A, R0MOV B, #8 ;送164,共8个段DLP:RLCAMOVR3, A MOVACC.0, C MOVDPTR, #DAT164 ;数据送往段控制口,显示其中某一段MOVX DPTR, AMOVDPTR, #CLK164 ;产生一个正脉中冲给CLK164SETBACC.0 MOVXDPTR, ACLRACC.0MOVXDPTR, AMOVA, R3 DJNZB, DLP MOV DPTR, #OUTBIT MOV A, R2 MOVXDPTR, A ;显示一个八段管MOVR6, #1CALLDELAY MOVA, R2 ;显示下

33、一个八段管 RRAMOV R2, A INC R0DJNZ R1, LOOP RET检测键盘输入子程序,用于判断是否有按键按下。程序代码如下:TESTKEY: MOVDPTR, #OUTBIT MOV A, #0 MOVX DPTR, A ;输出线置为0MOV DPTR, #INMOVXA, DPTR ;读入键状态CPLAANLA, #0FH ;高四位不用RET该指令段定义了按键对应的键码,读入的按键都要转换成键码。程序代码如下:KEYTABLE: ;键码定义 DB 16H, 15H, 14H, 0FFHDB 13H, 12H, 11H, 10HDB 0DH, 0CH, 0BH, 0AHDB

34、0EH, 03H, 06H, 09HDB 0FH, 02H, 05H, 08HDB 00H, 01H, 04H, 07H读入键值,转换为键码,并判断按键是否释放。程序代码如下:GETKEY:MOVDPTR, #OUTBITMOVP2, DPH MOVR0, IN MOVR1, #00100000B MOVR2, #6 KLOOP:MOVA, R1 ;找出键所在列 CPLA MOVXDPTR, ACPL ARRA MOV R1, A ;下一列MOVXA, R0 ;续键盘 CPLA ;取反ANLA, #0FHJNZGOON1 ;该列有键入 DJNZR2, KLOOP MOVR2, #0FFH ;没

35、有键按下, 返回 0FFH SJMP EXITGOON1:MOVR1, A ;键值 = 列 X 4 + 行MOVA, R2DECA RLARLAMOV R2, A ;R2 = (R2-1)*4 MOVA, R1 ;R1中为读入的行值 MOV R1, #4 LOOPC: RRCA ;移位找出所在行JCEXIT INCR2 ;R2 = R2+ 行值DJNZR1, LOOPCEXIT: MOV A, R2 ;取出键码MOV DPTR, #KEYTABLEMOVCA, A+DPTR ;查表MOVR2, A WAITRELEASE:MOVDPTR, #OUTBIT ;等键释放CLR A MOVXDPTR

36、, AMOVR6, #10 CALLDELAYCALLTESTKEY ;调检测键盘输入子程序JNZ WAITRELEASEMOVA, R2 ;出口参数 RET程序从此处开始执行,首先设置定时器和串口的工作方式,波特率, 允许串口中断,然后进行数码管全亮显示,然后判断是否有接受数据, 有那么显示,判断是否有按键输入。程序代码如下:START:MOV SP, #60H MOVIE, #0 ;屏蔽所有中断 MOVTMOD,#020H ;定时器1工作于方式2 (8位重装)MOVTH1, #0F3H ;波特率*2400bps 6MHZMOVTL1, #0F3HANL PCON,#07FH ;SMOD 位

37、清零 MOVSCON,#050H ;串行口工作方式设置MOV LEDBUF, #0FFH ;显示 .8. MOV LEDBUF+1, #0FFH MOVLEDBUF+2, #0FFHMOV LEDBUF+3, #0FFHMOV LEDBUF+4, #0MOV LEDBUF+5, #0SETBTR1SETBESSETBEAMLOOP:JB HASRCV, RCVDATA ;收到数据?HASRW1那么转利RCVDATACALLDISPLAYLED ;没有收到数据那么显示CALLTESTKEY ;有键入?JZ MLOOP ;无键入, 继续显示 CALLGETKEY ;读入键码ANLA, #0FH ;

38、通讯口输出键码MOVSBUF,ARCVDATA:CLR HASRCV ;请接收标志位 MOV A, RCVBUF ;接收数据MOVDPTR, #LEDMAPMOVCA, A+DPTR ;查要显示的ED值MOV LEDBUF+5, ALJMPMLOOP ;显示数据END第9章9.3单片机应用系统设计实例1程序中用到的端口和数据的定义DAT EQUP3.5 ;读写DS18B20GZDL EQU P1.0 ;工作电流 CHECKPOWER EQU P1.1GZEQUP1.2 ;防盗输入GZZSEQUP1.3 ;控制指示灯KZEQU21H.7DYEQUP1.4 ;电源ONEQUP1.6 ;P1.6=0

39、 开启,P1.6=1关闭GZK EQUP1.5 ;开启PCOUNT EQU P3.2 ;使用计数器CLEARDOG EQU P1.7 ;看门狗MAX813复位信号KEY0 EQU P3.3 ;键码0KEY1 EQU P3.4 ;键码1MAV485RW EQU P3.7 ;MAX485串行输入/输出控制位WDLSB EQU30H ;温度值低位WDMSB EQU31H ;温度值高位SWCEQU2DH ;开关计数HALFTIME EQU 2EH ;半小时延时SWCFBIT 06HDELAYKEY EQU 34H ;0 空闲,1 正在计时,2 延时到COUNT EQU 36H ;开/关时间计时;恒定温度常数WDCSH EQU01H ;24WDCSL EQU 80H;温度上限WDSXH EQU01H ;28WDSXL EQU0C0H;温度下限WDXXH EQU01HWDXXL EQU090H ;25SONEQU 37H ;开关状态变量SSCOUNT EQU 38H ;收发时钟没有接收S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论