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

📄 receive.lst

📁 cc1100的通信程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
  size                 --> R22
  txBuffer             --> R20
    01D0 D0A3      RCALL	push_gset2
    01D1 2F62      MOV	R22,R18
    01D2 01A8      MOVW	R20,R16
    01D3 9721      SBIW	R28,1
(0399) }
(0400) 
(0401) 
(0402) 
(0403) 
(0404) 
(0405) 
(0406) //*****************************************************************************************
(0407) //函数名:
(0408) //输入:
(0409) //输出:
(0410) //功能描述:CC1100发送主叫数据
(0411) //*****************************************************************************************
(0412) void halRfSendPacket(INT8U *txBuffer, INT8U size) 
(0413) {  
(0414)     
(0415)     halSpiWriteReg(CCxxx0_TXFIFO, size+2);
    01D4 2F26      MOV	R18,R22
    01D5 5F2E      SUBI	R18,0xFE
    01D6 E30F      LDI	R16,0x3F
    01D7 DEE3      RCALL	_halSpiWriteReg
(0416)     halSpiWriteReg(CCxxx0_TXFIFO, ID_Opponent);
    01D8 EF20      LDI	R18,0xF0
    01D9 E30F      LDI	R16,0x3F
    01DA DEE0      RCALL	_halSpiWriteReg
(0417)     halSpiWriteReg(CCxxx0_TXFIFO, ID_Oneself);
    01DB EF20      LDI	R18,0xF0
    01DC E30F      LDI	R16,0x3F
    01DD DEDD      RCALL	_halSpiWriteReg
(0418) 
(0419)     halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);	//写入要发送的数据
    01DE 8368      STD	Y+0,R22
    01DF 019A      MOVW	R18,R20
    01E0 E30F      LDI	R16,0x3F
    01E1 DEE6      RCALL	_halSpiWriteBurstReg
(0420)     
(0421)     
(0422)     halSpiStrobe(CCxxx0_STX);		//进入发送模式发送数据
    01E2 E305      LDI	R16,0x35
    01E3 DEFC      RCALL	_halSpiStrobe
(0423)    
(0424)     // Wait for GDO0 to be set - > sync transmitted
(0425)     while (!GDO0);
    01E4 B220      IN	R2,0x10
    01E5 2022      TST	R2
    01E6 F419      BNE	0x01EA
    01E7 E041      LDI	R20,1
    01E8 E050      LDI	R21,0
    01E9 C002      RJMP	0x01EC
    01EA 2744      CLR	R20
    01EB 2755      CLR	R21
    01EC FD42      SBRC	R20,2
    01ED CFF6      RJMP	0x01E4
(0426)     
(0427)     // Wait for GDO0 to be set - > sync transmitted 
(0428)     while (GDO0);
    01EE 9982      SBIC	0x10,2
    01EF CFFE      RJMP	0x01EE
(0429)     
(0430) 	halSpiStrobe(CCxxx0_SFTX);        //清洗发送缓冲区
    01F0 E30B      LDI	R16,0x3B
    01F1 DEEE      RCALL	_halSpiStrobe
    01F2 9621      ADIW	R28,1
    01F3 D076      RCALL	pop_gset2
    01F4 9508      RET
_main:
    01F5 9721      SBIW	R28,1
FILE: E:\学习基地\IMPORT~1\CC1100-RF-Design\M8_RF_CC1100开发系统光盘\驱动程序\M8_cc1100_receive\main.c
(0001) /*C**************************************************************************
(0002) * NAME:         main.c
(0003) *----------------------------------------------------------------------------
(0004) * Copyright (c) 2006 endylu
(0005) *----------------------------------------------------------------------------
(0006) * RELEASE:      M8-cc1100
(0007) * REVISION:     1.0     
(0008) *----------------------------------------------------------------------------
(0009) * PURPOSE:
(0010) * This is the demonstration software for MAGE8L
(0011) *****************************************************************************/
(0012) 
(0013) /*_____ I N C L U D E S ____________________________________________________*/
(0014) 
(0015) #include <iom8v.h>
(0016) #include <macros.h>
(0017) #include "main.h"
(0018) 
(0019) 
(0020) /*_____ M A C R O S ________________________________________________________*/
(0021) 
(0022) 
(0023) /*_____ D E F I N I T I O N ________________________________________________*/
(0024) 
(0025) INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};
(0026) INT8U arrRx[50];
(0027) 
(0028) INT8U length;
(0029) INT8U flag_receive;
(0030) /*_____ D E C L A R A T I O N ______________________________________________*/
(0031) 
(0032) 
(0033) /*F**************************************************************************
(0034) * NAME: main
(0035) *----------------------------------------------------------------------------
(0036) * PARAMS:
(0037) *
(0038) * return:
(0039) *----------------------------------------------------------------------------
(0040) * PURPOSE: 
(0041) *   Main user routine 
(0042) *----------------------------------------------------------------------------
(0043) * EXAMPLE:
(0044) *----------------------------------------------------------------------------
(0045) * NOTE:
(0046) *----------------------------------------------------------------------------
(0047) * REQUIREMENTS:
(0048) *****************************************************************************/
(0049) void main (void)
(0050) {   
(0051)     PORTD|=0X04;                  //GDO0上拉
    01F6 9A92      SBI	0x12,2
(0052) 	
(0053)     DDRB|=1<<LED2;
    01F7 9AB9      SBI	0x17,1
(0054) 	PORTB|=1<<LED2;
    01F8 9AC1      SBI	0x18,1
(0055) 	
(0056) 	CpuInit();
    01F9 DE89      RCALL	_CpuInit
(0057) 	POWER_UP_RESET_CC1100();
    01FA DEB2      RCALL	_POWER_UP_RESET_CC1100
(0058) 	halRfWriteRfSettings();
    01FB DF24      RCALL	_halRfWriteRfSettings
(0059) 	halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
    01FC E088      LDI	R24,0x8
    01FD 8388      STD	Y+0,R24
    01FE E620      LDI	R18,0x60
    01FF E030      LDI	R19,0
    0200 E30E      LDI	R16,0x3E
    0201 DEC6      RCALL	_halSpiWriteBurstReg
(0060) 	PORTB&=~(1<<LED2);
    0202 98C1      CBI	0x18,1
(0061) 	
(0062) 	INT0_Init();
    0203 D006      RCALL	_INT0_Init
(0063)     asm("sei");			          //开全局中断
    0204 9478      BSET	7
(0064) 	
(0065)     halSpiStrobe(CCxxx0_SRX);
    0205 E304      LDI	R16,0x34
    0206 DED9      RCALL	_halSpiStrobe
(0066) 	while(1);
    0207 CFFF      RJMP	0x0207
    0208 9621      ADIW	R28,1
    0209 9508      RET
(0067) }
(0068) 		
(0069) /*****************************************************************************************
(0070) //函数名:void INT0_Init(void)
(0071) //输入:无
(0072) //输出:无
(0073) //功能描述:外部中断0 初始化程序
(0074) /*****************************************************************************************/
(0075) void INT0_Init(void)
(0076) {
(0077)  MCUCR|=0x02;                      //falling_adge
_INT0_Init:
    020A B785      IN	R24,0x35
    020B 6082      ORI	R24,2
    020C BF85      OUT	0x35,R24
(0078)  GIFR=0X40;
    020D E480      LDI	R24,0x40
    020E BF8A      OUT	0x3A,R24
(0079)  INT0_enable();
    020F B78B      IN	R24,0x3B
    0210 6480      ORI	R24,0x40
    0211 BF8B      OUT	0x3B,R24
    0212 9508      RET
_int0:
  status               --> Y+1
  i                    --> R20
    0213 D079      RCALL	push_lset
    0214 D061      RCALL	push_gset1
    0215 9723      SBIW	R28,3
(0080) }
(0081) 
(0082) 
(0083) //*****************************************************************************************
(0084) //函数名:
(0085) //输入:
(0086) //输出:
(0087) //功能描述:中断接收
(0088) //*****************************************************************************************
(0089) #pragma interrupt_handler int0:2
(0090) void int0(void)
(0091) { 
(0092)   uint8 i;
(0093)   uint8 status[2];
(0094)   
(0095)   flag_receive=RECEIVE_error;
    0216 E082      LDI	R24,2
    0217 93800068  STS	flag_receive,R24
(0096)   if(halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)//如果接的字节数不为0
    0219 E30B      LDI	R16,0x3B
    021A DEF7      RCALL	_halSpiReadStatus
    021B 2F80      MOV	R24,R16
    021C 778F      ANDI	R24,0x7F
    021D F161      BEQ	0x024A
(0097) 	{
(0098) 	 length = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
    021E E30F      LDI	R16,0x3F
    021F DECA      RCALL	_halSpiReadReg
    0220 93000069  STS	length,R16
(0099) 	 halSpiReadBurstReg(CCxxx0_RXFIFO, arrRx, length); //读出所有接收到的数据
    0222 2E20      MOV	R2,R16
    0223 8228      STD	Y+0,R2
    0224 E62A      LDI	R18,0x6A
    0225 E030      LDI	R19,0
    0226 E30F      LDI	R16,0x3F
    0227 DED1      RCALL	_halSpiReadBurstReg
(0100)      halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); 	//读出CRC校验位
    0228 E082      LDI	R24,2
    0229 8388      STD	Y+0,R24
    022A 019E      MOVW	R18,R28
    022B 5F2F      SUBI	R18,0xFF
    022C 4F3F      SBCI	R19,0xFF
    022D E30F      LDI	R16,0x3F
    022E DECA      RCALL	_halSpiReadBurstReg
(0101)             
(0102)      if(status[1] & CRC_OK)
    022F 802A      LDD	R2,Y+2
    0230 FE27      SBRS	R2,7
    0231 C018      RJMP	0x024A
(0103)        {
(0104) 	    flag_receive=RECEIVE_OK;
    0232 E081      LDI	R24,1
    0233 93800068  STS	flag_receive,R24
(0105) 		
(0106) 		PORTB|=1<<LED2;
    0235 9AC1      SBI	0x18,1
(0107) 		for(i=2;i<length;i++)
    0236 E042      LDI	R20,2
    0237 C00A      RJMP	0x0242
(0108) 		     {
(0109) 			 putchar(arrRx[i]);
    0238 E68A      LDI	R24,0x6A
    0239 E090      LDI	R25,0
    023A 2FE4      MOV	R30,R20
    023B 27FF      CLR	R31
    023C 0FE8      ADD	R30,R24
    023D 1FF9      ADC	R31,R25
    023E 8100      LDD	R16,Z+0
    023F 2711      CLR	R17
    0240 D07A      RCALL	_putchar
    0241 9543      INC	R20
    0242 90200069  LDS	R2,length
    0244 1542      CP	R20,R2
    0245 F390      BCS	0x0238
(0110) 			 }
(0111) 		Delay_ms(100);
    0246 E604      LDI	R16,0x64
    0247 E010      LDI	R17,0
    0248 D012      RCALL	_Delay_ms
(0112) 	    PORTB&=~(1<<LED2);
    0249 98C1      CBI	0x18,1
(0113)        }     
(0114)     }
(0115)   halSpiStrobe(CCxxx0_SFRX);		//清洗接收缓冲区
    024A E30A      LDI	R16,0x3A
    024B DE94      RCALL	_halSpiStrobe
(0116)   halSpiStrobe(CCxxx0_SRX);
    024C E304      LDI	R16,0x34
    024D DE92      RCALL	_halSpiStrobe
    024E 9623      ADIW	R28,3
    024F D029      RCALL	pop_gset1
    0250 D053      RCALL	pop_lset
    0251 9518      RETI
(0117) }
(0118) 
(0119) void Delay_us(uint16 time) //set time 120 to 100us,set 1 to 3.5us;
(0120) 	{while (time--);
_Delay_us:
  time                 --> R16
    0252 0118      MOVW	R2,R16
    0253 5001      SUBI	R16,1
    0254 4010      SBCI	R17,0
    0255 2022      TST	R2
    0256 F7D9      BNE	0x0252
    0257 2033      TST	R3
    0258 F7C9      BNE	0x0252
(0121) 	 _WDR();
    0259 95A8      WDR
    025A 9508      RET
_Delay_ms:
  time                 --> R20
    025B D01A      RCALL	push_gset1
    025C 01A8      MOVW	R20,R16
(0122) 	}
(0123) void Delay_ms(uint16 time) 
(0124) 	{while (time--)
    025D C003      RJMP	0x0261
(0125) 	 Delay_us(1200);
FILE: <library>
    025E EB00      LDI	R16,0xB0
    025F E014      LDI	R17,4
    0260 DFF1      RCALL	_Delay_us
    0261 011A      MOVW	R2,R20
    0262 5041      SUBI	R20,1
    0263 4050      SBCI	R21,0
    0264 2022      TST	R2
    0265 F7C1      BNE	0x025E
    0266 2033      TST	R3
    0267 F7B1      BNE	0x025E
    0268 D010      RCALL	pop_gset1
    0269 9508      RET
pop_gset2:
    026A E0E2      LDI	R30,2
    026B C00E      RJMP	pop
pop_gset4:
    026C E0E8      LDI	R30,0x8
    026D C00C      RJMP	pop
push_gset5:
    026E 92FA      ST	R15,-Y
    026F 92EA      ST	R14,-Y
push_gset4:
    0270 92DA      ST	R13,-Y
    0271 92CA      ST	R12,-Y
push_gset3:
    0272 92BA      ST	R11,-Y
    0273 92AA      ST	R10,-Y
push_gset2:
    0274 937A      ST	R23,-Y
    0275 936A      ST	R22,-Y
push_gset1:
    0276 935A      ST	R21,-Y
    0277 934A      ST	R20,-Y
    0278 9508      RET
pop_gset1:
    0279 E0E1      LDI	R30,1
pop:
    027A 9149      LD	R20,Y+
    027B 9159      LD	R21,Y+
    027C FDE0      SBRC	R30,0
    027D 9508      RET
    027E 9169      LD	R22,Y+
    027F 9179      LD	R23,Y+
    0280 FDE1      SBRC	R30,1
    0281 9508      RET
    0282 90A9      LD	R10,Y+
    0283 90B9      LD	R11,Y+
    0284 FDE2      SBRC	R30,2
    0285 9508      RET
    0286 90C9      LD	R12,Y+
    0287 90D9      LD	R13,Y+
    0288 FDE3      SBRC	R30,3
    0289 9508      RET
    028A 90E9      LD	R14,Y+
    028B 90F9      LD	R15,Y+
    028C 9508      RET
push_lset:
    028D 93FA      ST	R31,-Y
    028E 93EA      ST	R30,-Y
    028F 93BA      ST	R27,-Y
    0290 93AA      ST	R26,-Y
    0291 939A      ST	R25,-Y
    0292 938A      ST	R24,-Y
    0293 933A      ST	R19,-Y
    0294 932A      ST	R18,-Y
    0295 931A      ST	R17,-Y
    0296 930A      ST	R16,-Y
    0297 929A      ST	R9,-Y
    0298 928A      ST	R8,-Y
    0299 927A      ST	R7,-Y
    029A 926A      ST	R6,-Y
    029B 925A      ST	R5,-Y
    029C 924A      ST	R4,-Y
    029D 923A      ST	R3,-Y
    029E 922A      ST	R2,-Y
    029F 921A      ST	R1,-Y
    02A0 920A      ST	R0,-Y
    02A1 B60F      IN	R0,0x3F
    02A2 920A      ST	R0,-Y
    02A3 9508      RET
pop_lset:
    02A4 9009      LD	R0,Y+
    02A5 BE0F      OUT	0x3F,R0
    02A6 9009      LD	R0,Y+
    02A7 9019      LD	R1,Y+
    02A8 9029      LD	R2,Y+
    02A9 9039      LD	R3,Y+
    02AA 9049      LD	R4,Y+
    02AB 9059      LD	R5,Y+
    02AC 9069      LD	R6,Y+
    02AD 9079      LD	R7,Y+
    02AE 9089      LD	R8,Y+
    02AF 9099      LD	R9,Y+
    02B0 9109      LD	R16,Y+
    02B1 9119      LD	R17,Y+
    02B2 9129      LD	R18,Y+
    02B3 9139      LD	R19,Y+
    02B4 9189      LD	R24,Y+
    02B5 9199      LD	R25,Y+
    02B6 91A9      LD	R26,Y+
    02B7 91B9      LD	R27,Y+
    02B8 91E9      LD	R30,Y+
    02B9 91F9      LD	R31,Y+
    02BA 9508      RET
_putchar:
    02BB DFBA      RCALL	push_gset1
    02BC 2F40      MOV	R20,R16
    02BD 9020009C  LDS	R2,_textmode
    02BF 9030009D  LDS	R3,_textmode+1
    02C1 2022      TST	R2
    02C2 F411      BNE	0x02C5
    02C3 2033      TST	R3
    02C4 F021      BEQ	0x02C9
    02C5 304A      CPI	R20,0xA
    02C6 F411      BNE	0x02C9
    02C7 E00D      LDI	R16,0xD
    02C8 DFF2      RCALL	_putchar
    02C9 9B5D      SBIS	0x0B,5
    02CA CFFE      RJMP	0x02C9
    02CB B94C      OUT	0x0C,R20
    02CC 2F04      MOV	R16,R20
    02CD 2711      CLR	R17
    02CE DFAA      RCALL	pop_gset1
    02CF 9508      RET

⌨️ 快捷键说明

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