⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_transmitter.asm

📁 FMSCR是用汇编语言编写的车载MP3源程序。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.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 + -