📄 hello.lst
字号:
(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 + -