📄 51bc.asm
字号:
mov dptr,#com_8255 ;8255 PC,PB为输出,PA为输入
mov a,#90h
movx @dptr,a
acall lopo ;打印“#-#-”20个
acall hoho ;换一行
mov A,#00H
MOV R6,#00H
MOV DPTR,#TAB1
lop1: MOV A,R6 ;打印"1234567890ABCDEFGHIJKLMNOP
movc a,@a+dptr ;QRSTUVWXYZ OK!"字符
acall sozo
inc r6
CjnE r6,#46,lop1
acall hoco ;换行
acall lopo ;再打印“#-#-”20个
acall hoho ;换行
acall hogo ;设定打印汉字方式
mov A,#00H
MOV R6,#00H
MOV DPTR,#TAB2
lop2: MOV A,R6 ;打印"欢迎使用南京爱思51B高级用户板!"
movc a,@a+dptr
acall sozo
inc r6
CjnE r6,#34,lop2
acall hoco ;回车换行
acall hoco
jmp $ ;演示结束!
ho1o:mov a,#1bh ;调用一级库
acall sozo
mov a,#38h
acall sozo
mov a,#00h
acall sozo
acall hoho
ret
hoho:mov a,#0ah ;换行
acall sozo
ret
hoco:mov a,#0dh ;回车换行
acall sozo
ret
hogo:mov a,#1bh ;选定16*16汉字点阵
acall sozo
mov a,#38h
acall sozo
mov a,#00h
acall sozo
ret
lopo: mov r7,#15
l1po: mov a,#23h ;"#"
acall sozo
mov a,#2Dh ;"-"
acall sozo ;
djnz r7,l1po
ret
sozo: push dph ;打印单字符或传输指令
push dpl
push acc
mov dptr,#pa_8255
soz1:movx a,@dptr
jb acc.7,soz1 ;/busy ?
pop acc
mov dptr,#pb_8255
movx @dptr,a
inc dptr
mov a,#00h ;stb=0
movx @dptr,a
mov a,#01h ;stb=1
movx @dptr,A
pop dpl
pop dph
ret
;ORG 800H ;单字符字码表(单字节)
TAB1: db 31h,32h,33h,34h,35h,36h,37h,38h,39h,30h
db 41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah
db 4bh,4ch,4dh,4eh,4fh,51h,52h,53h,54h,0dh
db 55h,56h,57h,58h,59h,5ah,20h,20h,20h,20h
db 2dh,2dh,4fh,4bh,20h,21h
;org 900h ;汉字字码表(双字节)
TAB2: db 0bbh,0b6h,0d3h,0adh,0cah,0b9h,0d3h,0c3h ;“欢迎使用”
db 0c4h,0cfh,0beh,0a9h,0b0h,0aeh,0cbh,0bch ;"南京爱思"
db 0A3h,0b5h,0a3h,0b1h,0a3h,0c2h ;"51B”
db 0b8h,0dfh,0bch,0b6h,0d3h,0c3h ;”高级用“
db 0bbh,0a7h,0b0h,0e5h,0a3h,0a1h ;"户板!"
;--------------0300h-------------------------------------
org 0300h
test62256: mov 40h,#02h ;检查62256好坏
mov 41h,#05h
mov 42h,#06h
mov 43h,#13h
mov 44h,#13h
mov dptr,#0000h
test62256a: mov a,#55h
movx @dptr,a
cpl a
movx a,@dptr
cjne a,#55h,test62256err
inc dptr
mov a,dph
CJNE A,#80H,test62256a
lcall delay
mov 44h,#09h ;
mov 45h,#11h
mov 46h,#11h
mov 47h,#0dh
lcall dispall ;显示'256 GOOD'
jmp $ ;62256 good
test62256err:mov 45h,#0eh ;显示‘256 err’
mov 46h,#12h
mov 47h,#12h
lcall dispall
jmp test62256
;---------------------------------------------------
ORG 0400H
testad574: mov DPTR,#COM_8255 ;8255的PC1,PC2,PC3控制模拟输入通道,因此应先设置8255
MOV A,#10010000B ;PA IS INPUT, PB IS OUTPUT ,PC IS OUTPUT
MOVX @dptr,A
mov 40h,#0ah ;在LED上显示'AD574',
mov 41h,#0dh ;通道号及电压值
mov 42h,#05h ;延时查询P3.2口(AD574_status)方式,如采用中断请修改本程序!
mov 43h,#07h
mov 44h,#04h
mov 45h,#13h
mov 46h,#13h
mov 47h,#13h
acall dispall
ad574a: acall scankey ;读AD通道号
jnc ad574a
mov a,r1
anl a,#07h
rl a ;切换通道
PUSH DPH
PUSH DPL
MOV DPTR,#PC_8255
MOVX @DPTR,A
POP DPL
POP DPH
ad574b: acall sample
acall adtobuff
acall dispall
acall delay ;显示延时
acall delay
sjmp ad574b
adtobuff: mov a,r0 ;high 8 bit
anl a,#0fh
mov 46h,a
mov a,r0
swap a
anl a,#0fh
mov 45h,a
mov a,r1
mov 47h,a
ret
sample: mov dptr,#str_574 ;起动AD574
setb p3.3
clr a
movx @dptr,a
jb p3.3,$ ;查询STATUS(P3.3)
mov dptr,#hi_574
;inc dptr
movx a,@dptr
mov r0,a ;high 8 bit
mov dptr,#lo_574
movx a,@dptr
swap a
anl a,#0fh
mov r1,a ;low 8 bit
ret
;-------------------------------------------------------------
org 0700h
testda: mov 40h,#0dh ;从0832上输出到
mov 41h,#01h ;ad574的0通道
mov 42h,#0ah ;并在LED上显示
nop ;0832,输出值,ad574的
PUSH DPH
PUSH DPL
mov DPTR,#COM_8255 ;8255的PC1,PC2,PC3控制模拟输入通道,因此应先设置8255
MOV A,#10010000B ;PA IS INPUT, PB IS OUTPUT ,PC IS OUTPUT
MOVX @dptr,A
MOV DPTR,#PC_8255
MOV A,#00H
MOVX @DPTR,A ;选择AD574 in0 通道
POP DPL
POP DPH
testdaa: mov dptr,#cs_0832 ;采样值
clr a
mov 43h,a
mov 44h,a
movx @dptr,a
djnz 0e0h,$
acall sample ;采样ad574
acall adtobuff
acall dispall ;显示
acall delay ;延时
mov dptr,#cs_0832
mov a,#80h
mov 43h,#08h
mov 44h,#00h
movx @dptr,a
clr a
djnz 0e0h,$
acall sample ;采样ad574
acall adtobuff
acall dispall ;显示
acall delay ;延时
mov dptr,#cs_0832
mov a,#0ffh
mov 43h,#0fh
mov 44h,#0fh
movx @dptr,a
clr a
djnz 0e0h,$
acall sample ;采样ad574
acall adtobuff
acall dispall ;显示
acall delay ;延时
ajmp testdaa
;---------------------------------------------------
org 0800h
clock: clr a ;时钟子程序
mov 40h,a
mov 41h,a
mov 43h,a
mov 44h,a
mov 46h,a
mov 47h,a
mov a,#13h
mov 42h,a
mov 45h,a
lcall dispall
mov 30h,#80h
mov 31h,#40h
inclock: lcall scankey
jnc inclock
mov a,r1
cjne a,#12h,inclock1
sjmp timeexec ;EXEC 键
inclock1: cjne a,#0ah,inclock2
inclock2: jnc inclock
mov a,30h ;有键
mov dptr,#com_8279
movx @dptr,a
mov a,r1
mov r0,31h
mov @r0,a
inc 31h
mov dptr,#dispcode
movc a,@a+dptr
mov dptr,#dat_8279
movx @dptr,a
inc 30h
mov a,30h
cjne a,#82h,inclock3
inc 30h
inc 31h
sjmp inclock4
inclock3: cjne a,#85h,inclock4
inc 30h
inc 31h
inclock4: mov a,30h
cjne a,#88h,inclock
mov 30h,#80h
mov 31h,#40h
sjmp inclock
timeexec: mov r0,#40h
mov r1,#52h
lcall picktime ;52h=hour 51h=minutes
lcall settime ;50h=second
rdclockwait:mov dptr,#900ah
movx a,@dptr
jb 0e7h,rdclockwait
lcall rdtime
lcall savebuff
lcall dispall
ajmp rdclockwait
nop
;------------------------------------------------
org 0900h
common: mov sp,#60h
mov tmod,#20h
mov th1,#0fdh
mov tl1,#0fdh
mov scon,#50h
mov pcon,#00h
clr ea
setb tr1
send: mov dptr,#buffer
mov r2,#0fh
send1: clr a
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
inc dptr
djnz r2,send1
jnb ri,send
clr ri
mov a,sbuf
cjne a,#55h,send
sjmp $
buffer: db 'Designed by cai'
picktime: mov r2,#03h
picktime1: mov a,@r0
swap a
inc r0
orl a,@r0
mov @r1,a
inc r0
inc r0
dec r1
djnz r2,picktime1
ret
settime: mov r0,#50h
mov dptr,#900ah
movx a,@dptr
mov a,#20h
movx @dptr,a
inc dptr
mov a,#80h
movx @dptr,a
mov dptr,#9000h
mov a,@r0
inc r0
movx @dptr,a
inc dptr
inc dptr
mov a,@r0
inc r0
movx @dptr,a
inc dptr
inc dptr
mov a,@r0
movx @dptr,a
mov dptr,#900bh
mov a,#02h
movx @dptr,a
ret
rdtime: mov dptr,#9000h
movx a,@dptr
mov 50h,a ;rd second
inc dptr
inc dptr
movx a,@dptr ;rd minutes
mov 51h,a
inc dptr
inc dptr
movx a,@dptr ;rd hour
mov 52h,a
ret
savebuff: mov r0,#52h
mov r1,#40h
mov r2,#03h
savebuff1: mov a,@r0
swap a
anl a,#0fh
mov @r1,a
inc r1
mov a,@r0
anl a,#0fh
mov @r1,a
inc r1
inc r1
dec r0
djnz r2,savebuff1
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -