- Dark Equ 10
- ;================================ Hardware =================================
- DisMode Equ 0000H ;Display Char Port
- DisCS Equ 2000H ;Display CS Port
- AD0809 Equ 4000H ;AD0809
- ;=============================== Bit Segment ===============================
- SysBits0 Data 20h
- GetAD0809 Bit 03H ;1o First Calc
- ;=============================== Byte Segment ==============================
- ;*byte define start*
- ;00H..07H : Reg Group 0
- ;08H..1FH : System Stack
- ;20H..20H : System Bit Units
- ;---------------------------------------------------------------------------
- ;21H..6EH
- DisBuf Equ 70h ;..75h ;显示缓冲区
- DeciP Data 76H ;Bit=1isplay Decimal Point
- ADValue Data 77H ;Calc Result, Origen Code
- ;===========================================================================
- Org 0000h
- AJmp Main
- ;============================= Subroutines =================================
- Display: Mov R0,#DisBuf ;R0->DisBuf
- Mov R1,#00000001B ;R1=Dis CS
- DisplayLp: Mov a,R1 ;Send CS first, Proteus ask to do so
- Mov dptr,#DisCS ;Send CS to DisCS Port
- Movx @Dptr,a
- Mov B,#11111111b
- Anl A,DeciP
- Jz DisplayNxt
- Mov B,#01111111B
- DisplayNxt:Mov a,R1 ;Send CS first, Proteus ask to do so
- Rl A ;Next CS
- Mov R1,A
- Mov A,@r0 ;Get Dis Char
- Inc R0 ;Next Buf
- Mov Dptr,#DisTab ;Change to Dis Mode
- Movc A,@A+Dptr
- Anl A,B
- Mov Dptr,#DisMode ;Send DisMode to DisMode Port
- Movx @Dptr,a
- ACall Delay
- Cjne R0,#DisBuf+6,DisPlayLp
- ; Mov a,#0 ;Send CS first, Proteus ask to do so
- ; Mov dptr,#DisCS ;Send CS to DisCS Port
- ; Movx @Dptr,a
- Ret
- ;---------------------------------------------------------------------------
- DisTab: DB 0c0H ; 0
- DB 0F9H ; 1
- DB 0A4H ; 2
- DB 0B0H ; 3
- DB 099H ; 4
- DB 092H ; 5
- DB 082H ; 6
- DB 0F8H ; 7
- DB 080H ; 8
- DB 090H ; 9
- DB 0FFH ; A
- ;--------------------------------------------------------------------------
- ClrDis: Mov A,#Dark
- AToDis: Mov r0,#DisBuf
- AToR06: Mov R1,#6
- AToRoLp: Mov @r0,A ;A->@R0,Num=R1
- Inc r0
- Djnz R1,AToRoLp
- Ret
- ;--------------------------------------------------------------------------
- InitDis: ACall ClrDis
- Mov DisBuf+0,#0
- Mov DeciP,#00000000b
- Ret
- ;--------------------------------------------------------------------------
- Delay: Mov r6,#4 ;8*256*2*T(1us)=8*512=4000us=2ms
- Delay1: Mov r7,#0
- Djnz r7,$ ;2
- Djnz r6,Delay1
- Ret
- ;--------------------------------------------------------------------------
- ;Change A into Decimal BCD Code
- AHexToBCD: Mov B,#10
- Div AB
- Mov @R0,B
- Inc r0
- Mov B,#10
- Div AB
- Mov @r0,B
- Inc r0
- Mov @r0,A
- Inc r0
- Ret
- ;--------------------------------------------------------------------------
- InitAD0809:Clr GetAD0809
- Ret
- ;--------------------------------------------------------------------------
- GetAD: Mov Dptr,#AD0809+0
- Movx @Dptr,A ;Start AD, Chennel=0
- ; ACall Display ;Delay
- ACall Delay
- ACall Delay
- Mov Dptr,#AD0809+0
- Movx A,@Dptr
- Mov ADValue,A
- Setb GetAD0809
- Ret
- ;================================= Main ====================================
- Main: Mov Sp,#07h ;init Stack
- ACall InitDis
- ACall InitAD0809
- MainLoop: ACall Display
- ACall GetAD
- JBC GetAD0809,ShowAD
- AJmp MainLoop
- ;--------------------------------------------------------------------------
- ShowAD: Mov A,ADValue
- Mov R0,#DisBuf
- ACall AHexToBCD
- AJmp MainLoop
- ;==========================================================================
- end