📄 main.s
字号:
; //原先是WriteToCC1000Register(addr, Configuration[addr - 0x40 + 0x1C]);
; /*
; //////////////////////////////添加小郭的程序////////////////////////////////////////////////////////////
;
; 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
; WriteToCC1000Register(CC1000_PA_POW,0x00);
; WriteToCC1000Register(CC1000_MAIN,0x3b);
; //cal_complete=ReadfromCC1000Register(CC1000_MAIN);
; // cal_complete=0;
; // WriteToCC1000Register(CC1000_MAIN,cal_complete);
; delay(35);
; // WriteToCC1000Register(CC1000_MAIN,0x01);
; // writes 24-bit frequency value used for RX to 433.9164 MHz.
; // Check CC1000 data sheet for equations used to find
; // 0x582000.
; WriteToCC1000Register(CC1000_FREQ_2A,0x58);
; WriteToCC1000Register(CC1000_FREQ_1A,0x20);
; WriteToCC1000Register(CC1000_FREQ_0A,0x00);
; // writes 24-bit frequency value used for TX to 433.9164 MHz.
; // Check CC1000 data sheet for equations used to find
; // 0x448856.
; WriteToCC1000Register(CC1000_FREQ_2B,0x42);
; WriteToCC1000Register(CC1000_FREQ_1B,0x14);
; WriteToCC1000Register(CC1000_FREQ_0B,0x9C);
; // sets frequency separation between 0 value and 1 value
; //设定误码率
; WriteToCC1000Register(CC1000_FSEP1,0x02);
; WriteToCC1000Register(CC1000_FSEP0,0x80);
; WriteToCC1000Register(CC1000_CURRENT,0x81);
; // sets some internal current levels, and enables RSSI output to pin
; WriteToCC1000Register(CC1000_FRONT_END,0x12);
; WriteToCC1000Register(CC1000_PA_POW,0xff);
; // sets the PLL reference divider to divide by 6
; WriteToCC1000Register(CC1000_PLL,0x18);
; // sets External LNA control lock indicator to output on the CHP_OUT pin
; WriteToCC1000Register(CC1000_LOCK,0x10);
; WriteToCC1000Register(CC1000_CAL,0x26);
; // sets threshold level for peak detector (not used in this design)
; WriteToCC1000Register(CC1000_MODEM2,0x8E);
; // sets the averaging filter to free-running and controlled by writes
; // to bit 4 of this register.
; // Sets averaging filter sensitivity to .6dB worst-case loss of sensitivity
; WriteToCC1000Register(CC1000_MODEM1,0x6F);
; // baud rate to 2.4 k, Manchester, and crystal freq. to 11.0592 MHz
; WriteToCC1000Register(CC1000_MODEM0,0x2B);
; // sets capacitor array values for RX and TX
; WriteToCC1000Register(CC1000_MATCH,0x70);
; // disables dithering and data shaping
; WriteToCC1000Register(CC1000_FSCTRL,0x01);
; // sets prescaling to nominal values
;
; WriteToCC1000Register(CC1000_FSHAPE7,0x1c);
; WriteToCC1000Register(CC1000_FSHAPE6,0x16);
; WriteToCC1000Register(CC1000_FSHAPE5,0x10);
; WriteToCC1000Register(CC1000_FSHAPE4,0x0a);
; WriteToCC1000Register(CC1000_FSHAPE3,0x06);
; WriteToCC1000Register(CC1000_FSHAPE2,0x03);
; WriteToCC1000Register(CC1000_FSHAPE1,0x01);
; WriteToCC1000Register(CC1000_FSDELAY,0x1f);
;
; WriteToCC1000Register(CC1000_PRESCALER,0x00);
;
; WriteToCC1000Register(CC1000_TEST6,0x10);
; WriteToCC1000Register(CC1000_TEST5,0x08);
; WriteToCC1000Register(CC1000_TEST4,0x25);
; WriteToCC1000Register(CC1000_TEST3,0x04);
; WriteToCC1000Register(CC1000_TEST2,0x00);
; WriteToCC1000Register(CC1000_TEST1,0x00);
; WriteToCC1000Register(CC1000_TEST0,0x00);
; //////////////////////////////////////////////////////////////////////////////////////////
; */
;
; WakeUpCC1000ToRX(0x44,0x60);
ldi R18,96
ldi R16,68
xcall _WakeUpCC1000ToRX
L25:
.dbline 278
L26:
.dbline 278
; //设置DIO为输入
; //PORTE = 0x00;
; //DDRE = 0x00;
; while(!CalibrateCC1000());
xcall _CalibrateCC1000
tst R16
breq L25
.dbline 281
; //////////////////////
;
; WakeUpCC1000ToTX(0x81,0x48); //PIC的程序与数据手册上的算法正好反了,先RX,再TX的
ldi R18,72
ldi R16,129
xcall _WakeUpCC1000ToTX
L28:
.dbline 286
L29:
.dbline 286
; //设置DIO为输出
; // PORTE = 0x00;
; // DDRE = 0x40;
;
; while(!CalibrateCC1000());
xcall _CalibrateCC1000
tst R16
breq L28
.dbline 319
; /////////////////
; //SetupCC1000TX(0x44,0x60);
;
;
; /*
; WriteToCC1000Register(CC1000_MAIN,0x3F); //
; WriteToCC1000Register(CC1000_PA_POW,0x00); // Power down
;
; MainValue=ReadFromCC1000Register(CC1000_MAIN);
; WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFB); // CORE_PD=0
;
; delay(38);
;
; MainValue=ReadFromCC1000Register(CC1000_MAIN);
; WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFD); // BLAS_PD=0
;
; delay(12);
;
; MainValue=ReadFromCC1000Register(CC1000_MAIN);
; WriteToCC1000Register(CC1000_MAIN,(MainValue & 0xE7) | 0xC0); //RXTX=1,F_REG=1,TX_PD=0,FS_PD=0
; WriteToCC1000Register(CC1000_PA_POW,0x00);
; WriteToCC1000Register(CC1000_CURRENT, 0x81);
; WriteToCC1000Register(CC1000_PLL, 0x48);
;
; delay(12);
; WriteToCC1000Register(CC1000_PA_POW,0x80);
; delay(2);
; */
;
; //1-----------
; // SetupCC1000RX(0x44,0x60);
; //2-------------------
; MainValue=ReadFromCC1000Register(CC1000_MAIN);
clr R16
xcall _ReadFromCC1000Register
mov R20,R16
.dbline 320
; WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFB); // CORE_PD=0
mov R18,R20
andi R18,251
clr R16
xcall _WriteToCC1000Register
.dbline 321
; delay(38);
ldi R16,38
ldi R17,0
xcall _delay
.dbline 322
; MainValue=ReadFromCC1000Register(CC1000_MAIN);
clr R16
xcall _ReadFromCC1000Register
mov R20,R16
.dbline 323
; WriteToCC1000Register(CC1000_MAIN,MainValue & 0xFD); // BLAS_PD=0
mov R18,R20
andi R18,253
clr R16
xcall _WriteToCC1000Register
.dbline 325
;
; delay(12);
ldi R16,12
ldi R17,0
xcall _delay
.dbline -2
L13:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r MainValue 20 c
.dbsym r addr 22 c
.dbend
.dbfunc e SoftUART_Send _SoftUART_Send fc
; i -> R20,R21
; j -> R22,R23
; data -> R16
.even
_SoftUART_Send::
xcall push_gset2
.dbline -1
.dbline 333
;
; }
;
;
; //******************************************************//
;
; unsigned char SoftUART_Send(unsigned char data)
; {
.dbline 336
; ///while (!CHECK_BIT(UCSR0A,1<<UDRE0));
; int i,j;
; UDR0 = data ;
out 0xc,R16
.dbline 337
; for(i=0;i<200;i++)
clr R20
clr R21
L32:
.dbline 338
clr R22
clr R23
L36:
.dbline 338
L37:
.dbline 338
subi R22,255 ; offset = 1
sbci R23,255
.dbline 338
cpi R22,200
ldi R30,0
cpc R23,R30
brlt L36
L33:
.dbline 337
subi R20,255 ; offset = 1
sbci R21,255
.dbline 337
cpi R20,200
ldi R30,0
cpc R21,R30
brlt L32
.dbline 341
; for(j=0;j<200;j++);
; ///while (!CHECK_BIT(UCSR0A, 1<<TXC0));
;
; return 0;
clr R16
.dbline -2
L31:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r j 22 I
.dbsym r data 16 c
.dbend
.dbfunc e SoftUART_Receive _SoftUART_Receive fc
.even
_SoftUART_Receive::
.dbline -1
.dbline 345
; }
; //****************************************************************
; unsigned char SoftUART_Receive(void) //USART0接收数据
; {
xjmp L42
L41:
.dbline 346
in R16,0xc
xjmp L40
L42:
.dbline 346
; while ((UCSR0A&(1<<RXC0))==(1<<RXC0)) return UDR0;
in R2,0xb
clr R3
sbrc R2,7
rjmp L41
.dbline 347
; return 0;
clr R16
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fI
; rdata -> <dead>
; endcode -> <dead>
; precode -> R22
; sycode -> R10
; databuf -> y+0
; i -> R20,R21
.even
_main::
sbiw R28,3
.dbline -1
.dbline 352
;
; }
; //********************************************************
; int main(void)
; {
.dbline 359
; unsigned char sycode,precode,endcode,rdata;
; unsigned char databuf[MAX];
; int i;
; //DDRB = 0x46 ;
; //DDRA = 0x40 ;
; //DDRE = 0x40 ;
; DDRD = 0x3E;
ldi R24,62
out 0x11,R24
.dbline 360
; init_usart();
xcall _init_usart
.dbline 361
; Init();
xcall _Init
.dbline 364
; //CC1000_init();
;
; if(flag)
xjmp L45
X0:
.dbline 365
; {
.dbline 366
; C1000_TX_MODE();
xcall _C1000_TX_MODE
xjmp L48
L47:
.dbline 372
; //SetupCC1000TX(0x81,0x48); //切换到发射状态
; //PORTE = 0x00;
; //DDRE = 0x40;
;
; while(1)
; {
.dbline 373
; SoftUART_Send(0x55);
ldi R16,85
xcall _SoftUART_Send
.dbline 374
; SoftUART_Send(0xFF);
ldi R16,255
xcall _SoftUART_Send
.dbline 375
; for(i=0;i<MAX;i++)
clr R20
clr R21
L50:
.dbline 376
.dbline 377
ldi R16,51
xcall _SoftUART_Send
.dbline 378
L51:
.dbline 375
subi R20,255 ; offset = 1
sbci R21,255
.dbline 375
cpi R20,3
ldi R30,0
cpc R21,R30
brlt L50
.dbline 379
L48:
.dbline 371
xjmp L47
X1:
.dbline 381
; {
; SoftUART_Send(0x33);
; }
; }
;
; return 0;
clr R16
clr R17
xjmp L44
L45:
.dbline 384
; }
; else
; {
.dbline 385
; C1000_RX_MODE();
xcall _C1000_RX_MODE
xjmp L55
L54:
.dbline 393
; // WakeUpCC1000ToRX(0x44,0x60);
; //SetupCC1000RX(0x38,0x60); //切换到接收状态
; //SetupCC1000RX(0x44,0x60); //切换到接收状态
; //PORTE = 0x00;
; //DDRE = 0x00;
;
; while(1)
; {
.dbline 394
; AverageFreeRunCC1000();
xcall _AverageFreeRunCC1000
.dbline 396
;
; sycode = SoftUART_Receive();
xcall _SoftUART_Receive
mov R10,R16
.dbline 397
; precode = SoftUART_Receive();
xcall _SoftUART_Receive
mov R22,R16
.dbline 399
;
; if(sycode == 0x55)
mov R24,R10
cpi R24,85
brne L57
.dbline 400
; {
.dbline 401
; AverageManualLockCC1000();
xcall _AverageManualLockCC1000
.dbline 404
; // if(precode == 0xFF)
; // {
; SoftUART_Send(sycode);
mov R16,R10
xcall _SoftUART_Send
.dbline 405
; SoftUART_Send(precode);
mov R16,R22
xcall _SoftUART_Send
.dbline 406
; for(i=0;i<MAX;i++)
clr R20
clr R21
L59:
.dbline 407
.dbline 408
xcall _SoftUART_Receive
movw R24,R28
movw R30,R20
add R30,R24
adc R31,R25
std z+0,R16
.dbline 410
movw R24,R28
movw R30,R20
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _SoftUART_Send
.dbline 411
L60:
.dbline 406
subi R20,255 ; offset = 1
sbci R21,255
.dbline 406
cpi R20,3
ldi R30,0
cpc R21,R30
brlt L59
.dbline 413
; {
; databuf[i] = SoftUART_Receive();
;
; SoftUART_Send(databuf[i]);
; }
; // }
; }
L57:
.dbline 416
L55:
.dbline 392
xjmp L54
X2:
.dbline 417
; //endcode = SoftUART_Receive();
;
; }
; return 0;
clr R16
clr R17
.dbline -2
L44:
adiw R28,3
.dbline 0 ; func end
ret
.dbsym l rdata 1 c
.dbsym l endcode 1 c
.dbsym r precode 22 c
.dbsym r sycode 10 c
.dbsym l databuf 0 A[3:3]c
.dbsym r i 20 I
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -