📄 fireplace.src.bak
字号:
or I2C_PORT,#I2C_SCL1 ;SCL=1
nop
nop
and I2C_PORT,#I2C_SCL0 ;SCL=0
nop
nop
and I2C_PORT,#I2C_SDA0 ;SDA=0
nop
nop
ret
;***********************************************
;***********************************************
I2C_cack:
or I2C_PORT,#I2C_SDA1 ;SDA=1
nop
nop
or I2C_PORT,#I2C_SCL1 ;SCL=1
nop
nop
ld I2C_ack_flag,#00H
ld p2conh,#01001100b ;set p2.4 inport
nop
nop
tm p2,#00010000B
jr nz,I2C_nocack
ld I2C_ack_flag,#01H
I2C_nocack:
ld p2conh,#01001111b ;set p2.4 outport
nop
nop
and I2C_PORT,#I2C_SCL0 ;SCL=0
nop
nop
ret
;***********************************************
;***********************************************
WRbyte:
ld r0,#08H
wlp:
rlc I2C_wrdata
jr c,wr1
jr wr0
wr1:
or I2C_PORT,#I2C_SDA1 ;SDA=1
nop
nop
or I2C_PORT,#I2C_SCL1 ;SCL=1
nop
nop
and I2C_PORT,#I2C_SCL0 ;SCL=0
nop
nop
jr wlp1
wr0:
and I2C_PORT,#I2C_SDA0 ;SDA=0
NOP
nop
or I2C_PORT,#I2C_SCL1 ;SCL=1
nop
nop
and I2C_PORT,#I2C_SCL0 ;SCL=0
nop
nop
jr wlp1
wlp1:
sub r0,#01H
jr nz,wlp
ret
;***************************************************
;***************************************************
RDbyte:
ld r0,#08H
rlp:
or I2C_PORT,#I2C_SDA1 ;SDA=1
nop
nop
or I2C_PORT,#I2C_SCL1 ;SCL=1
nop
nop
ld p2conh,#01001100b ;set p2.4 inport
nop
nop
tm I2C_PORT,#I2C_SDA1 ;SDA=0 ?
jr z,rd_0
or I2C_rddata,#80H
jr rlp1
rd_0:
and I2C_rddata,#7FH
rlp1:
ld p2conh,#01001111b ;set p2.4 outport
and I2C_PORT,#I2C_SCL0 ;SCL=0
nop
nop
rl I2C_rddata
sub r0,#01H
jr nz,rlp
ret
;***************************************************
;***************************************************
WR_24C02:
call I2C_start
ld I2C_wrdata,#0A0H ;write 24c02 dress
call WRbyte
call I2C_cack
call delay20us
; tm I2C_ack_flag,#01H
; jr z,exit_wr
ld I2C_wrdata,I2C_dress ;write eeprom dress
call WRbyte
call I2C_cack
call delay20us
wrdata:
ld I2C_wrdata,I2C_data ;write data to 24C02
call WRbyte
call I2C_cack
call delay20us
exit_wr:
call I2C_stop
ret
;***************************************************
;***************************************************
RD_24C02:
call I2C_start
ld I2C_wrdata,#0A0H ;write 24c02 dress A0H
call WRbyte
call I2C_cack
call delay20us
; tm I2C_ack_flag,#01H
; jr z,exit_rd
ld I2C_wrdata,I2C_dress ;write eeprom dress
call WRbyte
call I2C_cack
call delay20us
call I2C_start
ld I2C_wrdata,#0A1H ;read 24c02 dress A1H
call WRbyte
call I2C_cack
call delay20us
; tm I2C_ack_flag,#01H
; jr z,exit_rd
rddata:
call RDbyte
ld I2C_data,I2C_rddata ;save read data
call I2C_noask
call delay20us
exit_rd:
call I2C_stop
ret
;******************************************************
;******************************************************
restore:
ld I2C_dress,#lamp_status_dress
call RD_24C02
ld lamp_status,I2C_data
call delay20ms
ld I2C_dress,#sound_status_dress
call RD_24C02
ld sound_status,I2C_data
call delay20ms
ld I2C_dress,#fire_value_dress
call RD_24C02
ld fire_value,I2C_data
call delay20ms
ld I2C_dress,#temp_value_dress
call RD_24C02
ld temp_value,I2C_data
call delay20ms
ret
;******************************************************
delay20us:
push r7
ld r7,#80h
delay20us_1
dec r7
jr nz,delay20us_1
pop r7
ret
;*******************************************************
;***************************************************************
AD_judge:
tm AD_convert_time,#01h
jp z,AD_judge_end
ld AD_convert_time,#00h
call AD_convert
ld ad_hdata_1,ad_hdata_back
call AD_convert
ld ad_hdata_2,ad_hdata_back
call AD_convert
ld ad_hdata_3,ad_hdata_back
call AD_convert
ld ad_hdata_4,ad_hdata_back
call AD_convert
ld ad_hdata_5,ad_hdata_back
call AD_Value_Middle
ld ad_hdata,ad_hdata_3
cp ad_hdata,#10
jp ult,temp_notconnect
ld temp_sensor,#01h
ld not_sensor_counter1,#0
ld not_sensor_counter2,#0
tm fire_status,#01h
jr z,AD_judge_3
or p0,#10000000B ;set p0.7 enble LIGHTS
AD_judge_1:
tm lamp_status,#01h
jr z,AD_judge_2
call lamp_open
AD_judge_2:
tm sound_status,#01h
jr z,AD_judge_3
call sound_open
AD_judge_3:
tm temp_status,#01H
jr z,AD_judge_end
ld r2,#0fh
ld r3,temp_value
ldc r0,#30h[rr2]
cp ad_hdata,r0
jr ugt,temp_ad_off
ld r2,#0fh
ld r3,temp_value
ldc r0,#40h[rr2]
cp ad_hdata,r0
jr ult,temp_ad_on
AD_judge_end:
ret
;*************************************************************
temp_ad_off:
and p0,#0efh ;clea p0.4 heater off
ret
temp_ad_on:
or p0,#10h ;set p0.4 heater on
ret
temp_notconnect:
ld temp_sensor,#00h
call sound_close
call lamp_close
and p0,#01111111B ;clear p0.7 disenble LIGHTS
and p0,#0efh ;clea p0.4 heater off
; ld beep_flag,#01h
ret
;***************************************************************
;****************************************************************
AD_convert:
ld adcon,#00100101B ;select P0.2 f=fosc/4 start convert
call delay2ms
tm adcon,#00001000B
jr z,ad_error
ld ad_hdata_back,addatah
jr ad_done
ad_error:
ld ad_hdata_back,#00H
ld ad_ldata,#00H
ad_done:
ret
;*****************************************************************
;*****************************************************************
AD_Value_Middle:
ld ad_comp_cnt,#04h
AD_Value_Middle1:
ld ad_hdata_a,ad_hdata_1
ld ad_hdata_b,ad_hdata_2
call compare_a_b
ld ad_hdata_1,ad_hdata_a
ld ad_hdata_2,ad_hdata_b
ld ad_hdata_a,ad_hdata_2
ld ad_hdata_b,ad_hdata_3
call compare_a_b
ld ad_hdata_2,ad_hdata_a
ld ad_hdata_3,ad_hdata_b
ld ad_hdata_a,ad_hdata_3
ld ad_hdata_b,ad_hdata_4
call compare_a_b
ld ad_hdata_3,ad_hdata_a
ld ad_hdata_4,ad_hdata_b
ld ad_hdata_a,ad_hdata_4
ld ad_hdata_b,ad_hdata_5
call compare_a_b
ld ad_hdata_4,ad_hdata_a
ld ad_hdata_5,ad_hdata_b
dec ad_comp_cnt
jp nz,AD_Value_Middle1
ret
;*****************************************************************
compare_a_b:
ld ad_hdata_temp,ad_hdata_a
sub ad_hdata_a,ad_hdata_b
jp ult,a_low_b
a_big_b:
ld ad_hdata_a,ad_hdata_b
ld ad_hdata_b,ad_hdata_temp
jp compare_a_b_end
a_low_b:
ld ad_hdata_a,ad_hdata_temp
compare_a_b_end:
ret
;*****************************************************************
delay2ms:
ld r0,#20H
dalay_loop:
dec r0
;nop
jr nz,dalay_loop
delay2ms_end:
ret
;********************************************************************
;*********************************************************
motor_change:
tm fire_status,#01H
jr z,motor_change_end
ld r2,#0fh
ld r3,fire_value
ldc r0,#70h[rr2]
ld motor_value,r0
motor_change_end:
ret
;*************************************************************
.org 0f00h ;temp_led q1 fire_led q2
db 11111111b ;0
db 11111111b ;1
db 11111111b ;3
db 01111111b ;3
db 00111111b ;4
db 00011111b ;5
db 00001111b ;6
db 00000111b ;7
db 00000011b ;8
db 00000001b ;9
db 00000000b ;a
.org 0f10h ;temp_led q3
db 11111111b ;0
db 11110111b ;1
db 11110011b ;2
db 11110011b ;3
db 11110011b ;4
db 11110011b ;5
db 11110011b ;6
db 11110011b ;7
db 11110011b ;8
db 11110011b ;9
db 11110011b ;a
.org 0f20h ;fire_led q3
db 11111111b ;0
db 11111101b ;1
db 11111100b ;2
db 11111100b ;3
db 11111100b ;4
db 11111100b ;5
db 11111100b ;6
db 11111100b ;7
db 11111100b ;8
db 11111100b ;9
db 11111100b ;a
.org 0f30h ;temp_value covert ad_value to off heater
db 0 ;0
db 116 ;1
db 121 ;2
db 126 ;3
db 131 ;4
db 136 ;5
db 141 ;6
db 145 ;7
db 150 ;8
db 154 ;9
db 159 ;a
.org 0f40h ;temp_value covert ad_value to start heater
db 0 ;0
db 114 ;1
db 119 ;2
db 124 ;3
db 129 ;4
db 134 ;5
db 139 ;6
db 143 ;7
db 148 ;8
db 152 ;9
db 157 ;a
.org 0f70h ;fire_value covert motor value
db 26 ;0
db 20 ;1
db 18 ;2
db 16 ;3
db 13 ;4
db 11 ;5
db 9 ;6
db 8 ;7
db 7 ;8
db 6 ;9
db 0 ;a
;**********************************************
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -