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

📄 cc1100_pa_tx.pbp

📁 RF Wireless is st_tr1100_pa. It uses CC1100 control everything its.
💻 PBP
字号:
;*****************************************
;     CC1100 Module Example Code
;*****************************************

 INCLUDE "modedefs.bas"          ' Include serial modes

   Define OSC 10
 
 
PA_En    VAR PORTB.2
MISO     var PortB.3     ' Connect to SO of CC1100
Sck      var PortB.4
MOSI     var PortB.5     ' Connect to SI of CC1100
GDO0     VAR PortB.6
CSn      var PortB.7 

TX       var PortC.6
RX       var PortC.7

Burst    con  6
RW       con  7
R        con  1
W        con  0
single   con  0
Continu  Con  1 


' Strobe commands
 CC1100_SRES     con    $30      ' Reset chip.
 CC1100_SFSTXON  con    $31      ' Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
                                 ' If in RX/TX: Go to a wait state where only the synthesizer is
                                 ' running (for quick RX / TX turnaround).
 CC1100_SXOFF    con    $32      ' Turn off crystal oscillator.
 CC1100_SCAL     con    $33      ' Calibrate frequency synthesizer and turn it off
                                 ' (enables quick start).
 CC1100_SRX      con    $34      ' Enable RX. Perform calibration first if coming from IDLE and
                                 ' MCSM0.FS_AUTOCAL=1.
 CC1100_STX      con    $35      ' In IDLE state: Enable TX. Perform calibration first if
                                 ' MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
                                 ' Only go to TX if channel is clear.
 CC1100_SIDLE    con    $36      ' Exit RX / TX, turn off frequency synthesizer and exit
                                 ' Wake-On-Radio mode if applicable.
 CC1100_SAFC     con    $37      ' Perform AFC adjustment of the frequency synthesizer
 CC1100_SWOR     con    $38      ' Start automatic RX polling sequence (Wake-on-Radio)
 CC1100_SPWD     con    $39      ' Enter power down mode when CSn goes high.
 CC1100_SFRX     con    $3A      ' Flush the RX FIFO buffer.
 CC1100_SFTX     con    $3B      ' Flush the TX FIFO buffer.
 CC1100_SWORRST  con    $3C      ' Reset real time clock.
 CC1100_SNOP     con    $3D      ' No operation. May be used to pad strobe commands to two
                                 ' bytes for simpler software.
         
 CC1100_PKTSTATUS  con  $38
 CC1100_TXBYTES    con  $3A
 CC1100_RXBYTES    con  $3B
 CC1100_PATABLE    con  $3E         
         
           
i          var byte
k          var byte
j          var byte
n          var byte
buffer     var byte[47]
RX_buf     var byte[31]
TX_buf     var byte[32]
STA_TUS    var byte
tx_error   var byte
temp       var byte
Msb_Data   var bit
pkt        var byte
pkt_Len    var byte
ADD_ID     var Byte
cnt        var byte
B0         var byte

FIFO_BYTE  var byte

Dtest      var word

D0         var byte

MISO_Wait   var bit
Tx_complete VAR BIT
Rx_rcv      VAR BIT      ' RF Receive bit
                 
' ** Declare the Variables **

	Cmd 		Var Byte            ' Command byte
	Dat       	Var Byte            ' Bit Counting loop

    TRISA = %00000000
    ADCON1 =7
    CMCON = $07  
    trisb = %01001011 
    TRISC = %10000000
    
    pause  200      

    serout   PORTC.6,T9600,[10,13,"Test ST-TR1100-PA",10,13]      
        
     CSn = 1 
     Sck = 0
     PA_En=0
     
      pause   500
      '--- Write Reset Strobe ---
      Cmd =   CC1100_SRES      ' SRES
      gosub  CMD_Write          

      Cmd = CC1100_SNOP        '  Snop
      gosub  CMD_Write  
      
     '--- Write Initial Config Register ---                                    
     for i = 0 to 46                                                  
         lookup   i,[$0B,$41,$41,$07,$D3,$91,$FF,$04,$05,$0,$0,$0B,$0,$10,$B0,$71,$C8,$93,$73,$22,$F8,$0,$07,$30,$18,$1D,$1C,$C7,$0,$B2,$87,$6B,$F8,$B6,$10,$EA,$2A,$0,$11,$41,$00,$59,$7f,$3f,$88,$31,$0B],Dat  
       Cmd = i                                                          
       gosub REG_Write
     next i  
    
    '--- Write PATABLE   
     Dat = $3F                  ' $C0 = 10 dbm    , $3F = 0dBm   $CE = 5 dBm
     cmd =  CC1100_PATABLE
     gosub   REG_Write
     
     
main:
           
        cmd = CC1100_SIDLE           ' Sidle
        gosub    CMD_Write 
               
        cmd = CC1100_SRX         ' SRX strobe
        gosub    CMD_Write        
        
'----------------------------------------------
'             TX Test Mode
'----------------------------------------------                                                       
Tx_test:  

        ' prepare tx buffer
        
         pkt_len = 20
    
        for pkt = 0 to pkt_len-1
                         ' ID + Data[0]+Data[1]......Data[n]
            lookup   pkt,[$00,"T","E","S","T"," ","R","F"," ","C","C","1","1","0","0","-","P","A",10,13],Dat

           TX_buf[pkt+1] = Dat
        next pkt
     
        TX_buf[0]= pkt_len       ' put packet leng to frist byte

        PA_En = 1
        
        gosub   write_TxFIFO     ' Write Data from TX_buf to TXFIFO

        Cmd = CC1100_STX         'STX Strobe for start sending
        gosub  CMD_Write          
           
        pause 100                ' wait for sending finished
        
        PA_En =0
        cmd = CC1100_SIDLE       ' Sidle strobe
        gosub    CMD_Write    
  
        cmd = CC1100_SFTX        ' SFTX strobe for clear TxFIFO Buffer
        gosub CMD_Write
  
        pause 10
         
        goto    Tx_test
       
'-------------------------
'    Command Write
'-------------------------        
CMD_Write:
       Sck = 0 
       CSn = 0 
       
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend
       
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sta_tus.0 = MISO
         Sck = 0
 
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k 
       CSn = 1      
             
       return
       
'-------------------------
'    Register Write
'------------------------- 
REG_Write:
       Sck = 0 
       CSn = 0 
       
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend       
       
       cmd.7 =0
       cmd.6 =0
       
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sta_tus.0 = MISO
         Sck = 0
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k 
                 
        for k = 0 to 7
         MOSI = Dat.7
         Sck = 1
         Sck = 0
         Dat  = Dat << 1
       next k              
       CSn = 1
       return
       
 '-------------------------
'    Register Read
'-------------------------       
 REG_Read:
       temp = cmd
       Sck = 0 
       CSn = 0 
       
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend       
       
       cmd.7 =1
       cmd.6 =0
       
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sta_tus.0 = MISO
         Sck = 0
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k 
       
          Dat = 0
          
       for k = 0 to 7
         Dat.0 = MISO
         Sck = 1
         Sck = 0 
         Msb_Data = DAT.7
         Dat = Dat << 1
       next k  
       
         Dat = Dat >> 1       
         Dat.7 = Msb_Data
   
       pauseus  250
       CSn = 1
       
       serout2  TX,84,[10,13,"Register Add =",hex2 temp," Read value = ",hex2 Dat,10,13]
       
       return
  
'-------------------------
'    Command Read
'-------------------------        
CMD_Read:
       Sck = 0 
       CSn = 0 
       
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend       
              
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sck = 0
         CMD  = CMD << 1
       next k 
         
       shiftin   MISO,Sck,6,[Dat\8] 
       CSn = 1
       return
                
'--------------------------
'    Read Config Register
'-------------------------- 
Read_config:
  
        for i = 0 to 46
           cmd = i
           gosub REG_Read
           buffer[i] = dat
        next i       
       return 
         
'------------------------------
'    Write TX Data to Tx FIFO
'------------------------------          
write_TxFIFO:
       Sck = 0 
       CSn = 0 
       
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend       
          
       CMD = $7F
 
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sta_tus.0 = MISO
         Sck = 0 
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
                        
       next k 
     '  serout2  TX,84,[10,13,"Tx Byte =",bin8 Sta_tus,10,13] 
 '**************************************
 '   Write Data For Sending to TX FIFO
 '**************************************
          
     for pkt = 0 to pkt_len                
          
          Dat = TX_buf[pkt]
          
            for k = 0 to 7
                MOSI = Dat.7
                Sck = 1            
                B0.0 = MISO
                Sck = 0            
                if k != 7 then
                  B0 = B0 << 1
                endif
                Dat  = Dat << 1
            next k 
            
            
                        
      next pkt   
       
     CSn = 1
     sck = 0
     return
                 
       
'*********************************************************************************************************                                                  
'  |----------------------------------------------------------------------------------------------------
'  |              |               |             |             |            |             |             |
'  | Length field | Address Field | Random Data | Random Data |............| Random Data | Random Data |
'  |              |               |             |             |            |             |             |
'  |----------------------------------------------------------------------------------------------------
'          ^             ^               ^                                                      ^
'          |             |               |                                                      |
'       Rx_buf[0]      Rx_buf[1]       Rx_buf[2]                                 Rx_buf[menuData.packetLength]
'-------------------------------------------------------------------------------------------------------        
                                        
Read_RxFIFO:

'---------------------------------------
       Sck = 0 
       CSn = 0 
             
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend
              
       Cmd = $FB
       
        for k = 0 to 7
         MOSI = Cmd.7
         pauseus 10
         Sck = 1
         pauseus 10
         Sta_tus.0 = MISO
         Sck = 0
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k 
       
          Dat = 0
          
       for k = 0 to 7
         Dat.0 = MISO
         Sck = 1
         pauseus 10
         Sck = 0 
         Msb_Data = DAT.7
         Dat = Dat << 1
       next k  
       
         Dat = Dat >> 1       
         Dat.7 = Msb_Data
   
        CSn = 1
        
        pkt_len = Dat & %01111111
        
         serout2  TX,84,[10,13,"Packet Len =",dec pkt_len,10,13]
'---------------------  Get packet Len ---------------
   if pkt_len > 0 then                     
       Sck = 0 
       CSn = 0 
      
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend
              
       cmd = $FF         '1011 1111
       
        for k = 0 to 7
         MOSI = CMD.7
         pauseus 10
         Sck = 1
         pauseus 10
         Sta_tus.0 = MISO
         Sck = 0
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k        
                 
       ' pkt_len = 22         
                   
      for n = 0 to  pkt_len 
        
           for k = 0 to 7 
             Dat.0 = MISO
             pauseus 10
             Sck = 1 
             pauseus  10
             Sck = 0             
             Msb_Data = DAT.7                         
             Dat = Dat << 1
           next k  
       
         Dat = Dat >> 1       
         Dat.7 = Msb_Data
         Rx_buf[n] = Dat
      next n
      
       CSn = 1
       sck = 0
   endif
  
       return           
       
'---------------------------------------
'   Checking Rx receved byte in RxFIFO
'---------------------------------------        
RX_Byte:
       temp = cmd
       Sck = 0 
       CSn = 0 
 
       MISO_Wait = 1
       while MISO_Wait = 1
         MISO_Wait = MISO
       wend
       
       cmd = $F5       ' MARCSTATE MARC_STATE[4:0]=(0x0E)    RX_END
       
       for k = 0 to 7
         MOSI = CMD.7
         Sck = 1
         Sta_tus.0 = MISO
         Sck = 0
         if k != 7 then
         Sta_tus = Sta_tus << 1
         endif
         CMD  = CMD << 1
       next k 
       
          Dat = 0
          
       for k = 0 to 7
         Dat.0 = MISO
         Sck = 1
         Sck = 0 
         Msb_Data = DAT.7
         Dat = Dat << 1
       next k  
       
         Dat = Dat >> 1       
         Dat.7 = Msb_Data
       CSn = 1
       
   '    serout2  TX,84,[10,13,"RX Byte =",bin8 Dat,10,13]
       
       if Dat = $01 then 
            Rx_rcv=0
       endif
       
       return   
 

⌨️ 快捷键说明

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