?? 通過串口讀寫at24c01a.asm
字號:
first equ p2.5;第一位數(shù)碼管控制
second equ p2.4;第二位數(shù)碼管控制
dispbuf equ 5eh;5E,5F是顯示緩沖區(qū)
rec bit 00h;接受到數(shù)據(jù)標志
recbuf equ 21h;從21H開始的3字節(jié)接收緩沖區(qū)
count equ 24h;軟件計數(shù)器
vscl bit p3.4;串行時鐘
vsda bit p3.5;串行數(shù)據(jù)
;wp bit p3.7
sla equ 50h;尋址字節(jié)存放單元
numbyt equ 51h;傳送字節(jié)數(shù)存放單元
mtd equ 52h;發(fā)送數(shù)據(jù)緩沖區(qū)
mrd equ 52h;接受數(shù)據(jù)緩沖區(qū)
slaw equ 0a0h ; 寫命令子
slar equ 0a1h;讀命令字
org 00h
jmp main
org 0023h
ljmp recive
org 30h
main:mov sp,#5fh
mov tmod,#00100000b;定時器1工作方式2
mov th1,#0fdh
mov tl1,#0fdh
orl pcon,#10000000b;SMOD=1
setb tr1;定時器1工作
mov scon,#01000000b;串口工作方式1
mov dispbuf,#0h
mov dispbuf+1,#0h;開機顯示0
mov count,#0;清緩沖計數(shù)器
setb ren;允許接收
setb ea
setb es
clr rec;清接數(shù)據(jù)的標志
main1:
call disp;調(diào)用顯示程序
jb rec,progrec;如果收到數(shù)據(jù)標志是1,則轉(zhuǎn)到處理程序
jmp main1
progrec:
clr rec
mov r0,#recbuf
mov a,@r0
cjne a,#0,progrec1;接收是0,是寫片命令
inc r0
mov a,@r0
mov r1,#mtd;發(fā)送數(shù)據(jù)緩沖區(qū)首址
mov @r1,a;地址放在發(fā)送數(shù)據(jù)緩沖區(qū)第一位
inc r0
inc r1
mov a,@r0;接收到的第3個字節(jié)是待寫入的數(shù)據(jù)
mov b,#16
div ab
mov dispbuf,a
mov dispbuf+1,b
mov a,@r0
mov @r1,a
;clr wp
clr ea
mov numbyt,#2
mov sla,#slaw;準備寫入數(shù)據(jù)
call wrnbyt
setb ea
;setb wp
jmp main1
progrec1:
cjne a,#1,main1;接收是1,是讀片命令
inc r0
mov a,@r0
mov r1,#mrd
mov @r1,a
mov sla,#slaw
;clr wp
mov numbyt,#1
call wrnbyt;送出地址信號
mov sla,#slar
mov numbyt,#1
call rdnbyt;隨機讀
;setb wp
mov sbuf,a;送往主機
mov b,#16
div ab
mov dispbuf,a
mov dispbuf+1,b
jmp main1
recive:
push acc
push psw
jb ri,rec1;接收中斷轉(zhuǎn)
jb ti,rec3;接收發(fā)送退出
rec1:clr ri
mov a,#recbuf
add a,count
mov r0,a
mov a,sbuf
mov @r0,sbuf
mov b,#16
div ab
mov dispbuf,a
mov dispbuf+1,b
inc count
mov a,count
cjne a,#3,rec2
mov count,#0
setb rec;已收到3個數(shù)據(jù)
jmp rec4
rec2:
clr rec
rec3:
clr ti
rec4:pop psw
pop acc
reti
disp:;顯示程序
push acc
push psw
mov a,dispbuf
mov dptr,#tab
movc a,@a+dptr
mov p0,a
clr first
lcall delay
setb first
mov a,dispbuf+1
movc a,@a+dptr
mov p0,a
clr second
lcall delay
setb second
pop psw
pop acc
ret
delay:push psw
setb rs0
mov r7,#50
d1:mov r6,#50
djnz r6,$
djnz r7,d1
pop psw
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
;viic軟件包程序
sta:setb vsda
setb vscl
nop
nop
nop
nop
clr vsda
nop
nop
nop
nop
clr vscl
ret
stop:
clr vsda
setb vscl
nop
nop
nop
nop
setb vsda
nop
nop
nop
nop
clr vsda
clr vscl
ret
mack:
clr vsda
setb vscl
nop
nop
nop
nop
clr vscl
setb vsda
ret
mnack:
setb vsda
setb vscl
nop
nop
nop
nop
clr vscl
clr vsda
ret
cack:
setb vsda
setb vscl
clr f0
mov c,vsda
jnc cend
setb f0
cend:clr vscl
ret
wrbyt:
mov r0,#08h
wlp:rlc a
jc wr1
ajmp wr0
wlp1:djnz r0,wlp
ret
wr1:setb vsda
setb vscl
nop
nop
nop
nop
clr vscl
clr vsda
ajmp wlp1
wr0:clr vsda
setb vscl
nop
nop
nop
nop
clr vscl
ajmp wlp1
rdbyt:mov r0,#08h
rlp:setb vsda
setb vscl
mov c,vsda
mov a,r2
rlc a
mov r2,a
clr vscl
djnz r0,rlp
ret
wrnbyt:
mov r3,numbyt
lcall sta
mov a,sla
lcall wrbyt
lcall cack
jb f0,wrnbyt
mov r1,#mtd
wrda:mov a,@r1
lcall wrbyt
lcall cack
jb f0,wrnbyt
inc r1
djnz r3,wrda
lcall stop
ret
rdnbyt:mov r3,numbyt
lcall sta
mov a,sla
lcall wrbyt
lcall cack
jb f0,rdnbyt
rdn:mov r2,#mrd
rdn1:lcall rdbyt
mov @r1,a
djnz r3,ack
lcall mnack
lcall stop
ret
ack:lcall mack
inc r1
sjmp rdn1
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -