comparecof.c

来自「菜鸟,详细NRF24E1运用,程序,电路」· C语言 代码 · 共 200 行

C
200
字号
/******************************************************************
/                         头文件包含
*******************************************************************/

#include "reg24le1.h"
#include "comparecof.h"
/*******************************************************************
/
/软件延时函数,函数名称:delay()
/
*******************************************************************/
void delay(unsigned char x)
{
unsigned char di;
   for(;x>0;x--)
     for(di=120;di>0;di--)
	  {
	  ;
	  }

}

/*******************************************************************
/
/初始化I/O口的输入输出以及电平
/
********************************************************************/

void io_config()
{
P1DIR&=0XFE;                      /*设置P1.0为输出                 */
P10=0;

P0DIR|=0X01;
P00=0;

}

/********************************************************************
/
/配置模拟比较器
/
********************************************************************/

void compcof()
{
ADCCON1=(0x80|0x02);/*设置PWR位,设置模拟输入从0通道,参考输入从3通道*/
COMPCON|=0x05;      /*唤醒的电压高于0.5Vdd	                         */

}
/*******************************************************************
/
/LED灯闪烁的函数
/
********************************************************************/

void lightled()
{
LED=!LED;
delay(5000);
}
/********************************************************************
/
/串口初始化函数
/
*********************************************************************/

void uart_init()
{

	EA = 0;
	CLKCTRL = 0x28;			    /* nRF24LE1的主时钟采用 XCOSC 16MHz */  	
	CLKLFCTRL = 0x01; 		    /* RTC 时钟采用XCOSC 32.768kHz      */
		
	P0DIR &= 0xF7;				/* 配置P0.3 (TxD)为输出             */ 
  	P0DIR |= 0x10;     			/* 配置P0.4 (RxD)为输入             */ 	 
	S0CON = 0x50;  
   	PCON |= 0x80; 				/* 波特率倍增                       */
  	WDCON |= 0x80;   			/* 设置采用内部波特率发生器         */
		
    S0RELL = 0xF3;              /* 配置波特率为38400                */
  	S0RELH = 0x03;		   	 

}
/********************************************************************
/
/定时器0初始化
/
********************************************************************/

void t0_init()
{
TMOD=0X01;
TH0=(65536-ONESTEP)/256;
TL0=(65536-ONESTEP)%256;
ET0=1;
TR0=1;
}
/******************************************************************
/
/定时器中断服务函数
/
*******************************************************************/
int sleep=0;

void t0_service() interrupt 1	  /*定时10s就进入低功耗模式       */
{

 static char  num=0,s=0;
 TR0=0;
 TH0=(65536-ONESTEP)/256;
 TL0=(65536-ONESTEP)%256;
 num++;
 if(num==20)
 {
 num=0;
 s++;
 LED=!LED;
 puts("time left : ");
 putchar((10-s+'0'));
 putchar('\n');

 if(s==10)                       /*定时时间满10秒                */
 {sleep=1; 
  s=0;
 }
 }

if(sleep)                        /*设置nRF24LE1进入低功耗        */
{
sleep=0;
mcufallasleep(timeron);
}

TR0=1;
}
/*****************************************************************
/
/串口打印一个字符
/
*****************************************************************/

void putchar( unsigned char dat)
{	 
		S0BUF = dat;	
		while(!TI0);
        TI0 = 0;					
}
/****************************************************************
/
/串口发送一个字符串
/
*****************************************************************/
void puts( char *  s)
{
       while(*s!='\0')
	   {
	   putchar(*s);
	   s++;
	   }
}
/*****************************************************************
/
/配置nRF24LE1进入低功耗模式,输入参数:which为模式类型
/
*****************************************************************/

void mcufallasleep(char which)
{
OPMCON=0X02;
PWRDWN&=0XF8;	   
PWRDWN|=which;
}
/****************************************************************
/
/获取上一次低功耗模式类型,并利用串口打印相关信息
/
*****************************************************************/

void getwakeuptype()
{
char type=0;
type=PWRDWN&0x07;                    /*读取上一次低功耗模式     */
if(PWRDWN&0x20)
switch(type)
{
case 0x00:puts("power off   \n");break;
case 0x01:puts("deep sleep  \n");break;
case 0x02:puts("Memory retention, timer off   \n");break;
case 0x03:puts("Memory retention, timer on    \n");break;
case 0x04:puts("Register retention     \n");break;
case 0x07:puts("standby     \n");break;
}

putchar('\n');                      /*换行函数                  */

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?