ADC0809转换器实验程序
设计一个简单的单片机数据采集系统,利用ADC0809转换器,轮流采集模拟量输入电
压信号,并将模拟量转换成数字量,通过数码管显示器显示 。
1.延时方法的AD转换程序
ORG 0000H
SJMP START
ORG 0030H
START:MOV DPTR, #8003H ;8255 初始化
MOV A, #81H ;各口工作状态
MOVX @DPTR, A
MAIN: MOV DPTR, #0000H ;ADC0809的通道一地址
MOVX @DPTR, A
LCALL DL
LOOP1:MOVX A, @DPTR
MOV B, #51 ; 数据处理
DIV AB
MOV 78H, A ; 整数部分储存
MOV A, B
MOV B, #5
DIV AB
MOV 79H, A
MOV 7AH, B DISP: MOV DPTR, #8001H ; 送位控B口
MOV A, #02H ;第3数码管
MOVX @DPTR,A
MOV DPTR, #TAB ;送断码
MOV A, 78H
MOVC A, @A+DPTR
MOV DPTR, #8000H
MOVX @DPTR, A
LCALL DELAY
MOV DPTR, #8001H ; B口地址
MOV A, #04H ;第二数码管显示
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 79H
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A ;送A口显示
LCALL DELAY
MOV DPTR, #8001H
MOV A, #08H ;第一位数码管
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 7AH
MOVC A, @A+DPTR
MOV DPTR, #8000H
MOVX @DPTR,A
LCALL DELAY
SJMP MAIN
DL: MOV R7, #01H
AA: MOV R6, #8EH
AA1: MOV R5, #02H
DJNZ R5, $
DJNZ R6, AA1
DJNZ R7, AA
RET
DELAY:MOV R6, #02H
DL0:MOV R5, #3FH
DJNZ R5, $
DJNZ R6, DL0
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
2.查询程序
ORG 0000H
SJMP START
ORG 0030H
START:MOV DPTR, #8103H ;8255 初始化
MOV A, #81H ;各口工作状态
MOVX @DPTR, A
MAIN:MOV DPTR, #0000H ;ADC0809的通道一地址
MOVX @DPTR, A LOOP:JNB P3.3, LOOP1
SJMP LOOP
LOOP1:MOVX A, @DPTR
MOV B, #51 ; 数据处理
DIV AB
MOV 78H, A ; 整数部分储存
MOV A, B
MOV B, #5
DIV AB
MOV 79H, A ;
MOV 7AH, B ; DISP: MOV DPTR, #8101H ; 送位控B口
MOV A, #02H
MOVX @DPTR, A
MOV DPTR, #TAB ; 送断码
MOV A, 78H ;
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A ;送A口
LCALL DELAY
MOV DPTR, #8101H ; B口地址
MOV A, #04H ;第二数码管显示
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 79H
MOVC A, @A+DPTR
MOV DPTR #8100H
MOVX @DPTR, A ;送A口显示
LCALL DELAY
MOV DPTR, #8101H
MOV A, #08H ;第一位数码管
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 7AH
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A
LCALL DELAY
SJMP MAIN
DELAY:MOV R6, #02H
DL0:MOV R5, #3FH
DJNZ R5, $
DJNZ R6, DL0
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
3.中断方法
ORG 0000H
SJMP START
ORG 0013H
SJMP INT11
ORG 0030H
START:MOV IE, #84H
SETB IT1
SETB EA
MOV DPTR, #8103H ;8255 初始化
MOV A, #81H
MOVX @DPTR, A
MOV DPTR, #0000H ;DAC0809的通道一地址
MOVX @DPTR , A MAIN: CJNE R7, #0FFH, MAIN
MOV R7, #00H
MOV 50H, @R0
LCALL SJCL
LOOP1:LCALL DISP
SJMP MAIN
INT11: MOVX A, @DPTR
MOV @R0, A
MOV R7, #0FFH
MOV DPTR, #0000H
MOVX @DPTR, A
RETI
SJCL: MOV A, @R0
MOV B, #51 ; 数据处理
DIV AB
MOV 78H, A ;
MOV A, B
MOV B, #2 ;
MUL AB
MOV B, #10
DIV AB ;
MOV 79H, A ;
MOV 7AH, B
RET
DISP: PUSH DPH
PUSH DPL
PUSH ACC
PUSH PSW
CLR RS1 ;改变当前寄存器组为组1
SETB RS0
MOV DPTR, #8101H ; 送位控
MOV A, #02H
MOVX @DPTR, A
MOV DPTR, #TAB ; 送断码
MOV A, 78H ;
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A
LCALL DELAY
MOV DPTR, #8101H ;
MOV A, #04H
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 79H
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A
LCALL DELAY
MOV DPTR, #8101H ;
MOV A, #08H
MOVX @DPTR, A
MOV DPTR, #TAB ;
MOV A, 7AH
MOVC A, @A+DPTR
MOV DPTR, #8100H
MOVX @DPTR, A
LCALL DELAY
POP PSW ;恢复当前寄存器组的组号
POP ACC
POP DPL
POP DPH
RET
DELAY:MOV R6, #02H
DL0:MOV R5, #3FH
DJNZ R5, $
DJNZ R6, DL0
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;键处理程序KEY
KEY: LCALL KEYCHULI ;调键处理子程序
JZ EXIT
LCALL DISP ;去抖动
LCALL DISP
LCALL KEYCHULI ;调键处理子程序
JZ EXIT ;
MOV B, 20H ;保存键值
KEYSF:LCALL KEYCHULI ;调键处理子程序
JZ KEY1 ;按键释放,准备退出KEY子程序
LCALL DISP
LJMP KEYSF ;等待键释放
KEY1:MOV 20H, B ;恢复键值
EXIT: RET
;*********************************** ;键处理子程序KEYCHULI
KEYCHULI: MOV P1, #0FFH ;先向P1口写1
MOV A, P1
CPL A
MOV 20H, A ;保存取反后的键值
RET
END