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

📄 fm_i2cdrv1.msa

📁 5807收音机模块用于炬力平台
💻 MSA
📖 第 1 页 / 共 2 页
字号:
        //LD     DE,LWRD Analogtempbuf
        //LD     (DE),A
        //CALL   LWRD SetPAVolume
        LD    E,A
        mPA_SetVolume
        
FM_VolumeSet_exit:
        POP    DE
        POP    BC
        POP    AF
        RET
//==============================================     
 
/**************************************************************
Function is set volume
Input parameter:DE(DE is first address of input structure).
    1.serch frequency
    2.serch direction
*************************************************************/       
FM_SEARCH_Drv:
        PUSH    AF
        PUSH    BC
        PUSH    DE
//------------------        
        LD      A,(DE)     //first pram is the frequncy and second pram is up or down direction
        LD    (LWRD FREQ_RF),A              //Frequency low byte
        INC     DE
        LD      A,(DE)
        LD      (LWRD FREQ_RF+1),A            //frequency high byte
#if 0        
        INC     DE
        LD      A,(DE)
        SLA    A
        LD      (LWRD SOFT_SUD),A            //serach direction
#endif        
        
        CALL    LWRD ASSEMBLE_WB  
        CALL    LWRD Checkstation                 //看是否存在台
        LD      A,(LWRD FM_result)
        CP      0
        JR      Z,FMSearcherrexit
        LD      A,(LWRD tempresult_LEV)
        LD      B,A

        POP      DE
        PUSH     DE
        LD       A,00H
        LD      (DE),A
        CALL    LWRD FM_SETMUTE_Drv  
        LD      A,01H    
        LD      (LWRD FM_result),A    
        JR      FM_SEARCH_Drv_exit     
FMSearcherrexit:
        LD      A,00H    
        LD      (LWRD FM_result),A
FM_SEARCH_Drv_exit:
//FM not mute        

        POP     DE
        POP     BC
        POP     AF
        RET
//==============================================

//看是否存在台      
Checkstation:        
        PUSH    AF
        PUSH    BC
        PUSH    HL
        
//        LD      A,(LWRD SOFT_SLEV)
//        LD      B,A  
//        LD        DE, LWRD WRITE_ONEFRAME+6
//        LD        A,(DE)
//        AND        0x80
//        OR        B
//        LD        (DE),A
         
        //test
        push hl
        push de
        ld   hl,WRITE_BUFFER
         
        inc  hl
        inc  hl
        inc  hl
        ld   a,(hl)
        ld   (lwrd SearchFreq),a
        
        
        pop de
        pop hl
        //end         
         
         
         
         
        LD      C,3
Checkstationloop1:  
        DEC     C
        JP      Z,LWRD FMerrstop
    push    BC
    ld    A,4
    ld    C,A
        CALL    LWRD WRITE_ONEFRAME
        pop    BC
        
        CP      00h
        JR      Z,Checkstationloop1 
        CALL    LWRD FMwait50ms  
             
Read_status_time1:
        CALL    LWRD READ_STATUS
        CP      00H
        JR      Z,Checkstationloop1
#if 1         
        LD      HL,READ_BUFFER+3
        LD      A,(HL)
        Bit     7,A
        CP      00H
        JR      Z,Read_status_time1
        LD    HL,READ_BUFFER+2
        LD    A,(HL)
        AND    0x01
        CP    0x01
        JR    NZ,FMerrstop
#else
        LD      HL,READ_BUFFER
        LD      A,(HL)
        Bit     6,A
        CP      00H
        JR      Z,FMerrstop        
#endif        
        CALL    LWRD DISASSEMBLE_RB  
        LD      A,(LWRD RSET_STEREO) 
        LD      (LWRD Searchtemp_STEREO),A    
        LD      A,(LWRD RSET_LEV) 
        LD      (LWRD Searchtemp_LEV),A
//        LD      B,A
//        LD      HL,LWRD SOFT_SLEV
//        LD      A,(HL)
//        AND     0x7F
//        CP      B
//        JR      NC,FMerrstop 
//开始判断!!!!
adjuststation:
//比较IFcounter,判断停台是否准确,可选!!!!
//#ifdef  checkIFcounter     
//        LD      A,(LWRD Searchtemp_IF)
//        CP      IFhighlimit
//        JR      NC,FMerrstop
//        CP      IFlowlimit
//        JR      C,FMerrstop
//#endif
//    LD     A,(LWRD RSET_RF)                      //FM station lable
//    CP     01H
//    JR     NZ,FMerrstop
//比较sreteo信息
#ifdef  checkstereo
        LD      A,(LWRD Searchtemp_STEREO)
        CP      0
        JR      Z,FMerrstop
#endif  
//优化level等级 
       LD      A,(LWRD Searchtemp_LEV)
       LD      (LWRD tempresult_LEV),A
       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  
//====================================================== 
//教准确的返回当前频率上的信息
Teststation:
        PUSH    AF
        PUSH    BC
        PUSH    HL

        LD      B,3
Teststationloop1:  
        DEC     B
        JR      Z,Teststationexit
    push    BC
    ld    A,8
    ld    C,A
        CALL    LWRD WRITE_ONEFRAME
        pop    BC
        CP      0
        JR      Z,Teststationloop1
Teststation_time1:
        CALL    LWRD READ_STATUS
        CP      00H
        JR      Z,Teststationloop1
        CALL    LWRD DISASSEMBLE_RB  
        LD      A,(LWRD RSET_LEV) 
        LD      (LWRD Searchtemp_LEV),A 
Teststationexit:
        POP     HL
        POP     BC
        POP     AF
        RET       
//===============================================================       
            
//===============================================================       
//优化选择HLSI的算法,优化IF的算法
FM_setfrequency:                //freq information be store in FREQ_RF
        PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        LD        HL,WRITE_BUFFER  //02H High Byte
        LD        A,(HL)
        SET        6,A             //Mute disable
        LD       (HL),A
        INC        HL              //02H low Byte
        LD        A,(HL)
        SET        0,A
        LD       (HL),A          //Inable FM

        lD      DE,FREQ_RF+1      //frequncy mode[********(hi 8 bites),**(low 2 bits)000000(03h other low 6 bits)]
        LD      A,(DE)          //read the high byte of Frequncy
        INC        HL              //03h High byte
        LD      (HL),A          //write to WRITE_BUFFER
        DEC        DE
        INC     HL
        LD      A,(DE)          //read the low byte frequncy
#if  0       
        AND    0xD0
        LD    B,A
        LD    DE,LWRD WSET_BL
        LD    A,(DE)
        OR    B
        LD    B,A
        LD    DE,LWRD WSET_BST
        LD    A,(DE)
        OR    B
#else
        and  0xd0
        
#endif          
        LD      (HL),A          
        ld   (lwrd SetFreq),a
        
#if 0        
        
         //test
        push hl
        push de
        ld   hl,WRITE_BUFFER
         
        inc  hl
        inc  hl
        inc  hl
        ld   a,(hl)
        
        
        
        pop de
        pop hl
        //end         
         
#endif    
        
        
        
        LD      C,3
FM_setfrequency_loop:     
        DEC     C
        JR      Z,FMsetfreq_exit
    push    BC
    
    
    ld    A,8
    ld    C,A
     
    
        CALL    LWRD WRITE_ONEFRAME
        pop    BC
        CP      0
        JR      Z,FM_setfrequency_loop       
FMsetfreq_exit: 
        POP     HL
        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           
       LD       HL,LWRD WRITE_BUFFER
       LD        A,(HL)                     //Hi Byte of 02H
       LD         B,A            
       LD         DE,LWRD WSET_MS
       LD         A,(DE)
       OR        B
       
#if 0       
       LD        B,A
       
       LD        DE,LWRD SOFT_SUD
       LD        A,(DE)
       OR        B
       LD        B,A
       LD        DE,LWRD WSET_SM
       LD        A,(DE)
       or        B
#endif       
       LD        (HL),A                     //write back 02h HI to Write_buffer
       
       INC        HL                         //Low Byte of 02h
       LD        A,(HL)
       LD        B,A
       LD        DE,LWRD WSET_SM2
       LD        A,(DE)
       OR        B
       LD        B,A
       LD        DE,LWRD WSET_XTAL
       LD        A,(DE)
       OR        B
       LD         B,A
       LD        DE,LWRD WSET_STBY
       LD        A,(DE)
       OR        B
       LD        (HL),A                    //write back 02h Low
       
       INC        HL                        //Hi byte of 03h
       LD        DE,LWRD FREQ_RF+1
       LD        A,(DE)
       LD        (HL),A                   //write back 03h High
       
       INC        HL                       //03H low
       DEC    DE            //FREQ_RF Low byte
       LD    A,(DE)
       AND    0xD0
#if 0       
       LD    B,A
       LD    DE,LWRD WSET_BL
       LD    A,(DE)
       OR    B
       LD    B,A
       LD    DE,LWRD WSET_BST
       LD    A,(DE)
       OR    B
#endif       
       LD        (HL),A                   //write back 03 low
 
       POP      HL
       POP      DE
       POP      BC
       POP      AF
       RET
//==============================================================       
/***************************************************************
Function is disassemble read buffer.
    Input parameter:no.
    Output parameter:no.
    Operation condition:
***************************************************************/
DISASSEMBLE_RB:
      PUSH    AF
      PUSH    BC
      PUSH    HL
      PUSH    DE
      
      LD          HL,LWRD READ_BUFFER        //First address of READ_BUFFER
      LD          A,(HL)    
      RRA
      RRA
      AND         0X01 
      LD          (LWRD RSET_STEREO),A      //是否是立体声标志存入RSET_STEREO
      
      LD    A,(HL)
      AND    0x03
      LD    DE,FREQ_RF+1
      LD    (DE),A                    //读取当前Freq的高2位
      INC       HL
      DEC    DE
      LD    A,(HL)
      LD    (DE),A                   //读取当前freq的低8位
      
      INC         HL
      LD          A,(HL)
      RRA
      AND        0X7F
      LD         (LWRD RSET_LEV),A        //电台强度信息
      INC        HL
      LD          A,(HL)
      RLA
      LD          A,00H
      RLA
      LD          (LWRD RSET_RF),A         //将是否有台标志存到RSET_RF中
      
     
      
//      LD      A,C
//      RLA
//      LD      A,00H
//      RLA
//      LD      (LWRD RSET_BLF),A
//      LD      A,(HL)
//      RES     7,A
//      LD      (LWRD RSET_IFCOUNTER),A
          
      
      
      POP    DE
      POP    HL
      POP    BC
      POP    AF
      RET
//========================================================                 
END

⌨️ 快捷键说明

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