📄 sen_rec4.asm
字号:
;单片机类别:12分频单片机
;单片机的振荡频率:22.1184MHz
;CARD类型:9600卡
;CARD的振荡频率:3.5795MHz
;CARD的IO管脚:P1.3
;===================================
;1ETU需要的nop数:191.554798156167
;1ETU(实际-现在):=-.445201843832933
;0.5ETU(实际-现在):=-2.22260092191647
;===================================
public _I_send4
public _I_receive4
proc segment code
rseg proc
SAMIO bit P2.0 ;by cpu_io pin //p2.0
Timer00 EQU 93 ;ONEETU=2*Timer00+6
Timer01 EQU 46 ;HALFETU=2*Timer01+3
;======================================================
;1ETU: AAA--AAA, BBB-BBB,CCC-CCC
;1.5ETU: DDD--DDD
;======================================================
;======================================================
;c: unsigned char I_Send(unsigned char ch);
; input: ch
; ret: ==0 --OK
; !=0--ERR
;ASM: OCCUPY: R6,R7,A,C
; INPUT : R7
; output:--
; status: r7=0:right
; <>0:error
_I_Send4:
sb_00: mov a,r7
mov c,p
mov r7,#0ffh
mov r6,#0ffh
sb_01: jb SAMIO,sb_02 ;
djnz r7,sb_01
mov r7,#0ffh
djnz r6,sb_01
setb SAMIO
mov R7,#01H ;timeout=(255*4+1)*255
ret
sb_02:
mov r6,#09h ;1
clr SAMIO ;1
NOP ;1-------------TEST BIT1
;------------------------------------------AAA1ETU
mov r7,#Timer00 ;1
djnz r7,$ ;2*#Timer00
nop ;1
nop ;1
;------------------------------------------BBB1ETU
sb_03: rrc a ;1
mov SAMIO,c ;1
NOP ;1-------------TEST BIT2
;------------------------------------------AAA.1ETU
;------------------------------------------CCC1ETU
mov r7,#Timer00 ;1
djnz r7,$ ;2*#Timer00
djnz r6,sb_03 ;2
;------------------------------------------BBB1ETU
NOP ;1
setb SAMIO ;1
NOP ;1-------------TEST BIT3
;------------------------------------------CCC1ETU
mov r7,#Timer00 ;1
djnz r7,$ ;2*#Timer00
nop ;1
nop ;1
nop ;1
nop ;1
NOP ;1-------------TEST BIT4
;------------------------------------------CCC1ETU
mov r7,#Timer00 ;1
djnz r7,$ ;2*#Timer00
nop ;1
NOP ;1
mov r7,#00h ;1
NOP ;1-------------TEST BIT5
;------------------------------------------CCC1ETU
ret ;1
;======================================================
;======================================================
;c: unsigned char I_Receive(unsigned char *ch);
; input: *ch
; putput: *ch
; ret: ==0 --OK
; !=0--ERR
;ASM: OCCUPY: R6,R7,R5,A,C DPTR
; INPUT : R3--TYPE R2R1--ADDR
; output: R3--TYPE R2R1--ADDR
; status: r7=0:right
; =01:no start bit
; =02:parity bit error
_I_Receive4:
RB_00: mov r6,#0FFh
mov r7,#0ffh
MOV R5,#03h
RB_01: jnb SAMIO,RB_02 ;
djnz r7,RB_01 ;
mov r7,#0ffh
djnz r6,RB_01
djnz r5,RB_01
mov R7,#01H ;timeout=(4*255+1+2)*255*3
ret
;------------------------------------------DDD1.5ETU
RB_02:
NOP ;1-------------TEST BIT6
mov r6,#08h ;1
mov r7,#Timer00 ;1
djnz r7,$ ;#Timer00*2
NOP ;1
NOP ;1
NOP ;1
mov r7,#Timer01 ;1
djnz r7,$ ;#Timer01*2
NOP ;1
nop
nop
;------------------------------------------AAA1ETU
RB_03: mov c,SAMIO ;1
;------------------------------------------DDD1.5ETU
;------------------------------------------BBB1ETU
NOP ;1-------------TEST BIT7
rrc a ;1
mov r7,#Timer00 ;1
djnz r7,$ ;#Timer00*2
djnz r6,RB_03 ;2
;------------------------------------------AAA1ETU
mov c,SAMIO ;1
;------------------------------------------BBB1ETU
;------------------------------------------CCC1ETU
NOP ;1-------------TEST BIT8
mov r7,#Timer00 ;1
djnz r7,$ ;#Timer00*2
NOP ;1
NOP ;1
setb SAMIO ;1
;------------------------------------------CCC1ETU
NOP ;1-------------TEST BIT9
RB_04: CJNE R3,#02H,RB_05
MOV DPH,R2
MOV DPL,R1
MOVX @DPTR,A
MOV R7,#00H
RET
RB_05: MOV @R1,A
mov r7,#00h
ret
end
;======================================================
;======================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -