📄 1100.lst
字号:
440
441
442 //*****************************************************************************************
443 //函数名:INT8U halSpiReadReg(INT8U addr)
444 //输入:地址
445 //输出:该状态寄存器当前值
446 //功能描述:SPI读状态寄存器
447 //*****************************************************************************************
448 INT8U halSpiReadStatus(INT8U addr)
449 {
450 1 INT8U value,temp;
451 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
452 1 CSN = 0;
453 1 while (MISO);
454 1 SpiTxRxByte(temp);
455 1 value = SpiTxRxByte(0);
456 1 CSN = 1;
457 1 return value;
458 1 }
459 //*****************************************************************************************
460 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
461 //输入:无
462 //输出:无
463 //功能描述:配置CC1100的寄存器
464 //*****************************************************************************************
465 void halRfWriteRfSettings(void)
466 {
467 1
468 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
469 1 // Write register settings
470 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
471 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
472 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
473 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
474 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
475 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
476 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
477 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
478 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
479 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
480 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
481 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
482 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
483 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
484 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
485 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
486 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
487 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
C51 COMPILER V7.06 1100 12/20/2007 00:50:10 PAGE 9
488 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
489 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
490 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
491 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
492 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
493 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
494 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
495 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
496 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
497 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
498 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
499 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
500 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
501 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
502 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
503 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
504 1 }
505
506 //*****************************************************************************************
507 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
508 //输入:发送的缓冲区,发送数据个数
509 //输出:无
510 //功能描述:CC1100发送一组数据
511 //*****************************************************************************************
512
513 void halRfSendPacket(INT8U *txBuffer, INT8U size)
514 {
515 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
516 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
517 1
518 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
519 1
520 1 // Wait for GDO0 to be set -> sync transmitted
521 1 while (!GDO0);
522 1 // Wait for GDO0 to be cleared -> end of packet
523 1 while (GDO0);
524 1 halSpiStrobe(CCxxx0_SFTX);
525 1 }
526
527
528 void setRxMode(void)
529 {
530 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
531 1 }
532 //---------------------------------------------------------------------------
533 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
534 {
535 1 INT8U status[2];
536 1 INT8U packetLength;
537 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
538 1
539 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
540 1 //delay(5);
541 1 //while (!GDO1);
542 1 //while (GDO1);
543 1 delay(2);
544 1 while (GDO0)
545 1 {
546 2 delay(2);
547 2 --i;
548 2 if(i<1)
549 2 return 0;
C51 COMPILER V7.06 1100 12/20/2007 00:50:10 PAGE 10
550 2 }
551 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
552 1 {
553 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
554 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
555 2 {
556 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
557 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
558 3
559 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
560 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
561 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
562 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
563 3 }
564 2 else
565 2 {
566 3 *length = packetLength;
567 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
568 3 return 0;
569 3 }
570 2 }
571 1 else
572 1 return 0;
573 1 }
574 //*****************************************************************************************
575 void disdignit()
576 {
577 1 char i;
578 1 if(temp[0])
579 1 {
580 2 for(i=0;i<3;i++)
581 2 {
582 3 P0=0xC6;
583 3 led0=0;
584 3 delay1(40);
585 3 led0=1;
586 3 P0=seg[temp[1]];
587 3 led1=0;
588 3 delay1(40);
589 3 led1=1;
590 3 P0=seg1[temp[5]];
591 3 led2=0;
592 3 delay1(40);
593 3 led2=1;
594 3 P0=seg[temp[4]];
595 3 led3=0;
596 3 delay1(40);
597 3 led3=1;
598 3 }
599 2 }
600 1 }
601 //********************************************************************************
602 void StartUART( void )
603 { //波特率4800
604 1 SCON = 0x50;
605 1 TMOD = 0x20;
606 1 TH1 = 0xFA;
607 1 TL1 = 0xFA;
608 1 PCON = 0x00;
609 1 TR1 = 1;
610 1 }
611 void R_S_Byte(INT8U R_Byte)
C51 COMPILER V7.06 1100 12/20/2007 00:50:10 PAGE 11
612 {
613 1 SBUF = R_Byte;
614 1 while( TI == 0 ); //查询法
615 1 TI = 0;
616 1
617 1 }
618 void main(void)
619 {
620 1 INT8U i,leng =0;
621 1 INT8U RxBuf[8]={0}; // 8字节, 如果需要更长的数据包,请正确设置
622 1 CpuInit();
623 1 POWER_UP_RESET_CC1100();
624 1 halRfWriteRfSettings();
625 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);//发射功率设置
626 1 delay(6000);
627 1 StartUART();
628 1 while(1)
629 1 {
630 2 leng =4; // 预计接受8 bytes
631 2 if(halRfReceivePacket(RxBuf,&leng)) //判断是否接收到数据
632 2 {
633 3 temp[0]=RxBuf[3]; //符号位
634 3 temp[2]=((RxBuf[2]<<4)|RxBuf[1]); //整数位
635 3 temp[1]=RxBuf[0]; //小数位
636 3 temp[4]=RxBuf[2]; //十位
637 3 temp[5]=RxBuf[1];
638 3 for(i=0;i<3;i++)
639 3 {
640 4 R_S_Byte(temp[2-i]) ;
641 4 delay(100);
642 4 }
643 3 disdignit();
644 3 }
645 2 }
646 1
647 1 }
648
649
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1015 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 79 29
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -