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

📄 ex_support.lis

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 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 + -