📄 fasong.h
字号:
#define max_rt 0x10
#define tx_ds 0x20
#define rx_dr 0x40
#define flush_tx 0xe1
#define flush_rx 0xe2
sbit ce=P2^1;
sbit sck=P2^2;
sbit miso=P2^3;
sbit csn=P2^4;
sbit mosi=P2^5;
sbit irq=P2^6;
// sbit key=P1^1;
//$$$$$$$$$$$$$$$$$$$$$$$$
unsigned int data send_date[1]={0x18};
unsigned int data receive_date[1];
//$$$$$$$$$$$$$$$$$$$$$$$
void write(uchar a)
{char i;
for(i=8;i>0;i--)
{a<<=1;
mosi=CY;
sck=1;;sck=0;
}
}
uchar read()
{char i;uchar a;
for(i=8;i>0;i--)
{a<<=1;
CY=miso;
sck=1;
a|=CY;
sck=0;
}
return(a);
}
void w_register(uchar addr,uchar com) //写寄存器
{sck=0;;csn=0;
write(addr);
write(com);
csn=1;
}
uchar r_register(uchar addr) //读寄存器
{char date;
sck=0;;csn=0;
write(addr);
date=read();
csn=1;
return(date);
}
void w_tx()
{char i;
sck=0;csn=0;
write(0xa0);
for(i=0;i<1;i++) //写tx_fifo
write(send_date[i]);
csn=1;
}
void r_rx()
{char i;
sck=0;csn=0;
write(0x61);
for(i=0;i<1;i++)
receive_date[i]=read();
csn=1;
}
void clr_tx()
{sck=0;csn=0;
write(flush_tx);
csn=1;
}
void clr_rx() //一般读完rx_fifo会自动清除,不必调用该函数
{sck=0;csn=0;
write(flush_rx);
csn=1;
}
void fasong()
{uchar i,read_data=0;
ce=0;//不发射???
//P1=P2=P3=P0=0xff;
w_register(0x20,0x0a); //设为发射机
read_data=r_register(0x00);//读配置寄存器
if(read_data!=0x0a)goto wait;//若没上电或不是发射状态则停止
w_register(0x21,0x01); //设置数据通道0自动应答允许
w_register(0x22,0x01); //设置接受数据通道0允许
w_register(0x31,0x01); //设置数据宽度为一个字节
read_data=r_register(0x07);//读状态寄存器
w_register(0x27,read_data); //写状态寄存器,当中断置一后,再写入一次1就会清中断
read_data=0;//清零
w_tx();//写发射寄存器
ce=1;//开始发射
while(irq);//没有中断时继续,有中断时停止
read_data=r_register(0x07);//读状态寄存器
P1=read_data;//赋值给P1
i=r_register(0x07);//读状态寄存器
w_register(0x27,read_data); //清中断
/* switch(i&0xf0) //判断中断信号屏蔽低字节
{case 0x10:while(1);break;
case 0x20 :r_rx();break;
case 0x40 :clr_tx();break;
default: break;
} */
wait:while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -