⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad0804定时器.txt

📁 AD 转换 用定时器中断 显示 0--5V
💻 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 + -