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

📄 fm_i2cdrv1.msa

📁 yts收音模块用汇编语言写的,介绍了收音的搜台和处理过程
💻 MSA
📖 第 1 页 / 共 2 页
字号:
      LD      E,REG0                   //SET R0 MOST
      LD      A,(LWRD R0)
      LD      C,A
      CALL    LWRD Write_Register
      CP      00H
      JR      Z,FM_STEREO_start
FM_STEREO_exit:         
      POP     HL
      POP     BC
      POP     AF
      RET

/***************************************************************
Function is read back stereo info. and current frequency
Input parameter:DE(DE is first address of input structurn).
        1.Output address.
Output parameter:DE(DE is first address of Output structurn).
           1.Stereo Indication(1 byte):0-stereo;1-mono.
           5.Current frequency(2 bytes,low byte is frong).
*****************************************************************/
FM_GETSTATUS_Drv:
         PUSH    AF
         PUSH    HL
         PUSH    DE

         LD      D,3
FM_GETSTATUS_loop1:     
         DEC     D
         JR      Z,FM_GETSTATUS_err_exit
         CALL    LWRD READ_Stereo
         CP      0
         JR      Z,FM_GETSTATUS_loop1     
         LD      A,(LWRD R8_PDETTST)                 
         JR      FM_GETSTATUS_exit
FM_GETSTATUS_err_exit:
         LD      A,01H
         LD      (LWRD FM_result),A
         LD      A,00H                                 //ERROR:00H-MONO
         LD      (LWRD R8_PDETTST),A
FM_GETSTATUS_exit:
         POP     DE           
         PUSH    DE
         LD      A,(LWRD R8_PDETTST)                   //0-stereo;1-mono.                                        
         BIT     0,A
         JR      NZ,FM_GETSTATUS_loop2
         LD      A,02H
FM_GETSTATUS_loop2:
         DEC     A
         LD     (DE),A
         INC    DE
         LD     HL,LWRD FREQ_RF
         LD     A,(HL)
         LD     (DE),A
         INC    DE
         INC    HL
         LD     A,(HL)
         LD     (DE),A
         POP    DE
         POP    HL
         POP    AF
         RET
         
/**************************************************************
Function is set volume
Input parameter:DE(DE is first address of input structure).
    1.volume level.
*************************************************************/
FM_VolumeSet_Drv:
        PUSH   AF
        PUSH   BC 
        PUSH   DE
        
        LD     A,(DE)
        LD     (LWRD VolumeLEV),A
        LD	   E,A
        mPA_SetVolume
        
FM_VolumeSet_exit:
        POP    DE
        POP    BC
        POP    AF
        RET
              
/************************************************************
Function is assemble write buffer.
    Input parameter:no.
    Output parameter:no.
    Operation condition:
************************************************************/
ASSEMBLE_WB:                              //Subroutine is assemble WRITE_BUFFER
       PUSH    AF
       PUSH    BC
       PUSH    DE
       PUSH    HL           
//ONE_BYTE:R0
       LD       HL,LWRD WRITE_BUFFER        //First address of WRITE_BUFFER
       LD       A,(LWRD R0_SWSTD)
       SLA      A
       SLA      A
       SLA      A
       SLA      A
       LD       B,A
       LD       A,(LWRD R0_MOST)
       CP       00H
       JR       Z,ONEloop1
       SET      3,B
ONEloop1:       
       LD       A,(LWRD R0_IFCST)
       CP       00H
       JR       Z,ONEloop2
       SET      2,B
ONEloop2:
       LD       A,(LWRD R0_MUTE)
       CP       00H
       JR       Z,ONEloop3
       SET      1,B
ONEloop3:
       LD       A,(LWRD R0_PE)
       CP       00H
       JR       Z,ONEloop4
       SET      0,B
ONEloop4:              
       LD       (HL),B
       INC	     HL
       
//TWO_BYTE:R1
       LD       A,(LWRD R1_PCNTL)  
       LD       (HL),A
       INC	    HL
                  	
//THREE_BYTE:R2 
       LD       A,(LWRD R2_PCNTH)
       LD       B,A
       LD       A,(LWRD R2_XSEL)
       CP       00H
       JR       Z,THREEloop1
       SET      6,B
THREEloop1:
       LD       A,(LWRD R2_FSEL)
       CP       00H
       JR       Z,THREEloop2
       SET      7,B
THREEloop2:
       LD       (HL),B
       INC      HL
       
//FOUR_BYTE:R3
       LD       A,(LWRD R3_SDREG)
       LD       C,A
       LD       DE,LWRD R3_PEHCC
       LD       B,03H
FOURloop1:
       LD       A,(DE)
       SRL      A
       LD       A,C
       RLA      
       LD       C,A
       DEC      DE
       DJNZ     FOURloop1
       
       LD       A,(LWRD R3_ACNT)
       CP       00H
       JR       Z,FOURloop2
       SET      7,C
FOURloop2:
       LD       (HL),C
       INC      HL       
                         
//FIVE_BYTE:R4       
       LD       A,(LWRD R4_SNCREG)
       SLA      A
       SLA      A
       SLA      A
       SLA      A
       LD       B,A
       LD       A,(LWRD R4_SMTREG)
       ADD      A,B
       LD       (HL),A
       INC      HL

//SIX_BYTE:R5
       LD       A,(LWRD R5_SEP)
       SLA      A
       SLA      A
       SLA      A
       LD       B,A
       LD       A,(LWRD R5_HCCREG)
       ADD      A,B
       LD       (HL),A
       INC      HL
       
//SEVEN_BYTE~FORTH_BYTE:R6~R13 
       LD       B,08H
       LD       DE,LWRD R6
LOOP:
       LD       A,(DE)
       LD       (HL),A
       INC      DE
       INC      HL
       DJNZ     LOOP       
                     
       POP      HL
       POP      DE
       POP      BC
       POP      AF
       RET
       
/***************************************************************
Function is Set Frequency PLL
    Input parameter:no.
    Output parameter:no.
***************************************************************/
FM_setfrequency:
        PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        
        LD      A,00H
        LD      (LWRD R0_MOST),A
        
        CALL    LWRD CALCULATE_PLL
        CALL    LWRD ASSEMBLE_WB 

        LD      C,3
FM_setfrequency_loop1:     
        DEC     C
        JR      Z,FMsetfreq_exit        
        CALL    LWRD WRITE_ONEFRAME
        CP      00H
        JR      Z,FM_setfrequency_loop1 
        
        LD      B,3
FM_setfrequency_loop2:
        DEC     B
        JR      Z,FMsetfreq_exit 
        LD      E,REG0                        //POWER ON,MUTE ON
        LD      C,31H
        CALL    LWRD Write_Register      
        CP      00H
        JR      Z,FM_setfrequency_loop2
        
        CALL    LWRD FMwait30ms
        
        LD      B,3
FM_setfrequency_loop3:
        DEC     B
        JR      Z,FMsetfreq_exit 
        LD      E,REG0                        //MUTE ON,Listening Broadcast.
        LD      C,11H
        CALL    LWRD Write_Register      
        CP      00H
        JR      Z,FM_setfrequency_loop3                   
              
FMsetfreq_exit: 
        POP     HL
        POP     DE
        POP     BC
        POP     AF
        RET
        
/***************************************************************
Function is check station
    Input parameter:no.
    Output parameter:no.
***************************************************************/      
Checkstation:        
        PUSH    AF
        PUSH    BC
        PUSH    HL
         
        LD      A,01H                     
        LD      (LWRD R0_PE),A               //POWER ON
        LD      A,01H
        LD      (LWRD R0_MUTE),A             //MUTE ON
        LD      A,00H
        LD      (LWRD R0_MOST),A             //Stereo ON
        LD      A,03H
        LD      (LWRD R0_SWSTD),A            //RSSI Judgement
        
        CALL    LWRD ASSEMBLE_WB
        
        LD      C,3
Checkstationloop1:  
        DEC     C
        JP      Z,LWRD FMerrstop
        CALL    LWRD WRITE_ONEFRAME
        CP      00h
        JR      Z,Checkstationloop1         

        CALL    LWRD FMwait30ms
        
        LD      C,3
Read_RSSI_LOOP:  
        DEC     C
        JP      Z,LWRD FMerrstop             
        CALL    LWRD R8_Readdata
        CP      00H
        JR      Z,Read_RSSI_LOOP 
        
        LD      A,27H                           //IF count Judgement
        LD      (LWRD R0),A                
        LD      B,3
Checkstationloop2:  
        DEC     B
        JP      Z,LWRD FMerrstop        
        LD      E,REG0
        LD      A,(LWRD R0)
        LD      C,A
        CALL    LWRD Write_Register
        CP      00H     
        JR      Z,Checkstationloop2
        
        CALL    LWRD FMwait30ms
        
        LD      C,3
Read_IF_LOOP:  
        DEC     C
        JP      Z,LWRD FMerrstop             
        CALL    LWRD R8_Readdata
        CP      00H
        JR      Z,Read_IF_LOOP
        
        LD      A,11H
        LD      (LWRD R0),A
        LD      B,3
Checkstationloop3:  
        DEC     B
        JP      Z,LWRD FMerrstop        
        LD      E,REG0
        LD      A,(LWRD R0)
        LD      C,A
        CALL    LWRD Write_Register
        CP      00H     
        JR      Z,Checkstationloop3       
        LD      A,01H
        LD      (LWRD FM_result),A
        JR      Checkstationexit
FMerrstop:
        LD      A,00H
        LD      (LWRD FM_result),A 
Checkstationexit:
       POP     HL
       POP     BC
       POP     AF
       RET  
//========================================================                 
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -