IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 应广单片机 PMS150G 161 171 基础例子【sleep】 -> 正文阅读

[嵌入式]应广单片机 PMS150G 161 171 基础例子【sleep】

此例子可以测试sleep时候的功耗,测试的时候 要注意sleep退出时间,不能让其反复立马进去,要不然,不好测试。

?

?参考miniC编程助手测试例子,方便自己测试验证

//===========================================//
//					休眠
//主要介绍了省电模式和掉电模式
//省电模式介绍了用计数器唤醒和IO唤醒,
//	例中介绍了T16唤醒后且num自加超过100后退出休眠,即针对不是IO脚电平变化的唤醒条件的唤醒
//	IO唤醒的唤醒条件可参考掉电模式,其他不变
//掉电模式介绍了IO唤醒
//	例中介绍了IO脚电平变化后唤醒,即针对IO脚电平变化的唤醒条件的唤醒
//===========================================//
#include	"extern.h"

byte	CLKMD_BK;

//=======省电模式=========
byte	num;
word	reload_T16;

BIT     KEY	    :   PA.4;  
bit		LED		:	PA.3		//定义LED灯的引脚

void	Save_power(void)
{
	//======User can add code=====
	//进入省电模式前动作,如关灯、关计数器等
	//============================
	CLKMD_BK = CLKMD;					//保存休眠前的时钟
	num = 0;
	while(1)
	{
		$ CLKMD ILRC/1,En_IHRC,En_ILRC;	//系统时钟选择,是否启用IHRC,是否启用ILRC,(En_IHRC和En_ILRC不写为停用,写为启用)
										//系统时钟可选择IHRC/4, IHRC/16, IHRC/2, IHRC/8, ILRC/16, EOSC/4, IHRC/32, EOSC/2, IHRC/64, EOSC/1, EOSC/8, ILRC/4, ILRC/1
										//选择系统时钟为ILRC/1,启用IHLC和IHRC;(注:两个RC振荡器至少有一个开启,否则会出现宕机)
		CLKMD.En_IHRC = 0;				//关闭高频IHRC
		nop;
	//========设置T16定时,详情请参考T16=========
		$ T16M ILRC,/1,bit8;
		reload_T16 = 0;
		stt16 reload_T16;

		stopexe;						//进入省电模式,T16计时溢出时唤醒
		$ CLKMD IHRC/64,EN_IHRC,EN_ILRC;//选择系统时钟为IHRC/64,启用IHLC和IHRC;
		CLKMD.En_ILRC = 0;				//关闭低频ILRC
		nop;
	//=======编写唤醒条件=========
		//例如num自加超过100后唤醒,该方法针对不是IO脚电平变化的唤醒条件
		num++;
		if(num > 100)					//假如发生唤醒而且满足唤醒条件,就返回正常工作
		{								//否则停留在省电模式,继续休眠
			break;
		}
	}
	CLKMD = CLKMD_BK;					//恢复休眠前的时钟

	//======User can add code=====
	//唤醒后打开需要的动作,比如开灯、定时器等
	//============================							
}
//=======掉电模式=========
void	Power_down(void)
{
	//======User can add code=====
	//进入省电模式前动作,如关灯、关计数器等
	//============================

	CLKMD_BK = CLKMD;					//保存休眠前的时钟
	//PAC.0 = 0;PAPH.0 = 1;				//将PA0设置为输入上拉
	//PADIER = 0b0001_0001;				//将PA0设置为数字模式
	//休眠前需要切换低频ILRC用来防止唤醒失败
	$ CLKMD ILRC/1,En_IHRC,En_ILRC;		//系统时钟选择,是否启用IHRC,是否启用ILRC,(En_IHRC和En_ILRC不写为停用,写为启用)
										//系统时钟可选择IHRC/4, IHRC/16, IHRC/2, IHRC/8, ILRC/16, EOSC/4, IHRC/32, EOSC/2, IHRC/64, EOSC/1, EOSC/8, ILRC/4, ILRC/1
										//选择系统时钟为ILRC/1,启用IHLC和IHRC;(注:两个RC振荡器至少有一个开启,否则会出现宕机)
	CLKMD.En_IHRC = 0;					//关闭高频
	nop;
	while(1)
	{
		stopsys;						//进入断电模式
	//=======编写唤醒条件=========
		//例如PA0由高变低唤醒,该方法针对IO脚电平变化的唤醒条件
		if(!PA.0)						//假如发生唤醒而且检查OK,就返回正常工作
		{								//否则停留在断电模式
			break;
		}
	}
	$ CLKMD IHRC/64,EN_IHRC,EN_ILRC;	//选择系统时钟为IHRC/64,启用IHLC和IHRC;
	nop;

	CLKMD = CLKMD_BK;					//恢复休眠前的时钟

	//======User can add code=====
	//唤醒后打开需要的动作,比如开灯、定时器等
	//============================	
}

void	IO_Init(void)
{
	//----------------------------
	PA		=	0b0001_1000;
	PAC		=	0b0000_1000;	//1:输出   0:输入
	PAPH	=	0b0001_1001;	//1:加上拉 0:不加上拉
	PB		=	0b0000_0000;
	PBC		=	0b0000_0000;
	PBPH	=	0b0000_0000;

	PADIER	=	0b0001_0001;	//将PA4 PA0设置为数字模式
	PBDIER	=	0b0000_0000;	//1: 设置为数字模式  
  
		//单个IO设置
	//$ PA.0 out,high;	//PA0输出高
	//$ PA.3 out,low;		//PA3输出低
}
void	FPPA0 (void)
{
	.ADJUST_IC	SYSCLK=IHRC/16, IHRC=16MHz, VDD=5V;
   .delay 40000;

    IO_Init();
 	$ KEY in,pull;		//PA4输入上拉
	$ LED out,high;				//初始把灯点亮(高电平点灯)

	while (1)
	{
		//Save_power();					//省电模式休眠
		
		if(!KEY)  //KEY PA3 拉低进入Sleep模式,PA0拉低退出睡眠模式,方便测试Sleep功耗
	    {
			.delay 10000;   //.delay 1000000;  1000ms = 1s
			if(!KEY) 
			{
		        Power_down();					//掉电模式休眠

				//Save_power();					//省电模式休眠
		
				//$ LED toggle;
			}
		}

	}
}


void	Interrupt (void)
{
	pushaf;

	if (Intrq.T16)
	{	//	T16 Trig
		//	User can add code
		Intrq.T16	=	0;
		//...
	}

	popaf;
}

最小系统板子 测试电流,可惜我自己的万用表精度太差,无法体现出来ua级别 就不上图了

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:59:11  更:2021-09-07 11:01:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:41:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计