⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 power.lis

📁 iccavr下
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0062 88E1              ldi R24,24
 0064 81BD              out 0x21,R24
 0066                   .dbline 72
 0066           ;       WDTCR=(0<<WDE);
 0066 2224              clr R2
 0068 21BC              out 0x21,R2
 006A                   .dbline 83
 006A           ;       //或使用wdt.h里面的wdt_disable()函数
 006A           ; 
 006A           ;       /*
 006A           ;       模数转换器(上电默认是关闭的)
 006A           ;       使能时, ADC在睡眠模式下继续工作。
 006A           ;       为了降低功耗,在进入睡眠模式之前需要禁止ADC。
 006A           ;       重新启动后的第一次转换为扩展的转换。
 006A           ;       
 006A           ;       假设模数转换器使能了,关闭程式如下      
 006A           ;       */
 006A           ;        ADCSRA=(0<<ADEN); 
 006A 26B8              out 0x6,R2
 006C                   .dbline 92
 006C           ;     /*
 006C           ;     模拟比较器(上电默认是打开的,需要手工关闭)
 006C           ;     在空闲模式时,如果没有使用模拟比较器,可以将其关闭。在ADC 噪声抑制模式下也是如此。
 006C           ;     在其他睡眠模式模拟比较器是自动关闭的。
 006C           ;     如果模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。否则内部电压基准源将一直使能。
 006C           ;     
 006C           ;       关闭程式如下    
 006C           ;       */
 006C           ;       ACSR=(1<<ACD);
 006C 80E8              ldi R24,128
 006E 88B9              out 0x8,R24
 0070                   .dbline 134
 0070           ;       /*
 0070           ;       掉电检测BOD (由熔丝位BODEN控制)
 0070           ;       如果系统没有利用掉电检测器BOD,这个模块也可以关闭。
 0070           ;       如果熔丝位BODEN 被编程,从而使能了BOD 功能,它将在各种休眠模式下继续工作。
 0070           ;       在深层次的休眠模式下,这个电流将占总电流的很大比重。
 0070           ;       
 0070           ;       设置熔丝位BODEN=1 关断BOD功能
 0070           ;       */
 0070           ;       
 0070           ;       /*
 0070           ;       片内基准电压
 0070           ;       使用BOD、模拟比较器和ADC 时可能需要内部电压基准源。
 0070           ;       若这些模块都禁止了,则基准源也可以禁止。
 0070           ;       重新使能后用户必须等待基准源稳定之后才可以使用它。
 0070           ;       如果基准源在休眠过程中是使能的,其输出立即可以使用。
 0070           ;       
 0070           ;       当BOD、模拟比较器和ADC都禁止了,则基准源也自动禁止了。
 0070           ;       */
 0070           ;       
 0070           ;       /*
 0070           ;       JTAG 接口与片上调试系统
 0070           ;       如果通过熔丝位OCDEN使能了片上调试系统,当芯片进入掉电或省电模式时主时钟保持运行。
 0070           ;       在休眠模式中这个电流占总电流的很大比重。
 0070           ;       下面有三种替代方法:
 0070           ;       1 不编程OCDEN
 0070           ;     2 不编程JTAGEN
 0070           ;     3 置位MCUCSR 的JTD
 0070           ;       当JTAG 接口使能而JTAG TAP 控制器没有进行数据交换时,引脚TDO 将悬空。
 0070           ;       如果与TDO 引脚连接的硬件电路没有上拉电阻,功耗将增加。
 0070           ;       器件的引脚TDI 包含一个上拉电阻,因此在扫描链中无需为下一个芯片的TDO 引脚设置上拉电阻。
 0070           ;       通过置位MCUCSR寄存器的JTD 或不对JTAG 熔丝位编程可以禁止JTAG 接口。
 0070           ;       
 0070           ;       JTD: 禁止JTAG 接口(MCU控制与状态寄存器MCUCSR Bit7)
 0070           ;       此位为0 时,如果JTAGEN熔丝位被编程则JTAG 接口使能。
 0070           ;       如果这位为1, JTAG接口禁止。
 0070           ;       为了避免无意的禁止或使能JTAG接口,必须通过一个时间序列来改变JTD 位。
 0070           ;               应用软件必须在四个时钟周期内将期望的数值两次写入JTD。
 0070           ;       如果JTAG 接口没有与其他JTAG电路连接, JTD应该置位。这样做的原因是为了避免JTAG接口TDO引脚的静态电流。
 0070           ;       
 0070           ;       在软件中关闭JTAG接口的方法     
 0070           ;       */
 0070           ;       MCUCSR=(1<<JTD);
 0070 84BF              out 0x34,R24
 0072                   .dbline 135
 0072           ;       MCUCSR=(1<<JTD);        
 0072 84BF              out 0x34,R24
 0074                   .dbline 150
 0074           ;       
 0074           ;       /*
 0074           ;       掉电模式
 0074           ;       当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。
 0074           ;       在此模式下,外部晶体停振,而外部中断、两线接口地址匹配及看门狗(如果使能的话)继续工作。
 0074           ;       只有外部复位、看门狗复位、BOD 复位、两线接口地址匹配中断、外部电平中断INT0 或INT1,或外部中断INT2 可以使MCU 脱离掉电模式。
 0074           ;       这个睡眠模式停止了所有的时钟,只有异步模块可以继续工作。
 0074           ;       当使用外部电平中断方式将MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。
 0074           ;       从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来。
 0074           ;       唤醒周期与由熔丝位CKSEL 定义的复位周期是一样的。
 0074           ;       
 0074           ;       如果在睡眠过程中发生了复位,则MCU 唤醒后从中断向量开始执行
 0074           ;       使能的中断可以将进入睡眠模式的MCU 唤醒,        经过启动时间,外加4个时钟周期后,MCU就可以运行中断例程了。然后返回到SLEEP 的下一条指令。
 0074           ;       */
 0074           ;       MCUCSR=(0<<ISC00);              //INT0 的下降沿激活中断(默认的,这句话可以不写)
 0074 24BE              out 0x34,R2
 0076                   .dbline 151
 0076           ;       GICR=(1<<INT0);                 //使能外部中断INT0
 0076 80E4              ldi R24,64
 0078 8BBF              out 0x3b,R24
 007A                   .dbline 152
 007A           ;       SEI();                                  //使能全局中断
 007A 7894              sei
 007C 10C0              xjmp L19
 007E           L18:
 007E                   .dbline 154
 007E           ;       while(1)
 007E           ;       {
 007E                   .dbline 155
 007E           ;               for (i=0;i<10;i++)  //LED闪动10次后进入掉电模式的睡眠状态
 007E 4427              clr R20
 0080 09C0              xjmp L24
 0082           L21:
 0082                   .dbline 156
 0082                   .dbline 157
 0082 0CE2              ldi R16,300
 0084 11E0              ldi R17,1
 0086 D7DF              xcall _delay_nms
 0088                   .dbline 158
 0088 D898              cbi 0x1b,0
 008A                   .dbline 159
 008A 0CE2              ldi R16,300
 008C 11E0              ldi R17,1
 008E D3DF              xcall _delay_nms
 0090                   .dbline 160
 0090 D89A              sbi 0x1b,0
 0092                   .dbline 161
 0092           L22:
 0092                   .dbline 155
 0092 4395              inc R20
 0094           L24:
 0094                   .dbline 155
 0094 4A30              cpi R20,10
 0096 A8F3              brlo L21
 0098                   .dbline 164
 0098 80E6              ldi R24,96
 009A 85BF              out 0x35,R24
 009C                   .dbline 165
 009C 8895              SLEEP
 009E                   .dbline 167
 009E           L19:
 009E                   .dbline 153
 009E EFCF              xjmp L18
 00A0           X0:
 00A0                   .dbline -2
 00A0           L17:
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r i 20 c
 00A2                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C945100          jmp _int0pro
                        .area text(rom, con, rel)
 00A2                   .dbfile D:\M16开发板实验教程\icc-avr\POWERM~1\power.c
 00A2                   .dbfunc e int0pro _int0pro fV
                        .even
 00A2           _int0pro::
 00A2 0E940000          xcall push_lset
 00A6                   .dbline -1
 00A6                   .dbline 173
 00A6           ;               {
 00A6           ;                       delay_nms(300);
 00A6           ;                       PORTA&=~(1<<LED);   //点亮LED
 00A6           ;                       delay_nms(300);                 
 00A6           ;                       PORTA|=(1<<LED);        //熄灭LED
 00A6           ;               }
 00A6           ;               
 00A6           ;               
 00A6           ;               MCUCR=(1<<SE)|(0<<SM2)|(1<<SM1)|(0<<SM0);       //设定为掉电模式
 00A6           ;               asm("SLEEP");                   //进入睡眠状态
 00A6           ;       
 00A6           ;       }
 00A6           ; }
 00A6           ; 
 00A6           ; 
 00A6           ; #pragma interrupt_handler int0pro: iv_INT0
 00A6           ; void int0pro(void) //外部中断0服务程序 唤醒源
 00A6           ; {
 00A6                   .dbline 174
 00A6           ;       PORTA&=~(1<<LED);   //点亮LED
 00A6 D898              cbi 0x1b,0
 00A8                   .dbline 175
 00A8           ;       delay_nms(5000);
 00A8 08E8              ldi R16,5000
 00AA 13E1              ldi R17,19
 00AC C4DF              xcall _delay_nms
 00AE                   .dbline 176
 00AE           ;       PORTA|=(1<<LED);        //熄灭LED
 00AE D89A              sbi 0x1b,0
 00B0                   .dbline 177
 00B0           ;       delay_nms(1000);
 00B0 08EE              ldi R16,1000
 00B2 13E0              ldi R17,3
 00B4 C0DF              xcall _delay_nms
 00B6                   .dbline -2
 00B6           L25:
 00B6 0E940000          xcall pop_lset
 00BA                   .dbline 0 ; func end
 00BA 1895              reti
 00BC                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -