📄 main.c
字号:
TH0=0Xac;
TL0=0X95;
TR0=1;
}
//**********************************************************
void Send_ok(unsigned char key)
{
unsigned char i;
ES=0;
TX_EN=1;
//Delay1msa(5);
for(i=0;i<8;i++)
{
SBUF = 0x88; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
SBUF = 0xff; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
SBUF = key; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
SBUF = key; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
}
if(key_tem==0x02)
{
wring_send_times--;
if(wring_send_times==0)
{
key_tem=0x01;
}
}
else
{
key_tem=0x01;
}
TX_EN=0;
//Delay1msa(4);
ES=1;
}
/******************************************************************
* 名称:UART_SendByte
* 功能:向串口发送字节数据。
* 入口参数:dat 待发送的数据
* 出口参数:无
******************************************************************
void UART_SendByte(uint8 dat)
{ SBUF = dat; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
}
/******************************************************************
* 名称:UART_SendCode
* 功能:读取FLASH中的数据,并发送到串口。
* 入口参数:addr 读取的起始地址
* no 读取的数据个数
* 出口参数:无
******************************************************************
void UART_SendCode(uint16 addr, uint16 no)
{ uint8 code *readp;
readp = addr;
for(; no>0; no--)
{ UART_SendByte(*readp++); // 读取数据并发送
}
}
*/
void flash_led(unsigned char j )
{
char i;
for(i=0;i<j;i++)
{
LED=0;
Delay1ms(50);
LED=1;
Delay1ms(50);
}
LED=1;
}
//***************************************************************
void flash_beep(unsigned char j )
{
char i;
beep_delay++;
if(beep_delay>40000)
{
beep_delay=0;
for(i=0;i<j;i++)
{
BEEP=0;
Delay1ms(60);
BEEP=1;
Delay1ms(60);
}
}
BEEP=0;
}
//******************************************************************
//**********************************************************
void Setok(void)
{
ES=0;
SBUF ='O'; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
SBUF = 'K'; // 发送数据
while(0==TI); // 等待发送完毕
TI = 0; // 清除发送标志
ES=1;
}
//**************************************************************
void main(void)
{
unsigned char Link_ok=0,j,CS_state=0;
// unsigned int xxx;
ports_init();
BEEP=0;
if(ISP)
{
user_uart_init();//用户串口初始化
watchdog_init();//初始化看门狗
}
else
{
uart_init(); //进入ISP模式
FLASH_WriteByte(0xc04, 0);
}
osc_init();
rtc_init();
EA=1;
ES=1;
CS=0;
TX_EN=0; //接收状态
PWR =1;
//rtc_start();
LED=0;
Delay100ms(2);
LED=1;
if((FLASH_ReadByte(0XC05)==0x55)&(FLASH_ReadByte(0XC06)==0xaa))//初始化模块的ID
{
EA=0;
ADDR=FLASH_ReadByte(0XC04);
EA=1;
//FLASH_WriteByte(0xc04, 0);
}
else
{
ADDR=0;
EA=0;
FLASH_WriteByte(0xc04, 0);
FLASH_WriteByte(0xc05, 0x55);
FLASH_WriteByte(0xc06, 0xAA);
EA=1;
}
//ADDR=2;
while(1)
{
if(beep_flg)
{
//BEEP=1;
flash_beep(3);
}
if(ISP)
{
watchdog_start();
if(!KEY){beep_flg=0;wring_send_times=3; key_tem=0x02; LED=0; Delay100ms(2); LED=!LED;LED=0; Delay100ms(2); LED=!LED;}//有键按下
watchdog_feed();
if(rxok)
{
rxok=0;
xxxx=cal_crc( RXtem,4);
/*SBUF=xxxx>>8;
while(!TI);
TI=0;
SBUF=xxxx;
while(!TI);
TI=0;*/
if(xxxx==CRC.intX)//crc交验通过
{
if(RX_BEEP==0x33)
{
beep_delay=40000;
beep_flg=1;
}
Send_ok(key_tem);
flash_led(3);
i=0;
LED=1;
Link_ok=1;
watchdog_feed();
PWR =0;//关
}
}
if(set_ok)//设置模块的ID
{
watchdog_feed();
set_ok=0;
Send_ok(key_tem);
watchdog_feed();
EA=0;
FLASH_WriteByte(0xc04,RX_addr); //存入新ID
EA=1;
ADDR=RX_addr;
LED=0;
flash_led(5);
i=0;
LED=1;
Link_ok=1;
watchdog_feed();
}
rtc_start();
switch(CS_state)
{
case 0:
CS=0;
if(T_flag)
{
watchdog_feed();
rtc_stop();
T_flag=0;
if(i>=2)
{
PWR =1;
}
i++;
if(i>3)
{
i=0;
watchdog_feed();
if(Link_ok)
{
Link_ok=0;
watchdog_feed();
}
else
{
LED=0;
Delay1ms(50);
LED=1;
j++;
watchdog_feed();
CS_state=1;
if(j>5)
{
PWR =0;
j=0;
DIVM =0x00;
watchdog_feed();
power_mode(POWER_TOTALPOWERDOWN);//休眠
}
}
}
}
break;
case 1:
CS=1;
if(T_flag)
{ // PWR =1;
watchdog_feed();
rtc_stop();
T_flag=0;
if(i>=2)
{
PWR =1;
}
i++;
if(i>3)
{
i=0;
watchdog_feed();
if(Link_ok)
{
Link_ok=0;
watchdog_feed();
}
else
{
LED=0;
Delay1ms(50);
LED=1;
j++;
watchdog_feed();
CS_state=0;
if(j>5)
{
PWR =0;
j=0;
DIVM =0x00;
watchdog_feed();
power_mode(POWER_TOTALPOWERDOWN);//休眠
}
}
}
}
break;
default:
CS_state=0;
break;
}//end swtich
}
else
{
LED=!LED;
Delay100ms(10);
if(set_ok)//设置模块的ID
{
watchdog_feed();
set_ok=0;
EA=0;
FLASH_WriteByte(0xc04,RX_addr); //存入新ID
EA=1;
ADDR=RX_addr;
LED=0;
flash_led(4);
i=0;
LED=1;
Link_ok=1;
watchdog_feed();
Setok();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -