sleeptest.c
来自「使用winavr+studio进行开发的测试程序」· C语言 代码 · 共 65 行
C
65 行
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
/*
这是一段测试程序。睡眠模式的设定、唤醒以及按键的使用。但是在用gcc编译时不压缩的
情况下为Program: 3638 bytes (44.4% Full),而代码压缩后为Program:238 bytes (2.9% Full)
原因待查。
*/
ISR(INT0_vect)
{
cli();
}
void Sleep(void)//待机#唤醒
{
//传送设定到eeprom
set_sleep_mode(SLEEP_MODE_PWR_DOWN);//掉电模式
cli();
sleep_enable();
sei();
GICR=0x40; //允许外部中断INT0,低电平触发
sleep_cpu();
sleep_disable();
//读取设定
GICR=0x00;
sei();
}
void _isr(void)
{
sei();
GICR=0x40; //允许外部中断INT0,低电平触发
MCUCR=0xa0; //打开SE和SM,允许睡眠模式
asm("sleep"); //进入睡眠状态
MCUCR=0x00;
GICR=0x00;
}
int main(void)
{
unsigned char flash=1;
DDRD|=_BV(PD0);
PORTD|=_BV(PD0);
DDRD&=~_BV(PD2);
PORTD|=_BV(PD2);
//if(!(PIND&_BV(PD2))){ PORTD&=~_BV(PD0);}
while(1)
{
Sleep();
if(!(PIND&_BV(PD2)))
{
_delay_ms(10);
while(!(PIND&_BV(PD2))){}
if(flash){PORTD&=~_BV(PD0);}
else{PORTD|=_BV(PD0);}
flash=!flash;
_delay_ms(10);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?