📄 b8_tb4.asm
字号:
.INCLUDE "m48def1.inc"
.EQU BIT_CRSIG=$0070;串口接收标志寄存器
.EQU BIT_TRSIG=$0071;串口发送标志寄存器
.EQU BIT_DISTURB=$0072;加扰标记寄存器
.DEF CRC_TEMP=R5;CRC校验缓冲
;PORTD 端口配置
.EQU DAT_IO=$6
.EQU SCRAMBER=$3
.DEF EE_DAT =R17;E2ROM操作数据缓存
.DEF ADR_L=R18
.DEF ADR_H=R19
.DEF RLC_BUF=R25
.DEF TIMER0_CL=R24
.DEF RLC_TEMP=R23
.def data_temp=r22
.DEF COUNTP_H=R21
.DEF COUNTP_L=R20
.DEF TIMER0_CH=R15
.DEF DISCR_BSD=R14
;68,96,AA,08,00,00,06,07,03,C0,3F,
;68,96,0B,08,00,00,06,07,03,21,DE,
;;E2ROM操作地址缓存低字节
.EQU RD_MAP=$100;参数映射表表头
.EQU SEND_BUF=$160
.EQU reci_BUF=$150
.EQU ALL_ERT_BUF=$180
.EQU FLAG_SCRAM=$200;加扰标志存放处
.EQU DOWN_BUFF=$0220;解扰发送数据缓冲区头地址(往下发的22个字节的地址)
.EQU JUDG_SIGN=$201
.EQU DISTURB_SIGN=$202
.EQU DIST_MESSAGE=$203
.EQU PWM_SIGNER=$204
.EQU PWM_START=$205
;张巍定义对PWM进行重新装载计数和标志单元。
.EQU PWM_RELOADCOUNT=$206
.EQU PWM_RELOADFLAG=$207
.EQU ACK_ERROR = $0208
.equ comsign=$0209
.equ sav_adressh=$020a
.equ sav_adressl=$020b
.equ comT_sign=$020C
.equ SEND_adressh=$020D
.equ SEND_adressl=$020E
.equ iic_js=$020f
.equ iic_j=$0210
.equ iic_jd=$0211
.EQU S_DIGN=$0212
.EQU DAYS_COUNT=$0213
.EQU HOURS=$0214
.EQU MINITS=$0215
.EQU SECOND=$0216
;---------end---------------------------
;16M晶振62.5ns
;.EQU H_120_H=9
;.EQU H_120_L=240
;.EQU L_120_H=6;6
;.EQU L_120_L=0
;.EQU H_40_H=3
;.EQU H_40_L=120
;.EQU L_40_H=1
;.EQU L_40_L=120
;20M晶振50ns
.EQU H_120_H=12;11
.EQU H_120_L=45
.EQU L_120_H=6;7
.EQU L_120_L=128
.EQU H_40_H=5;4
.EQU H_40_L=86
.EQU L_40_H=1
.EQU L_40_L=100;214
.ORG $00
RJMP BEGIN
.ORG $01
RJMP INT_0
.ORG $03
RETI
.ORG $04
RETI
.ORG $09
RJMP TIMER2
.ORG $0B
RJMP COMPA1
.ORG $0C
RJMP COMPB1
.ORG $0D
RJMP TDIMER1;(ok)
.ORG $10
RJMP TIMER0;(ok)
.ORG $12
rjmp scom_reci
.ORG $14
rjmp scom_txd
.ORG 0X20
BEGIN:
LDI XL,$00
LDI XH,$1
LDI R16,$0
GONE_ON:
ST X+, R16
CPI XH,$02
BRNE GONE_ON
CPI XL,$FF
BRNE GONE_ON ;内部SRAM清0
LDI R16,$2
OUT SPH,R16
LDI R16,$ff
OUT SPL,R16;堆栈指针指向SRAM最后
RCALL INI_CPU;对CPU进行初始化,设定了T/C0、T/C1的用法及时钟分频
RCALL JUDG_ORIG;对EEROM进行初始化
ldi XL,LOW(RD_MAP+4);主从处理
ldi XH,HIGH(RD_MAP+4)
LD R16,X
SBRS R16,$7
RCALL SLAVERY_TIMER;主从处理
ldi xl,$88
ldi xh,$01
SEI; 开中断
MAIN:
rcall comm_smo
rcall deal_i2cdata
RCALL RECI_DATA
RJMP MAIN
RECI_DATA:
LDS R16,S_DIGN
SBRC R16,$0
RJMP MAIN_NEXT
SBRC R16,$1
RCALL JUDG_TIMERS
RCALL RECI_DATA_D
MAIN_NEXT:
RET
JUDG_TIMERS:
PUSH R16
PUSH R17
RCALL CLR_MSECOND
LDS R16,S_DIGN
SBRS R16,$3
RJMP EXIT_JUDGE
CLI
LDS R16,SECOND
INC R16
STS SECOND,R16
CPI R16,60
BRNE EXIT_JUDGE
LDI R16,$0
STS SECOND,R16
LDS R16,MINITS
INC R16
STS MINITS,R16
CPI R16,60
BRNE EXIT_JUDGE
LDI R16,$0
STS MINITS,R16
LDS R16,HOURS
INC R16
STS HOURS,R16
CPI R16,24
BRNE EXIT_JUDGE
LDI R16,$0
STS HOURS,R16
ldi XL,LOW(RD_MAP+$A);主从处理
ldi XH,HIGH(RD_MAP+$A)
LD R16,X
DEC R16
ST X,R16
LDI ADR_L,$A
mov EE_DAT,r16
RCALL EEROM_W
CPI R16,$0
BRNE EXIT_JUDGE
ldi r16,$0
STS DISTURB_SIGN,R16
RCALL CLOSE_RECI_DATA
EXIT_JUDGE:
SEI
POP R17
POP R16
RET
SLAVERY_TIMER:
PUSH R16
PUSH R17
LDI R16,$0
STS DAYS_COUNT,R16
STS HOURS,R16
STS MINITS,R16
STS SECOND,R16
SBR R16,$08
STS S_DIGN,R16
ldi XL,LOW(RD_MAP+$A);主从处理
ldi XH,HIGH(RD_MAP+$A)
LD R16,X
CPI R16,$00
BRNE EXIT_SEE
RCALL CLOSE_RECI_DATA
RJMP EXIT_FGKL
EXIT_SEE:
DEC R16
ST X,R16
LDI ADR_L,$A
mov EE_DAT,r16
RCALL EEROM_W
EXIT_FGKL:
POP R17
POP R16
ret
comm_smo:
lds r17,comsign
sbrs r17,$2
rjmp exit_dfg
ldi r17,$0
sts comsign,r17
ldi xl,LOW(reci_BUF)
ldi xh,HIGH(reci_BUF)
ldi r17,$0
ldi r18,$09
nexi_reci:
ld r16,x+
add r17,r16
clc
subi r18,$1
brne nexi_reci
ld r16,x+
CP R17,R16
BRNE exit_dfg
ldi Yl,LOW(reci_BUF+2)
ldi Yh,HIGH(reci_BUF+2)
LDI ADR_L,$4
LDI XL,LOW(RD_MAP+$4)
LDI XH,HIGH(RD_MAP+$4)
EXIT_EDN:
LD R16,Y+
ST X+,R16
mov EE_DAT,r16
RCALL EEROM_W
INC ADR_L
CLC
CPI XL,LOW(RD_MAP+$B)
BRNE EXIT_EDN
ldi r16,$0
STS DISTURB_SIGN,R16
ldi XL,LOW(RD_MAP+4);主从处理
ldi XH,HIGH(RD_MAP+4)
LD R16,X
SBRS R16,$7
RJMP DFFFGHJ
LDI R16,$0
STS DAYS_COUNT,R16
STS HOURS,R16
STS JUDG_SIGN,R16
STS MINITS,R16
STS SECOND,R16
SBR R16,$08
STS S_DIGN,R16
DFFFGHJ:
rcall RESPONSE
exit_dfg:
ret
CLR_TIMER:
CLI
LDI R16,$0
MOV TIMER0_CH,R16
LDI R16,40
OUT TCNT0,R16
SEI
RET
RECI_DATA_D:
PUSH R16
PUSH R17
PUSH R18
LSL RLC_BUF
SBIS PIND,DAT_IO
RJMP JUDGH_JMP
SBR RLC_BUF,$01
RJMP GH_LJK
JUDGH_JMP:
CBR RLC_BUF,$01
GH_LJK:
ANDI RLC_BUF,$03
CPI RLC_BUF,$03
BRNE GH_1LJK
RJMP GH_ELJK
GH_1LJK:
CPI RLC_BUF,$00
BRNE GH_2LJK
RJMP GH_ELJK
GH_2LJK:;JUMP HAPPEN
RCALL CLOSE_TIMER0
MOV RLC_TEMP,TIMER0_CH
LDI R16,$0
MOV TIMER0_CH,R16
LDI R16,40
OUT TCNT0,R16
RCALL OPEN_TIMER0
LDS R16,JUDG_SIGN
SBRc R16,$6
RJMP BEGIN_3RECI
SBRc R16,$5
RJMP BEGIN_4RECI
SBRC R16,$4
RJMP BEGIN_5RECI
CPI RLC_BUF,$01
BRNE ERROR_DEAL
LDS R16,JUDG_SIGN
SBR R16,$10
STS JUDG_SIGN,R16
RJMP GH_ELJK
BEGIN_3RECI:
CLC
CPI RLC_BUF,$02
BRNE ERROR_DEAL
RCALL COMPARE_40L
CLC
CPI R18,$AA
BRNE ERROR_DEAL
LDI R16,$0
STS JUDG_SIGN,R16
RCALL CLOSE_TIMER0
rcall delay_25us
delay_h:
sbis pind,DAT_IO
rjmp delay_h
delay_l:
sbic pind,DAT_IO
rjmp delay_l
rcall reci_data_fr
;rcall TEST_LED1
RJMP GH_ELJK
BEGIN_4RECI:
CLC
CPI RLC_BUF,$01
BRNE ERROR_DEAL
RCALL COMPARE_40L
CLC
CPI R18,$AA
BRNE ERROR_DEAL
LDS R16,JUDG_SIGN
CBR R16,$20
SBR R16,$40
STS JUDG_SIGN,R16
RJMP GH_ELJK
BEGIN_5RECI:
CLC
CPI RLC_BUF,$02
BRNE ERROR_DEAL
RCALL COMPARE_120L
CLC
CPI R18,$AA
BRNE ERROR_DEAL
;RCALL flash_fees
LDS R16,JUDG_SIGN
CBR R16,$10
SBR R16,$20
STS JUDG_SIGN,R16
RJMP GH_ELJK
ERROR_DEAL:
LDI R16,$00
STS JUDG_SIGN,R16
RJMP GH_ELJK
GH_ELJK:
POP R18
POP R17
POP R16
RET
CLOSE_TIMER0:
LDI R16,$0
STS TIMSK0,R16;TIMER0 CLOSE
RET
OPEN_TIMER0:
LDI R16,$1
STS TIMSK0,R16;TIMER0 OPEN
RET
reci_data_fr:
push r19
push r18
PUSH R17
PUSH XL
PUSH XH
PUSH YL
PUSH YH
ldi xl,LOW(DOWN_BUFF)
ldi xh,HIGH(DOWN_BUFF)
ldi r19,$f
CLI
delay_m:
sbis pind,DAT_IO
rjmp delay_m
ldi r16,$10
rcall delay_1h
ldi r18,$8
ldi data_temp,$0
exit_byte:
NOP
ldi r16,$D
rcall delay_1h
clc
NOP
sbiC pind,DAT_IO
rjmp jcd_dat
sec
jcd_dat:
roL data_temp
ldi r16,$C
rcall delay_1h
NOP
clc
subi r18,$1
brne exit_byte
SEI
st x+,data_temp
clc
CLI
subi r19,$1
brne delay_m
SEI;数据接收完毕
ldi r19,$d
ldi r16,$0
ldi xl,LOW(DOWN_BUFF)
ldi xh,HIGH(DOWN_BUFF)
sdsfg:
ld r17,x+
add r16,r17
clc
subi r19,$1
brne sdsfg
ld r17,x+
cp r16,r17
brne rtr_1 ;SUM CHECK OVER
RJMP rtr_2
rtr_1:
RJMP rtr
rtr_2:
;数据处理
ldi xl,LOW(DOWN_BUFF+2)
ldi xh,HIGH(DOWN_BUFF+2)
ldi Yl,LOW(RD_MAP+5);区号
ldi Yh,HIGH(RD_MAP+5)
LD R16,X+;TERMS LOWER
LD R17,Y+;TERMS HIGHER
CP R16,R17
BRNE COMP_DEAL_A
LD R16,X+;TERMS LOWER
LD R17,Y+;TERMS HIGHER
CP R16,R17
BRNE COMP_DEAL_A;组号低
LD R16,X+;TERMS LOWER
LD R17,Y+;TERMS HIGHER
CP R16,R17
BRNE COMP_DEAL_A;组号高
LD R17,Y+
ldi xl,LOW(DOWN_BUFF+5)
ldi xh,HIGH(DOWN_BUFF+5)
ADD XL,R17;通过偏移取数
LD R17,X
STS DIST_MESSAGE,R17
ldi Yl,LOW(RD_MAP+4)
ldi Yh,HIGH(RD_MAP+4)
ld r16,y
andi r16,$7
andi r17,$7
cp r16,r17
brne rtr_erro
lds r17,DIST_MESSAGE
andi r17,$f8
cpi r17,$0
brne goon_deal
rtr_erro:
ldi r17,$0
sts DIST_MESSAGE,r17
goon_deal:
rcall sen_disturb;发送解扰信息给解扰芯片
RCALL TEST_LED1;正常工作
lds r17,DIST_MESSAGE
andi r17,$f8
cpi r17,$0
brne pen_tv
ldi r16,$0
STS DISTURB_SIGN,R16
RJMP COMP_DEAL_A
pen_tv:
ldi r16,$ff
STS DISTURB_SIGN,R16
COMP_DEAL_A:
cli
LDS R16,DISTURB_SIGN
cpi R16,$ff
brne DISTURB_1
SDSDF_POH:
SBIS PIND,DAT_IO
RJMP SDSDF_POH
SDSDF_POL:
SBIC PIND,DAT_IO
RJMP SDSDF_POL
LDI R16,15
RCALL delay_1h
CBI PORTD,$7
LDI R16,21
RCALL delay_1h
CLC
ldi xl,LOW(DOWN_BUFF)
ldi xh,HIGH(DOWN_BUFF)
LD R17,X
CPI R17,$80
BRCC EXIT_DGHJ
NOP
SBI PORTD,$4
SBI PORTD,$7
RJMP EXIT_1DGHJ
EXIT_DGHJ:
CBI PORTD,$4
SBI PORTD,$7
cgp:
CLC ;;等待感应。
SBIS PIND,2 ;SBIC PIND,5
RJMP cgp
EXIT_1DGHJ:
ldi xl,LOW(DOWN_BUFF+1)
ldi xh,HIGH(DOWN_BUFF+1)
LD R17,X
CPI R17,$a
BRNE DISTURB_1
LDI R16,$20
RCALL delay_1h
EXITY_U:
SBIS PIND,DAT_IO
RJMP EXITY_U
cbi portd,$3
LDI R16,$20
RCALL delay_1h
sbi portd,$3
DISTURB_1:
nop
nop
rtr:
RCALL CLOSE_TIMER0
LDI R16,$0
MOV TIMER0_CH,R16
LDI R16,40
OUT TCNT0,R16
RCALL OPEN_TIMER0
sei
POP YH
POP YL
POP XH
POP XL
POP R17
pop r18
pop r19
ret
INT_0:
PUSH R16
IN R16,SREG
PUSH R16
POP R16
OUT SREG,R16
POP R16
RETI
COMPA1:
PUSH R16
POP R16
RETI
COMPB1:
RETI
sen_disturb:;解扰数据发送
push r16
lds r16,DIST_MESSAGE
andi r16,$08
nop
nop
out portc,r16
rcall delay_2us;请求中断
lds r16,DIST_MESSAGE
andi r16,$f0
swap r16
nop
nop
out portc,r16
rcall delay_2us
lds r16,DIST_MESSAGE
andi r16,$01
cpi r16,$00
brne exit_1judh
rcall flash_fees
rjmp exit_2judh
exit_1judh:
cbi portb,$0
exit_2judh:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -