📄 电量计.lst
字号:
__text_start:
__start:
001B EFCF LDI R28,0xFF
001C E0D2 LDI R29,2
001D BFCD OUT 0x3D,R28
001E BFDE OUT 0x3E,R29
001F 52C0 SUBI R28,0x20
0020 40D0 SBCI R29,0
0021 EA0A LDI R16,0xAA
0022 8308 STD Y+0,R16
0023 2400 CLR R0
0024 E0E1 LDI R30,1
0025 E0F1 LDI R31,1
0026 E011 LDI R17,1
0027 30E1 CPI R30,1
0028 07F1 CPC R31,R17
0029 F011 BEQ 0x002C
002A 9201 ST R0,Z+
002B CFFB RJMP 0x0027
002C 8300 STD Z+0,R16
002D E3E4 LDI R30,0x34
002E E0F0 LDI R31,0
002F E0A0 LDI R26,0
0030 E0B1 LDI R27,1
0031 E010 LDI R17,0
0032 33E5 CPI R30,0x35
0033 07F1 CPC R31,R17
0034 F021 BEQ 0x0039
0035 95C8 LPM
0036 9631 ADIW R30,1
0037 920D ST R0,X+
0038 CFF9 RJMP 0x0032
0039 D06E RCALL _main
_exit:
003A CFFF RJMP _exit
FILE: D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例13_电量计\实例13_电量计_中断方式\HD_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:PF_Config.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:硬件平台配置声明库 *
(0019) * -------------------------------------------------------- *
(0020) * [版本更新] *
(0021) * 修改: *
(0022) * 修改日期: *
(0023) * 版本: *
(0024) * -------------------------------------------------------- *
(0025) * [版本历史] *
(0026) * -------------------------------------------------------- *
(0027) * [使用说明] *
(0028) ***********************************************************/
(0029)
(0030) /********************
(0031) * 头 文 件 配 置 区 *
(0032) ********************/
(0033) #include "PF_Config.h"
(0034) #include "HD_Support.h"
(0035)
(0036) /********************
(0037) * 系 统 宏 定 义 *
(0038) ********************/
(0039) #pragma interrupt_handler Timer0_OVF_ISR:iv_TIMER0_OVF
(0040) #pragma interrupt_handler ADC_ISR:iv_ADC
(0041)
(0042) /*------------------*
(0043) * 常 数 宏 定 义 *
(0044) *------------------*/
(0045)
(0046) /*------------------*
(0047) * 动 作 宏 定 义 *
(0048) *------------------*/
(0049) #ifndef INSERT_TIMER0_OVF_ISR_CODE
(0050) #define INSERT_TIMER0_OVF_ISR_CODE
(0051) #endif
(0052)
(0053) #ifndef INSERT_ADC_ISR_CODE
(0054) #define INSERT_ADC_ISR_CODE
(0055) #endif
(0056)
(0057) /********************
(0058) * 模块结构体定义区 *
(0059) ********************/
(0060)
(0061) /********************
(0062) * 函 数 声 明 区 *
(0063) ********************/
(0064) void Device_INIT(void);
(0065)
(0066) /********************
(0067) * 模块函数声明区 *
(0068) ********************/
(0069) void Port_INIT(void);
(0070) void Timer0_INIT(void);
(0071) void ADC_INIT(void);
(0072) void Timer0_OVF_ISR(void);
(0073)
(0074) /********************
(0075) * 模块变量声明区 *
(0076) ********************/
(0077)
(0078) /********************
(0079) * 全局变量声明区 *
(0080) ********************/
(0081)
(0082) BOOL IfGotADCValue = True; //用于指示是否有ADC转换正在进行中的标志
(0083)
(0084) /***********************************************************
(0085) * 函数说明:系统硬件初始化函数 *
(0086) * 输入: 无 *
(0087) * 输出: 无 *
(0088) * 调用函数:Port_INIT() Timer0_INIT() *
(0089) ***********************************************************/
(0090) void Device_INIT(void)
(0091) {
(0092) Port_INIT();
_Device_INIT:
003B D00E RCALL _Port_INIT
(0093) Timer0_INIT();
003C D019 RCALL _Timer0_INIT
(0094) ADC_INIT();
003D D025 RCALL _ADC_INIT
(0095) //*在这里添加其他初始化函数*//
(0096)
(0097) MCUCR = 0x00; //使能口线内部弱上拉,中断向量在FLASH首部
003E 2422 CLR R2
003F BE25 OUT 0x35,R2
(0098) DIDR0 = 0x08; //关闭PC.3的数字输入缓冲
0040 E088 LDI R24,0x8
0041 9380007E STS 0x7E,R24
(0099) PRR = 0xCE; //使能ADC模块的电源供应
0043 EC8E LDI R24,0xCE
0044 93800064 STS 0x64,R24
(0100)
(0101) TIMSK0 = BIT(TOIE0); //启动定时器0溢出中断资源
0046 E081 LDI R24,1
0047 9380006E STS 0x6E,R24
0049 9508 RET
(0102) //*在这里添加其他全局寄存器的初始化代码*//
(0103) }
(0104)
(0105) /***********************************************************
(0106) * 函数说明:系统端口初始化函数 *
(0107) * 输入: 无 *
(0108) * 输出: 无 *
(0109) * 调用函数:无 *
(0110) ***********************************************************/
(0111) void Port_INIT(void)
(0112) {
(0113) //*在这里添加端口初始化代码*//
(0114)
(0115) PORTB = 0b11111111; //在PB口0..5上输出光柱效果
_Port_INIT:
004A EF8F LDI R24,0xFF
004B B985 OUT 0x05,R24
(0116) PORTC = 0b11110111; //初始化PC口,PC.3设置为输入
004C EF87 LDI R24,0xF7
004D B988 OUT 0x08,R24
(0117) PORTD = 0b11111111; //没有使用的端口均设置为输入状态并开启内部上拉电阻
004E EF8F LDI R24,0xFF
004F B98B OUT 0x0B,R24
(0118)
(0119) DDRB = 0b11111111;
0050 B984 OUT 0x04,R24
(0120) DDRC = 0b11110111;
0051 EF87 LDI R24,0xF7
0052 B987 OUT 0x07,R24
(0121) DDRD = 0b00000000;
0053 2422 CLR R2
0054 B82A OUT 0x0A,R2
0055 9508 RET
(0122) }
(0123)
(0124) /***********************************************************
(0125) * 函数声明:定时器0初始化函数 *
(0126) * 输入: 无 *
(0127) * 输出: 无 *
(0128) * 调用函数:无 *
(0129) ***********************************************************/
(0130) void Timer0_INIT(void)
(0131) {
(0132) //*在这里粘贴从代码生成向导中生成的初始化代码*//
(0133) //*要求为1K的溢出中断 *//
(0134) TCCR0B = 0x00; //停止定时器0
_Timer0_INIT:
0056 2422 CLR R2
0057 BC25 OUT 0x25,R2
(0135) TCNT0 = 0xFD; //设置定时器初始值
0058 EF8D LDI R24,0xFD
0059 BD86 OUT 0x26,R24
(0136) TCCR0A = 0x00; //关闭定时器比较匹配功能
005A BC24 OUT 0x24,R2
(0137) TCCR0B = 0x04; //启动定时器,256分频
005B E084 LDI R24,4
005C BD85 OUT 0x25,R24
005D 9508 RET
_Timer0_OVF_ISR:
005E D089 RCALL push_lset
(0138) }
(0139)
(0140) /***********************************************************
(0141) * 函数声明:定时器0溢出中断处理程序 *
(0142) * 输入: 无 *
(0143) * 输出: 无 *
(0144) * 调用函数:INSERT_TIMER0_OVF_ISR_CODE *
(0145) ***********************************************************/
(0146) void Timer0_OVF_ISR(void)
(0147) {
(0148) //*这里要添加对定时计数器重新设置计数底数的代码*//
(0149) INSERT_TIMER0_OVF_ISR_CODE
005F 9478 BSET 7
0060 D017 RCALL _Insert_Timer0_OVF_ISR_Code
0061 D09D RCALL pop_lset
0062 9518 RETI
(0150) }
(0151)
(0152) /***********************************************************
(0153) * 函数说明:ADC初始化程序 *
(0154) * 输入: 无 *
(0155) * 输出: 无 *
(0156) * -------------------------------------------------------- *
(0157) * [说明] *
(0158) * 这里的代码是为了方便大家理解直接从代码生成器 *
(0159) * 中生成,经过简单错误修改后的代码。以后使用的时候,*
(0160) * 我们将采用更为规范的格式。 *
(0161) ***********************************************************/
(0162) void ADC_INIT(void)
(0163) {
(0164) ADMUX = 0x43; //选择AVCC,结果右对齐,选择ADC通道3
_ADC_INIT:
0063 E483 LDI R24,0x43
0064 9380007C STS 0x7C,R24
(0165) ADCSRA = 0x8C; //ADC模块使能,未开始转换,自动触发关闭,中断使能,预分频比16
0066 E88C LDI R24,0x8C
0067 9380007A STS 0x7A,R24
(0166) ADCSRB = 0x00; //ACME用于模拟比较器,这里忽略.由于没有使用自动触发功能,对ADTS的设置没有意义
0069 2422 CLR R2
006A 9220007B STS 0x7B,R2
006C 9508 RET
_ADC_ISR:
006D D07A RCALL push_lset
(0167)
(0168) /*
(0169) ADMUX = (ADMUX_AREF<<REFS0)|(3<<MUX0);
(0170) ADCSRA = (1<<ADEN)|(1<<ADIE)|(ADCSRA_PRESCALER_DIV_16<<ADPS0);
(0171) ASCSRB = 0x00;
(0172) */
(0173) }
(0174)
(0175) /***********************************************************
(0176) * 函数声明:ADC转换完成中断处理程序 *
(0177) * 输入: 无 *
(0178) * 输出: 无 *
(0179) * 调用函数:INSERT_ADC_ISR_CODE *
(0180) ***********************************************************/
(0181)
(0182) void ADC_ISR (void)
(0183) {
(0184) INSERT_ADC_ISR_CODE
006E 9478 BSET 7
006F D017 RCALL _Insert_Adc_ISR_Code
0070 D08E RCALL pop_lset
0071 9518 RETI
FILE: D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例13_电量计\实例13_电量计_中断方式\EX_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化驱动函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:EX_Support.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:底层硬件初始化驱动声明库 *
(0019) * *
(0020) * 支持库名称:PF_Config.h *
(0021) * 需要版本: ----- *
(0022) * 支持库说明:硬件平台配置声明库 *
(0023) * -------------------------------------------------------- *
(0024) * [版本更新] *
(0025) * 修改: *
(0026) * 修改日期: *
(0027) * 版本: *
(0028) * -------------------------------------------------------- *
(0029) * [版本历史] *
(0030) * -------------------------------------------------------- *
(0031) * [使用说明] *
(0032) ***********************************************************/
(0033)
(0034) /********************
(0035) * 头 文 件 配 置 区 *
(0036) ********************/
(0037) # include "PF_Config.h"
(0038) # include "HD_Support.h"
(0039) # include "EX_Support.h"
(0040)
(0041)
(0042) /********************
(0043) * 系 统 宏 定 义 *
(0044) ********************/
(0045)
(0046) /*------------------*
(0047) * 常 数 宏 定 义 *
(0048) *------------------*/
(0049)
(0050) /*------------------*
(0051) * 动 作 宏 定 义 *
(0052) *------------------*/
(0053)
(0054) /********************
(0055) * 模块结构体定义区 *
(0056) ********************/
(0057)
(0058) /********************
(0059) * 函 数 声 明 区 *
(0060) ********************/
(0061) void System_INIT(void);
(0062) void Insert_Timer0_OVF_ISR_Code(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -