大连理工大学本科设计报告(单片机原理综合设计)题目:课程名称:单片机实验学院(系):信通学院专业:通信工程班级:电通1202学号:*********学生姓名:***成绩:20 15 年 5 月8 日目录1.题目及内容 (2)2.设计思路 (2)2.1数码管显示 (2)2.2显示内容转换 (2)2.3闪烁报警 (2)2.4温度上下限的设置 (2)2.5中断程序 (2)3.相关资料 (3)4.电路图 (3)5.程序框图 (4)5.1中断程序流程图 (4)5.2主程序流程图 (6)6.源程序 (6)7.调试中所遇到的问题 (14)8.调试解决了的问题. (14)9.个人体会(总结) (14)一、题目及内容用汇编语言模拟电梯运动系统设计程序,要求有完成如下要求:利用zlg7290和pcf8563t以及A/D转换实现下述功能。
1.利用键盘改变显示内容(能读A/D转换值、读取时间),并且闪烁显示3秒,变成稳定显示。
2.键盘设定温度上限值和下限制,当温度达到上限值后,显示闪烁;同样,当温度达到下限值后,同样发出报警,并闪烁。
3.当时间设定值达到设定值后,同样发出报警,并闪烁。
4.时间闪烁与温度闪烁时间长短有区别。
二、设计思路1.数码管显示通过ZLG7290B的数码管显示,将数据转换成BCD码,然后通过字形码的对应关系显示,通过中断程序每秒读取一次数据。
2.显示内容转换通过开关控制显示的内容,SW1低是时间,在SW1时间的情况下,SW2高是年月日;SW1高是温度,在SW1温度情况下,SW2高显示温度上限,SW2低,SW3高显示温度下限3.闪烁报警当条件满足报警时,通过调用显示程序,通过控制闪烁控制字,控制数码管相应的位置闪烁。
时间报警闪烁一分钟,温度报警一直闪烁。
4.温度上下限的设置通过键值设置上下限,通过不同按键对应于上限和下限的设置,然后的键值通过一定计算赋给上下限的存储空间。
5.中断程序两个中断,其中中断0用于每秒显示,中断1用于键值的读取。
三、相关资料MCS-51单片机应用实验教程四、电路图五、程序框图图1 显示中断程序流程图六、源程序;**************************************************************** ;SW1低是时间,在SW1时间的情况下,SW2高是年月日;SW1高是温度,在SW1温度情况下,SW2高显示温度上限,SW2低,SW3高显示温度下限;****************************************************************SDA BIT P1.0 ;I^2C引脚信号SCL BIT P1.1RST BIT P1.7 ;7290复位SW BIT P1.2 ;年份显示SW2 BIT P1.3 ;温度,时间转换SW3 BIT P1.5 ;温度上限DQ BIT P1.4 ;温度控制TEMPER_L EQU 36HTEMPER_H EQU 35HTEMPER EQU 34HTEMPER_NUM EQU 60HTEMMAX EQU 61HTEMMIN EQU 62H WSLA_7290 EQU 70H ;7290口地址RSLA_7290 EQU 71HWSLA_8563 EQU 0A2H ;8563口地址RSLA_8563 EQU 0A3HADDR EQU 20H;数据缓冲区首地址DISDA EQU 40H;显示缓冲区DISCUNT EQU 08H ;显示缓冲区长度FLAG1 BIT 00H;**************************** ORG 8000HLJMP MAINORG 8003H ;INT0中断源LJMP INT_7290ORG 8013HLJMP INT_KEYORG 8100HMAIN: MOV SP,#70HCLRRST ;ZLG7290B复位LCALL DELAYSETB RST;****************************;设定PCF8563T的时间和命令参数;****************************MOV 10H,#00HMOV 11H,#1FHMOV 12H,#50HMOV 13H,#09HMOV 14H,#50HMOV 15H,#11HMOV 16H,#05HMOV 17H,#04HMOV 18H,#15HMOV 19H,#10HMOV 1AH,#00HMOV 1BH,#00HMOV 1CH,#00HMOV 1DH,#83H;**************************** MOV TEMMAX,#40H ;温度上限初值MOV TEMMIN,#00H ;温度下限初值MOV R7,#0EHMOV R0,#10HMOV R2,#00HMOV R3,#WSLA_8563LCALL WRNBYTSETB EASETB EX0SETB IT0SETB EX1SETB IT1SJMP $;****************************;显示中断服务子程序;****************************INT_7290:JB SW,WENDUMOV R7,#07HMOV R0,#20HMOV R2,#02HMOV R3,#WSLA_8563MOV R4,#RSLA_8563LCALL RDADDMOV A,21HCJNE A,19H,XIANSHIMOV 50H,#70H ;闪烁MOV 51H,#18HMOV R7,#02HMOV R0,#50HMOV R2,#07HMOV R3,#WSLA_7290LCALL WRNBYTMOV 53H,#00H ;设置闪烁频率MOV R7,#01HMOV R0,#53HMOV R2,#0CHMOV R3,#WSLA_7290LCALL WRNBYTXIANSHI:LCALL ADJUSTLCALL CHAIFENMOV R7,#08HMOV R2,#10HMOV R3,#WSLA_7290JB SW2,YEARSMOV R0,#38HSJMP DISPYEARS: MOV R0,#28HDISP: LCALL WRNBYTLJMP JIESHUWENDU: JB SW2,THJB SW3,TLMOV DISDA+7,#00HMOV DISDA+6,#00H MOV DISDA+5,#00HMOV DISDA+4,#00HMOV DISDA+3,#00H LCALL GET_TEMPERLCALL TEMPER_COVMOV A,TEMPERMOV B,#02HDIV ABMOV TEMPER,ALCALL BCD_CONTMOV R7,#DISCUNTMOV R0,#DISDAMOV R2,#10HMOV R3,#WSLA_7290LCALL WRNBYTLCALL DELAYCLR CMOV A,TEMPERANL A,#7FHSUBB A,TEMMAXJC NEXT11LCALL SHANSHUO1LJMP JIESHUNEXT11: CLR CMOV A,TEMPERANL A,#7FHSUBB A,TEMMINJNC JIESHULCALL SHANSHUO1LJMP JIESHUTH:MOV DISDA+7,#6EH ;最高位显示HMOV DISDA+6,#12HMOV A,TEMMAXLCALL BCD_CONTMOV R7,#DISCUNTMOV R0,#DISDAMOV R2,#10HMOV R3,#WSLA_7290LCALL WRNBYTLCALL DELAYLJMP JIESHUTL:MOV DISDA+7,#1CH ;最高位显示LMOV DISDA+6,#12HMOV A,TEMMINLCALL BCD_CONTMOV R7,#DISCUNTMOV R0,#DISDAMOV R2,#10HMOV R3,#WSLA_7290LCALL WRNBYTLCALL DELAYJIESHU: JNB P3.2,$ RETI;**************************** ****SHANSHUO1:MOV 50H,#70H ;闪烁MOV 51H,#07HMOV R7,#02HMOV R0,#50HMOV R2,#07HMOV R3,#WSLA_7290LCALL WRNBYTMOV 53H,#00H ;设置闪烁频率MOV R7,#01HMOV R0,#53HMOV R2,#0CHMOV R3,#WSLA_7290LCALL WRNBYTRETI;**************************** ***********************;键值控制温度上下限;**************************** ***********************INT_KEY:PUSH 00HPUSH 02HPUSH 03HPUSH 04HPUSH 07HPUSH ACCPUSH PSWLCALL DELAYLCALL RDKEYCJNE A,#0EH,XIAXIAN AKEY:JB P3.3 ,$LCALL RDKEYCLR CMOV 64H,ASUBB A,#0AHJNC AKEYMOV A,64HMOV B,#0AHMUL ABMOV R5,AAKEY1: JB P3.3,$ ;以查询方式等待下一次按键操作LCALL RDKEYCLR CMOV 64H,ASUBB A,#0AHJNC AKEY1MOV A,64HADD A,R5MOV TEMMAX,ALJMP DOWN XIAXIAN:CJNE A,#0FH,DOWN BKEY:JB P3.3 ,$LCALL RDKEYCLR CMOV 64H,ASUBB A,#0AHJNC BKEYMOV A,64HMOV B,#0AHMUL ABMOV R5,ABKEY1: JB P3.3,$ ;以查询方式等待下一次按键操作LCALL RDKEYCLR CMOV 64H,ASUBB A,#0AHJNC BKEY1MOV A,64HADD A,R5MOV TEMMIN,ALJMP DOWNDOWN: CLR IE1POP PSWPOP ACCPOP 07HPOP 04HPOP 03HPOP 02HPOP 00HRETI;*********************** RDKEY:MOV R0,#1FHMOV R7,#01HMOV R2,#01HMOV R3,#WSLA_7290MOV R4,#RSLA_7290LCALL RDADDMOV A,1FHDEC ARET;**************************** ************************ CHAIFEN:PUSH PSWPUSH ACCPUSH 03HPUSH 04HMOV A,20HLCALL CFMOV 38H,R3MOV 39H,R4MOV 3AH,#02HMOV A,21HLCALL CFMOV 3BH,R3MOV 3CH,R4MOV 3DH,#02HMOV A,22HLCALL CFMOV 3EH,R3MOV 3FH,R4MOV A,23HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 28H,R3MOV 29H,R4MOV A,25HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 2AH,R3MOV 2BH,R4MOV A,26HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 2CH,R3MOV 2DH,R4MOV 2EH,#0FCHMOV 2FH,#0DAHPOP 04HPOP 03HPOP ACCPOP PSWRET;**************************** ************************ ADJUST: PUSH ACCMOV A,20HANL A,#7FHMOV 20H,AMOV A,21HANL A,#7FHMOV 21H,AMOV A,22HANL A,#3FHMOV 22H,AMOV A,23HANL A,#3FHMOV 23H,AMOV A,24HANL A,#07HMOV 24H,AMOV A,25HANL A,#1FHMOV 25H,APOP ACCRET;############################ ###;温度采集;############################ ##GET_TEMPER:SETB DQBCD: LCALL INIT_1820JB FLAG1,S22LJMP BCDS22: LCALL DELAY1MOV A,#0CCHLCALL WRITE_1820MOV A,#44HLCALL WRITE_1820LCALL DELAYCBA: LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC: LCALL DELAY1MOV A,#0CCHLCALL WRITE_1820MOV A,#0BEHLCALL WRITE_1820LCALL READ_18200RET;############################ ###WRITE_1820:MOV R2,#8CLR CWR1: CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;############################ READ_18200:MOV R4,#2MOV R1,#36HRE00:MOV R2,#8RE01:CLR CSETB DQNOPCLR DQNOPNOPSETB DQMOV R3,#2DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;############################ TEMPER_COV:MOV A,#0F0HANL A,TEMPER_LSWAP AMOV TEMPER_NUM,AMOV A,TEMPER_LJNB ACC.3,TEMPER_COV1INC TEMPER_NUM;############################ TEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AADD A,TEMPER_NUMMOV TEMPER_NUM,AMOV TEMPER,TEMPER_NUMRET;############################ INIT_1820:SETB DQNOPCLR DQMOV R0,#80HTSR1: DJNZ R0,TSR1SETB DQMOV R0,#25HTSR2: DJNZ R0,TSR2JNB DQ,TSR3LJMP TSR4TSR3: SETB FLAG1LJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6TSR7: SETB DQRET;############################ ;延时子程序;############################ DELAY1:MOV R7,#20HDJNZ R7,$RET;########################### DELAY: PUSH 00HPUSH 01HMOV R0,#00HLP: MOV R1,#00HDJNZ R1,$DJNZ R0,LPPOP 01HPOP 00HRET;************************** ;BCD转换;**************************BCD_CONT:PUSH 07HPUSH 06HPUSH 05HPUSH 02HMOV B,#64HDIV ABMOV R7,AMOV R2,BMOV A,R2MOV B,#0AHDIV ABMOV R6,AMOV R5,BMOV A,R7LCALL CFMOV DISDA+2,R3MOV A,R6LCALL CFMOV DISDA+1,R3MOV A,R5LCALL CFMOV DISDA+0,R3POP 02HPOP 05HPOP 06HPOP 07HRET;**************************** *CF: PUSH 02HPUSH DPHPUSH DPLMOV DPTR,#LEDSEGMOV R2,AANL A,#0FHMOVC A,@A+DPTRMOV R3,AMOV A,R2SWAP AANL A,#0FHMOVC A,@A+DPTRMOV R4,APOP DPLPOP DPHPOP 02HRET;**************************** LEDSEG: DB0FCH,60H,0DAH,0F2H,66H,0B 6H,0BEH,0E4HDB0FEH,0F6H,0EEH,3EH,9CH,7A H,9EH,8EH;**************************** ;IIC总线通讯子程序;**************************** WRNBYT: PUSH PSWPUSH ACCWRADD: MOV A,R3LCALL STALCALL WRBYTLCALL CACKJB F0,WRADDMOV A,R2LCALL WRBYTLCALL CACKJB F0,WRADDWRDA: MOV A,@R0LCALL WRBYTLCALL CACKJB F0,WRADDINC R0DJNZ R7,WRDALCALL STOPPOP ACCPOP PSWRET;**************************** STA: SETB SDASETB SCLNOPNOPNOPNOPNOPCLR SDANOPNOPNOPNOPNOPCLR SCLRET;**************************** WRBYT: PUSH 06HMOV R6,#08HWLP: RLC AMOV SDA,CSETB SCLNOPNOPNOPNOPNOPCLR SCLDJNZ R6,WLPPOP 06HRET;**************************** CACK: SETB SDASETB SCLCLR F0MOV C,SDAJNC CENDSETB F0CEND: CLR SCLRET;**************************** STOP: CLR SDASETB SCLNOPNOPNOPNOPNOPSETB SDANOPNOPNOPNOPNOPSETB SCLSETB SDARET;**************************** RDADD: PUSH PSWPUSH ACCRDADD1: LCALL STAMOV A,R3LCALL WRBYTLCALL CACKJB F0,RDADD1MOV A,R2LCALL WRBYTLCALL CACKJB F0,RDADD1LCALL STAMOV A,R4LCALL WRBYTLCALL CACKJB F0,RDADD1RDN: LCALL RDBYTMOV @R0,ADJNZ R7,ACKLCALL MNACKLCALL STOPPOP ACCPOP PSWRETACK: LCALL MACKINC R0SJMP RDN;**************************** RDBYT: PUSH 06HMOV R6,#08HRLP: SETB SDASETB SCL;**************************** NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOP;*************************** MOV C,SDAMOV A,R2RLC AMOV R2,ACLR SCLDJNZ R6,RLPPOP 06HRET;**************************** MACK: CLR SDASETB SCLNOPNOPNOPNOPNOPCLR SCLSETB SDARET;**************************** MNACK: SETB SDASETB SCLNOPNOPNOPNOPNOPCLR SCLCLR SDARET;*************************** END七、调试中所遇到的问题1.温度DQ占用了中断P3.3导致无法使用两个中断2.P1口使用太多,无法连接步进电机3.键盘输入接触不好,导致温度上下限的输入不准确4.中断太长,有时会程序卡死5.显示时间温度报警不起作用6.没有时间设置模块八、调试解决了的问题a)将DQ连接到P1.4口,解放中断口来使用中断程序b)判断键盘输入值是否在指定范围内,如果不在继续按键c)将开关的功能改在按键实现九、个人体会(总结)经过这几周的单片机实验课程,进一步掌握了汇编语言的编写,虽然我们没有正式的上单片机的理论课,但是基于计算机原理的学习,我们还是能胜任单片机程序的编写工作,这次的综合设计丰富了我对汇编语言的一些经验,同时锻炼了自己的动手能力。