山 东 省 应 用 物 联 网 设 计 大 赛
//关闭LED3 LED3=1; //关闭LED4 LED4=1; }
/*********************** *串口初始化 *返回参数 无
***********************/ void initUARTtest(void) {
//晶振
CLKCONCMD &= ~0x40; //等待晶振稳定
while(!(SLEEPSTA & 0x40)); //TICHSPD128分频,CLKSPD不分频 CLKCONCMD &= ~0x47; //关闭不用的RC振荡器 SLEEPCMD |= 0x04;
//位置1 P0口 PERCFG = 0x00;
//P0用作串口 P0SEL = 0x3c;
//UART方式 U0CSR |= 0x80;
//baud_e U0GCR |= 10;
42
山 东 省 应 用 物 联 网 设 计 大 赛
//波特率设为57600 U0BAUD |= 216;
// UTX0IF = 1;
UTX0IF = 0; //UART0 TX中断标志初始置位0
//允许接收 U0CSR |= 0X40; //开总中断,接收中断 IEN0 |= 0x84; }
/**************************************************************** *函数功能 :串口接收一个字符 *入口参数 : 无 *返 回 值 :无
*说 明 :接收完成后打开接收
****************************************************************/
//串口中断,串口接收一个字符 #pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) {
//清中断标志
URX1IF = 0;
temp = U0DBUF;
Recdata[0]=temp; }
43
山 东 省 应 用 物 联 网 设 计 大 赛
/*************************************************/
//向串口发送数据
void UartTX_Send_String(unsigned char *Data,int len) { int j;
for(j=0;j U0DBUF = *Data++; while(UTX0IF == 0); UTX0IF = 0; } } void rf_init() { //硬件CRC以及AUTO_ACK使能 FRMCTRL0 |= (0x20 | 0x40); /* AUTO_ACK | AUTO_CRC */ //设置TX抗混叠过滤器以获得合适的带宽 TXFILTCFG = 0x09; //调整AGC目标值 AGCCTRL1 = 0x15; //获得最佳的EVM FSCAL1 = 0x00; // RXPKTDONE 中断位使能 RFIRQM0 |= (1<<6); 44 山 东 省 应 用 物 联 网 设 计 大 赛 // RF 中断使能 IEN2 |= (1<<0); //开中断 EA = 1; //信道选择,选择11信道 FREQCTRL = 0x0d; //目标地址过滤期间使用的短地址 SHORT_ADDR0 = 0x05; SHORT_ADDR1 = 0x00; //目标地址过滤期间使用的PANID PAN_ID0 = 0x22; PAN_ID1 = 0x00; //清除RXFIFO缓冲区并复位解调器 RFST = 0xed; //为RX使能并校准频率合成器 RFST = 0xe3; //禁止帧过滤 FRMFILT0 &= ~(1<<0); } #pragma vector=RF_VECTOR __interrupt void rf_isr(void) { unsigned char i; //关中断 EA = 0; 45 山 东 省 应 用 物 联 网 设 计 大 赛 //接收帧结束 if (RFIRQF0 & (1<<6)) { //接收帧长度 //将接收的数据写入buf中 for (i = 0; i < len; i++) len = RFD; len &= 0x7f; { buf[i] = RFD; Delay(200); } // 清RF中断 S1CON = 0; //清 RXPKTDONE中断 RFIRQF0 &= ~(1<<6); //LED2等状态改变 LED2 = ~LED2; // UartTX_Send_String(buf,len-3); //Uart0SendString(buf); } //Delay(200); EA = 1; if((buf[0]+buf[1]+buf[2]==buf[3]) && (buf[1]==mac[1] && buf[2]==mac[2])) //如果校验正确且密钥对 { 46