?? id_2051.asm
字號:
;***************************************;
; id 卡發(fā)送數(shù)據(jù)轉(zhuǎn)換并口數(shù)據(jù) ;
; DATE: 2004-10-15 ;
; AUTHOR: ZHANGTAIFENG ;
;***************************************;
requ equ p3.3 ;啟動主CPU外部中斷1
;===========================
; DIFINE ZERO
;===========================
f_id bit 00h ;收到id assic號
f_erra bit 01h ;xrl 錯誤標志
f_send bit 02h ;發(fā)送標志
;===========================
; ACCOUNT DEFINE ZERO
;===========================
rrx equ 22h
rrx0 equ 23h
sicon equ 24h
rimod equ 25h
rega equ 26h
idbeg equ 2fh
idnum0 equ 30h
idnum1 equ 31h
idnum2 equ 32h
idnum3 equ 33h
idnum4 equ 34h
idnum5 equ 35h
idend equ 36h
assic0 equ 37h
assic1 equ 38h
assic2 equ 39h
assic3 equ 3ah
assic4 equ 3bh
assic5 equ 3ch
assic6 equ 3dh
assic7 equ 3eh
assic8 equ 3fh
assic9 equ 40h
assic10 equ 41h
assic11 equ 42h
sendcount equ 43h
r_sp equ 50h
org 0000h
ljmp main
org 0003h
ljmp _int_0
org 000bh
ljmp _time_0
org 0023h
ljmp r_recieve
main: mov sp,#r_sp
lcall iniall
clr f_id
clr f_erra
clr f_send
mov idbeg,#02h
mov idend,#0dh
wait: jnb f_id,wait
clr es
clr f_id
lcall chang ;
lcall xorsum ;
jb f_erra,return ;
mov sicon,#idbeg
setb f_send ;在外部中斷0中發(fā)送完清0
mov rrx0,#8
mov sendcount,#30
setb ex0
nop
nop
setb requ
nop
nop
nop
nop
nop
clr requ
nop
nop
nop
nop
nop
setb requ
wait_send: jnb f_send,return
mov a,sendcount
jz return
sjmp wait_send
return:
clr f_send
mov sicon,#idbeg
setb es
clr ex0
ljmp wait
;===================================;
;初始化波特率為9600 ;
;允許定時器0,1中斷 ;
;外部中斷0為跳變觸發(fā)方式 ;
;===================================;
iniall: mov rimod,#0
mov scon,#01010000B ;SM0 SM1 SM2 REN TB8 RB8 TI RI
mov tmod,#21h
mov th0,#15h
mov tl0,#9fh
mov th1,#0fdh
mov tl1,#0fdh
mov ie, #00010010b ;EA - ET2 ES ET1 EX1 ET0 EX0
mov tcon,#01010001b ;TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
setb ea
ret
;======================================
;turn the assic to hex
;======================================
chang: mov rrx,#12
mov r0,#assic0
chang2: mov a,@r0
clr c
cjne a,#40h,chang0
chang0: jc chang1
clr c
subb a,#37h
mov @r0,a
inc r0
djnz rrx,chang2
ljmp chang3
chang1: clr c
subb a,#30h
mov @r0,a
inc r0
djnz rrx,chang2
chang3: mov a,assic0 ;idnum0
swap a
mov b,assic1
orl a,b
mov idnum0,a
mov a,assic2 ;idnum1
swap a
mov b,assic3
orl a,b
mov idnum1,a
mov a,assic4 ;idnum2
swap a
mov b,assic5
orl a,b
mov idnum2,a
mov a,assic6
swap a
mov b,assic7
orl a,b
mov idnum3,a
mov a,assic8
swap a
mov b,assic9
orl a,b
mov idnum4,a
mov a,assic10
swap a
mov b,assic11
orl a,b
mov idnum5,a
ret
;======================================
xorsum: mov a,idnum0
xrl a,idnum1
xrl a,idnum2
xrl a,idnum3
xrl a,idnum4
cjne a,idnum5,xorsum0
clr f_erra
ret
xorsum0: setb f_erra
ret
;=====================================
;接受assic碼中斷
;=====================================
r_recieve: push psw
push acc
push 00h
jnb ri,d_reti
recieve: clr ri
mov rega,sbuf
mov a,rimod
anl a,#07h
rl a
add a,rimod
mov dptr,#ritab
jmp @a+dptr
ritab: ljmp r_mod0
ljmp r_mod1
ljmp r_mod2
r_mod0: mov a,rega
cjne a,#02h,d_reti
inc rimod
mov sicon,#assic0
mov rrx,#12
ljmp d_reti
r_mod1: mov a,rega
mov r0,sicon
mov @r0,a
inc sicon
djnz rrx,d_reti
inc rimod
ljmp d_reti
r_mod2: mov a,rega
cjne a,#0dh,d_reti
setb f_id
mov rimod,#0
d_reti: pop 00h
pop acc
pop psw
reti
;==========================================
;定時器0中斷
;==========================================
_time_0: push psw
push acc
clr tr0
mov th0,#15h
mov tl0,#9fh
mov a,sendcount
dec a
clr c
mov sendcount,a
_time_01: setb tr0
pop acc
pop psw
reti
;========================================
;外部中斷0
;========================================
_int_0: push psw
push acc
push 00h
jnb f_send,_int_01
mov r0,sicon
mov a,@r0
setb requ
nop
nop
nop
nop
clr requ
nop
nop
nop
nop
nop
setb requ
mov p1,a
inc sicon
djnz rrx0,_int_01
clr f_send
mov sicon,#idbeg
_int_01: pop 00h
pop acc
pop psw
reti
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -