📄 接受._c
字号:
#include <iom8v.h>
#include <macros.h>
#include <stdio.h>
#define DDR_IN 0
#define DDR_OUT 1
#define PORT_SEL PORTB
#define PIN_SEL PINB
#define DDR_SEL DDRB
#define PORT_SDI PORTB
#define PIN_SDI PINB
#define DDR_SDI DDRB
#define PORT_SCK PORTB
#define PIN_SCK PINB
#define DDR_SCK DDRB
#define PORT_SDO PORTB
#define PIN_SDO PINB
#define DDR_SDO DDRB
#define PB7 7
#define PB6 6
#define RFXX_SCK 5
#define RFXX_SDO 4
#define RFXX_SDI 3
#define RFXX_SEL 2
#define RFXX_DATA 1
#define PB0 0
#define SEL_OUTPUT() DDR_SEL|=(1<<RFXX_SEL)
#define HI_SEL() PORT_SEL|=(1<<RFXX_SEL)
#define LOW_SEL() PORT_SEL&=~(1<<RFXX_SEL)
#define SDI_OUTPUT() DDR_SDI|=(1<<RFXX_SDI)
#define HI_SDI() PORT_SDI|=(1<<RFXX_SDI)
#define LOW_SDI() PORT_SDI&=~(1<<RFXX_SDI)
#define SDO_INPUT() DDR_SDO&=~(1<<RFXX_SDO)
#define SDO_HI() PIN_SDO&=(1<<RFXX_SDO)
#define SCK_OUTPUT() DDR_SCK|=(1<<RFXX_SCK)
#define HI_SCK() PORT_SCK|=(1<<RFXX_SCK)
#define LOW_SCK() PORT_SCK&=~(1<<RFXX_SCK)
#define baud 19200
#define fosc 8000000
#define uchar unsigned char
#define uint unsigned int
uchar RF_RXBUF[4];
uchar ch0,ch1,ch2,ch3; //j,k,l,m;
uint count1=0,count2=0,speed=50;
/*接受芯片端口初始化*/
void RFXX_PORT_INIT(void)
{
HI_SEL();
HI_SDI();
LOW_SCK();
SEL_OUTPUT();
SDI_OUTPUT();
SDO_INPUT();
SCK_OUTPUT();
}
/*接受芯片命令写入*/
void RFXX_WRT_CMD(uint aCmd)
{
uchar i;
uint temp;
LOW_SCK();
LOW_SEL();
for(i=0;i<16;i++)
{
temp<<=1;
if(SDO_HI())
{ temp|=0x0001; }
LOW_SCK();
if(aCmd&0x8000) HI_SDI();
else LOW_SDI();
HI_SCK();
aCmd<<=1;
}
LOW_SCK();
HI_SEL();
// return(temp);
}
/*接受数据*/
uchar RF01_RDFIFO(void)
{
uchar i,Result;
LOW_SCK();
LOW_SDI();
LOW_SEL();
for(i=0;i<16;i++)
{
HI_SCK();
HI_SCK();
LOW_SCK();
LOW_SCK();
}
Result=0;
for(i=0;i<8;i++)
{
Result<<=1;
if(SDO_HI())
{ Result|=1; }
HI_SCK();
HI_SCK();
LOW_SCK();
LOW_SCK();
}
HI_SEL();
return(Result);
}
/*字符输出函数*/
void Transmit(uchar Send_Data)
{
while (!(UCSRA & (1<<UDRE)));//判断是否发送完成
UDR=Send_Data;//发送数据
}
/*USART初始化*/
void uart_init(void)
{
UCSRA=0x00;
UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
UCSRC=(1<<URSEL)|0x06;//8bit,1stop
UBRRL=(fosc/baud/16-1)%256;//设置波特率寄存器低位字节
UBRRH=(fosc/baud/16-1)/256;//设置波特率寄存器高位字节
}
/*系统初始化*/
void init_main(void)
{
uart_init();
DDRC|=0x30; //PORTC4,PORTC5输出高电平
PORTC|=0x30;
DDRB|=0x03; //PORTB0,PORTB1输出高电平
PORTB|=0x03;
DDRD|=0xE0; //d
RFXX_PORT_INIT();
RFXX_WRT_CMD(0x0000);
RFXX_WRT_CMD(0x998A); //915BAND,134KHZ,998A
RFXX_WRT_CMD(0xA7D0); //915MHZ
RFXX_WRT_CMD(0xC847); //4.8kbps,47
RFXX_WRT_CMD(0xC69B); //AFC setting
RFXX_WRT_CMD(0xC42C); //Clowck recovery manuel control,Digital filter,DQD=4
RFXX_WRT_CMD(0xC240); //output 1.66MHz
RFXX_WRT_CMD(0xC080);
RFXX_WRT_CMD(0xCE88); //
RFXX_WRT_CMD(0xCE8B); //use FIFO
RFXX_WRT_CMD(0xC081); //open RX
DDRB|=(1<<RFXX_DATA);
DDRD&=~(1<<2);
MCUCR=0x00;
GICR=0x00;
}
/*延时*/
void Delay_ms(uchar amS)
{
uchar i,p;
for(i=0;i<amS;i++)
for(p=0;p<200;p++)
;
}
/*主程序*/
void main(void)
{
uint i,p,q,counter=0,temp;
for(p=0;p<10000;p++)
for(q=0;q<123;q++)
;
init_main();
i=0;
while(1)
{
while(!(PIND&(1<<2)))
RF_RXBUF[i++]=RF01_RDFIFO();//read FIFO data
if(i==5) //更新数据
{
i=0;
RFXX_WRT_CMD(0xCE88);//reset FIFO for next frame recognition
RFXX_WRT_CMD(0xCE8B);
ch0=RF_RXBUF[0];
ch1=RF_RXBUF[1];
ch2=RF_RXBUF[2];
ch3=RF_RXBUF[3];
Transmit(ch0);
Transmit(ch1);
Transmit(ch2);
Transmit(ch3);
for(p=0;p<55;p++)
for(q=0;q<123;q++)
;
}
count1++;
if(count1==6)
{
PORTB^=0x01;
count1=0;
count2++;
if(count2==760) //20ms
{
PORTB^=0x02;
count2=0;
}
if(count2<38) //1ms
{
PORTD|=0xE0;
}
else
{
temp=count2/3;
if(temp<ch0) PORTD|=0x20;
else PORTD&=~0x20;
if(temp<ch1) PORTD|=0x40;
else PORTD&=~0x40;
if(temp<ch3) PORTD|=0x80;
else PORTD&=~0x80;
}
speed++;
if(speed>255)
{
speed=0;
PORTC&=~0x10;
}
else if(speed<ch2)
{ PORTC|=0x10;}
else
{ PORTC&=~0x10; }
}
}//while1
}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -