📄 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 84
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 ; ********************/
0000 ; void System_INIT(void);
0000 ; void Insert_Timer0_OVF_ISR_Code(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 95
0002 ; //*在这里插入你的各类软件驱动初始化代码*//
0002 ; }
0002 ;
0002 ; /***********************************************************
0002 ; * 函数说明:系统初始化函数 *
0002 ; * 输入: 无 *
0002 ; * 输出: 无 *
0002 ; * 调用函数:Device_INIT() Driver_INIT() *
0002 ; ***********************************************************/
0002 ; void System_INIT(void)
0002 ; {
0002 .dbline 96
0002 ; CLI();
0002 F894 cli
0004 .dbline 98
0004 ;
0004 ; Device_INIT();
0004 00D0 rcall _Device_INIT
0006 .dbline 99
0006 ; Driver_INIT();
0006 FCDF rcall _Driver_INIT
0008 .dbline 103
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_Timer0_OVF_ISR_Code _Insert_Timer0_OVF_ISR_Code fV
.even
000C _Insert_Timer0_OVF_ISR_Code::
000C .dbline -1
000C .dbline 113
000C .dbline 114
000C 8DEF ldi R24,253
000E 86BD out 0x26,R24
0010 .dbline 116
0010 20900000 lds R2,_IfGotADCValue
0014 2220 tst R2
0016 41F0 breq L4
0018 .dbline 117
0018 .dbline 118
0018 2224 clr R2
001A 20920000 sts _IfGotADCValue,R2
001E .dbline 120
001E 80917A00 lds R24,122
0022 8064 ori R24,64
0024 80937A00 sts 122,R24
0028 .dbline 120
0028 .dbline 121
0028 L4:
0028 .dbline -2
0028 L3:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e Insert_Adc_ISR_Code _Insert_Adc_ISR_Code fV
002A ; ADCValue -> R10,R11
002A ; PORTValue -> R20
002A ; LoopCounter -> R22
.even
002A _Insert_Adc_ISR_Code::
002A 00D0 rcall push_gset3
002C .dbline -1
002C .dbline 130
002C ; }
002C ;
002C ; /***********************************************************
002C ; * 函数说明:定时器0中断处理程序代码插入函数 *
002C ; * 输入: 无 *
002C ; * 输出: 无 *
002C ; * 调用函数:无 *
002C ; ***********************************************************/
002C ; void Insert_Timer0_OVF_ISR_Code (void)
002C ; {
002C ; TCNT0 = 0xFD; //重新加载定时器0
002C ;
002C ; if (IfGotADCValue) //检查是否采样完成
002C ; {
002C ; IfGotADCValue = False; //设置标志信号[*] 这里需要讲解一下信号同步的概念
002C ; //同时需要说明,设置标志信号和启动ADC的顺序不能改变
002C ; START_ADC; //1MS启动一次AD转换
002C ; }
002C ; }
002C ;
002C ; /***********************************************************
002C ; * 函数说明:ADC采样完成中断处理程序 *
002C ; * 输入: 无 *
002C ; * 输出: 无 *
002C ; ***********************************************************/
002C ; void Insert_Adc_ISR_Code(void)
002C ; {
002C .dbline 131
002C ; unsigned int ADCValue = ADC; //获取ADC10位精度的采样结果
002C A0907800 lds R10,120
0030 B0907900 lds R11,120+1
0034 .dbline 132
0034 ; unsigned char LoopCounter = 0,PORTValue = 0;
0034 6627 clr R22
0036 .dbline 132
0036 4427 clr R20
0038 .dbline 134
0038 ;
0038 ; LoopCounter = ADCValue / 170; //转换为端口光柱显示
0038 2AEA ldi R18,170
003A 30E0 ldi R19,0
003C 8501 movw R16,R10
003E 00D0 rcall div16u
0040 602F mov R22,R16
0042 06C0 rjmp L8
0044 L7:
0044 .dbline 137
0044 .dbline 138
0044 162F mov R17,R22
0046 1150 subi R17,1
0048 01E0 ldi R16,1
004A 00D0 rcall lsl8
004C 402B or R20,R16
004E .dbline 139
004E 6A95 dec R22
0050 .dbline 140
0050 L8:
0050 .dbline 136
0050 ;
0050 ; while(LoopCounter)
0050 6623 tst R22
0052 C1F7 brne L7
0054 .dbline 142
0054 ; {
0054 ; PORTValue |= 1<<(LoopCounter-1);
0054 ; LoopCounter--;
0054 ; }
0054 ;
0054 ; PORTB = PORTValue ^ 0xFF; //由于端口上的LED在低电平时点亮,为了适应习惯
0054 8FEF ldi R24,255
0056 90E0 ldi R25,0
0058 242E mov R2,R20
005A 3324 clr R3
005C 2826 eor R2,R24
005E 3926 eor R3,R25
0060 25B8 out 0x5,R2
0062 .dbline 144
0062 ; //在这里对端口数据做了反相的处理
0062 ; IfGotADCValue = True; //设置采样完成标志
0062 81E0 ldi R24,1
0064 80930000 sts _IfGotADCValue,R24
0068 .dbline -2
0068 L6:
0068 00D0 rcall pop_gset3
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r ADCValue 10 i
006C .dbsym r PORTValue 20 c
006C .dbsym r LoopCounter 22 c
006C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -