//*******************************************免责声明*******************************************//
/*无锡矽杰微电子有限公司(简称:无锡矽杰微)保留关于该例程可靠性、功能和设计方面的改进作进一步说明的权利。
由于使用本例程中的信息或内容而导致的直接,间接,特别附带结果的损害,无锡矽杰微没有义务负责。
本例程中代码的应用仅仅是用来做功能演示,本公司不保证这些代码没有更深入的测试就能适用。
本例程中使用的软件,都是依据授权或保密合约所合法提供的,并且只能在这些合约的许可条件下使用或者复制。
无锡矽杰微的产品不是专门设计来应用于生命维持的用具,装置或者系统。无锡矽杰微的产品不支持而且禁止在这些方面的应用。
本例程内容如有变动恕不另作通知,具体更新信息,请参考公司官方网站www.xjmcu.com。*/
//===================================================================================//
//主频:8M/4T
//;IDLE睡眠唤醒-DEMO功能说明:
//;1)低速模式下,TCC唤醒IDEL
//;2)低速模式下,T1/PWM唤醒IDEL
//;2)RTC定时唤醒(不受选型里clock的影响),唤醒IDEL
//===================================================================================//
//==============================================================================//
//头文件 运用头文件 通用寄存器定义文件
//==============================================================================//
#include "XC8P8508.h"
#include "XJ_8508Define.h"
//===================================//
//===================================//
//初始化RAM:10H~3FH
//===================================//
void file_clrRam()
{
for(RSR=0x90;RSR<0xFF;RSR++) //清零 BANK0 RAM IAR-R0,RSR-R4
{IAR = 0;}
IAR = 0;
}
//===================================//
//端口初始化
//===================================//
void file_init(void)
{
CONTW(0x02); //TCC 8分频
TCC = 6; //1/2 * 8 * (256-6) = 1000us 公式:1/IRC频率 * 预分频 * (256-初值)
PORT5 = 0; //P5口输出低
PORT6 = 0; //P6口输出低
PORT7 = 0; //P7口输出低
IOCP_W(P5CR,0x08); //P5口设为输出
IOCP_W(P6CR,0x08); //P6口设为输出
IOCP_W(P7CR,0x00); //P7口设为输出
IOCP_W(PHDCR0,0xff); //Bit5-bit4:P71-P70 下拉控制位 Bit1-bit0:P71-P70上拉控制位
IOCP_W(PHDCR1,0xf7); //端口上下拉控制寄存器1:0使能,1禁止 bit7-bit4:P67-P64下拉;bit3-bit0:P53-P50上拉
IOCP_W(PHDCR2,0xff); //端口上下拉控制寄存器2:0使能,1禁止 bit6-bit4:P56-P54下拉;bit3-bit0:P57-P54上拉
IOCP_W(PDCR,0xff); //端口下拉控制寄存器 :0使能,1禁止 bit7-bit4:P63-P60下拉,bit3-bit0:P53-P50下拉
IOCP_W(P6ODCR,0x00);
IOCP_W(P6PHCR,0xf7); //P6端口上拉控制寄存器 :0使能,1禁止 bit7-bit0:P67-P60上拉
IOCP_W(WDTCR,0x00); //WDT 使能控制寄存器
IOCP_W(IMR,0x01); //中断使能控制寄存器
ISR = 0x0; //清TC0中断标志位
}
//===================================//
//;模块功能设置
//===================================//
void file_project_init(void)
{
}
//===================================//
//中断服务程序
//===================================//
void int_isr(void) __interrupt
{
__asm__("org 0x08"); //中断入口地址
PUSH(_A_BUFF,_R3_BUFF); //中断入栈保护
//=========Tcc中断程序===============//
if(TCIF) //判断TCIF是否为1
{
TCC += 0x06; //1/2 * 8 * (256-6) = 1000us 公式:1/IRC频率 * 预分频 * (256-初值)
ISR = 0xfe; //清TC0中断标志位
PORT6^= 0X01; //P61口翻转
}
//===============中断程序===============//
POP(_A_BUFF,_R3_BUFF); //中断出栈保护恢复
}
//------------------------------------------------------------------
//低速模式下,TCC唤醒IDEL 38.68ms唤醒一次-仿真
//TCC定时唤醒时间=TCC*TCC分频*(1/低速RC时钟)=256*2*(1/低速RC时钟)
//------------------------------------------------------------------
void file_tcc_wakeIDEL_set()
{
CONTW(0X00); //预分频器分给TCC 07;预分频器分给WDT 32.768ms
NOP();
NOP();
TCC=0; //TCC定时唤醒时间=TCC*TCC分频*(1/低速RC时钟)=256*2*(1/低速RC时钟)
IDLE=1; //1:系统执行 SLEEP 指令时进入空闲模式,系统时钟正常工作
TCCCKS=1; //TCC 时钟源选择,1:选择系统时钟
TCCWE=1; //1:TCC唤醒使能,可唤醒空闲模式,RTC 模式下可唤醒睡眠以及空闲模式
CLKMD=1; //1:系统时钟使用低速 RC 振荡器时钟
STPHX=1; //1:停止高速时钟,包括 IRC 和晶振振荡器时钟(不包括 RTC 时钟)
}
void file_tcc_exitIDEL_set()//;退出IDEL设置
{
IDLE=0; //0:系统执行 SLEEP 指令时进入睡眠模式
TCCCKS=0; //TCC 时钟源选择,0:选择指令周期时钟
TCCWE=0; //0:TCC 唤醒禁止
STPHX=0; //0:高速时钟正常工作
CLKMD=0; //0:系统时钟使用高速 IRC 或者晶振振荡器时钟
}
//------------------------------------------------------------------
//低速模式下,T1/PWM唤醒IDEL 38.68ms唤醒一次-仿真
//T1/PWM定时唤醒时间=PRD*T1预分频*(1/低速RC时钟)=255*2*(1/低速RC时钟)
//------------------------------------------------------------------
void file_pwm_wakeIDEL_set()
{
PWM0CON = 0x88; //pwm=255*2(分频)*(1/低速RC时钟)=38ms PWM控制寄存器 T1EN PWM3EN PWM2EN PWM1EN T1PTEN T1PSR<2> T1PSR<1> T1PSR<0>
IOCP_W(PRDL0,255); //PWM0周期低位寄存器
IOCP_W(PRDCH0,0); //Bit<7:4>:PRD0<11:8>-PWM0 周期寄存器高四位 Bit<3:0>:PDC0<11:8>-PWM0 占空比寄存器高四位
NOP();
NOP();
IDLE=1; //1:系统执行 SLEEP 指令时进入空闲模式,系统时钟正常工作
PWMWE=1; //1:PWM 唤醒使能,可唤醒空闲模式
PWM0CKS=1; //1:选择系统时钟Fosc
CLKMD=1; //1:系统时钟使用低速 RC 振荡器时钟
STPHX=1; //1:停止高速时钟,包括 IRC 和晶振振荡器时钟(不包括 RTC 时钟)
}
void file_pwm_exitIDEL_set()//退出IDEL设置
{
IDLE=0; //系统执行 SLEEP 指令时进入睡眠模式
PWM0CKS=0; //0:选择指令周期时钟
PWMWE=0; //0:PWM 唤醒禁止
STPHX=0; //0:高速时钟正常工作
CLKMD=0; //0:系统时钟使用高速 IRC 或者晶振振荡器时钟
}
//------------------------------------------------------------------
//RTC定时唤醒(不受选型里clock的影响)
//RTC定时唤醒时间T = (1/32.768KHz)*4Clock*32*256 =1s
//直接RTC唤醒,不进IDLE,功耗13uA@5v;8.0uA@4.2v;5.8uA@3.7v;
//------------------------------------------------------------------
void file_RTC_wakeIDEL_set()
{
CONTW(0X84); //设置TCC预分频1:2,bit7:RTCS使0x84;bit7=1:选择外部晶振时钟(LXT的4分频)
TCC=0; //定时中断设置T = (1/32.768KHz)*4Clock*32*256 = 1s
NOP();
//IDLE=1; //1:系统执行 SLEEP 指令时进入空闲模式,系统时钟正常工作
//TCCCKS=1; //TCC 时钟源选择,1:选择系统时钟
TCCWE=1; //1:TCC唤醒使能,可唤醒空闲模式,RTC 模式下可唤醒睡眠以及空闲模式
//CLKMD=1; //1:系统时钟使用低速 RC 振荡器时钟
//STPHX=1; //1:停止高速时钟,包括 IRC 和晶振振荡器时钟(不包括 RTC 时钟)
}
void file_RTC_exitIDEL_set()
{
//IDLE=0; //0:系统执行 SLEEP 指令时进入睡眠模式
//TCCCKS=0; //TCC 时钟源选择,0:选择指令周期时钟
TCCWE=0; //0:TCC 唤醒禁止
//STPHX=0; //0:高速时钟正常工作
//CLKMD=0; //0:系统时钟使用高速 IRC 或者晶振振荡器时钟
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//***************睡眠程序*****************
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void file_IDLEWake_slep()
{
//for(reg_sleep_cnt=0;reg_sleep_cnt<1;reg_sleep_cnt++)
//{
DI();
CWDT();
//----------------------------------------------------------
//file_tcc_wakeIDEL_set(); //低速模式下,tcc唤醒IDEL 5V供电,12k左右,412ms唤醒
// file_pwm_wakeIDEL_set(); //低速模式下,T1/PWM唤醒IDEL 377.8ms唤醒
file_RTC_wakeIDEL_set(); //RTC唤醒IDEL, 62.5*10=625ms唤醒一次
//----------------------------------------------------------
//Slep_Star:
SLEEP();
NOP();
NOP();
//----------------------------------------------------------
//file_tcc_exitIDEL_set(); //低速模式下,tcc唤醒IDEL
//file_pwm_exitIDEL_set(); //低速模式下,T1/PWM唤醒IDEL
file_RTC_exitIDEL_set(); //RTC唤醒IDEL
//----------------------------------------------------------
//}
reg_sleep_cnt = 0;
io_led2Out=1;
NOP();
NOP();
io_led2Out=0;
}
//===================================//
//MAIN主程序
//===================================//
void main()
{
file_clrRam(); //清RAM
file_init(); //io寄存器初始化
file_project_init(); //程序所需功能设置
EI(); //打开总中断
while(1)
{
file_IDLEWake_slep(); //IDLE模式唤醒
NOP();
NOP();
NOP();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
XC8P8508_Demo_v1.1.zip
共208个文件
asm:26个
lst:26个
h:19个
需积分: 0 0 下载量 112 浏览量
2023-07-20
23:38:10
上传
评论
收藏 1.27MB ZIP 举报
温馨提示
XC8P8508_Demo_v1.1.zip
资源推荐
资源详情
资源评论
收起资源包目录
XC8P8508_Demo_v1.1.zip (208个子文件)
ALLREG.asm 33KB
XC8P8508-IDLE.asm 27KB
ALLREG.asm 26KB
XC8P8508-IDLE.asm 25KB
FILE_SLEEP.asm 24KB
XC8P8508-SLEEP.asm 23KB
XC8P8508-PWM.asm 23KB
XC8P8508-WDT.asm 23KB
XC8P8508-PWM.asm 22KB
XC8P8508-LVD.asm 20KB
XC8P8508-WDT.asm 20KB
XC8P8508-INTERRUPT.asm 19KB
XC8P8508-LVD.asm 17KB
XC8P8508-Interrupt.asm 17KB
XC8P8508-LVD.asm 16KB
XC8P8508-RTC.asm 16KB
XC8P8508-LVD.asm 12KB
XC8P8508-RTC.asm 12KB
file_SLEEP.asm 10KB
file_SLEEP.asm 10KB
XC8P8508-IDLE.asm 9KB
XC8P8508-Interrupt.asm 9KB
XC8P8508-PWM.asm 8KB
XC8P8508-LVD.asm 6KB
XC8P8508-WDT.asm 5KB
XC8P8508-RTC.asm 5KB
Build.bat 282B
Build.bat 280B
Build.bat 278B
Build.bat 274B
Build.bat 269B
Build.bat 260B
Build.bat 252B
Build.bat 252B
Build.bat 252B
XC8P8508-IDLE.c 8KB
XC8P8508-Interrupt.c 7KB
XC8P8508-PWM.c 6KB
ALLREG.c 6KB
file_sleep.c 6KB
XC8P8508-WDT.c 5KB
XC8P8508-LVD.c 5KB
XC8P8508-RTC.c 4KB
XC8P8508-LVD.c 4KB
ALLREG.cod 9KB
XC8P8508-IDLE.cod 9KB
XC8P8508-SLEEP.cod 9KB
XC8P8508-WDT.cod 9KB
XC8P8508-PWM.cod 8KB
XC8P8508-LVD.cod 8KB
XC8P8508-Interrupt.cod 8KB
XC8P8508-LVD.cod 7KB
XC8P8508-RTC.cod 7KB
XC8P8508-SLEEP.cof 10KB
XC8P8508-IDLE.cof 10KB
XC8P8508-WDT.cof 10KB
ALLREG.cof 10KB
XC8P8508-LVD.cof 9KB
XC8P8508-Interrupt.cof 9KB
XC8P8508-PWM.cof 9KB
XC8P8508-LVD.cof 8KB
XC8P8508-RTC.cof 8KB
ALLREG.cofv 48KB
XC8P8508-SLEEP.cofv 45KB
XC8P8508-IDLE.cofv 45KB
XC8P8508-WDT.cofv 43KB
XC8P8508-PWM.cofv 41KB
XC8P8508-LVD.cofv 41KB
XC8P8508-Interrupt.cofv 39KB
XC8P8508-LVD.cofv 32KB
XC8P8508-RTC.cofv 32KB
XC8P8508-LVD.err 0B
ALLREG.err 0B
XC8P8508-RTC.err 0B
XC8P8508-PWM.err 0B
XC8P8508-IDLE.err 0B
XC8P8508-LVD.err 0B
FILE_SLEEP.err 0B
XC8P8508-WDT.err 0B
XC8P8508-INTERRUPT.err 0B
XC8P8508.h 25KB
XC8P8508.h 25KB
XC8P8508.h 25KB
XJ_8508Define.h 4KB
XJ_8508Define.h 4KB
XJ_8508Define.h 4KB
XJ_8508Define.h 3KB
XJ_8508DEFINE.H 3KB
XJ_8508Define.h 3KB
XJ_8508Define.h 3KB
XJ_8508Define.h 3KB
XJ_8508Define.h 3KB
XJ_8508Define.h 3KB
XJ_8508Define.h 2KB
XJ_8508Define.h 2KB
XJ_8508Define.h 2KB
XJ_8508Define.h 2KB
XJ_8508Define.h 2KB
XJ_8508Define.h 2KB
ALLREG.hex 1KB
共 208 条
- 1
- 2
- 3
资源评论
小安504
- 粉丝: 107
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240509_034911_com.tencent.mtt.jpg
- 基于python实现的医学影像体脂分割+源代码+文档说明(课程设计)
- 基于python实现的医学影像(MIR, CT )图像分割源码+文档说明(高分课程设计)
- 基于python+JavaScript实现的医学影像分割+源代码+文档说明+截图演示+数据(高分毕业设计)
- 基于U-net+pytorch实现的医学影像分割python源码+文档说明+数据+界面截图+博客介绍
- 课程设计-基于Pytorch实现MNIST数据集的手写数字识别源码+数据(Gui界面)+文档说明+模型
- 软件开发国家标准.xls
- pytorch-CNN-SBATM-ubuntudemo
- matplotlibdemo
- pytorch-CNN-dht11温湿度传感器笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功