📄 ex_support.lis
字号:
.module EX_Support.c
.area text(rom, con, rel)
0000 .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例13_电量计\实例13_电量计_噪声抑制方式\EX_Support.c
0000 .dbfunc s Driver_INIT _Driver_INIT fV
.even
0000 _Driver_INIT:
0000 .dbline -1
0000 .dbline 82
0000 ; /***********************************************************
0000 ; * 函数库说明:底层硬件初始化驱动函数库 *
0000 ; * 版本: *
0000 ; * 作者: *
0000 ; * 创建日期: *
0000 ; * -------------------------------------------------------- *
0000 ; * [硬件说明] *
0000 ; * 处理器: *
0000 ; * 系统时钟: *
0000 ; * -------------------------------------------------------- *
0000 ; * [支 持 库] *
0000 ; * 支持库名称:HD_Support.h *
0000 ; * 需要版本: ----- *
0000 ; * 支持库说明:底层硬件初始化声明库 *
0000 ; * *
0000 ; * 支持库名称:EX_Support.h *
0000 ; * 需要版本: ----- *
0000 ; * 支持库说明:底层硬件初始化驱动声明库 *
0000 ; * *
0000 ; * 支持库名称:PF_Config.h *
0000 ; * 需要版本: ----- *
0000 ; * 支持库说明:硬件平台配置声明库 *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本更新] *
0000 ; * 修改: *
0000 ; * 修改日期: *
0000 ; * 版本: *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本历史] *
0000 ; * -------------------------------------------------------- *
0000 ; * [使用说明] *
0000 ; ***********************************************************/
0000 ;
0000 ; /********************
0000 ; * 头 文 件 配 置 区 *
0000 ; ********************/
0000 ; #include "PF_Config.h"
0000 ; #include "HD_Support.h"
0000 ; #include "EX_Support.h"
0000 ;
0000 ; /********************
0000 ; * 系 统 宏 定 义 *
0000 ; ********************/
0000 ;
0000 ; /*------------------*
0000 ; * 常 数 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; /*------------------*
0000 ; * 动 作 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; /********************
0000 ; * 模块结构体定义区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 函 数 声 明 区 *
0000 ; ********************/
0000 ; void System_INIT(void);
0000 ;
0000 ; /********************
0000 ; * 模块函数声明区 *
0000 ; ********************/
0000 ; static void Driver_INIT(void);
0000 ;
0000 ; /********************
0000 ; * 模块变量声明区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 全局变量声明区 *
0000 ; ********************/
0000 ;
0000 ; /***********************************************************
0000 ; * 函数说明:软件驱动初始化函数 *
0000 ; * 输入: 无 *
0000 ; * 输出: 无 *
0000 ; * 调用函数:无 *
0000 ; ***********************************************************/
0000 ; static void Driver_INIT(void)
0000 ; {
0000 .dbline -2
0000 L1:
0000 .dbline 0 ; func end
0000 0895 ret
0002 .dbend
0002 .dbfunc e System_INIT _System_INIT fV
.even
0002 _System_INIT::
0002 .dbline -1
0002 .dbline 93
0002 ; //*在这里插入你的各类软件驱动初始化代码*//
0002 ; }
0002 ;
0002 ; /***********************************************************
0002 ; * 函数说明:系统初始化函数 *
0002 ; * 输入: 无 *
0002 ; * 输出: 无 *
0002 ; * 调用函数:Device_INIT() Driver_INIT() *
0002 ; ***********************************************************/
0002 ; void System_INIT(void)
0002 ; {
0002 .dbline 94
0002 ; CLI();
0002 F894 cli
0004 .dbline 96
0004 ;
0004 ; Device_INIT();
0004 00D0 rcall _Device_INIT
0006 .dbline 97
0006 ; Driver_INIT();
0006 FCDF rcall _Driver_INIT
0008 .dbline 101
0008 ;
0008 ; //*在这里插入你的系统环境变量初始化代码*//
0008 ;
0008 ; SEI();
0008 7894 sei
000A .dbline -2
000A L2:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e Insert_Adc_ISR_Code _Insert_Adc_ISR_Code fV
000C ; ADCValue -> R10,R11
000C ; PORTValue -> R20
000C ; LoopCounter -> R22
.even
000C _Insert_Adc_ISR_Code::
000C 00D0 rcall push_gset3
000E .dbline -1
000E .dbline 110
000E ; }
000E ;
000E ; /***********************************************************
000E ; * 函数说明:ADC采样完成中断处理程序 *
000E ; * 输入: 无 *
000E ; * 输出: 无 *
000E ; ***********************************************************/
000E ; void Insert_Adc_ISR_Code(void)
000E ; {
000E .dbline 111
000E ; unsigned int ADCValue = ADC; //获取ADC10位精度的采样结果
000E A0907800 lds R10,120
0012 B0907900 lds R11,120+1
0016 .dbline 112
0016 ; unsigned char LoopCounter = 0,PORTValue = 0;
0016 6627 clr R22
0018 .dbline 112
0018 4427 clr R20
001A .dbline 114
001A ;
001A ; LoopCounter = ADCValue / 170; //转换为端口光柱显示
001A 2AEA ldi R18,170
001C 30E0 ldi R19,0
001E 8501 movw R16,R10
0020 00D0 rcall div16u
0022 602F mov R22,R16
0024 06C0 rjmp L5
0026 L4:
0026 .dbline 117
0026 .dbline 118
0026 162F mov R17,R22
0028 1150 subi R17,1
002A 01E0 ldi R16,1
002C 00D0 rcall lsl8
002E 402B or R20,R16
0030 .dbline 119
0030 6A95 dec R22
0032 .dbline 120
0032 L5:
0032 .dbline 116
0032 ;
0032 ; while(LoopCounter)
0032 6623 tst R22
0034 C1F7 brne L4
0036 .dbline 122
0036 ; {
0036 ; PORTValue |= 1<<(LoopCounter-1);
0036 ; LoopCounter--;
0036 ; }
0036 ;
0036 ; PORTB = PORTValue ^ 0xFF; //由于端口上的LED在低电平时点亮,为了适应习惯
0036 8FEF ldi R24,255
0038 90E0 ldi R25,0
003A 242E mov R2,R20
003C 3324 clr R3
003E 2826 eor R2,R24
0040 3926 eor R3,R25
0042 25B8 out 0x5,R2
0044 .dbline 124
0044 ; //在这里对端口数据做了反相的处理
0044 ; IfGotADCValue = True; //设置采样完成标志
0044 81E0 ldi R24,1
0046 80930000 sts _IfGotADCValue,R24
004A .dbline -2
004A L3:
004A 00D0 rcall pop_gset3
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r ADCValue 10 i
004E .dbsym r PORTValue 20 c
004E .dbsym r LoopCounter 22 c
004E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -