6总结与体会
这次基于单片机的测温系统的设计,基本达到设计要求,在高兴之余也有了些体会。
在本次设计的过程中,我发现很多的问题和困难,但经过自己的不断努力和尝试并在老师的指导帮助下,基本完成了设计要求。虽然以前也做过相关的设计,但这次设计真的让我长进了很多,我们只有试着去做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的设计中,我意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。
附录1
16
附录2
17
ORG 0000H AJMP MAIN ORG 0030H
MAIN:MOV SP,#60H SETB P2.4 MOV 30H,#0 MOV 31H,#0 MOV 32H,#0
MAIN1:LCALL GET_TEMP ;采集温度
LCALL SEPERATE ;对采集后的温度数据进行处理 LCALL ZHUANHUAN ;二进制数转换为BCD的形式 LCALL QINGLING ;转换为满足输出的类型 LCALL JIANTIAO ;扫描键盘模块 LCALL BAOJING ;报警设置模块
LCALL SHUCHU ;显示数据到数码管 SJMP MAIN1
;******************************************************************* GET_TEMP:
CLR EA ;使用DS18B20一定要禁止任何中断产生 LCALL INT ;调用初使化子程序 MOV A,#0CCH ;
LCALL WRITE ;送入跳过ROM命令 MOV A,#44H
LCALL WRITE ;送入温度转换命令
LCALL INT ;温度转换完全,再次初使化DS18B20 MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令 MOV A,#0BEH
LCALL WRITE ;送入读温度暂存器命令 LCALL READ
MOV R7,A ;读出温度值低字节存入R7 LCALL READ
MOV R6,A ;读出温度值高字节存入R6 SETB EA RET
;****************************************************************** INT: ;初始化DS18B20子程序 CLR EA
L0:CLR P2.1 ;复位 MOV R2,#149
L1:DJNZ R2,L1 ;596US
SETB P2.1 ;释放DS18B20总线 MOV R2,#15 ;4US
18
L2:DJNZ R2,L2 ;60US
CLR C ;2US,清DS18B20存在信号 MOV C,P2.1 ;取DS18B20存在信号
JC L0 ;判断DS18B20存在吗?不存在则重新来 MOV R2,#125 ;存在则拉高 SETB P2.1
L3:DJNZ R2,L3 ;共500US RET
;****************************************************************** WRITE:
MOV R1,#08H ;设置写位个数 WLOP:RRC A ;把写的位放到C ACALL WRBIT ;调写1位子程序 DJNZ R1,WLOP ;8位全写完? RET WRBIT:
MOV R2,#14 ;设置时间常数 CLR P2.1 ;写开始 NOP ;2US
MOV P2.1,C ;C内容存到总线 WDLT:DJNZ R2,WDLT ;56US
SETB P2.1 ;释放总线 RET
;******************************************************************* READ:
MOV R1,#8H ;设置读位数 RLOP:ACALL RDBIT ;调读1位子程序
RRC A ;把读到的位在C中的依次送给A DJNZ R1,RLOP ;8位读完? RET RDBIT:
MOV R2,#13 ;设置时间常数 CLR P2.1
NOP ;2US
SETB P2.1 ;释放总线 NOP ;2US
MOV C,P2.1 ;把总线上的内容读到C RDDLT: DJNZ R2,RDDLT ;等待52US SETB P2.1 RET
;***************************************************************** ;程序名称:SEPERATE
;功能:处理采集后的的数据,把小数部分分开,R6放整数R7放小数,F0放符号位
19
;入口参数: R6,R7 ;出口参数: R6 R7 F0
;***************************************************************** SEPERATE:
MOV A,R6 MOV C,ACC.7
MOV F0,C ;符号位 JC SEPERATE1 SJMP SEPERATE2 SEPERATE1:MOV A,R6 CPL A MOV R6,A MOV A,R7 CPL A CLR C INC A MOV R7,A MOV A,R6 ADDC A,#00H MOV R6,A
SEPERATE2:MOV 40H,R7
ANL 40H,#0FH ;小数部分 MOV R0,#12 ;移12次 SEPERATE3:MOV A,R6 RRC A MOV R6,A MOV A,R7 RRC A MOV R7,A MOV A,41H RRC A
MOV 41H,A ;整数部分 DJNZ R0,SEPERATE3
MOV R6,41H ;存整数部分 MOV R7,40H ;存小数部分 RET
;***************************************************************** ;程序名称:ZHUANHUAN
;功能:将R6R7中的二进制数转换为BCD的形式 ;入口参数:R6R7 ;出口参数:R4R5R6R7
;***************************************************************** ZHUANHUAN:
20