📄 0809_ad.asm
字号:
;AD转换实验,用中断方法读结果
;CS8255----F228H,CS0809----F230H,P3.2----EOC,,IN0---0~5V
;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(通过短路套已接好)
;PA0~7-----LEDA~LEDDP(通过短路套已接好)
;---------------------------------------------------------
C8255 EQU 0F22BH ;8255命令口地址
P8255A EQU 0F228H ;8255 PA口地址
P8255B EQU 0F229H ;8255 PB口地址
P8255C EQU 0F22AH ;8255 PC口地址
C0809 EQU 0F230H ;ADC0809片选信号
LED0 DATA 50H ;显存区
LED1 DATA 51H
LED2 DATA 52H
;---------------------------------------------------------
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP FX0
ORG 0030H
MAIN: MOV SP,#60H
MOV LED0,#00H ;置显示初始值
MOV LED1,#00H
MOV LED2,#00H
MOV DPTR,#C8255 ;8255初始化
MOV A,#80H ;8255 PA,PB,PC口输出
MOVX @DPTR,A
CLR IT0
SETB EX0
SETB EA ;开中断
MOV DPTR,#C0809
MOVX @DPTR,A ;启动AD转换
LOOP: ACALL DISP ;显示子程序
AJMP LOOP ;循环扫描
;---------------------------------------------------------
DISP: MOV DPTR,#P8255C
MOV A,#00H
MOVX @DPTR,A ;通过8255C口选种第一个数码管
MOV DPTR,#LEDSEG
MOV A,LED0
MOVC A,@A+DPTR
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY ;延时,增加显示亮度
CLR A ;带了锁存器,送下一个数据前将数据撤消
MOVX @DPTR,A
MOV DPTR,#P8255C
MOV A,#08H
MOVX @DPTR,A ;通过8255C口选种第二个数码管
MOV DPTR,#LEDSEG
MOV A,LED1
MOVC A,@A+DPTR
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY
CLR A
MOVX @DPTR,A
MOV DPTR,#P8255C
MOV A,#10H
MOVX @DPTR,A ;通过8255C口选种第三个数码管
MOV DPTR,#LEDSEG
MOV A,LED2
MOVC A,@A+DPTR
ORL A,#80H ;加个小数点在最高位后面
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY
CLR A
MOVX @DPTR,A
RET
;---------------------------------------------------------
FX0: ;中断服务程序
MOV DPTR,#C0809
MOVX A,@DPTR ;读转换结果
MOV B,#5
MUL AB ;相乘结果为16位,再右移8位,则B刚好为整数部分
MOV LED2,B
MOV B,#10
MUL AB ;小数部分放大10倍
MOV LED1,B
MOV B,#10
MUL AB
MOV LED0,B
FX0_RET:MOV DPTR,#C0809
MOVX @DPTR,A ;启动AD下一次转换
RETI
DELAY: MOV R7,#5
DJNZ R7,$
RET
;---------------------------------------------------------
;LED显示常数表
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;---------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -