编程应该注意哪些?这是无线收发模块的接收程序!我有点看不明白.能不能给我讲一讲这个接收的过程。尤其是StartUART();time0sym();这两个程序的作用不太清楚!好心人给我讲讲吧!十分感谢<br />#include <reg52.h><br />#include <ABSACC.h><br />#include <intrins.h><br />#include <stdio.h><br />#define uint unsigned int //0 ~ 255<br />#define uchar unsigned char<br />/////////////////<br />#define BYTE_BIT0 0x01<br />#define BYTE_BIT1 0x02<br />#define BYTE_BIT2 0x04<br />#define BYTE_BIT3 0x08<br />#define BYTE_BIT4 0x10<br />#define BYTE_BIT5 0x20<br />#define BYTE_BIT6 0x40<br />#define BYTE_BIT7 0x80<br />////////////////<br />#define WC 0x00<br />#define RC 0x10<br />#define WTP 0x20<br />#define RTP 0x21<br />#define WTA 0x22<br />#define RTA 0x23<br />#define RRP 0x24<br />bdata unsigned char DATA_BUF;<br />#define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)<br />#define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)<br />sbit flag =DATA_BUF^7;<br />sbit flag1 =DATA_BUF^0;<br />#define TxRxBuf_Len 4<br />unsigned char TxRxBuffer[TxRxBuf_Len];<br />char temp[4];<br />uint count=1;<br />sbit TXEN=P1^0;<br />sbit TRX_CE=P3^2;<br />sbit PWR=P1^1;<br />sbit MISO=P1^6;<br />sbit MOSI=P1^5;<br />sbit SCK=P1^7;<br />sbit CSN=P1^3;<br />/////////////////////////////////////////////////////<br />sbit AM=P1^4;<br />sbit DR=P3^3;<br />sbit CD=P1^2;<br />///////////////////////////////////////////////////////<br /><br />/////////////////////////////////////////////<br />sbit led1=P2^1;<br />sbit led0=P2^0;<br />sbit led2=P2^2;<br />sbit led3=P2^3;<br />/////////////////////////////////////////////////////<br />uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0~~9段码<br />//uchar seg1[10]={0x02,0xf2,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08}; //0~~9段码<br />//RF寄存器配置//<br />unsigned char idata RFConf[11]=<br />{<br /> 0x00, //配置命令//<br /> 0x4c,0x0c,0x44,0x04,0x04,0xcc,0xcc,0xcc,0xcc,0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振<br />};<br />bit lcdbit;<br />///////////80us延时/////////////////<br />void Delay(uchar n)<br />{<br /> uint k;<br /> while(n--)<br /> for(k=0;k<8;k++);<br />}<br />void delay1(uint i)<br />{<br /> for(;i>0;i--); <br />}<br />///////////////<br />unsigned char SpiRead(void)<br />{<br /> unsigned char j;<br /> for (j=0;j<8;j++)<br /> {<br /> DATA_BUF=DATA_BUF<<1;<br /> SCK=1;<br /> if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节<br /> {<br /> DATA_BUF|=BYTE_BIT0;<br /> }<br /> else<br /> {<br /> DATA_BUF&=~BYTE_BIT0;<br /> }<br /> SCK=0;<br /> }<br /> return DATA_BUF;<br />}<br /><br />void SpiWrite(unsigned char send)<br />{<br /> unsigned char i;<br /> DATA_BUF=send;<br /> for (i=0;i<8;i++)<br /> {<br /> if (DATA7) //总是发送最高位<br /> {<br /> MOSI=1;<br /> }<br /> else<br /> {<br /> MOSI=0;<br /> }<br /> SCK=1;<br /> DATA_BUF=DATA_BUF<<1;<br /> SCK=0;<br /> }<br />}<br />////////////////初始化nRF905///////////////////<br />void nRF905Init(void)<br />{<br /> CSN=1; // Spi disable<br /> SCK=0; // Spi clock line init low<br /> DR=0; // Init DR for input<br /> AM=0; // Init AM for input<br /> CD=0; // Init CD for input<br /> PWR=1; // nRF905 power on<br /> TRX_CE=0; // Set nRF905 in standby mode<br /> TXEN=0; // set radio in Rx mode<br />}<br />////////初始化寄存器<br />void Config905(void)<br />{<br /> uchar i;<br /> CSN=0; // Spi enable for write a spi command<br /> //SpiWrite(WC); // Write config command写放配置命令<br /> for (i=0;i<11;i++) // Write configration words 写放配置字<br /> {<br /> SpiWrite(RFConf);<br /> }<br /> CSN=1; // Disable Spi<br />}<br />void SetRxMode(void)<br />{<br /> TXEN=0;<br /> TRX_CE=1;<br /> Delay(1); // delay for mode change(>=650us)<br />}<br /><br />unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready<br />{<br /> if (DR=1&&TRX_CE==1 && TXEN==0)<br /> {<br /> // Delay(50) ;<br /> return 1;<br /> }<br /> else<br /> {<br /> return 0;<br /> }<br />}<br />void RxPacket(void) //读数据<br />{<br /> uchar i;<br /> Delay(1);<br />// TRX_CE=0; // Set nRF905 in standby mode<br /> Delay(100);<br /> TRX_CE=0;<br /> CSN=0; // Spi enable for write a spi command<br /> Delay(1);<br /> SpiWrite(RRP);<br /> // Delay(10000);<br /> // Delay(10000); // Read payload command<br /> for (i = 0 ;i < 4 ;i++)<br /> { // Delay(10000);<br /> // Delay(10000);<br /> // Delay(10000);<br /> // Delay(10000); <br /> TxRxBuffer=SpiRead(); // Read data and save to buffer<br /> // Delay(10000);<br /> // Delay(10000);<br /> // Delay(10000); <br /> }<br /> CSN=1;<br /> Delay(10);<br /> // Delay(10);<br /> TRX_CE=1; <br />}<br />////////////////<br />void RX(void)<br />{<br /> SetRxMode(); // Set nRF905 in Rx mode<br /> //Delay(10000);<br /> while (CheckDR()==0);<br /> //Delay(10000);<br /> Delay(10);<br /> RxPacket();<br /> //Delay(10000); // Recive data by nRF905<br /> Delay(10);<br />}<br />void StartUART( void )<br />{ //波特率4800<br /> SCON = 0x50;<br /> TMOD = 0x20;<br /> TH1 = 0xFA;<br /> TL1 = 0xFA;<br /> PCON = 0x00;<br /> TR1 = 1;<br />}<br />void R_S_Byte(uchar R_Byte)<br />{ <br /> SBUF = R_Byte; <br /> while( TI == 0 ); //查询法<br /> TI = 0;<br /> <br />}<br /><br />void time0sym()<br />{<br /> <br /> TH0=0xE2 ; //重载计数初始值<br /> TL0=0x00 ;<br /> TR0=1;<br /> ET0=1;<br /> EA=1;<br /> TF0=0 ; //清中断 <br /><br />}<br />void time0_int() interrupt 1<br />{<br /><br /> if(TF0==1) //10ms中断<br /> {<br /> TF0=0 ; //清中断 <br /> TH0=0xE2 ; //重载计数初始值<br /> TL0=0x00 ;<br /> count=count+1 ;<br /> if(count==100) //1s<br /> { <br /> count=0; //每1秒清count ,重新开始等待1秒 <br /> }<br /> }<br />}<br />void main(void)<br />{<br /> //char i;<br /> StartUART();<br /> time0sym();<br /> nRF905Init();<br /> Config905();<br /> P0=0x00;<br /> while(1)<br /> {<br /> RX();<br /> Delay(10);<br /> CSN=0; <br />if(TxRxBuffer[0])<br />{ <br /> if(TxRxBuffer[0]==0x29)<br /> {<br /> // R_S_Byte(TxRxBuffer[0]); <br /> P0=seg[1];<br /> led0=1;led1=1;led2=1;led3=0;<br /> delay1(50);<br /> //led0=1;led1=1;led2=1;led3=1;<br /> }<br /> <br /> if(TxRxBuffer[0]==0x30)<br /> {<br /> // P0=0x00;<br /> // R_S_Byte(TxRxBuffer[0]); <br /> P0=seg[2];<br /> led0=1;led1=1;led2=0;led3=1;<br /> delay1(50);<br /> // led0=1;led1=1;led2=1;led3=1;<br /> }<br />}<br />}<br /> CSN=1;<br /> Delay(1);<br />}<br /><br /> |
|