📄 head.asm
字号:
; $XREF DEBUG SYMBOLS
; NAME withPC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROG SEGMENT CODE
;BITVAR SEGMENT BIT
public sPC60
public rPCbyte
public rPCfirstbyte
public _sPCbyte
public Detu
public Detu_8
public D123T
public D122T
public D121T
public D42T
public D41T
public D40T
public D39T
public D38T
public D37T
public D36T
public D35T
public D34T
public D33T
public D32T
public D31T
public D30T
public D29T
public D28T
public D27T
public D26T
public D25T
public D24T
public D23T
public D22T
public D21T
public D20T
public D19T
public D18T
public D17T
public D16T
public D15T
public D14T
public D13T
public D12T
public D11T
public D10T
public D9T
public D8T
public D7T
public D6T
public D5T
public D4T
public D3T
public D2T
public D43000C
EXTRN BIT(CPU1_REST_FLAG)
EXTRN BIT(CPU2_REST_FLAG)
EXTRN BIT(STATE_FLAG)
EXTRN DATA(temp)
EXTRN DATA(bps)
EXTRN DATA(timer0)
EXTRN DATA(pointer)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WDTC equ 09fh
RCON equ 085h
DBANK equ 086h
IC_PWR1 equ P1.0
IC_RST1 equ P1.1
IC_IO1 equ P1.2
IC_SW1 equ P1.3
IC_PWR2 equ P1.4
IC_RST2 equ P1.5
IC_IO2 equ P1.6
IC_SW2 equ P1.7
CLK_CTR equ P3.7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RSEG PROG
;-----------------------------------------------------------------------
;======================================================================
;-----------------------------------------------------------------------
;延时一个etu
;主频:22.1184MHz 57600bps
; 一个时钟(T) = 12/22.1184 = 0.5425us = 12个振荡器周期(cycle)
;卡:5.5296MHz(22.1184MHz 4分频)
; 372/5.5296 = 67.274us = 14865bps = 124 T (对应3.579MHz下的 9600bps)
;-----------------------------------------------------------------------
; ;call DelayR0 ;2 2
;D121T:
;
; mov R4,#57 ;1 3
;D121Tloop:
; djnz R4,D121Tloop ;2*57=114 117
;
; mov WDTC, #0a7h ;2 119 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
;
; ret ;2 121
;-----------
D123T:
mov WDTC, #0a7h ;12C
D122T:
mov WDTC, #0a7h ;12C
; 121T = 121*12Cycle = 1452C
;call DelayR0 ;16C
D121T:
mov R4,#117 ;8C 24C
D121Tloop:
djnz R4,D121Tloop ;12C 12*117=1404 1404+48C = 1452C
mov WDTC, #0a7h ;12C 36C //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
nop ;4C 40C
ret ;8C 48C
;======================================================================
;-----------------------------------------------------------------------
;延时1/3个etu
;主频:22.1184MHz 57600bps
; 一个时钟(T) = 12/22.1184 = 0.5425us = 12个振荡器周期(cycle)
;卡:5.5296MHz(22.1184MHz 4分频)
; 372/5.5296 = 67.274us = 14865bps = 124 T (对应3.579MHz下的 9600bps)
;-----------------------------------------------------------------------
;call D35T ;2 2
;D35T:
;
; mov R4,#14 ;1 3
;D35Tloop:
; djnz R4,D35Tloop;2*14=28 31
;
; mov WDTC, #0a7h;2 33 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
;
; ret ;2 35
D42T:
mov WDTC, #0a7h ;12C
D41T:
mov WDTC, #0a7h ;12C
D40T:
mov WDTC, #0a7h ;12C
D39T:
mov WDTC, #0a7h ;12C
D38T:
mov WDTC, #0a7h ;12C
D37T:
mov WDTC, #0a7h ;12C
D36T:
mov WDTC, #0a7h ;12C
D35T:
mov WDTC, #0a7h ;12C
D34T:
mov WDTC, #0a7h ;12C
D33T:
mov WDTC, #0a7h ;12C
D32T:
mov WDTC, #0a7h ;12C
D31T:
mov WDTC, #0a7h ;12C
D30T:
mov WDTC, #0a7h ;12C
D29T:
mov WDTC, #0a7h ;12C
D28T:
mov WDTC, #0a7h ;12C
D27T:
mov WDTC, #0a7h ;12C
D26T:
mov WDTC, #0a7h ;12C
D25T:
mov WDTC, #0a7h ;12C
D24T:
mov WDTC, #0a7h ;12C
D23T:
mov WDTC, #0a7h ;12C
D22T:
mov WDTC, #0a7h ;12C
D21T:
mov WDTC, #0a7h ;12C
D20T:
mov WDTC, #0a7h ;12C
D19T:
mov WDTC, #0a7h ;12C
D18T:
mov WDTC, #0a7h ;12C
D17T:
mov WDTC, #0a7h ;12C
D16T:
mov WDTC, #0a7h ;12C
D15T:
mov WDTC, #0a7h ;12C
D14T:
mov WDTC, #0a7h ;12C
D13T:
mov WDTC, #0a7h ;12C
D12T:
mov WDTC, #0a7h ;12C
D11T:
mov WDTC, #0a7h ;12C
D10T:
mov WDTC, #0a7h ;12C
D9T:
mov WDTC, #0a7h ;12C
D8T:
mov WDTC, #0a7h ;12C
D7T:
mov WDTC, #0a7h ;12C
D6T:
mov WDTC, #0a7h ;12C
D5T:
mov WDTC, #0a7h ;12C
D4T:
mov WDTC, #0a7h ;12C
D3T:
mov WDTC, #0a7h ;12C
D2T:
; lcall ; 16C
ret ; 8C 24C 2T
;======================================================================
;======================================================================
;-----------------------------------------------------------------------
;延时一个etu
;入口参数: 波特率(bps) 9600:124T/19200:62T/38400:31T/57600:20.67T/115200:10.33T/111600/55930
; 1488C /744C /372 /248C /124C /128C /255C
;出口参数: 无
;-----------------------------------------------------------------------
;(外部指令) 3 3
; ;call Detu ;2 5
;Detu:
; mov R3,A ;1 6
;
; mov WDTC, #0a7h ;2 8 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
; nop ;1 9
;
; mov A,bps ;1 10
; jb ACC.2,Detu57600 ;2 12
; jb ACC.1,Detu38400 ;2 14
; jb ACC.0,Detu19200 ;2 16
;Detu9600:
; mov R4,#51 ;1 17
; jmp Detuloop ;2 19 19+3+51*2 = 124
;Detu19200:
; mov R4,#20 ;1 17
; jmp Detuloop ;2 19 19+3+20*2 = 62
;Detu38400:
; mov R4,#5 ;1 15
; nop ;1 16
; jmp Detuloop ;2 18 18+3+5*2 = 31
;Detu57600:
; mov R4, #2 ;2 14 14+3+2*2 = 21
;Detuloop:
; djnz R4,Detuloop; ;2*R0
;
;DetuEND:
;
; mov A,R3 ;1
;
; ret ;2 3
;--------------------------------------------------
;入口参数: 波特率(bps) 9600:124T/19200:62T/38400:31T/57600:20.67T/115200:10.33T/111600/55930
; 1488C /744C /372 /248C /124C /128C /255C
;lcall Detu ;16C
;(外部指令) ;12C 28
Detu:
nop ;4C 32
nop ;4C 36
Detu_8:
mov R3,A ;4C 40
mov WDTC, #0a7h ;12C 52
mov A,bps ;8C 60
jb ACC.3,Detu115200 ;16C 76
jb ACC.4,Detu111600 ;16C 92
jb ACC.2,Detu57600 ;16C 108
jb ACC.5,Detu55930 ;16C 124
jb ACC.1,Detu38400 ;16C 140
jb ACC.0,Detu19200 ;16C 156
Detu9600:
mov R4,#108 ;8C 164
ljmp Detuloop ;16C 180 180+108*12+12=1488
Detu19200:
mov R4,#46 ;8C 164
ljmp Detuloop ;16C 180 180+46*12+12=744
Detu38400:
mov R4,#16 ;8C 148
nop ;4C 152
ljmp Detuloop ;16C 168 168+16*12+12=372
Detu55930:
mov R4, #8 ;8C 132
ljmp Detuloop ;16C 148 148+8*12+12=256
Detu57600:
mov R4, #8 ;8C 116
nop ;4C 120
nop ;4C 124
ljmp Detuloop ;16C 140 140+8*12+12=248
Detu111600:
mov R4, #2 ;8C 100
ljmp DetuEND ;16C 116 116+12=128
Detu115200:
mov R4, #2 ;8C 84
nop ;4C 88 88+2*12+12=124
Detuloop:
djnz R4,Detuloop; ;12C
DetuEND:
mov A,R3 ;4C
ret ;8C 12
;======================================================================
;-----------------------------------------------------------------------
;接收PC一个字符
;rPCbyte
;入口参数: 无
;出口参数: (R7)输出字符
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
;----------------------------------------------------
rPCbyte:
setb P3.1
setb P3.0
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jnb P3.0,rPCbyte;等待停止位
rPC57600:
jnb P3.0,rPC57600_next;等待一个起始位
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jnb P3.0,rPC57600_next;等待一个起始位
rPC:
mov R3,#255
jnb P3.0,rPC57600_next;等待一个起始位
mov R4,#0
rPC57600_begin:
jnb P3.0,rPC57600_next;等待一个起始位 2
djnz R4,rPC57600_begin; 2 4*256=1024
jnb P3.0,rPC57600_next;等待一个起始位 2
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jnb P3.0,rPC57600_next;16C 等待一个起始位 2
djnz R3,rPC57600_begin; 2 1028*197=202516
jmp rPC57600_err1
rPC57600_next:
clr ET0 ;8C 24
jb P3.0,rPC57600_begin ;16C 40 延时0.25etu 再检起始位 2 4
mov WDTC, #0a7h ;12C 52
mov WDTC, #0a7h ;12C 64
jb P3.0,rPC57600_begin ;16C 80 延时0.25etu 再检起始位 2 7
lcall D16T ;192 272
clr a ;4C 276
; 57600bps 1etu=276C
;; 接收第0位
lcall recvPC1bit
rrc a ;4C
;; 接收第1位
lcall recvPC1bit
rrc a
;; 接收第2位
lcall recvPC1bit
rrc a
;; 接收第3位
lcall recvPC1bit
rrc a
;; 接收第4位
lcall recvPC1bit
rrc a
;; 接收第5位
lcall recvPC1bit
rrc a
;; 接收第6位
lcall recvPC1bit
rrc a
;; 接收第7位
lcall recvPC1bit
rrc a
; 接收奇偶位(未比较)
lcall recvPC1bit
; clr STATE_FLAG
;; call etu05; 接收停止位
;; jb I_O,rb_end
; call recvbit
; jc rb_end
rb57600_end:
mov r7,a; 保存数据
ret
rPC57600_err:
rPC57600_err0:
rPC57600_err1:
clr ET0
setb STATE_FLAG;停止位错
jmp rb57600_end
;-----------------------------------------------------------------------
;接收1位(57600bps -- 23T) 23*12=276C
; 外部(rrc a) 4C
;lcall 16C 20
recvPC1bit:
push ACC ;8C 28
clr A ;4C 32
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C 48
mov C,P3.0 ;8C
addc A,#0 ;8C 16
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C 36
mov C,P3.0 ;8C
addc A,#0 ;8C 16
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C 36
mov C,P3.0 ;8C
addc A,#0 ;8C 16
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C
mov WDTC, #0a7h ;12C 48
mov C,ACC.1 ;8C
nop ;4C
pop ACC ;8C
ret ;8C 28
; 32+48+16+36+16+36+16+48+28=276
;======================================================================
;-----------------------------------------------------------------------
;接收PC一个字符
;rPCfirstbyte
;入口参数: 无
;出口参数: (R7)输出字符
;-----------------------------------------------------------------------
IC_SW1_OFF:
jnb P3.0,rPCfirst_next;等待一个起始位
clr IC_RST1;
jnb P3.0,rPCfirst_next;等待一个起始位
clr IC_IO1;
jnb P3.0,rPCfirst_next;等待一个起始位
setb Clk_Ctr;
jnb P3.0,rPCfirst_next;等待一个起始位
setb IC_PWR1;;
jnb P3.0,rPCfirst_next;等待一个起始位
clr CPU1_REST_FLAG;
jmp rPCf
IC_SW2_OFF:
; jnb P3.0,rPCfirst_next;等待一个起始位
clr IC_RST2;
; jnb P3.0,rPCfirst_next;等待一个起始位
clr IC_IO2
; jnb P3.0,rPCfirst_next;等待一个起始位
clr CPU2_REST_FLAG;
; jnb P3.0,rPCfirst_next;等待一个起始位
setb IC_PWR2;
jmp rPCf
; ret
;----------------------------------------------------
rPCfirstbyte:
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
setb P3.1
setb P3.0
jnb P3.0,rPCfirstbyte;等待停止位
rPCfirst:
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jnb P3.0,rPCfirst_next;等待一个起始位
jb IC_SW1,IC_SW1_OFF
jnb P3.0,rPCfirst_next;等待一个起始位
jb IC_SW2,IC_SW2_OFF
rPCf:
jnb P3.0,rPCfirst_next;等待一个起始位
jb P3.0,rPCfirst;等待一个起始位
rPCfirst_next:
clr ET0 ;8C 24
jb P3.0,rPCfirst ;16C 40 延时0.25etu 再检起始位 2 4
mov WDTC, #0a7h ;12C 52
mov WDTC, #0a7h ;12C 64
jb P3.0,rPCfirst ;16C 80 延时0.25etu 再检起始位 2 7
lcall D16T ;192 272
clr a ;4C 276
;; 接收第0位
lcall recvPC1bit
rrc a
;; 接收第1位
lcall recvPC1bit
rrc a
;; 接收第2位
lcall recvPC1bit
rrc a
;; 接收第3位
lcall recvPC1bit
rrc a
;; 接收第4位
lcall recvPC1bit
rrc a
;; 接收第5位
lcall recvPC1bit
rrc a
;; 接收第6位
lcall recvPC1bit
rrc a
;; 接收第7位
lcall recvPC1bit
rrc a
; 接收奇偶位(未比较)
lcall recvPC1bit
; clr STATE_FLAG
;; call etu05; 接收停止位
;; jb I_O,rb_end
; call recvbit
; jc rb_end
rPCfirst_end:
mov r7,a; 保存数据
ret
;======================================================================
;----------------------------------------------------------------------
;发送PC一个字符
;sPCbyte
;入口参数: (R7)输入字符
;出口参数: 无
;----------------------------------------------------------------------
_sPCbyte: ;// 20T 57600bps 1 etu = 1000000/57600 = 17.36us = 17.36*16/12T = 23.15T
setb P3.0
setb P3.1
jnb P3.0,_sPCbyte
clr STATE_FLAG
lcall D23T;(11个call)字节之间(间隙)延时为12etu(含停止位)
lcall D23T
mov a,r7;data byte
clr ET0
clr P3.1 ;8C 发送起始位
lcall D22T
rrc a ;发送第0位 ;4C
mov P3.1,C ;8C
lcall D22T ;22*12
rrc a ;发送第1位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第2位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第3位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第4位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第5位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第6位
mov P3.1,C
lcall D22T ;20 23
rrc a ;发送第7位
mov P3.1,C
lcall D21T
nop ;4C
mov a,r7 ;4C 发送奇偶位位
mov C,P ;8C
mov P3.1,C ;8C
lcall D22T ;20 23
nop ;4C
setb P3.1 ;8C 发送停止位
lcall D30T;D23T ;20 23
lcall D30T;D23T
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 20030613 改 发60为发一个起始位
sPC60:
setb P3.0
setb P3.1
jnb P3.0,sPC60
clr P3.1; 发送起始位
lcall D22T
nop ;4C
setb P3.1 ;8C 发送停止位
ret
;------------------------------------------
; call 16C
D43000C: ; 14*256*12=43008
push 01h ; 8C
push 00h ; 8C
mov r0, #0 ; 8C
mov r1, #0 ; 8C
D43L:
djnz r0, D43L ; 12C 12C*256 = 3072C
djnz r1, D43L ; 12C 12C*256 = 3072C
mov WDTC, #0a7h;12C //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
pop 01h ; 8C
pop 00h ; 8C
ret ; 8C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -