mov p0,#0feh
     ajmp d_10
DISP2:   CJNE R0,#2,DISP3   ;显示十位
     setb p0.0
     mov c,disp_c_2
     mov A,disp_2
     mov p1,#0FFH
     mov p0,#0fdh
     ajmp d_10
DISP3:   CJNE R0,#3,DISP4   ;显示百位
     mov c,disp_c_3
     mov A,disp_3
     mov p1,#0FFH
     mov p0,#0fbh
     ajmp d_10
DISP4:   CJNE R0,#4,DISP5   ;显示千位
     mov c,disp_c_4
     mov A,disp_4
     mov p1,#0FFH
     mov p0,#0f7h
     ajmp d_10
DISP5:   CJNE R0,#5,DISP6   ;显示通道号
     mov A,disp_5
     mov p1,#0FFH
     mov p0,#0efh
     ajmp d_10
DISP6:  CJNE R0,#6,DISP7    ;显示仪表地址
     mov A,disp_6
     mov p1,#0FFH
     mov p0,#0dfh
     ajmp d_10
DISP7:   CJNE R0,#7,DISP8   ;无
     mov A,disp_7
     mov p1,#0FFH
     mov p0,#0bfh
     ajmp d_10
DISP8:   CJNE R0,#8,d_10        ;无
     mov A,disp_8
     mov p1,#0FFH
     mov p0,#7fh
d_10:    acall disp_w
     mov r0,disp_c
     cjne r0,#10,d_12       ;若disp_c=10则清disp_c
     mov disp_c,#0
     inc time_s_c       ;MS,S计数处理程序
     mov a,time_s_c
     cjne a,#2,d_12
     mov time_s_c,#0
     inc time_20ms
     inc wdt            ;软看门狗处理程序
     mov a,wdt
     cjne a,#wdt_time,d_12
     mov wdt,#0
     mov a,#0
     push acc
     push acc
     reti
;-----------------------
d_12:    pop psw
     pop dpl
     pop dph
     pop ar0
     pop acc
     RETI
disp_w:  jnc d_0
     jnb disp_s_c,d_0
     mov p1,#0FFH
     ajmp d_1
d_0: movc a,@a+dptr
     cpl a
     mov p1,a
D_1: ret
;---------------------------------------------------------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
     ;  0   1    2   3   4   5   6   7   8   9
     db 77H,7CH,39H,5EH,79H,71H
     ;   A   B   C   D   E   F 
     DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
     ;   0.   1.  2.   3.   4.   5.   6.   7.   8.  9.
     db 40H,80H,00H,37h,5ch,1ch,58h,74h,0dch,46h
     ;   -   .   空       n   o  u   c    h   a   -1
     ;   1a  1b  1c     1d  1e 1f  20  21  22  23
END
;----------4--------rand_send.a51----------------
name send_order
extrn idata (rec_buf)  ;rec_buff 接收缓冲区
extrn data (time_20ms)
extrn bit (ri_f)        ;ri_f         正在接收标志
PUBLIC send_order
prog SEGMENT CODE                ;定义代码段
byte_buff segment data           ;定义字节数据段1
byte_buffI segment idata         ;定义字节数据段2
bit_buff segment data bitaddressable ;定义位数据段
     rseg byte_buff
     send_n:ds 1
     order_buf:ds 10
     rseg prog
     dd_c equ 4         ;等待回应20m数
     cw_n equ 7         ;设置允许错误次数
     using 0
;---------------------清命令缓冲区
send_order:
     mov dpl,#8
     mov r0,#order_buf
send_0:  mov @r0,#0
     inc r0
     djnz dpl,send_0
     MOV DPL,#72        ;清接收缓冲区
     MOV R0,#REC_BUF
SEND_A:  MOV @R0,#0
     INC R0
     DJNZ DPL,SEND_A        
;----------------------发送命令控制程序   
     mov send_n,#cw_n   ;设置允许错误次数
     mov b,#10
     clr c
     subb a,b
     mov b,#8                         
     mul ab             
     mov dptr,#a_order
     mov r0,#order_buf-1
     mov r1,#10
start_mov:inc r0
     push acc
     movc a,@a+dptr
     mov @r0,a
     inc dptr
     pop acc
     cjne @r0,#0dh,start_mov
;----------------------发送命令子程序
send_start:setb p3.2        ;切换75176至发送状态
     mov r0,#order_buf-1
send_10:inc r0     
     mov sbuf,@r0
     jnb ti,$      ;等待一帧数据发完
     CLR TI
         cjne @r0,#0dh,send_10  ;检测到结束标志退出
;------------------------检测接收标志
     mov r0,#30         ;延时60uS等待停止位发送完毕
     djnz r0,$     
     setb es
     clr p3.2      ;切换75176至接收状态
     mov a,#dd_c        ;延时检测仪表有无回应
     add a,time_20ms    
send_21:jb ri_f,send_20
     cjne a,time_20ms,send_21
     mov a,#'N'
     ajmp send_23
;-------------------------检测接收是否正确
send_20:mov a,#10      ;延时200MS等待接收结束
     add a,time_20ms
send_28:jnb ri_f,send_29
     cjne a,time_20ms,send_28
     clr ri_f           ;200MS仍未结束清接收中标志
send_29:mov r0,#rec_buf+4
     cjne @r0,#'*',send_22
     mov a,#'*'
send_23:djnz send_n,send_start   ;达到允许错误次数退出
     ajmp send_out
send_22:mov r0,#rec_buf+71
     cjne @r0,#0dh,send_23  ;接收缓冲区第72字节不为回车符转出错处理
;------------------------------还原校验码
     mov r0,#rec_buf+70
     mov a,@r0
     clr c
     subb a,#3ah
     jnc SEND_25
     add a,#7
send_25:add a,#3
     mov @r0,a
     dec r0
     mov a,@r0
     clr c
     subb a,#3ah
     jnc SEND_26
     add a,#7
send_26:ADD A,#3
     swap a
     inc r0
     xchd a,@r0
     dec r0
     xch a,@r0
     inc r0
     mov @r0,#0dh       ;检验码后加回车符
;------------------------------检验接收缓冲区数据  
     mov r0,#rec_buf+1
     mov a,@r0
     inc r0
send_24:xrl a,@r0
     inc r0
     cjne @r0,#0dh,send_24
     cjne a,#0,send_200 ;接收校验未通过转出错处理
send_out:clr es
     ret
send_200:mov a,#1
     ajmp send_23  
;----------------------------------------------------
a_order: db '@0ARD67',0DH   ;读A表全部动态数据命令
b_order: db '@0BRD64',0DH   ;读B表全部动态数据命令
c_order: db '@0CRD65',0DH   ;读c表全部动态数据命令
d_order: db '@0DRD62',0DH   ;读d表全部动态数据命令
e_order: db '@0ERD63',0DH   ;读e表全部动态数据命令
f_order: db '@0FRD60',0DH   ;读f表全部动态数据命令
END
;-------5----------rand_rec.a51
name rec_si
extrn bit (ri_f)
public rec_si,rec_buf
prog SEGMENT CODE           ;定义代码段
byte_buff segment data           ;定义字节数据段1
byte_buffI segment idata         ;定义字节数据段2
bit_buff segment data bitaddressable ;定义位数据段
     rseg byte_buff
     rec_buf_z: ds 1    ;接收区指针
     rec_err: ds 1      ;接收缓冲区溢出计数器
     rseg byte_buffi
     rec_buf: ds 75
     rseg prog
     using 0
rec_si:  PUSH PSW
     push ar0
     push acc
JNB RI,REC_OUT ;为发送中断跳出
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页