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

📄 hello.lst

📁 CC1000通信
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0166) 	UCSR0B =  0x00;                                                                
_init_usart:
    02B2 2422      CLR	R2
    02B3 B82A      OUT	0x0A,R2
(0167) 	UCSR0A =  0x00;
    02B4 B82B      OUT	0x0B,R2
(0168) 	UCSR0C =  0x06;
    02B5 E086      LDI	R24,6
    02B6 93800095  STS	0x95,R24
(0169) 	UBRR0L =  0x67;       //BOUDRATE 2400                                                         
    02B8 E687      LDI	R24,0x67
    02B9 B989      OUT	0x09,R24
(0170) 	UBRR0H =  0x00;                                                                 
    02BA 92200090  STS	0x90,R2
(0171) 	UCSR0B =  0x18;
    02BC E188      LDI	R24,0x18
    02BD B98A      OUT	0x0A,R24
    02BE 9508      RET
_Init:
  MainValue            --> R20
  addr                 --> R22
    02BF 940E039D  CALL	push_gset2
(0172) }
(0173) 
(0174) void Init()
(0175) {
(0176) 	char MainValue;
(0177) 	char addr;
(0178) 
(0179) 	
(0180) 	WriteToCC1000Register(CC1000_MAIN,0x3F);    // Put CC1000 into power-down
    02C1 E32F      LDI	R18,0x3F
    02C2 2700      CLR	R16
    02C3 940E00D0  CALL	_WriteToCC1000Register
(0181) 	WriteToCC1000Register(CC1000_PA_POW,0x00);  // Turn off PA to minimise current draw
    02C5 2722      CLR	R18
    02C6 E00B      LDI	R16,0xB
    02C7 940E00D0  CALL	_WriteToCC1000Register
(0182) 	
(0183) 	MainValue=ReadFromCC1000Register(CC1000_MAIN);
    02C9 2700      CLR	R16
    02CA 940E00F3  CALL	_ReadFromCC1000Register
    02CC 2F40      MOV	R20,R16
(0184) 	WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFE);         // Reset CC1000   原先是WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFA);by yu
    02CD 2F24      MOV	R18,R20
    02CE 7F2E      ANDI	R18,0xFE
    02CF 2700      CLR	R16
    02D0 940E00D0  CALL	_WriteToCC1000Register
(0185) 	WriteToCC1000Register(CC1000_MAIN,MainValue | 0x01); 
    02D2 2F24      MOV	R18,R20
    02D3 6021      ORI	R18,1
    02D4 2700      CLR	R16
    02D5 940E00D0  CALL	_WriteToCC1000Register
(0186)     
(0187) 	
(0188) 
(0189) 	WriteToCC1000Register(CC1000_MAIN,0x3A);
    02D7 E32A      LDI	R18,0x3A
    02D8 2700      CLR	R16
    02D9 940E00D0  CALL	_WriteToCC1000Register
(0190) 
(0191) 	delay(38);
    02DB E206      LDI	R16,0x26
    02DC E010      LDI	R17,0
    02DD DF7D      RCALL	_delay
(0192) 
(0193) 	for(addr = 1; addr <= 0x1c; addr ++)
    02DE E061      LDI	R22,1
    02DF C00B      RJMP	0x02EB
(0194) 		WriteToCC1000Register(addr, ConfigurationRX[addr - 1]);
    02E0 EA86      LDI	R24,0xA6
    02E1 E090      LDI	R25,0
    02E2 2FE6      MOV	R30,R22
    02E3 27FF      CLR	R31
    02E4 0FE8      ADD	R30,R24
    02E5 1FF9      ADC	R31,R25
    02E6 9124      LPM	R18,0(Z)
    02E7 2F06      MOV	R16,R22
    02E8 940E00D0  CALL	_WriteToCC1000Register
    02EA 9563      INC	R22
    02EB E18C      LDI	R24,0x1C
    02EC 1786      CP	R24,R22
    02ED F790      BCC	0x02E0
(0195) 		//WriteToCC1000Register(addr, ConfigurationRX[addr - 1]);
(0196) /////////////////////////////////////////by yu //////////////////////////////////////////////	
(0197) 	WriteToCC1000Register(0x1c,0x00);   //仿造Pic 里的void ConfigureCC1000()
    02EE 2722      CLR	R18
    02EF E10C      LDI	R16,0x1C
    02F0 940E00D0  CALL	_WriteToCC1000Register
(0198) ///////////////////////////////////////////////////////////////////////////////////////
(0199) 	for(addr = 0x40; addr <= 0x46; addr ++)
    02F2 E460      LDI	R22,0x40
    02F3 C00B      RJMP	0x02FF
(0200) 		WriteToCC1000Register(addr, ConfigurationTX[addr - 0x40 + 0x14]); 
    02F4 E680      LDI	R24,0x60
    02F5 E090      LDI	R25,0
    02F6 2FE6      MOV	R30,R22
    02F7 27FF      CLR	R31
    02F8 0FE8      ADD	R30,R24
    02F9 1FF9      ADC	R31,R25
    02FA 9124      LPM	R18,0(Z)
    02FB 2F06      MOV	R16,R22
    02FC 940E00D0  CALL	_WriteToCC1000Register
    02FE 9563      INC	R22
    02FF E486      LDI	R24,0x46
    0300 1786      CP	R24,R22
    0301 F790      BCC	0x02F4
(0201) 		//WriteToCC1000Register(addr, ConfigurationRX[addr - 0x40 + 0x14]); 
(0202) 		//原先是WriteToCC1000Register(addr, Configuration[addr - 0x40 + 0x1C]);
(0203) /*
(0204) //////////////////////////////添加小郭的程序////////////////////////////////////////////////////////////
(0205) 
(0206)  WriteToCC1000Register(CC1000_MAIN,0x3a);          //RXTX=0;F_REQ=0(RX:Register A ,TX:Register B);RX_PD=1;TX_PD=1;FS_PD=1;CORE_PD=0;BIAS_PD=1;REST_N=0
(0207)  WriteToCC1000Register(CC1000_PA_POW,0x00); 
(0208)  WriteToCC1000Register(CC1000_MAIN,0x3b);       
(0209)  //cal_complete=ReadfromCC1000Register(CC1000_MAIN);
(0210) // cal_complete=0;
(0211) // WriteToCC1000Register(CC1000_MAIN,cal_complete);
(0212)  delay(35);
(0213) // WriteToCC1000Register(CC1000_MAIN,0x01);
(0214) // writes 24-bit frequency value used for RX to 433.9164 MHz.
(0215) // Check CC1000 data sheet for equations used to find
(0216) // 0x582000.
(0217)  WriteToCC1000Register(CC1000_FREQ_2A,0x58);       
(0218)  WriteToCC1000Register(CC1000_FREQ_1A,0x20);
(0219)  WriteToCC1000Register(CC1000_FREQ_0A,0x00);
(0220) // writes 24-bit frequency value used for TX to 433.9164 MHz.
(0221) // Check CC1000 data sheet for equations used to find
(0222) // 0x448856.
(0223)  WriteToCC1000Register(CC1000_FREQ_2B,0x42);       
(0224)  WriteToCC1000Register(CC1000_FREQ_1B,0x14);
(0225)  WriteToCC1000Register(CC1000_FREQ_0B,0x9C);
(0226) // sets frequency separation between 0 value and 1 value
(0227) //设定误码率
(0228)  WriteToCC1000Register(CC1000_FSEP1,0x02);
(0229)  WriteToCC1000Register(CC1000_FSEP0,0x80);
(0230)  WriteToCC1000Register(CC1000_CURRENT,0x81);
(0231) // sets some internal current levels, and enables RSSI output to pin
(0232)  WriteToCC1000Register(CC1000_FRONT_END,0x12);
(0233)  WriteToCC1000Register(CC1000_PA_POW,0xff);
(0234) // sets the PLL reference divider to divide by 6
(0235)  WriteToCC1000Register(CC1000_PLL,0x18);   
(0236) // sets External LNA control lock indicator to output on the CHP_OUT pin                  
(0237)  WriteToCC1000Register(CC1000_LOCK,0x10);
(0238)  WriteToCC1000Register(CC1000_CAL,0x26);   
(0239) // sets threshold level for peak detector (not used in this design) 
(0240)  WriteToCC1000Register(CC1000_MODEM2,0x8E);    
(0241) // sets the averaging filter to free-running and controlled by writes
(0242) // to bit 4 of this register.
(0243) // Sets averaging filter sensitivity to .6dB worst-case loss of sensitivity
(0244)  WriteToCC1000Register(CC1000_MODEM1,0x6F); 
(0245) // baud rate to 2.4 k, Manchester, and crystal freq. to 11.0592 MHz
(0246)  WriteToCC1000Register(CC1000_MODEM0,0x2B);            
(0247) // sets capacitor array values for RX and TX
(0248)  WriteToCC1000Register(CC1000_MATCH,0x70); 
(0249) // disables dithering and data shaping  
(0250)  WriteToCC1000Register(CC1000_FSCTRL,0x01); 
(0251) // sets prescaling to nominal values  
(0252) 
(0253)  WriteToCC1000Register(CC1000_FSHAPE7,0x1c);
(0254)  WriteToCC1000Register(CC1000_FSHAPE6,0x16);
(0255)  WriteToCC1000Register(CC1000_FSHAPE5,0x10);
(0256)  WriteToCC1000Register(CC1000_FSHAPE4,0x0a);
(0257)  WriteToCC1000Register(CC1000_FSHAPE3,0x06);
(0258)  WriteToCC1000Register(CC1000_FSHAPE2,0x03);
(0259)  WriteToCC1000Register(CC1000_FSHAPE1,0x01);
(0260)  WriteToCC1000Register(CC1000_FSDELAY,0x1f);
(0261)  
(0262)  WriteToCC1000Register(CC1000_PRESCALER,0x00);
(0263) 
(0264)  WriteToCC1000Register(CC1000_TEST6,0x10);
(0265)  WriteToCC1000Register(CC1000_TEST5,0x08);
(0266)  WriteToCC1000Register(CC1000_TEST4,0x25);
(0267)  WriteToCC1000Register(CC1000_TEST3,0x04);
(0268)  WriteToCC1000Register(CC1000_TEST2,0x00);
(0269)  WriteToCC1000Register(CC1000_TEST1,0x00);
(0270)  WriteToCC1000Register(CC1000_TEST0,0x00);
(0271)  //////////////////////////////////////////////////////////////////////////////////////////
(0272) */
(0273) 	
(0274) 	WakeUpCC1000ToRX(0x44,0x60);
    0302 E620      LDI	R18,0x60
    0303 E404      LDI	R16,0x44
    0304 940E01DD  CALL	_WakeUpCC1000ToRX
(0275) 	//设置DIO为输入
(0276) 	//PORTE = 0x00;
(0277)     //DDRE  = 0x00;
(0278) 	while(!CalibrateCC1000());
    0306 940E0135  CALL	_CalibrateCC1000
    0308 2300      TST	R16
    0309 F3E1      BEQ	0x0306
(0279) 	//////////////////////
(0280) 	
(0281) 	WakeUpCC1000ToTX(0x81,0x48);     //PIC的程序与数据手册上的算法正好反了,先RX,再TX的
    030A E428      LDI	R18,0x48
    030B E801      LDI	R16,0x81
    030C 940E01F9  CALL	_WakeUpCC1000ToTX
(0282) 	//设置DIO为输出
(0283) 	// PORTE = 0x00;
(0284)     // DDRE  = 0x40;
(0285) 	
(0286) 	while(!CalibrateCC1000());
    030E 940E0135  CALL	_CalibrateCC1000
    0310 2300      TST	R16
    0311 F3E1      BEQ	0x030E
(0287) 	/////////////////
(0288) 	//SetupCC1000TX(0x44,0x60);
(0289) 	
(0290) 
(0291) /*
(0292) 	WriteToCC1000Register(CC1000_MAIN,0x3F);    // 
(0293) 	WriteToCC1000Register(CC1000_PA_POW,0x00);  // Power down
(0294) 
(0295) 	MainValue=ReadFromCC1000Register(CC1000_MAIN);
(0296) 	WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFB);         // CORE_PD=0
(0297) 
(0298) 	delay(38);
(0299) 
(0300) 	MainValue=ReadFromCC1000Register(CC1000_MAIN);
(0301) 	WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFD);         // BLAS_PD=0
(0302) 
(0303) 	delay(12);
(0304) 
(0305) 	MainValue=ReadFromCC1000Register(CC1000_MAIN);
(0306) 	WriteToCC1000Register(CC1000_MAIN,(MainValue & 0xE7) | 0xC0);         //RXTX=1,F_REG=1,TX_PD=0,FS_PD=0 
(0307) 	WriteToCC1000Register(CC1000_PA_POW,0x00);
(0308) 	WriteToCC1000Register(CC1000_CURRENT, 0x81);
(0309) 	WriteToCC1000Register(CC1000_PLL, 0x48);
(0310) 
(0311) 	delay(12);
(0312) 	WriteToCC1000Register(CC1000_PA_POW,0x80);
(0313) 	delay(2);	
(0314) 	*/
(0315) 	
(0316) 	//1-----------
(0317) 	//  SetupCC1000RX(0x44,0x60);
(0318) 	//2-------------------
(0319) 	MainValue=ReadFromCC1000Register(CC1000_MAIN);
    0312 2700      CLR	R16
    0313 940E00F3  CALL	_ReadFromCC1000Register
    0315 2F40      MOV	R20,R16
(0320) 	WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFB);         // CORE_PD=0
    0316 2F24      MOV	R18,R20
    0317 7F2B      ANDI	R18,0xFB
    0318 2700      CLR	R16
    0319 940E00D0  CALL	_WriteToCC1000Register
(0321)     delay(38);
    031B E206      LDI	R16,0x26
    031C E010      LDI	R17,0
    031D DF3D      RCALL	_delay
(0322)     MainValue=ReadFromCC1000Register(CC1000_MAIN);
    031E 2700      CLR	R16
    031F 940E00F3  CALL	_ReadFromCC1000Register
    0321 2F40      MOV	R20,R16
(0323) 	WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFD);         // BLAS_PD=0
    0322 2F24      MOV	R18,R20
    0323 7F2D      ANDI	R18,0xFD
    0324 2700      CLR	R16
    0325 940E00D0  CALL	_WriteToCC1000Register
(0324) 
(0325) 	delay(12);
    0327 E00C      LDI	R16,0xC
    0328 E010      LDI	R17,0
    0329 DF31      RCALL	_delay
    032A 940E0391  CALL	pop_gset2
    032C 9508      RET
_SoftUART_Send:
  i                    --> R20
  j                    --> R22
  data                 --> R16
    032D 940E039D  CALL	push_gset2
(0326) 		
(0327) }
(0328) 
(0329) 
(0330) //******************************************************//
(0331) 
(0332) unsigned char SoftUART_Send(unsigned char data)
(0333) {
(0334) 	///while (!CHECK_BIT(UCSR0A,1<<UDRE0));
(0335) 	int i,j;
(0336) 	UDR0 = data ;
    032F B90C      OUT	0x0C,R16
(0337) 	for(i=0;i<200;i++)
    0330 2744      CLR	R20
    0331 2755      CLR	R21
(0338) 		for(j=0;j<200;j++);
    0332 2766      CLR	R22
    0333 2777      CLR	R23
    0334 5F6F      SUBI	R22,0xFF
    0335 4F7F      SBCI	R23,0xFF
    0336 3C68      CPI	R22,0xC8
    0337 E0E0      LDI	R30,0
    0338 077E      CPC	R23,R30
    0339 F3D4      BLT	0x0334
    033A 5F4F      SUBI	R20,0xFF
    033B 4F5F      SBCI	R21,0xFF
    033C 3C48      CPI	R20,0xC8
    033D E0E0      LDI	R30,0
    033E 075E      CPC	R21,R30
    033F F394      BLT	0x0332
(0339) 	///while (!CHECK_BIT(UCSR0A, 1<<TXC0));
(0340) 	
(0341) 	return 0;
    0340 2700      CLR	R16
    0341 940E0391  CALL	pop_gset2
    0343 9508      RET
(0342) } 
(0343) //****************************************************************
(0344) unsigned char SoftUART_Receive(void)                                                       //USART0接收数据
(0345) {
_SoftUART_Receive:
    0344 C002      RJMP	0x0347
(0346)    while ((UCSR0A&(1<<RXC0))==(1<<RXC0)) return UDR0; 
    0345 B10C      IN	R16,0x0C
    0346 C005      RJMP	0x034C
    0347 B02B      IN	R2,0x0B
    0348 2433      CLR	R3
    0349 FC27      SBRC	R2,7
    034A CFFA      RJMP	0x0345
(0347)    return 0; 
    034B 2700      CLR	R16
    034C 9508      RET
_main:
  rdata                --> Y+1
  endcode              --> Y+1
  precode              --> R22
  sycode               --> R10
  databuf              --> Y+0
  i                    --> R20
    034D 9723      SBIW	R28,3
(0348)        
(0349) } 
(0350) //********************************************************
(0351) int main(void)
(0352) {
(0353)     unsigned char sycode,precode,endcode,rdata;
(0354) 	unsigned char databuf[MAX];
(0355) 	int i;
(0356) 	//DDRB = 0x46 ;               
(0357) 	//DDRA = 0x40 ;                 
(0358) 	//DDRE = 0x40 ;
(0359) 	 DDRD  = 0x3E;
    034E E38E      LDI	R24,0x3E
    034F BB81      OUT	0x11,R24
(0360) 	init_usart();
    0350 DF61      RCALL	_init_usart
(0361)     Init();
    0351 DF6D      RCALL	_Init
(0362) 	//CC1000_init();
(0363) 	
(0364) 	if(flag)
    0352 C014      

⌨️ 快捷键说明

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