?? fm_transmitter.asm
字號:
.include macro.asm
.chip TM87P08
.data
data0 equ 00h
data1 equ 01h
data2 equ 02h
data3 equ 03h
radio_num0 equ 05h ;radio count register
radio_num1 equ 06h
disp0 equ 08h ; display register
disp1 equ 09h
disp2 equ 0ah
disp3 equ 0bh
force_zero equ 0ch
force_one equ 0dh
reg_cf equ 0eh
reg_acc equ 0fh ;ac register
up_down_flag equ 11h ; "1"=> down count "0"=> up count
add_sub_flag equ 12h ; FM => +- 1
add_sub_num equ 13h
global_buf0 equ 14h ; global buffer register
global_buf1 equ 15h
global_buf2 equ 16h
global_buf3 equ 17h
global_buf4 equ 18h
global_buf5 equ 19h
global_buf6 equ 1ah
global_buf7 equ 1bh
radio_signal equ 1ch
first_flag equ 1dh ; "1"=> radio first data flag
final_flag equ 1eh ; "1"=> radio final data flag
key_signal equ 1fh
power_signal equ 20h ; "1"=> open radio "0"=> close radio
i2c_addr0 equ 21h
i2c_addr1 equ 22h
i2c_data0 equ 23h
i2c_data1 equ 24h
i2c_data2 equ 25h
i2c_data3 equ 26h
i2c_sbopcode equ 27h ;110=>read mode; 101=> write mode
i2c_buff0 equ 28h
i2c_buff1 equ 29h
bat_flag equ 2ah
delay_buff0 equ 2bh
delay_buff1 equ 2ch
halt_release equ 2dh
led_flag equ 2eh
mtemp equ 76h
mtemp1 equ 77h
pb0 equ 0
.endd
.code
org 00h
jmp start
;********************************************
; interrupt area *
;********************************************
org 1ch
plc 17fh
sie* 08h
jmp predivider_int
org 30h
start:
lds 70h,01h
lcp 1fh,00h
lds 70h,00h
opa 70h
spa 0fh
opb 70h
spb 17h
opc 70h
spc 18h
opd 70h
spd 0fh
call clear_lcd
call i2c_write_enable
call code_initial
call read_i2c_radio_num
;call power_on_off
plc 17fh
sie* 08h
;*******************************************
; key scan ioc1,ioc2,ioc3
;*******************************************
keyscan:
tog_pb pb0
lds halt_release,00h
plc 17fh
sca 10h
halt
sca 00h
sca 00h
ipc 70h
jb2 key_release
lds led_flag,0ah
lds 70h,09h
lcp 1fh,00h
lds halt_release,01h
ipc 70h
jb0 up_key
jb1 dn_key
jmp keyscan
key_release:
lds led_flag,00h
lds 70h,01h
lcp 1fh,00h
call power_on_off
jmp keyscan
up_key:
lds up_down_flag,00h
call up_dn_keys
jmp keyscan
dn_key:
lds up_down_flag,01h
call up_dn_keys
jmp keyscan
power_on_off:
sie* 00h
opa force_zero
opb force_zero
opc force_zero
call clear_lcd
power_on_off0:
ipc 70h
jb2 power_on_off0
plc 17fh
sca 10h
sre 10h
stop
sca 00h
sca 00h
ipc 70h
jb2 power_on_off1
jmp power_on_off0
power_on_off1:
lds 70h,08h
opa 70h
call count_radio_data
call count_radio_disp
lds add_sub_flag,00h
call radio_protocol
call disp_add_sub
call radio_display
lds led_flag,0ah
lds 70h,09h
lcp 1fh,00h
plc 17fh
sie* 08h
power_on_off2:
ipc 70h
jb2 power_on_off2
rts
;*******************************************
up_dn_keys:
lds global_buf0,06h
up_dn_keys0:
call delay_100ms
dec* global_buf0
jz up_dn_keys2
ipc 70h
jnz up_dn_keys0
lda up_down_flag ;singal scan
jz up_dn_keys1
call radio_dn_single
rts
up_dn_keys1:
call radio_up_single
rts
up_dn_keys2:
lda up_down_flag ;auto scan
jz up_dn_keys3
call radio_dn_sequ
jmp up_dn_keys_end
up_dn_keys3:
call radio_up_sequ
up_dn_keys_end:
rts
;*******************************************
; radio protocol subroutine
;*******************************************
radio_protocol:
lda force_zero
mvl force_zero
mvh force_zero
mvu force_zero ;for tm87p08 mcu
lda @hl
sta global_buf2
spa 0fh
lds radio_signal,08h
opa radio_signal
lds global_buf0,00h
lds global_buf3,04h
radio_protocol0:
lda global_buf2
jb0 radio_protocol1
lds radio_signal,0ch
opa radio_signal
lds radio_signal,0eh
jmp radio_protocol2
radio_protocol1:
lds radio_signal,0dh
opa radio_signal
lds radio_signal,0fh
nop
radio_protocol2:
dec* global_buf3
jz radio_protocol3
nop
nop
nop
opa radio_signal
sr0 global_buf2
nop
nop
jmp radio_protocol0
radio_protocol3:
lds global_buf3,04h
inc* global_buf0
jb2 radio_protocol4
opa radio_signal
mvl global_buf0
lda @hl
sta global_buf2
jmp radio_protocol0
radio_protocol4:
opa radio_signal
nop
nop
nop
nop
nop
nop
lds 70h,0ch
opa 70h
nop
nop
nop
nop
nop
nop
lds 70h,08h
opa 70h
rts
;*******************************************
code_initial:
lds data0,00h
lds data1,00h
lds data2,00h
lds data3,00h
lds radio_num0,00h
lds radio_num1,00h
lds disp0,00h
lds disp1,00h
lds disp2,00h
lds disp3,00h
lds force_one,01h
lds force_zero,00h
lds reg_cf,00h
lds reg_acc,00h
lds up_down_flag,00h
lds add_sub_flag,00h
lds add_sub_num,01h
lds global_buf0,00h
lds global_buf1,00h
lds global_buf2,00h
lds global_buf3,00h
lds global_buf4,00h
lds global_buf5,00h
lds global_buf6,00h
lds global_buf7,00h
lds radio_signal,00h
lds first_flag,00h
lds final_flag,00h
lds key_signal,00h
lds power_signal,00h
lds i2c_addr0,00h
lds i2c_addr1,00h
lds i2c_data0,00h
lds i2c_data1,00h
lds i2c_data2,00h
lds i2c_data3,00h
lds i2c_sbopcode,00h
lds i2c_buff0,00h
lds i2c_buff1,00h
lds bat_flag,00h
lds halt_release,00h
lds led_flag,00h
rts
;***** radio increase/decrease 0.1MHz ******
radio_data_100KHz:
lds global_buf0,04h
lds global_buf1,01h
rts
;******** radio_data_increase **************
radio_data_increase:
lda global_buf0
add* data0
lda global_buf1
adc* data1
lda force_zero
adc* data2
lda force_zero
adc* data3
rts
;*********** radio_data_decrease ***********
radio_data_decrease:
lda global_buf0
sub* data0
lda global_buf1
sbc* data1
lda force_zero
sbc* data2
lda force_zero
sbc* data3
rts
;******** radio first data initial *********
up_data_initial:
lds add_sub_flag,00h
lds final_flag,00h
lds radio_num0,00h
lds radio_num1,00h
lds disp0,00h
lds disp1,07h
lds disp2,08h
lds disp3,00h
lds data0,04h
lds data1,0eh
lds data2,03h
lds data3,04h
rts
;*******************************************
radio_up_single:
lda final_flag
jz up0
call up_data_initial
up0:
call radio_data_100KHz
call radio_data_increase
call radio_protocol
call disp_add_sub
call radio_display
call store_radio_i2c
rts
;*******************************************
radio_up_sequ:
lds global_buf0,0ah
lds global_buf1,00h
call determine_radio_num
call count_radio_data
call count_radio_disp
lds add_sub_flag,00h
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -