📄 ad0804定时器.txt
字号:
;//定义ADC的连接端口
ad_cs equ P1.7 ;芯片选择
ad_wr equ P3.6 ;转换开始
ad_rd equ P3.7 ;RD=LOW,数字信号输出
ad_input_port equ p2 ;定义数据位
Counter EQU 59H ;计数器,显示程序通过它得知现正显示哪个数码管
FIRST EQU P1.2 ;第一位数码管的位控制
SECOND EQU P1.1 ;第二位数码管的位控制
THREE EQU P1.0 ; 第三位数码管的位控制
ORG 0000h
AJMP main
ORG 000BH ;定时器T0的入口
AJMP DISP ;显示程序
ORG 0030h
main:
MOV SP,#5FH ;设置堆栈
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所显示器,LED灭
MOV TMOD,#00000001B ;定时器T0工作于模式1(16位定时/计数模式)
MOV TH0,#HIGH(65536-2000)
MOV TL0,#LOW(65536-2000)
MOV Counter,#0 ;计数器初始化
SETB EA ;开总中断
SETB TR0 ;开定时器0
SETB ET0 ;开定时器0中断
LOOP:
lcall adc_demo ;调用AD子程序
ajmp LOOP
;//==========================================
;// 启动AD转换
;//==========================================
Adc_Start:
clr ad_cs
nop
clr ad_wr
nop
setb ad_wr
nop
setb ad_cs
nop
ret
;//==========================================
;// 读AD转换
;//==========================================
Adc_Read:
mov ad_input_port,#0ffh
clr ad_cs
nop
clr ad_rd
nop
nop
mov a,AD_INPUT_PORT
nop
setb ad_rd
nop
setb ad_cs
ret
;//==========================================
;// AD转换读取延时程序,显示读到的数值
;//==========================================
Adc_Demo:
lcall Adc_Start
lcall delay1ms
lcall adc_read
CLR C
MOV B,#02H
MUL AB
MOV R3,B
MOV R2,A
LCALL CHANGEBCD
LCALL DISP
RET
DISP: ;定时器T0的中断响应程序动态扫描
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
MOV TH0,#HIGH(65536-2000);定时时间为2000个周期,约2170微秒
MOV TL0,#LOW(65536-2000)
MOV DPTR,#DISPTAB
SETB FIRST
SETB SECOND ;关显示
SETB THREE
SETB p0.5
mov a, counter
jz led1
dec a
jz led2
ajmp led3
led1:MOV A,R4
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
CLR first
ajmp next
led2:MOV A,R4
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV P0,A
CLR SECOND
ajmp next
led3:MOV A,R5
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
CLR P0.5
CLR three
next:inc counter
mov a,counter
dec a
dec a
dec a
jz zero
ajmp goon
zero:mov counter,#0
goon:
POP PSW
POP ACC
RETI
DISPTAB:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代码表
;0 1 2 3 4 5 6 7 8 9
delay1ms: ;延时子程序
mov r1,#10
MM:mov r0,#50
djnz r0,$ ;2us
djnz r1,MM
ret
CHANGEBCD:
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
LOOP1:
CLR C
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R6
ADDC A,R6
MOV R6,A
DJNZ R7,LOOP1
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -