📄 fm_transmitter.asm
字号:
sta i2c_data3
sta i2c_data1
lda radio_num0
sta i2c_data2
sta i2c_data0
call i2c_write_mode
lds i2c_data3,00h
lds i2c_data2,00h
lds i2c_data1,00h
lds i2c_data0,00h
call i2c_read_mode
dec* global_buf0
jz store_radio_i2c1
lda radio_num1
sub i2c_data3
jnz store_radio_i2c0
lda radio_num0
sub i2c_data2
jnz store_radio_i2c0
store_radio_i2c1:
rts
;*******************************************
; i2c_memory 93lc46a subroutine
;*******************************************
i2c_read_mode:
lds 70h,00h
opb 70h
spb 10111b
lds i2c_sbopcode,06h
call send_sbopcode
call send_i2c_address
call read_i2c_data
rts
;*******************************************
i2c_write_mode:
lds 70h,00h
opb 70h
spb 10111b
lds i2c_sbopcode,05h
call send_sbopcode
call send_i2c_address
call send_i2c_data
lds i2c_buff1,0ah
call detect_ready
rts
;*******************************************
i2c_write_enable:
lds 70h,00h
opb 70h
spb 10111b
lds i2c_addr0,00h
lds i2c_addr1,03h
lds i2c_sbopcode,04h
call send_sbopcode
call send_i2c_address
opb force_zero
rts
;*******************************************
send_sbopcode:
lds 70h,02h
opb 70h
lds 70h,00h
opb 70h
lds 70h,05h
opb 70h
lds i2c_buff0,02h
send_sb0:
lda i2c_sbopcode
jb2 send_sb1
call send_zero
jmp send_sb2
send_sb1:
call send_one
nop
send_sb2:
sl0 i2c_sbopcode
sl0 i2c_buff0
jnz send_sb0
rts
;******************************************
send_i2c_address:
lds i2c_buff0,04h
lda i2c_addr1
sta i2c_buff1
sl0 i2c_buff1
sl0 i2c_buff1
call send_clk_data
lds i2c_buff0,01h
lda i2c_addr0
sta i2c_buff1
call send_clk_data
rts
;*******************************************
send_i2c_data:
lds i2c_buff0,01h
lda i2c_data3
sta i2c_buff1
call send_clk_data
lds i2c_buff0,01h
lda i2c_data2
sta i2c_buff1
call send_clk_data
lds i2c_buff0,01h
lda i2c_data1
sta i2c_buff1
call send_clk_data
lds i2c_buff0,01h
lda i2c_data0
sta i2c_buff1
call send_clk_data
opb force_zero
lds 70h,02h
opb 70h
opb force_zero
nop
lds 70h,04h
opb 70h
spb 10110b
rts
;*******************************************
send_clk_data:
lda i2c_buff1
jb3 send_clk_data1
call send_zero
jmp send_clk_data2
send_clk_data1:
call send_one
nop
send_clk_data2:
sl0 i2c_buff1
sl0 i2c_buff0
jnz send_clk_data
rts
;******************************************
;send_i2c_data:
; lds i2c_buff0,01h
;send_i2c_data0:
; lda i2c_data1
; jb3 send_i2c_data1
; call send_zero
; jmp send_i2c_data2
;send_i2c_data1:
; call send_one
; nop
;send_i2c_data2:
; sl0 i2c_data1
; sl0 i2c_buff0
; jnz send_i2c_data0
; lds i2c_buff0,01h
;send_i2c_data3:
; lda i2c_data0
; jb3 send_i2c_data4
; call send_zero
; jmp send_i2c_data5
;send_i2c_data4:
; call send_one
; nop
;send_i2c_data5:
; sl0 i2c_data0
; sl0 i2c_buff0
; jnz send_i2c_data3
; opb force_zero
;lds 70h,02h
;opb 70h
;opb force_zero
; nop
; lds 70h,06h
; opb 70h
; spb 10110b
; opb 70h
; rts
;******************************************
read_i2c_data:
call spc_i2c_data
lda i2c_buff1
sta i2c_data3
call spc_i2c_data
lda i2c_buff1
sta i2c_data2
call spc_i2c_data
lda i2c_buff1
sta i2c_data1
call spc_i2c_data
lda i2c_buff1
sta i2c_data0
opb force_zero
;lds 70h,04h
;opb 70h
spb 10111b
opb force_zero
rts
;******************************************
spc_i2c_data:
spb 10110b
lds i2c_buff1,00h
lds i2c_buff0,08h
spc_i2c_d0:
lds 70h,06h
opb 70h
lds 70h,04h
ipb 71h
opb 70h
jb0 spc_i2c_d1
jmp spc_i2c_d2
spc_i2c_d1:
lda i2c_buff0
or* i2c_buff1
spc_i2c_d2:
sr0 i2c_buff0
jnz spc_i2c_d0
rts
;*******************************************
; lds i2c_buff0,08h
;read_i2c_d3:
; lds 70h,06h
; opb 70h
; lds 70h,04h
; ipb i2c_buff1
; opb 70h
; jb0 read_i2c_d4
; jmp read_i2c_d5
;read_i2c_d4:
; lda i2c_buff0
; or* i2c_data0
;read_i2c_d5:
; sr0 i2c_buff0
; jnz read_i2c_d3
; opb force_zero
; lds 70h,04h
; opb 70h
; spb 10111b
; opb force_zero
; rts
;******************************************
detect_ready:
;lds 70h,06h
;opb 70h
lds 71h,04h
opb 71h
ipb i2c_buff0
jb0 detect_ready0
dec* i2c_buff1
jnz detect_ready
detect_ready0:
opb force_zero
spb 10111b
opb force_zero
rts
;******************************************
send_zero:
lds 70h,04h
opb 70h
lds 71h,06h
opb 71h
opb 70h
rts
send_one:
lds 70h,05h
opb 70h
lds 71h,07h
opb 71h
opb 70h
rts
;*******************************************
; radio display subroutine
;*******************************************
clear_lcd:
lds 70h,00h
lcp 03h,00h
lcp 04h,00h
lcp 05h,00h
lcp 06h,00h
lcp 07h,00h
rts
;*******************************************
radio_display:
lds 70h,00h
mvh 70h
mvu 70h ;for tm87p08
mvl disp2
ldl 70h,@hl
lda disp3
or* 70h
ldh 71h,@hl
lcp 03h,00h
mrw 70h,disp2
call trans_disp_data
mvl disp1
ldl 71h,@hl
lcp 04h,00h
mrw 70h,disp1
call trans_disp_data
ldh 71h,@hl
lda 70h
lcp 05h,01h
mvl disp0
ldl 70h,@hl
lda bat_flag
or* 70h
ldh 71h,@hl
lcp 06h,00h
mrw 70h,disp0
call trans_disp_data
lda force_zero
lcp 07h,00h
rts
;*******************************************
trans_disp_data:
lds 71h,02h
eor 70h
jz trans_dispd0
lds 71h,05h
eor 70h
jz trans_dispd1
lds 71h,06h
eor 70h
jz trans_dispd1
lds 70h,07h
rts
trans_dispd0:
lds 70h,03h
rts
trans_dispd1:
lds 70h,05h
rts
;*******************************************
; delay time subroutine
;*******************************************
;*********** delay=100ms *******************
delay_100ms:
lds delay_buff0,09h
lds delay_buff1,05h
d_100ms_0:
call delay
dec* delay_buff0
lda force_zero
sbc* delay_buff1
jc d_100ms_0
rts
;*******************************************
delay:
nop
nop
nop
rts
.endc
.table
data 00h,56h
data 01h,00h
data 02h,74h
data 03h,70h
data 04h,22h
data 05h,72h
data 06h,76h
data 07h,12h
data 08h,76h
data 09h,72h
.endt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -