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

📄 power.lis

📁 iccavr下
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module power.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\M16开发板实验教程\icc-avr\POWERM~1/delay.h
 0000                   .dbfunc e delay_1us _delay_1us fV
                        .even
 0000           _delay_1us::
 0000                   .dbline -1
 0000                   .dbline 10
 0000           ; /* 
 0000           ;     Title:    icc-avr power management
 0000           ;     Author:   dushibiao
 0000           ;     Date:     2007 10 22
 0000           ;     Purpose:  study how to  magage power
 0000           ;       Frequency: Ext 8M
 0000           ;     Software: icc-avr to compile
 0000           ;     Hardware: AVR mega16 BOARD
 0000           ;     Connect:  dushibiao@126.com
 0000           ; */
 0000                   .dbline 11
 0000           ; /*
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e delay_nus _delay_nus fV
 0004           ;              i -> R20,R21
 0004           ;              n -> R22,R23
                        .even
 0004           _delay_nus::
 0004 0E940000          xcall push_gset2
 0008 B801              movw R22,R16
 000A                   .dbline -1
 000A                   .dbline 15
 000A           ; 本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒
 000A           ;               电源管理及睡眠模式的介绍
 000A           ;               进入最低耗电的掉电模式
 000A           ;               关闭各种模块
 000A                   .dbline 16
 000A           ;               外部中断唤醒
 000A 4427              clr R20
 000C 5527              clr R21
 000E                   .dbline 17
 000E           ; 
 000E 03C0              xjmp L6
 0010           L3:
 0010                   .dbline 18
 0010 F7DF              xcall _delay_1us
 0012           L4:
 0012                   .dbline 17
 0012 4F5F              subi R20,255  ; offset = 1
 0014 5F4F              sbci R21,255
 0016           L6:
 0016                   .dbline 17
 0016 4617              cp R20,R22
 0018 5707              cpc R21,R23
 001A D0F3              brlo L3
 001C                   .dbline -2
 001C           L2:
 001C 0E940000          xcall pop_gset2
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r i 20 i
 0022                   .dbsym r n 22 i
 0022                   .dbend
 0022                   .dbfunc e delay_1ms _delay_1ms fV
 0022           ;              i -> R16,R17
                        .even
 0022           _delay_1ms::
 0022                   .dbline -1
 0022                   .dbline 22
 0022           ;  M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz
 0022           ;      0.9uA@Vcc=5.0V  [手册的图表约为1.1uA]
 0022           ;      0.3uA@Vcc=3.3V  [手册的图表约为0.4uA]
 0022           ;      //测量的数字万用表是FLUKE 15B,分辨率0.1uA
 0022           ; 
 0022                   .dbline 24
 0022 0027              clr R16
 0024 1127              clr R17
 0026 02C0              xjmp L11
 0028           L8:
 0028                   .dbline 24
 0028           L9:
 0028                   .dbline 24
 0028 0F5F              subi R16,255  ; offset = 1
 002A 1F4F              sbci R17,255
 002C           L11:
 002C                   .dbline 24
 002C           ; 这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。
 002C           ; 这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。
 002C 0437              cpi R16,116
 002E E4E0              ldi R30,4
 0030 1E07              cpc R17,R30
 0032 D0F3              brlo L8
 0034                   .dbline -2
 0034           L7:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 16 i
 0036                   .dbend
 0036                   .dbfunc e delay_nms _delay_nms fV
 0036           ;              i -> R20,R21
 0036           ;              n -> R22,R23
                        .even
 0036           _delay_nms::
 0036 0E940000          xcall push_gset2
 003A B801              movw R22,R16
 003C                   .dbline -1
 003C                   .dbline 28
 003C           ; 
 003C           ; 熔丝位设置 
 003C           ; 1 关断BOD功能 BODEN=1 
 003C           ; 2 如果用ISP方式烧录,就可以完全关闭JTAG口了  OCEEN=1,JTAGEN=1  
 003C                   .dbline 29
 003C           ; 
 003C 4427              clr R20
 003E 5527              clr R21
 0040                   .dbline 30
 0040           ; */
 0040 03C0              xjmp L16
 0042           L13:
 0042                   .dbline 31
 0042 EFDF              xcall _delay_1ms
 0044           L14:
 0044                   .dbline 30
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048           L16:
 0048                   .dbline 30
 0048 4617              cp R20,R22
 004A 5707              cpc R21,R23
 004C D0F3              brlo L13
 004E                   .dbline -2
 004E           L12:
 004E 0E940000          xcall pop_gset2
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r i 20 i
 0054                   .dbsym r n 22 i
 0054                   .dbend
 0054                   .dbfile D:\M16开发板实验教程\icc-avr\POWERM~1\power.c
 0054                   .dbfunc e main _main fI
 0054           ;              i -> R20
                        .even
 0054           _main::
 0054                   .dbline -1
 0054                   .dbline 41
 0054           ; 
 0054           ; #include<iom16v.h>
 0054           ; #include <macros.h>
 0054           ; #include "delay.h"
 0054           ; 
 0054           ; //管脚定义
 0054           ; #define LED                   0   //PA0 驱动LED,低电平有效
 0054           ; #define KEY_INT0      2   //PB2 按键,   低电平有效
 0054           ; 
 0054           ; int main(void)
 0054           ; {
 0054                   .dbline 44
 0054           ;       unsigned char i;
 0054           ;     //上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
 0054           ;     PORTB=0xFF;                                                               //不用的管脚使能内部上拉电阻。
 0054 8FEF              ldi R24,255
 0056 88BB              out 0x18,R24
 0058                   .dbline 45
 0058           ;     PORTC=0xFF;
 0058 85BB              out 0x15,R24
 005A                   .dbline 46
 005A           ;     PORTD=0xFF;
 005A 82BB              out 0x12,R24
 005C                   .dbline 48
 005C           ; 
 005C           ;     PORTA=0xFF;
 005C 8BBB              out 0x1b,R24
 005E                   .dbline 49
 005E           ;     DDRA =(1<<LED);                                                   //PB0设为输出高电平,灯灭   
 005E 81E0              ldi R24,1
 0060 8ABB              out 0x1a,R24
 0062                   .dbline 71
 0062           ;     /*
 0062           ;     端口引脚
 0062           ;     进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。
 0062           ;     最重要的是避免驱动电阻性负载。
 0062           ;     在休眠模式下I/O 时钟clkI/O 和ADC 时钟clkADC 都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。
 0062           ;     在某些情况下输入逻辑是使能的,用来检测唤醒条件。用于此功能的具体引脚请参见“ 数字输入使能和休眠模式” 。
 0062           ;      如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC/2,否则输入缓冲器会消耗额外的电流。
 0062           ;      
 0062           ;      IO作输出(DDR=1)时,维持状态不变
 0062           ;       */
 0062           ;       
 0062           ;       /*
 0062           ;       看门狗定时器(上电默认是关闭的)
 0062           ;       如果系统无需利用看门狗,这个模块也可以关闭。
 0062           ;       若使能,则在任何休眠模式下都持续工作,从而消耗电流。
 0062           ;       在深层次的睡眠模式下,这个电流将占总电流的很大比重。
 0062           ;       
 0062           ;       假设看门狗定时器使能了,关闭程式如下
 0062           ;               1. 在同一个指令内对WDTOE 和WDE 写"1“,即使WDE 已经为"1“
 0062           ;               2. 在紧接的4 个时钟周期之内对WDE 写"0”
 0062           ;       */      
 0062           ;       WDTCR=(1<<WDTOE)|(1<<WDE);

⌨️ 快捷键说明

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