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 + -
显示快捷键?