|
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include <STM8S103F.h>
//#include <STM8S903K.h>
#include "COMM.h"
unsigned char FreqID =7;
unsigned char bSend=0;
unsigned char timeout=0;
/*初始化IO*/
void port_init()
{
//DDR寄存器设置方向 0输入 1输出
//PC3 PC4 PC6 PC7 PD2输出PC5 PD3输入
PC_DDR =0xD8;
PC_CR1 =0xD8;//推挽输出,PC5悬空输入
PC_CR2=0x00;
//PC_ODR=0XD8;
PA_DDR=0XFF;
PA_CR1=0XFF;
PA_CR2=0;
//PB4 PB5输出,PB4控制LED
PB_DDR =0xFF;
PB_CR1= 0xFF;
PB_CR2=0;
//PB_ODR=0XFF;
//PD2 YB30 SDI PD3 YB30 SDO PD4接外部P1蜂鸣器
PD_DDR = 0x14;
PD_CR1=0x14;
PD_CR2=0;
//其他IO 左边 P1 到P4 设置 成输入,右边P5到P8设置成输出
}
volatile unsigned char a=0;
/************************************************************************************
PC5中断函数,无线接收中断
*************************************************************************************/
@far @interrupt void YB30INT (void)
{
unsigned char dd,rsi;
int i=0;
PC_CR2=0x00; //关PC中断
if (bSend==1)
P5=1; //发送有中断,点LED
//CC_Idle();//新加测试 PA模块 老的和新的。
dd=CC_RdStatus(0x35); //读状态寄存器
if (dd==17) CC_ClrRx(); //清除接收缓冲区和接收错误相关标志
if (dd==22) CC_ClrTx(); //清除发送缓冲区和发送错误相关标志
dd=CC_RdStatus(0x3B)&0x7f;//CCxxx0_RXBYTES 读数据长度
if (dd==0)//V1.1 ?-ê?if (bSendOk==0) 长度 0
{
CC_RxOn();// 进入接收状态
TX=0;RX=1;
}
else //长度不为0
{
SerData[0]=0;
CC_RdPacket(); //读数据包
CC_RxOn();
if ((bRcvOk==1)&&(SerData[0]<62))
{
//复制数据,用于在主程序里显示和修改,SerData 用来在RF中断里判断
//memcpy(RFData,SerData,SerData[0]);
//xieyi_panduan();//解析协议
bRcvOk=0;
rsi = CC_RssiCh(Rssi);
//if ((bSend==0)&&(rsi<58)) //26 CC2500+PA 67
if (SerData[0]==10)
P5=1;
timeout=0;
}
}
//PC_CR2=0x20; //开PC5中断
}
void TXtest(void)
{
unsigned char n=0;
///发射的
P5=0;
CC_Init();
CC_Chan(227);
Delay_ms(20);
//如果是CC2500+PA+LNA 模块,把开关打到接收这边
RX=0;TX=1;
Delay_ms(5);
bSend =1;
PC_CR2=0X0;
CC_SendPacket(SerData,10);
while(!nIRQ)
{
if (n++>10)
break;
Delay_ms(2);
};
while(nIRQ)
{
if (n++>10)
break;
Delay_ms(2);
};
//发成功了,开关不接上
RX=0;TX=0;
//PC_CR2=0X20;
P5=1;
}
void RXtest(void)
{
//如果是2500+PA+LNA 模块,把开关打到接收这边来;
TX=0;RX=1;
//接收的
PC_CR2=0X20;
CC_RxOn();
Delay_ms(10);
//while(!nIRQ);
//while(nIRQ);
//CC_RdPacket();
// if (SerData[0]==5)
// P5=1;
//PC_CR2=0X20;
if (timeout++>3)
{
P5=0;
CC_Init(); //初始化无线 模块
P5=0;
//CC_Test();
CC_Chan(227); //设置频道
Delay_ms(1);
CC_RxOn();// Enable RX.
PC_CR2=0x20;
//EXTI_CR2=0x02;//下降沿触发
EXTI_CR1=0x20;
P5=0;
}
}
void main()
{
unsigned char i=0;
_asm("sim"); // 关全局中断
// CLK_CKDIVR=0x00; //16M
// WDTCON = 0X00; // 看门狗设置
//CLK_ICKR = 0X07; // 使用内部晶振, 8M crystal
port_init(); // IO 口初始化
//P5=1;//点LED
TX=0;
RX=1;
RX=0;
TX=1;
//Delay_ms(255);
//P5=0;
nSEL=0;
nSEL=1;
nSEL=0;
RF433_CS_UP;
RF433_CS_DN;
RF433_SPCK_UP;
RF433_SPCK_DN;
//#define RF433_MISO ((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& (AT91C_PIO_PA27))==(AT91C_PIO_PA27))//0x00010000
RF433_MOSI_UP;
RF433_MOSI_DN;
//TestSI4432();
CC_Init(); //初始化无线 模块
CC_Test();
CC_Chan(227); //设置频道
Delay_ms(10);
CC_RxOn();// Enable RX.
TX=0;RX=1;
//while(1);
PC_CR2=0x20;
EXTI_CR2=0x02;//下降沿触发
// EXTI_CR1=0x20;
//PC_CR2=0x10;//PC5中断悬浮输入
//EXTI_CR1=0x10;
//EXTI_CR1=0xff;//下降沿触发 PC口
//EXTI_CR2=0x02;//下降沿触发
P5=0;//关LED
_asm("rim");
// TXtest();
//CC_Idle();
while(1)
{
TXtest();
//CC_Cmd(0x33);
//CC_Idle();
//RXtest();
Delay_ms(50);
P5=0;
bSend =0;
}
}
void Delay_us(int t)
{
while(t--)
{
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
_asm("nop");
}
}
void Delay_ms(unsigned char time)
{
unsigned char i,k;
for(k = 0; k< time; k++)
{
for(i = 0; i<130; i++)
{
_asm("nop");
_asm("nop");
}
}
}
|
评分
-
查看全部评分
|