⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 id_2051.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
字号:
;***************************************;
;        id 卡发送数据转换并口数据      ;
;        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         ;发送标志



            ;===========================
            ;   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中发送完清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为跳变触发方式            ;
;===================================;

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











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -