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

📄 fm_transmitter.asm

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