📄 b8_tb4.asm
字号:
pop r16
ret
delay_2us:
push r16
ldi r16,$20
cbi portb,$1
exit_sop:
clc
subi r16,01
brne exit_sop
sbi portb,$1
pop r16
ret
DELAY_COMMAND:
PUSH R16
CLC
LDI R16,$E
REPATE_COMMAND:
DEC R16
BRNE REPATE_COMMAND
POP R16
RET
delay_1h:
push r16
rerr:
clc
dec r16
brne rerr
pop r16
ret
delay_25us:
push r16
ldi r16,80
fg_delkau:
clc
subi r16,$1
brne fg_delkau
pop r16
ret
COMPARE_40L:
PUSH R16
PUSH R17
;IN TIMER0_CL,TCNT0
;LDI TIMER0_CH,$45
;LDI TIMER0_CH,$23
CLC
CPI RLC_TEMP,H_40_H
BRNE G4ON_HCOMP
CLC
CPI TIMER0_CL,H_40_L
BRCS G4_OKH
LDI R18,$BB
RJMP EX4_COMP
G4ON_HCOMP:
BRCS G4_OKH
LDI R18,$BB
RJMP EX4_COMP
G4_OKH:
CLC
CPI RLC_TEMP,L_40_H
BRNE G4ON_LCOMP
CLC
CPI TIMER0_CL,L_40_L
BRCC G4_OKL
LDI R18,$BB
RJMP EX4_COMP
G4ON_LCOMP:
BRCC G4_OKL
LDI R18,$BB
RJMP EX4_COMP
G4_OKL:
LDI R18,$AA
RJMP EX4_COMP
EX4_COMP:
POP R17
POP R16
RET
COMPARE_120L:
PUSH R16
PUSH R17
IN TIMER0_CL,TCNT0
CLC
CPI RLC_TEMP,H_120_H
BRNE GOON_HCOMP
CLC
CPI TIMER0_CL,H_120_L
BRCS GO_OKH
LDI R18,$BB
RJMP EXIT_COMP
GOON_HCOMP:
BRCS GO_OKH
LDI R18,$BB
RJMP EXIT_COMP
GO_OKH:
CLC
CPI RLC_TEMP,L_120_H
BRNE GOON_LCOMP
CLC
CPI TIMER0_CL,L_120_L
BRCC GO_OKL
LDI R18,$BB
RJMP EXIT_COMP
GOON_LCOMP:
BRCC GO_OKL
LDI R18,$BB
RJMP EXIT_COMP
GO_OKL:
LDI R18,$AA
RJMP EXIT_COMP
EXIT_COMP:
POP R17
POP R16
RET
TIMER2: PUSH R16
IN R16,SREG
PUSH R16
LDI R16,$3D
STS TCNT2,R16
INC R14
MOV R16,R14
CPI R16,100
BRNE EXIT_SDMS
LDI R16,$0
MOV R14,R16
RCALL SET_MSECOND
EXIT_SDMS:
RCALL SET_IICT
POP R16
OUT SREG,R16
POP R16
RETI
TDIMER1:
PUSH R16
IN R16,SREG
PUSH R16
;-------------ZHANGWEI--------------
PUSH R17
;-------------END-------------------
LDS R16,PWM_START
SBRC R16,$0
RJMP EXIT_RY
RCALL TIMER_PSW
RJMP EXIT_1RY
EXIT_RY:
;----由16M晶振改为20M晶振后,可加入的时钟周期为至少25个。---ZHANGWEI--------------------
CPI COUNTP_H,$1F
BRNE PWM_OTHERCASE
CPI COUNTP_L,$7
BRNE PWM_ADDCOUNTL
;数到最后一个时
LDI R16,$00
STS TCCR1B,R16
LDS R16,PWM_SIGNER
SBRS R16,$1
RJMP D_SIGHPWM1
LDI R16,$0
STS PWM_SIGNER,R16
LDI COUNTP_L,$0
LDI COUNTP_H,$0
RCALL CLOSE_TIMER1
RJMP CDFF
D_SIGHPWM1:
RCALL OPEN_NETTIMER
LDI COUNTP_L,$1
LDI COUNTP_H,$0
LDI R16,$FF
STS PWM_SIGNER,R16
RJMP CDFF
PWM_OTHERCASE:
CPI COUNTP_L,$09
BRNE PWM_ADDCOUNTL
LDI COUNTP_L,$0
INC COUNTP_H
; RCALL DELAY_COMMAND
;在此处加入处理延时的问题,对TCNT1L的计数重新赋值。
PWM_ADDCOUNTL:
INC COUNTP_L
CDFF:
;RCALL TEST_LED1;FIELD SYNC
;-------------------------------------END--------------------------------------------------
; LDI R16,$1
; ADD COUNTP_L,R16
; LDI R16,$0
; ADC COUNTP_H,R16
; CLC
; CPI COUNTP_H,$1
; BRNE CDFF
; CPI COUNTP_L,$1F ;1D
; BRNE CDFF
; LDI R16,$00
; STS TCCR1B,R16
; LDS R16,PWM_SIGNER
; SBRS R16,$1
; RJMP D_SIGHPWM1
; LDI R16,$0
; STS PWM_SIGNER,R16
; LDI COUNTP_L,$0
; LDI COUNTP_H,$0
; RCALL CLOSE_TIMER1
; RJMP CDFF
; D_SIGHPWM1:
; RCALL OPEN_NETTIMER
; LDI COUNTP_L,$1
; LDI COUNTP_H,$0
; LDI R16,$FF
; STS PWM_SIGNER,R16
; RJMP CDFF
; CDFF:
; ;RCALL TEST_LED1;FIELD SYNC
EXIT_1RY:
;------------------ZHANGWEI---------------
POP R17
;------------------END--------------------
POP R16
OUT SREG,R16
POP R16
RETI
OPEN_TIMER1:
PUSH R16
CLI
LDI R16,$8F ;a5 2005-7-11 14:15修改计数方式后将第一延时减小.5us从8F94改为8F8A
STS TCNT1H,R16
LDI R16,$6C ;94 ;60
STS TCNT1L,R16
LDI R16,$00
STS TCCR1A,R16
LDI R16,$01
STS TCCR1B,R16
LDI R16,$01
STS TIMSK1,R16
LDI R16,$7
OUT TIFR1,R16
LDI R16,$0
STS PWM_START,R16
SEI
POP R16
RET
CLOSE_TIMER1:
PUSH R16
CLI
LDI R16,$A5
STS TCNT1H,R16
LDI R16,$60
STS TCNT1L,R16
LDI R16,$00
STS TCCR1A,R16
LDI R16,$01
STS TCCR1B,R16
LDI R16,$00
OUT EIMSK,R16
LDI R16,$3
OUT EIFR,R16
LDI R16,$00
STS PWM_START,R16
SEI
POP R16
RET
OPEN_NETTIMER:
PUSH R16
CLI
LDI R16,$81 ;9A 2005-7-11 14:15修改计数方式后将第二延时从814B
STS TCNT1H,R16
LDI R16,$4B ;C0
STS TCNT1L,R16
LDI R16,$00
STS TCCR1A,R16
LDI R16,$01
STS TCCR1B,R16
LDI R16,$01
STS TIMSK1,R16
LDI R16,$7
OUT TIFR1,R16
LDI R16,$00
OUT EIMSK,R16
LDI R16,$3
OUT EIFR,R16
LDI R16,$00
STS PWM_START,R16
SEI
POP R16
RET
TIMER_PSW:;
CLI
LDI COUNTP_H,0
LDI COUNTP_L,0
LDI R16,$01
OUT EIMSK,R16
LDI R16,$3
OUT EIFR,R16
LDI R16,$00
STS TCCR1B,R16
LDI R16,$2 ;1
STS TCNT1H,R16
LDI R16,$10 ;A4
STS TCNT1L,R16
LDI R16,$C0
STS TCCR1A,R16
LDI R16,$11
STS TCCR1B,R16
;16M
; LDI R16,$02
; STS ICR1H,R16
; LDI R16,$00
; STS ICR1L,R16
;20M
LDI R16,$02
STS ICR1H,R16
LDI R16,$80
STS ICR1L,R16
LDI R16,$2 ;01
STS OCR1AH,R16
LDI R16,$10 ;A4
STS OCR1AL,R16
LDI R16,$FF
STS PWM_START,R16
LDI R16,$01
STS TIMSK1,R16
;------ZHANGWEI MODIFY------------
;------END------------------------
SEI
RET
TIMER0:
PUSH R16
IN R16,SREG
PUSH R16
LDI R16,15
OUT TCNT0,R16
INC TIMER0_CH
POP R16
OUT SREG,R16
POP R16
RETI
TEST_LED3:
SBIS PORTD,$7
RJMP TEST_3D
CBI PORTD,$7
RJMP TEST_3D1
TEST_3D:
SBI PORTD,$7
TEST_3D1:
RET
TEST_LED1:
SBIS PORTb,$2
RJMP TEST_1D
CBI PORTb,$2
RJMP TEST_1D1
TEST_1D:
SBI PORTb,$2
TEST_1D1:
RET
INI_CPU:
PUSH R16
ldi r16,$0
sts wdtcsr,r16
;端口D的方向设置
LDI R16,$9a
OUT DDRD,R16;RXD输入,其余输出
LDI R16, $0FF
OUT PORTD,R16
;端口B的方向设置,PB6为输入,其余输出
LDI R16,$FF
OUT DDRB,R16;输出
LDI R16, $0FF
OUT PORTB,R16
;端口C的方向设置
LDI R16,$3f
OUT DDRC,R16;输出
LDI R16, $0FF
OUT PORTC,R16
;定时器1设置
LDI R16,$0
OUT TCCR0A,R16
LDI R16,$1
OUT TCCR0B,R16
LDI R16,15
OUT TCNT0,R16
LDI R16,$1
STS TIMSK0,R16;TIMER0 OPEN
LDI R16,$02
STS EICRA,R16
;串口设置,botelv;9600
ldi r16,$d8
sts ucsr0b,r16
ldi r16,$06
sts ucsr0c,r16
ldi r16,$03
sts ubrr0l,r16
ldi r16,$01
sts ubrr0h,r16
ldi r16,$0
sts udr0,r16
ldi r16,$ce
sts ucsr0a,r16
LDI R16,$0
STS TCCR2A,R16
LDI R16,$07
STS TCCR2B,R16
LDI R16,$01
STS TIMSK2,R16
LDI R16,$3D
STS TCNT2,R16
POP R16
RET
flash_fees:
sbis portb ,$0
rjmp cli_ledfees
cbi portb,$0
rjmp cli_lede
cli_ledfees:
sbi portb,$0
cli_lede:
ret
JUDG_ORIG:;加扰机初始化处理
PUSH XH
PUSH XL
PUSH ZH
PUSH ZL
PUSH R16
PUSH R17
PUSH R24
PUSH R25
LDI XL,LOW(RD_MAP)
LDI XH,HIGH(RD_MAP)
LDI ADR_L,$0
LDI R16,$4
G_ORIG1:
RCALL EEROM_R
ST X+,EE_DAT
INC ADR_L
SUBI R16,$1
BRNE G_ORIG1
LDI R16,$4
G_ORIG2:;判断初始化标记
LD EE_DAT,-X
CPI EE_DAT,$AA
BRNE ERROR_J1;没初始化
SUBI R16,$1
BRNE G_ORIG2
RCALL READ_MAP;读出映射表
RJMP G_ORIG3
ERROR_J1:;默认设置
RCALL ERAST_MEM
RCALL READ_MAP
G_ORIG3:
POP R25
POP R24
POP R17
POP R16
POP ZL
POP ZH
POP XL
POP XH
RET
READ_MAP:;读取参数映射表
LDI XL,LOW(RD_MAP)
LDI XH,HIGH(RD_MAP)
LDI ADR_L,$0
LDI R16,$20
READ_1M:
RCALL EEROM_R
ST X+,EE_DAT
INC ADR_L
SUBI R16,$1
BRNE READ_1M
RET
ERAST_MEM:;擦锄E2ROM,设置默认值
LDI ADR_L,$0
LDI EE_DAT,$AA;初始化标记
LDI R16,$4
G_ORIG2A:
RCALL EEROM_W
INC ADR_L
SUBI R16,$1
BRNE G_ORIG2A
LDI EE_DAT,$aa;主机
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$01;区号
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$00;USER TERMS LOWER;组号低
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$00;USER TERMS HIGHER;组号高
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$00;USER NO.用户偏移
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$08;USER NO.子机号
RCALL EEROM_W
INC ADR_L
LDI EE_DAT,$3;USER SIGENER CAN WATCH;用户信息
RCALL EEROM_W
INC ADR_L
G_ORIG2B:;其余擦除
LDI EE_DAT,$00
RCALL EEROM_W
INC ADR_L
CPI ADR_L,$80
BRNE G_ORIG2B
RET
CLR_RAMJ:
LDI XL,$00
LDI XH,$20
LDI R16,$ff
GONE1_ON:
ST -X, R16
CPI XL,$60
BRNE GONE1_ON
CPI XH,$02
BRNE GONE1_ON
RET
WRITE:
MOV R17,R16 ;DATA
MOV R18,R17
RCALL WRITE_24C02
INC R16
CPI R16,$FF
BRNE WRITE
LDI R17,$00
LDI R18,$01
RCALL READ_24C02
CPI R17,$01
BRNE ZERO
SBI PORTB,1
RJMP LOOP
ZERO:
CBI PORTB,1
LOOP:
RJMP LOOP
deal_i2cdata:
LDS R16,S_DIGN
SBRS R16,$2
RJMP exiyyuX_iic
RCALL CLR_IICT
sec
sbis pind,5
CLC
lds r16,iic_js
rol r16
sts iic_js,r16
cpi r16,$0
brne next1j
STS iic_jd,R16
RJMP exiyyuX_iic
next1j:
cpi r16,$ff
brne exiyyuX_iic
lds r17,iic_jd
cpi r17,$0
brne exiyyuX_iic
cli
LDI R16,$FF
sts iic_jd,r16
ldi r16,$0
sts ucsr0b,r16
ldi XL,LOW(RD_MAP+4);主从处理
ldi XH,HIGH(RD_MAP+4)
ld r17,x+
SBRS R17,$7
RJMP SLARY_UINT
RCALL MASTER_DONE
sei
rjmp exiyyuX_iic
SLARY_UINT:;
RCALL SLAY_DONE
sei
exiyyuX_iic:
ret
MASTER_DONE:
PUSH R19
PUSH R18
rcall clr_eerom;
ldi r18,$0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -