📄 linedt.asm
字号:
mov eep_addr,a
mov a,01h
mov eep_length,a
call _i2c_read
mov a,eep_buf_addr
mov vdif,a
ret
;----------------------------------
_clr_eep:
mov a,06h
mov mtemp,a
mov a,eep_bf_adr
mov mp,a
_clr_eep_1:
mov a,0ffh
mov idr0,a
inc mp
dec mtemp
sz mtemp
jmp _clr_eep_1
mov a,06h
mov eep_length,a
clr eep_addr
call _i2c_write
ret
;---------------------------------
_rd_eep_init:
mov a,06h
mov eep_length,a
clr eep_addr
call _i2c_read
mov a,eep_bf_adr
mov mp,a
mov a,idr0
mov vref,a
inc mp
mov a,idr0
mov vdif,a
inc mp
mov a,idr0
meqis idr0,55h
jmp _rd_eep_init1
inc mp
meqis idr0,0aah
jmp _rd_eep_init1
inc mp
meqis idr0,55h
jmp _rd_eep_init1
inc mp
meqis idr0,0aah
jmp _rd_eep_init1
_rd_eep_init2:
mov a,01h
mov lin_mod,a
jmp _rd_eep_initx
_rd_eep_init1:
clr lin_mod
_rd_eep_initx:
ret
;----------------------------------
_vdtmp_to_dspbuf:
clr emi
mov a,0ch
mov dsp_bufh,a
;clr dsp_bufh
mov a,vdtmp
mov dsp_bufl,a
set emi
ret
;----------------------------------
_vd_to_dspbuf:
clr emi
mov a,0ch
mov dsp_bufh,a
;clr dsp_bufh
mov a,vdif
mov dsp_bufl,a
set emi
ret
;----------------------------------
_vref_to_dspbuf:
clr emi
clr dsp_bufh
clr dsp_bufl
mov a,vref
jmp _vlin_to_dsp1
;----------------------------------
_vlin_to_dspbuf:
clr emi
clr dsp_bufh
clr dsp_bufl
mov a,vlinel
_vlin_to_dsp1:
mov dsp_bufh,a
sub a,0ah
snz status_c
jmp _vlin_to_dspx1 ;c=0,over
inc dsp_bufl
jmp _vlin_to_dsp1
_vlin_to_dspx1:
mgtms dsp_bufh,04h
jmp _vlin_to_dspx3
inc dsp_bufl
_vlin_to_dspx3:
clr mtemp
mov a,dsp_bufl
_vlin_to_dsp2:
mov dsp_bufl,a
sub a,0ah
snz status_c
jmp _vlin_to_dspx2
inc mtemp
jmp _vlin_to_dsp2
_vlin_to_dspx2:
swap mtemp
mov a,mtemp
orm a,dsp_bufl
clr dsp_bufh
nop
set emi
_vlin_to_dspx:
ret
;----------------------------------
org 200h
dc 0ah,0ah,14h,1eh,28h,32h,3ch,46h
_alarm_det:
mov a,vdif
mov tblp,a
tabrdc mtemp
mov a,vref
subm a,mtemp
mgtms mtemp,vlinel
jmp _alarm_det_1
sz to_low_f
jmp _alarm_det_2
set to_low_f
clr to_high_f
call _2sec_tm2
jmp _alarm_det_x
_alarm_det_2:
sz almon_f
jmp _alarm_det_x
snz tim2out_f
jmp _alarm_det_x
set almon_f
jmp _alarm_det_x
_alarm_det_1:
sz to_high_f
jmp _alarm_det_3
set to_high_f
clr to_low_f
call _1sec_tm2
jmp _alarm_det_x
_alarm_det_3:
snz almon_f
jmp _alarm_det_x
snz tim2out_f
jmp _alarm_det_x
clr almon_f
_alarm_det_x:
ret
;---------------------------------
_chg_vdtmp:
inc vdtmp
meqis vdtmp,07h
jmp _chg_vdtmp_x
mov a,01h
mov vdtmp,a
_chg_vdtmp_x:
ret
;---------------------------------
_vref_to_eep:
clr eep_addr
mov a,vref
mov eep_buf_addr,a
mov a,v_default
mov eep_buf_addr1,a
mov a,55h
mov eep_buf_addr2,a
mov eep_buf_addr4,a
mov a,0aah
mov eep_buf_addr3,a
mov eep_buf_addr5,a
mov a,06h
mov eep_length,a
call _i2c_write
ret
;----------------------------------
_vd_to_eep:
mov a,01h
mov eep_addr,a
mov a,vdif
mov eep_buf_addr,a
mov a,01h
mov eep_length,a
call _i2c_write
ret
;----------------------------------
;==================================
; key scan
;==================================
_keyscan:
clr keyact_f
sz keyin_f
jmp _key_rel
mov a,pa
and a,03h
xor a,03h
mov keybuf,a
sz keybuf
jmp _keyscn1
jmp _keyinix
_keyscn1:
sz keyfst_f
jmp _keyprs
mov a,keybuf
mov keyold,a
set keyfst_f
jmp _keyscnx
_keyprs:
clr keyfst_f
meqis keybuf,keyold
jmp _keyinix
meqis keybuf,03h
jmp _keyprs_1
set twokey_f
_keyprs_1:
clr key_tim
set keyin_f
jmp _keyscnx
_key_rel:
mov a,pa
and a,03h
mov mtemp,a
meqis mtemp,03h ;release key?
jmp _key_rel_1 ;no
mgtms key_tim,4bh
jmp _key_rel_5
jmp _key_rel_4
_key_rel_5:
set keyact_f
_key_rel_4:
clr keyin_f
clr twokey_f
clr key_tim
jmp _keyscnx
_key_rel_1:
inc key_tim
meqis key_tim,4bh ;hold key for 1.5s?
jmp _key_rel_3 ;no
mov a,03h
addm a,keybuf
set keyact_f
jmp _keyscnx
_key_rel_3:
mgtms 32h,key_tim
jmp _keyscnx
sz twokey_f
jmp _keyscnx
mov a,pa
and a,03h
xor a,03h
mov keybuf,a
meqis keybuf,03h
jmp _keyscnx
set twokey_f
clr key_tim
jmp _keyscnx
_keyinix:
clr keyfst_f
_keyscnx:
ret
;==================================
; key subproc
;==================================
_is_k1:
snz keyact_f
jmp _is_k_x2
meqis keybuf,k_1
jmp _is_k_x2
jmp _is_k_x1
;----------------------------------
_is_k2:
snz keyact_f
jmp _is_k_x2
meqis keybuf,k_2
jmp _is_k_x2
jmp _is_k_x1
;----------------------------------
_is_k1_hld:
snz keyact_f
jmp _is_k_x2
meqis keybuf,k1_hld
jmp _is_k_x2
jmp _is_k_x1
;----------------------------------
_is_k2_hld:
snz keyact_f
jmp _is_k_x2
meqis keybuf,k2_hld
jmp _is_k_x2
jmp _is_k_x1
;----------------------------------
_is_k1k2_hld:
snz keyact_f
jmp _is_k_x2
meqis keybuf,k1_k2_hld
jmp _is_k_x2
jmp _is_k_x1
_is_k_x1:
clr keyact_f
clr status_c
jmp _is_k_x
_is_k_x2:
set status_c
_is_k_x:
;sz status_c
ret
;----------------------------------
_start_adc:
clr adcr.7
set adcr.7
clr adcr.7
ret
;----------------------------------
_set_s0sec5:
mov a,32h
mov timer1,a
clr timout_f
ret
;----------------------------------
_set_s0sec2:
mov a,14h
mov timer1,a
clr timout_f
ret
;----------------------------------
_3sec_tm2:
mov a,1eh
mov timer2,a
clr tim2out_f
ret
;----------------------------------
_1sec_tm2:
mov a,0ah
mov timer2,a
clr tim2out_f
ret
;----------------------------------
_2sec_tm2:
mov a,14h
mov timer2,a
clr tim2out_f
ret
;----------------------------------
_dec_tim1:
sz timer1
jmp _dec_tim1_1
jmp _dec_tim1_x
_dec_tim1_1:
dec timer1
sz timer1
jmp _dec_tim1_x
set timout_f
_dec_tim1_x:
ret
;----------------------------------
_dec_tim2:
sz timer2
jmp _dec_tim2_1
jmp _dec_tim2_x
_dec_tim2_1:
dec timer2
sz timer2
jmp _dec_tim2_x
set tim2out_f
_dec_tim2_x:
ret
;**********************************
;* eeprom subproc *
;**********************************
_i2c_start:
set scl_p
set sda_p
delay ;>4.7u for 3V system
clr sda_p
delay
clr scl_p
nop
nop
ret
;**********************************
_i2c_stop:
clr scl_p
clr sda_p
delay
set scl_p
delay
set sda_p
nop
nop
ret
;**********************************
_wait_eep_free:
call _i2c_start
mov a,0a0h
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
snz status_c
jmp _wait_eep_free
ret
;*********************************
_wait_ack:
set sda_dir
delay
set scl_p
delay
mov a,05h
mov mtemp,a
_wait_a1:
snz sda_p
jmp _wait_a2
dec mtemp
sz mtemp
jmp _wait_a1
clr status_c
jmp _wait_a3
_wait_a2:
set status_c
_wait_a3:
clr sda_dir
clr scl_p
ret
;********************************
_send_no_ack:
set sda_p
delay
set scl_p
delay
clr scl_p
nop
ret
;********************************
_send_ack:
clr sda_p
delay
set scl_p
delay
clr scl_p
nop
ret
;********************************
_send_1byte_data:
mov a,08h
mov mtemp,a
_send_1byte_1:
clr scl_p
nop
nop
rlc i2cbyte
sz status_c
jmp _send_1byte_2
clr sda_p
jmp _send_1byte_3
_send_1byte_2:
set sda_p
_send_1byte_3:
delay
set scl_p
delay
dec mtemp
sz mtemp
jmp _send_1byte_1
clr scl_p
ret
;********************************
_get_1byte_data:
mov a,08h
mov mtemp,a
set sda_p
set sda_dir ;set to input
_get_1byte_1:
clr scl_p
delay
set scl_p
delay
sz sda_p
jmp _get_1byte_2
clr status_c
jmp _get_1byte_3
_get_1byte_2:
set status_c
_get_1byte_3:
rlc i2cbyte
dec mtemp
sz mtemp
jmp _get_1byte_1
clr scl_p
clr sda_dir ;set to output
ret
;*********************************
_i2c_read:
nop
nop
sz eep_length
jmp _i2c_rd_1
jmp _i2c_rd_x
_i2c_rd_1:
call _wait_eep_free
call _i2c_start
mov a,0a0h
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
mov a,eep_addr
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
call _i2c_start
mov a,0a1h
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
mov a,eep_bf_adr
mov mp,a
_i2c_rd_2:
call _get_1byte_data
mov a,i2cbyte
mov idr0,a
inc mp
inc eep_addr
dec eep_length
sz eep_length
jmp _i2c_rd_3
call _send_no_ack
jmp _read_done
_i2c_rd_3:
call _send_ack
jmp _i2c_rd_2
_read_done:
call _i2c_stop
_i2c_rd_x:
ret
;**********************************
_i2c_write:
call _wait_eep_free
call _i2c_start
mov a,0a0h
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
mov a,eep_addr
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
mov a,eep_bf_adr
mov mp,a
_i2c_wr_1:
sz eep_length
jmp _i2c_wr_2
jmp _write_done
_i2c_wr_2:
mov a,idr0
mov i2cbyte,a
call _send_1byte_data
call _wait_ack
inc mp
inc eep_addr
dec eep_length
jmp _i2c_wr_1
_write_done:
jmp _i2c_stop
ret
;**********************************
;* display subproc *
;**********************************
org 400h ;l o - r
dc 0ffh,000h,0f3h,0c3h,00ch,0cfh,0ffh,003h,0ffh,0cfh,0fch,0f0h,000h,030h,0ffh,03fh
dc 033h,033h,00fh,03fh,03fh,03ch,03ch,033h,03fh,03fh,000h,03ch,00ch,00ch,00ch,00ch
_dspjob:
sz dspon_f
jmp _dspjob3
call _ini_seg
jmp _dspjobx
_dspjob3:
;first 7_seg
sz dsp_bufh
jmp _dspjob1
jmp _dspjob2
_dspjob1:
mov a,0fh
and a,dsp_bufh
mov mtemp2,a
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg0_buf
mov a,mtemp2
add a,10h
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg1_buf
;second 7_seg
_dspjob2:
mov a,0f0h
and a,dsp_bufl
mov mtemp2,a
rr mtemp2
rr mtemp2
rr mtemp2
rr mtemp2
sz mtemp2
jmp _dspjob5
jmp _dspjob4
_dspjob5:
mov a,mtemp2
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg2_buf
mov a,mtemp2
add a,10h
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg3_buf
;third 7_seg
_dspjob4:
mov a,0fh
and a,dsp_bufl
mov mtemp2,a
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg4_buf
mov a,mtemp2
add a,10h
mov tblp,a
tabrdc mtemp
mov a,mtemp
xorm a,seg5_buf
_dspjobx:
ret
;----------------------------
_seg_shift:
clr seg_dsp_buf
clr status_c
rlc seg5_buf
rlc seg_dsp_buf
rlc seg4_buf
rlc seg_dsp_buf
rlc seg3_buf
rlc seg_dsp_buf
rlc seg2_buf
rlc seg_dsp_buf
rlc seg1_buf
rlc seg_dsp_buf
rlc seg0_buf
rlc seg_dsp_buf
rl seg_dsp_buf
ret
;----------------------------
_segdrv:
call _seg_shift
mov a,pb
and a,81h
or a,seg_dsp_buf
mov pb,a
ret
;**********************************
;* initial subproc *
;**********************************
_ini_port:
mov a,0c2h ;com pin to low
mov pa,a
mov a,3fh ;p6,p7 output, others input
mov pac,a
mov a,01h ;set pb0 input; others output
mov pbc,a
mov a,00h
mov pb,a
mov a,08h ;set pb0 adc port
mov adcr,a
ret
;-------------------------------
_clr_ram:
mov a,reg_adr
mov mp,a
_clrloop:
clr idr0
inc mp
sz mp
jmp _clrloop
_clr_ramx:
nop
ret
;-------------------------------
_ini_ram:
mov a,04h
mov t10mcnt,a
mov a,0ah
mov t100mcnt,a
mov a,01h
mov time_seq,a
mov a,0c0h ;???
mov timer1,a
_ini_seg:
mov a,0aah
mov seg0_buf,a
mov seg1_buf,a
mov seg2_buf,a
mov seg3_buf,a
mov seg4_buf,a
mov seg5_buf,a
ret
;-------------------------------
_ini_int0:
mov a,000h
mov tmrl,a
mov a,0d9h
mov tmrh,a
mov a,98h
mov tmrc,a
set intc0.2
ret
;----------------------------------
_ini_adc:
set intc0.3
mov a,08h
mov adcr,a
mov a,01h
mov adsr,a
ret
;------------------------------------
_ext_alarm:
clr almon_f
clr to_low_f
clr to_high_f
ret
;------------------------------------
_clr_param:
mov a,v_default
mov vdif,a
mov vdtmp,a
ret
;------------------------------------
_liutest:
sz pb.7
jmp _liutest1
set pb.7
jmp _liutestx
_liutest1:
clr pb.7
_liutestx:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -