📄 1100.lst
字号:
502 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
503 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
504 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
505 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
506 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
507 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
508 1 }
509
510 //*****************************************************************************************
511 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
512 //输入:发送的缓冲区,发送数据个数
513 //输出:无
514 //功能描述:CC1100发送一组数据
515 //*****************************************************************************************
516
517 void halRfSendPacket(INT8U *txBuffer, INT8U size)
518 {
519 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
520 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
521 1
522 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
523 1
524 1 // Wait for GDO0 to be set -> sync transmitted
525 1 while (!GDO0);
526 1 // Wait for GDO0 to be cleared -> end of packet
527 1 while (GDO0);
528 1 halSpiStrobe(CCxxx0_SFTX);
529 1 }
530
531
532 void setRxMode(void)
533 {
534 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
535 1 }
536 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
537 {
538 1 INT8U status[2];
539 1 INT8U packetLength;
540 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
541 1
542 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
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/19/2007 21:21:42 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 ds_reset(void)
576 {
577 1 char temp=1;
578 1 while(temp)
579 1 {
580 2 while(temp)
581 2 {
582 3 DQ=1;_nop_();_nop_();
583 3 DQ=0;
584 3 delay1(80);
585 3 DQ=1;
586 3 delay1(9);
587 3 temp=DQ;
588 3 }
589 2 delay1(64);
590 2 temp=~DQ;
591 2 }
592 1 DQ=1;
593 1 }
594 //*****************************************************************************************
595 void delay1( INT16U i)
596 {
597 1 for(;i>0;i--);
598 1 }
599 //*****************************************************************************************
600 void write_byte(INT8U value)
601 {
602 1 INT8U i;
603 1 for(i=8;i>0;i--)
604 1 {
605 2 DQ=1;_nop_();_nop_();
606 2 DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
607 2 DQ=value&0x01;
608 2 delay1(9);
609 2 value>>=1;
610 2 }
611 1 DQ=1;
C51 COMPILER V7.06 1100 12/19/2007 21:21:42 PAGE 11
612 1 delay1(1);
613 1 }
614 //*****************************************************************************************
615 INT8U read_byte(void)
616 {
617 1 INT8U i;
618 1 INT8U value1=0;
619 1 for(i=8;i>0;i--)
620 1 {
621 2 DQ=1;_nop_();_nop_();
622 2 value1>>=1;
623 2 DQ=0;
624 2 _nop_();_nop_();_nop_();_nop_();
625 2 DQ=1;
626 2 _nop_();_nop_();_nop_();_nop_();
627 2 if(DQ)
628 2 value1|=0x80;
629 2 delay1(9);
630 2 }
631 1 DQ=1;
632 1 return(value1);
633 1 }
634 //*****************************************************************************************
635 void read_temp()
636 {
637 1 ds_reset();
638 1 write_byte(0xcc);
639 1 write_byte(0xbe);
640 1 temp_data[0]=read_byte();
641 1 temp_data[1]=read_byte();
642 1 ds_reset();
643 1 write_byte(0xcc);
644 1 write_byte(0x44);
645 1 }
646 //*****************************************************************************************
647 void work_temp()
648 {
649 1 INT8U n=0;
650 1 if(temp_data[1]>127)
651 1 {
652 2 temp_data[1]=(256-temp_data[1]); //负值
653 2 temp_data[0]=(256-temp_data[0]);
654 2 n=1;
655 2 }
656 1 dispaly[6]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
657 1 dispaly[5]=dispaly[6]/100; //百位
658 1 dispaly[4]=dispaly[6]%100; //
659 1 dispaly[2]=dispaly[4]/10; //十位
660 1 dispaly[1]=dispaly[4]%10; //个位
661 1 switch (temp_data[0]&0x0f) //小数位
662 1 {
663 2 case 0x0f:dispaly[0]=9;break;
664 2 case 0x0e:dispaly[0]=9;break;
665 2 case 0x0d:dispaly[0]=8;break;
666 2 case 0x0c:dispaly[0]=8;break;
667 2 case 0x0b:dispaly[0]=7;break;
668 2 case 0x0a:dispaly[0]=6;break;
669 2 case 0x09:dispaly[0]=6;break;
670 2 case 0x08:dispaly[0]=5;break;
671 2 case 0x07:dispaly[0]=4;break;
672 2 case 0x06:dispaly[0]=4;break;
673 2 case 0x05:dispaly[0]=3;break;
C51 COMPILER V7.06 1100 12/19/2007 21:21:42 PAGE 12
674 2 case 0x04:dispaly[0]=3;break;
675 2 case 0x03:dispaly[0]=2;break;
676 2 case 0x02:dispaly[0]=1;break;
677 2 case 0x01:dispaly[0]=1;break;
678 2 case 0x00:dispaly[0]=1;break;
679 2 default:break;
680 2 }
681 1 if(n) //负值时显示aa,正直显示dd
682 1 {
683 2 dispaly[3]=0x11; //
684 2 }
685 1 else dispaly[3]=0x22;
686 1 }
687 //*****************************************************************************************
688 void disdignit()
689 {
690 1 char i;
691 1 // if(temp[0])
692 1 {
693 2 for(i=0;i<3;i++)
694 2 {
695 3 P0=0xC6;
696 3 led0=0;
697 3 delay1(40);
698 3 led0=1;
699 3 P0=seg[dispaly[0]];
700 3 led1=0;
701 3 delay1(40);
702 3 led1=1;
703 3 P0=seg1 [dispaly[1]];
704 3 led2=0;
705 3 delay1(40);
706 3 led2=1;
707 3 P0=seg[ dispaly[2]];
708 3 led3=0;
709 3 delay1(40);
710 3 led3=1;
711 3 }
712 2 }
713 1 }
714 void main(void)
715 {
716 1 INT8U leng =0;
717 1 INT8U tf =0;
718 1 INT8U TxBuf[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; // 8字节, 如果需要更长的数据包,请正确设置
719 1 INT8U RxBuf[8]={0};
720 1 CpuInit();
721 1 POWER_UP_RESET_CC1100();
722 1 halRfWriteRfSettings();
723 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
724 1 // halRfSendPacket(TxBuf,8); // Transmit Tx buffer data
725 1 delay(6000);
726 1 while(1)
727 1 {
728 2 read_temp();
729 2 work_temp();
730 2 delay1(500);
731 2 disdignit();
732 2 halRfSendPacket(dispaly,4);
733 2 // delay1(1000);
734 2 // leng=8;
735 2 // halRfSendPacket(TxBuf,leng); // Transmit Tx buffer data
C51 COMPILER V7.06 1100 12/19/2007 21:21:42 PAGE 13
736 2 }
737 1
738 1 }
739
740
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1338 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 73 38
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 + -