📄 wodechengxu.asm.txt
字号:
;------------------------- ;定义变量
COMBCD_H EQU 50H ;压缩BCD码存放在50H,51H中
COMBCD_L EQU 51H
BCD_1 EQU 52H
BCD_2 EQU 53H
BCD_3 EQU 54H
BCD_4 EQU 55H ;非压缩BCD码分别存放在52H,53H,54H,55H中
;----------
8155_COM EQU 0900H ;分配内存资源
8155_A EQU 0901H
8155_B EQU 0902H
8155_C EQU 0903H
8155_TL EQU 0904H
8155_TH EQU 0905H ;分配8155的内存资源
;----------
8279_DATA EQU 0E00H
8279_COM EQU 0E01H
;----------
7109_L EQU 0D02H
7109_H EQU 0D01H ;分配ICL7109的内存资源
;-------------------------
ORG 0000H
JMP START
;--------------------
ORG 0050H ;主程序
START:
LCALL INITIA_SUB
MAIN_LOOP:
LCALL ADC_SUB ;A/D转换子程序
LCALL BIN-TO-BCD ;二进制转换位十进制子程序
LCALL DISPLAY_SUB ;显示子程序
LCALL DELAY_SUB ;延时子程序
JMP MAIN_LOOP
;-------------------- ;初始化子程序
INITIA_SUB: ;8155-INITIA---------
MOV DPTR,#8155_COM
MOV A,#01001100b ;写入8155的命令字,A,B口为输出口,停止定时器计数
MOVX @DPTR,A
MOV DPTR ,#8155_C
MOV A,#00H
MOVX @DPTR,A ;清C口,启动8155
;------------
;8279-INITIA--------- ;8279初始化
MOV DPTR,#8279_COM
MOV A,#00H ;8字符显示,左入口
MOVX @DPTR,A
MOV A,#2AH ;十分频
MOVX @DPTR,A
MOV A,#0D1H ;清显示RAM
MOVX @DPTR,A
LP1: MOVX A,@DPTR
JB ACC.7,LP1 ;判断是否清除完毕
MOV A,#10010000b ;写显示RAM,写后地址自动增1
MOVX @DPTR,A
;------------
;4051-INITIA---- ;CD4051初始化
MOV DPTR,#0903H
MOV 24H,#10H
MOV A,24H
MOVX @DPTR,A ;温度测量选择通道CH0,由8155C口控制
MOV DPTR,#0A00H
MOV A,#44H
MOVX @DPTR,A ;显示RAM命令字
;----------
;ICL7109-INITIA--- ;ICL7109初始化
MOV DPTR,#0904H
MOV A,#40H ;设置A/D时钟为500KHZ
MOVX @DPTR,A
;------------
SETB P3.4
RET
;--------------------
ADC_SUB: JB P3.4 ,$ ;循环等待A/D转换结束
MOV R0,#5FH
DJNZ R0,$ ;延时
MOV R0,#30H
MOV DPTR,#0D02H
MOVX A, @DPTR
MOV @R0,A ;A/D转换结果低八位存入30H
INC R0
MOV DPTR,#0D01H
MOVX A,@DPTR
ANL A,#0FH
MOV @R0,A ;A/D转换结果高四位存入31H
RET
;----
;BIN-TO-BCD的入口为30H和31H--------;二进制转换为BCD
BIN-TO-BCD: MOV R0,#30H
MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R2,A
;----------
CLR A
MOV R6,A
MOV R5,A
MOV R4,A
MOV R7,#16
LOOP:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP ;压缩BCD码转换为非压缩BCD码
; ----------------
MOV COMBCD_H,R5 ;COMBCD_H存放高位
MOV COMBCD_L,R6 ;COMBCD_L存放低位
MOV A,COMBCD_H
MOV R0,#BCD_2
MOV @R0,A ;压缩BCD码的高字节放在BCD-2中
SWAP A ;压缩BCD码高字节的低四位和高四位对调
MOV R7,A ;结果先放在R7中保存
MOV A,@R0
ANL A,#0FH ;屏蔽高字节的高四位
MOV @R0,A ;高字节的低四位转换的非压缩BCD码放在BCD-2中
MOV A,R7
MOV R1,#BCD_1
ANL A,#0FH
MOV @R1,A ;高字节的高四位转换的非压缩BCD码放在BCD-1中
MOV A,COMBCD_L
MOV R0,#BCD_4
MOV @R0,A ;压缩BCD码的低字节放在BCD-4中
SWAP A ;压缩BCD码低字节的低四位和高四位对调
MOV R7,A ;结果先放在R7中保存
MOV A,@R0
ANL A,#0FH ;屏蔽低字节的高四位
MOV @R0,A ;低字节的低四位转换的非压缩BCD码放在BCD-4中
MOV A,R7
ANL A,#0FH
MOV R1,#BCD_3
MOV @R1,A ;低字节的高四位转换的非压缩BCD码放在BCD-3中
RET ;压缩BCD码转换为非压缩BCD码从高到低依次存在52H,53H,54H,55H
;--------------------------------------;显示子程序
DISPLAY_SUB:MOV DPTR,#8279_COM
MOV A,#90H
MOVX @DPTR,A
MOV DPTR,#8279_DATA
MOV A,#00H
MOVX @DPTR,A ;启动8279
MOV R2,#4 ;设置显示位数
MOV R0,#52H ;把要显示的数字的最高位放在R0中
MOV DPTR,#8279_DATA
DISPLAY_loop1: MOV A,@R0
PUSH DPH
PUSH DPL
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查显示的字符表
POP DPL
POP DPH
CJNE R2,#02H,LOP ;判断是否循环到第三位
ADD A,#80H ;第三位后面显示小数点
LOP: MOVX @DPTR,A
INC R0
DJNZ R2,DISPLAY_loop1 ;判断要显示的四位是否显示完毕
MOV A,#39H ;显示摄氏符号C
MOVX @DPTR,A
RET
;-----------------------------------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH, ;显示的字符表,依次为0,1,2,3,4,5,6,7,8,9
DB 7DH,07H,7FH,6FH
;-----------------------------------
DELAY_SUB:
MOV R5,#0FH ;延时
DELAYLP1: MOV R6,#0FH
DELAYLP2:
NOP
NOP
DJNZ R6,DELAYLP2
DJNZ R5,DELAYLP1
RET
END ;结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -