完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
//CC2530的休眠和低功耗
/**************************************************************************** * 文 件 名: main.c * 描 述: LED1闪烁3次后进入睡眠状态,通过按下按键OK产生外部中断进行唤醒 ****************************************************************************/ #include typedef unsigned char uchar; typedef unsigned int uint; #define LED1 P1_0 //P1_0口控制LED1, #define LED2 P1_1 //P1_1表示芯片睡眠状态 #define KEY1 P0_7 //P0_7=OK按键 /**************************************************************************** * 名 称: DelayMS() * 功 能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M * 入口参数: msec 延时参数,值越大,延时越久 * 出口参数: 无 ****************************************************************************/ void DelayMS(uint msec) { uint i,j; for (i=0; i } /**************************************************************************** * 名 称: InitLed() * 功 能: 设置LED灯相应的IO口 * 入口参数: 无 * 出口参数: 无 ****************************************************************************/ void InitLed(void) { P1DIR |= 0x03; //P1.0定义为输出口 LED1 = 1; //LED1灯上电默认为熄灭 LED2=0; } /**************************************************************************** * 名 称: InitKey() * 功 能: 设置KEY相应的IO口,采用中断方式 * 入口参数: 无 * 出口参数: 无 ****************************************************************************/ void InitKey() { P0IEN |= 0x80; // P0.7 设置为中断方式 1:中断使能 PICTL |= 0x80; //下降沿触发 IEN1 |= 0x20; //允许P0口中断; P0IFG = 0x00; //初始化中断标志位 EA = 1; //打开总中断 } /**************************************************************************** * 名 称: SysPowerMode() * 功 能: 设置系统工作模式 * 入口参数: mode等于0为PM0 1为PM1 2为PM2 3为PM3 * 出口参数: 无 ****************************************************************************/ void SysPowerMode(uchar mode) { if(mode > 0 && mode < 4) { SLEEPCMD |= mode; //设置系统睡眠模式 PCON = 0x01; //进入睡眠模式 ,通过中断唤醒 } else PCON = 0x00; //主动/空闲模 通过中断唤醒系统 } /**************************************************************************** * 名 称: P0_ISR(void) 中断处理函数 * 描 述: #pragma vector = 中断向量,紧接着是中断处理程序 ****************************************************************************/ #pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { if( (P0IFG & 0X80) > 0) { P0IFG = 0; //清标志位 } P0IF = 0; //清中断 SysPowerMode(0); //正常工作模式 } /**************************************************************************** * 程序入口函数 ****************************************************************************/ void main(void) { uchar i=0; InitLed(); //设置LED灯相应的IO口 InitKey(); //设置KEY相应的IO口 while(1) { LED2=0; for (i=0; i<6; i++) //LED1闪烁3次提醒用户将进入睡眠模式 { LED1 = ~LED1; DelayMS(500); } LED2=1; SysPowerMode(3); //进入睡眠模式PM3,按下按键S1中断唤醒系统 } } |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2990 浏览 16 评论
3490 浏览 1 评论
9052 浏览 16 评论
4085 浏览 18 评论
1171浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2332浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 00:08 , Processed in 1.202108 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号