📄 a16a.asm
字号:
; “验证式” 实验十六 A/D转换实验
;文件名:MCS51\A16.ASM
OUTBIT equ 0e101h ; 位控制口
CLK164 equ 0e102h ; 段控制口(接164时钟位)
DAT164 equ 0e102h ; 段控制口(接164数据位)
IN equ 0e103h ; 键盘读入口
LEDBuf equ 40h ; 显示缓冲
org 0000h
LJMP START
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
DISPLAY:setb 0d3h
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管
mov r2, #00100000b ; 从左边开始显示
Loop:
mov dptr, #OUTBIT
mov a, #00h
movx @dptr, a ; 关所有八段管
mov a, @r0
mov dptr,#LEDmap
movc a,@a+dptr
mov B, #8 ; 送164
DLP:
rlc a
mov r3, a
mov acc.0, c
anl a,#0fdh
mov dptr, #DAT164
movx @dptr, a
mov dptr, #CLK164
orl a,#02h
movx @dptr, a
anl a,#0fDh
movx @dptr, a
mov a, r3
djnz B, DLP
mov dptr, #OUTBIT
mov a, r2
movx @dptr, a ; 显示一位八段管
mov r6, #1
call Delay
mov a, r2 ; 显示下一位
rr a
mov r2, a
inc r0
djnz r1, Loop
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a
clr 0d3h ; 关所有八段管
ret
ORG 0200H
START: mov sp,#60h
mov dptr,#0e100h ;8155初始化
mov a,#03h
movx @dptr,a
mov 40h,#00h ;显示缓冲器初始化
mov 41h,#08h
mov 42h,#00h
mov 43h,#09h
mov 44h,#00h
mov 45h,#00h
; mov 46h,#30
LOOP1: lcall DISPLAY
; djnz 46h,loop1
mov a,#00h
mov dptr,#0a000h ;0809AD的通道开始转换吗?
movx @dptr,a
mov r7,#0fh
loop2: djnz r7,loop2
movx a,@dptr
mov r0,#45h ;拆字
lcall ptds
sjmp loop1
ptds: mov r1,a
lcall ptds1
mov a,r1
swap a
ptds1: anl a,#0fh
mov @r0,a
dec r0
ret
Delay:
mov r7, #0 ; 延时子程序
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -