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

📄 电量计.lst

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0063) 
(0064) /********************
(0065) *   模块函数声明区  *
(0066) ********************/
(0067) static void Driver_INIT(void);
(0068) 
(0069) /********************
(0070) *   模块变量声明区  *
(0071) ********************/
(0072) 
(0073) /********************
(0074) *   全局变量声明区  *
(0075) ********************/
(0076) 
(0077) /***********************************************************
(0078) *   函数说明:软件驱动初始化函数                           *
(0079) *   输入:    无                                           *
(0080) *   输出:    无                                           *
(0081) *   调用函数:无                                           *
(0082) ***********************************************************/
(0083) static void Driver_INIT(void)
(0084) {
_Driver_INIT:
    0072 9508      RET
(0085)     //*在这里插入你的各类软件驱动初始化代码*//
(0086) }
(0087) 
(0088) /***********************************************************
(0089) *   函数说明:系统初始化函数                               *
(0090) *   输入:    无                                           *
(0091) *   输出:    无                                           *
(0092) *   调用函数:Device_INIT() Driver_INIT()                  *
(0093) ***********************************************************/
(0094) void System_INIT(void)
(0095) {
(0096)     CLI();
_System_INIT:
    0073 94F8      BCLR	7
(0097)     
(0098)     Device_INIT();
    0074 DFC6      RCALL	_Device_INIT
(0099)     Driver_INIT();
    0075 DFFC      RCALL	_Driver_INIT
(0100)     
(0101)     //*在这里插入你的系统环境变量初始化代码*//
(0102)     
(0103)     SEI();
    0076 9478      BSET	7
    0077 9508      RET
(0104) }
(0105) 
(0106) /***********************************************************
(0107) *   函数说明:定时器0中断处理程序代码插入函数              *
(0108) *   输入:    无                                           *
(0109) *   输出:    无                                           *
(0110) *   调用函数:无                                           *
(0111) ***********************************************************/
(0112) void Insert_Timer0_OVF_ISR_Code (void)
(0113) {
(0114)     TCNT0 = 0xFD;                       //重新加载定时器0
_Insert_Timer0_OVF_ISR_Code:
    0078 EF8D      LDI	R24,0xFD
    0079 BD86      OUT	0x26,R24
(0115) 
(0116)     if (IfGotADCValue)                  //检查是否采样完成
    007A 90200100  LDS	R2,IfGotADCValue
    007C 2022      TST	R2
    007D F041      BEQ	0x0086
(0117)     {
(0118)         IfGotADCValue = False;          //设置标志信号[*] 这里需要讲解一下信号同步的概念
    007E 2422      CLR	R2
    007F 92200100  STS	IfGotADCValue,R2
(0119)                                         //同时需要说明,设置标志信号和启动ADC的顺序不能改变
(0120)         START_ADC;                      //1MS启动一次AD转换
    0081 9180007A  LDS	R24,0x7A
    0083 6480      ORI	R24,0x40
    0084 9380007A  STS	0x7A,R24
(0121)     }
    0086 9508      RET
_Insert_Adc_ISR_Code:
  ADCValue             --> R10
  PORTValue            --> R20
  LoopCounter          --> R22
    0087 D045      RCALL	push_gset3
(0122) }
(0123) 
(0124) /***********************************************************
(0125) *  函数说明:ADC采样完成中断处理程序                       *
(0126) *  输入:    无                                            *
(0127) *  输出:    无                                            *
(0128) ***********************************************************/
(0129) void Insert_Adc_ISR_Code(void)
(0130) {
(0131)     unsigned int ADCValue = ADC;                        //获取ADC10位精度的采样结果
    0088 90A00078  LDS	R10,0x78
    008A 90B00079  LDS	R11,0x79
(0132)     unsigned char LoopCounter = 0,PORTValue = 0;
    008C 2766      CLR	R22
    008D 2744      CLR	R20
(0133) 
(0134)     LoopCounter = ADCValue / 170;                       //转换为端口光柱显示
    008E EA2A      LDI	R18,0xAA
    008F E030      LDI	R19,0
    0090 0185      MOVW	R16,R10
    0091 D01B      RCALL	div16u
    0092 2F60      MOV	R22,R16
    0093 C006      RJMP	0x009A
(0135) 
(0136)     while(LoopCounter)
(0137)     {
(0138)         PORTValue |= 1<<(LoopCounter-1);
    0094 2F16      MOV	R17,R22
    0095 5011      SUBI	R17,1
    0096 E001      LDI	R16,1
    0097 D07E      RCALL	lsl8
    0098 2B40      OR	R20,R16
(0139)         LoopCounter--;
    0099 956A      DEC	R22
    009A 2366      TST	R22
    009B F7C1      BNE	0x0094
(0140)     }
(0141) 
(0142)     PORTB = PORTValue ^ 0xFF;                           //由于端口上的LED在低电平时点亮,为了适应习惯
    009C EF8F      LDI	R24,0xFF
    009D E090      LDI	R25,0
    009E 2E24      MOV	R2,R20
    009F 2433      CLR	R3
    00A0 2628      EOR	R2,R24
    00A1 2639      EOR	R3,R25
    00A2 B825      OUT	0x05,R2
(0143)                                                         //在这里对端口数据做了反相的处理
(0144)     IfGotADCValue = True;                               //设置采样完成标志
    00A3 E081      LDI	R24,1
    00A4 93800100  STS	IfGotADCValue,R24
    00A6 D020      RCALL	pop_gset3
    00A7 9508      RET
FILE: D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例13_电量计\实例13_电量计_中断方式\System.c
(0001) /*********************************************************/
(0002) /*                                                       */
(0003) /*             实例13   电量计 中断方式                  */
(0004) /*                                                       */
(0005) /*                 程序设计 江海波                       */
(0006) /*                                                       */
(0007) /*        编写时间 : 2007-05     版本 : V1.0             */
(0008) /*                                                       */
(0009) /*     提示 : 代码受版权保护,示例程序用于工程应谨慎      */
(0010) /*                                                       */
(0011) /*           E-mail : soundman@sohu.com                  */
(0012) /*-------------------------------------------------------*/
(0013) /* 硬件环境:                                             */
(0014) /*                                                       */
(0015) /*     实验电路板,ATmega48单片机,CPU时钟1MHz             */
(0016) /* ------------------------------------------------------*/
(0017) /* 软件环境:                                             */
(0018) /*                                                       */
(0019) /*     ICCAVR 6.31A                                      */
(0020) /* ------------------------------------------------------*/
(0021) /* 最后修改时间:                                         */
(0022) /*                                                       */
(0023) /*-------------------------------------------------------*/
(0024) /* 历史版本纪录:                                         */
(0025) /*                                                       */
(0026) /*********************************************************/
(0027) 
(0028) /********************
(0029) * 头 文 件 配 置 区 *
(0030) ********************/
(0031) # include "PF_Config.h"
(0032) 
(0033) /********************
(0034) *   系 统 宏 定 义  *
(0035) ********************/
(0036) 
(0037) /*------------------*
(0038) *   常 数 宏 定 义  *
(0039) *------------------*/
(0040) 
(0041) /*------------------*
(0042) *   动 作 宏 定 义  *
(0043) *------------------*/
(0044) 
(0045) /********************
(0046) *  模块结构体定义区 *
(0047) ********************/
(0048) 
(0049) /********************
(0050) *   模块函数声明区  *
(0051) ********************/
(0052) 
(0053) /********************
(0054) *   模块变量声明区  *
(0055) ********************/
(0056) 
(0057) /***********************************************************
(0058) *   函数说明:主函数                                       *
(0059) *   输入:    无                                           *
(0060) *   输出:    无                                           *
(0061) *   调用函数:System_INIT()                                *
(0062) ***********************************************************/
(0063) void main(void)
(0064) {    
(0065)     System_INIT();                                          //代码初始化
_main:
    00A8 DFCA      RCALL	_System_INIT
(0066) 
(0067)     while(TRUE);                                            //超级循环
FILE: <library>
    00A9 CFFF      RJMP	0x00A9
    00AA 9508      RET
mod16u:
    00AB 9468      BSET	6
    00AC C001      RJMP	xdiv16u
div16u:
    00AD 94E8      BCLR	6
xdiv16u:
    00AE 92EA      ST	R14,-Y
    00AF 92FA      ST	R15,-Y
    00B0 938A      ST	R24,-Y
    00B1 24EE      CLR	R14
    00B2 24FF      CLR	R15
    00B3 E180      LDI	R24,0x10
    00B4 0F00      LSL	R16
    00B5 1F11      ROL	R17
    00B6 1CEE      ROL	R14
    00B7 1CFF      ROL	R15
    00B8 16E2      CP	R14,R18
    00B9 06F3      CPC	R15,R19
    00BA F018      BCS	0x00BE
    00BB 1AE2      SUB	R14,R18
    00BC 0AF3      SBC	R15,R19
    00BD 9503      INC	R16
    00BE 958A      DEC	R24
    00BF F7A1      BNE	0x00B4
    00C0 F416      BRTC	0x00C3
    00C1 2D0E      MOV	R16,R14
    00C2 2D1F      MOV	R17,R15
    00C3 9189      LD	R24,Y+
    00C4 90F9      LD	R15,Y+
    00C5 90E9      LD	R14,Y+
    00C6 9508      RET
pop_gset3:
    00C7 E0E4      LDI	R30,4
    00C8 C00C      RJMP	pop
push_gset5:
    00C9 92FA      ST	R15,-Y
    00CA 92EA      ST	R14,-Y
push_gset4:
    00CB 92DA      ST	R13,-Y
    00CC 92CA      ST	R12,-Y
push_gset3:
    00CD 92BA      ST	R11,-Y
    00CE 92AA      ST	R10,-Y
push_gset2:
    00CF 937A      ST	R23,-Y
    00D0 936A      ST	R22,-Y
push_gset1:
    00D1 935A      ST	R21,-Y
    00D2 934A      ST	R20,-Y
    00D3 9508      RET
pop_gset1:
    00D4 E0E1      LDI	R30,1
pop:
    00D5 9149      LD	R20,Y+
    00D6 9159      LD	R21,Y+
    00D7 FDE0      SBRC	R30,0
    00D8 9508      RET
    00D9 9169      LD	R22,Y+
    00DA 9179      LD	R23,Y+
    00DB FDE1      SBRC	R30,1
    00DC 9508      RET
    00DD 90A9      LD	R10,Y+
    00DE 90B9      LD	R11,Y+
    00DF FDE2      SBRC	R30,2
    00E0 9508      RET
    00E1 90C9      LD	R12,Y+
    00E2 90D9      LD	R13,Y+
    00E3 FDE3      SBRC	R30,3
    00E4 9508      RET
    00E5 90E9      LD	R14,Y+
    00E6 90F9      LD	R15,Y+
    00E7 9508      RET
push_lset:
    00E8 93FA      ST	R31,-Y
    00E9 93EA      ST	R30,-Y
    00EA 93BA      ST	R27,-Y
    00EB 93AA      ST	R26,-Y
    00EC 939A      ST	R25,-Y
    00ED 938A      ST	R24,-Y
    00EE 933A      ST	R19,-Y
    00EF 932A      ST	R18,-Y
    00F0 931A      ST	R17,-Y
    00F1 930A      ST	R16,-Y
    00F2 929A      ST	R9,-Y
    00F3 928A      ST	R8,-Y
    00F4 927A      ST	R7,-Y
    00F5 926A      ST	R6,-Y
    00F6 925A      ST	R5,-Y
    00F7 924A      ST	R4,-Y
    00F8 923A      ST	R3,-Y
    00F9 922A      ST	R2,-Y
    00FA 921A      ST	R1,-Y
    00FB 920A      ST	R0,-Y
    00FC B60F      IN	R0,0x3F
    00FD 920A      ST	R0,-Y
    00FE 9508      RET
pop_lset:
    00FF 9009      LD	R0,Y+
    0100 BE0F      OUT	0x3F,R0
    0101 9009      LD	R0,Y+
    0102 9019      LD	R1,Y+
    0103 9029      LD	R2,Y+
    0104 9039      LD	R3,Y+
    0105 9049      LD	R4,Y+
    0106 9059      LD	R5,Y+
    0107 9069      LD	R6,Y+
    0108 9079      LD	R7,Y+
    0109 9089      LD	R8,Y+
    010A 9099      LD	R9,Y+
    010B 9109      LD	R16,Y+
    010C 9119      LD	R17,Y+
    010D 9129      LD	R18,Y+
    010E 9139      LD	R19,Y+
    010F 9189      LD	R24,Y+
    0110 9199      LD	R25,Y+
    0111 91A9      LD	R26,Y+
    0112 91B9      LD	R27,Y+
    0113 91E9      LD	R30,Y+
    0114 91F9      LD	R31,Y+
    0115 9508      RET
lsl8:
    0116 2311      TST	R17
    0117 F019      BEQ	0x011B
    0118 0F00      LSL	R16
    0119 951A      DEC	R17
    011A CFFB      RJMP	lsl8
    011B 9508      RET

⌨️ 快捷键说明

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