📄 电量计.lst
字号:
(0075) /***********************************************************
(0076) * 函数说明:软件驱动初始化函数 *
(0077) * 输入: 无 *
(0078) * 输出: 无 *
(0079) * 调用函数:无 *
(0080) ***********************************************************/
(0081) static void Driver_INIT(void)
(0082) {
_Driver_INIT:
0066 9508 RET
(0083) //*在这里插入你的各类软件驱动初始化代码*//
(0084) }
(0085)
(0086) /***********************************************************
(0087) * 函数说明:系统初始化函数 *
(0088) * 输入: 无 *
(0089) * 输出: 无 *
(0090) * 调用函数:Device_INIT() Driver_INIT() *
(0091) ***********************************************************/
(0092) void System_INIT(void)
(0093) {
(0094) CLI();
_System_INIT:
0067 94F8 BCLR 7
(0095)
(0096) Device_INIT();
0068 DFD2 RCALL _Device_INIT
(0097) Driver_INIT();
0069 DFFC RCALL _Driver_INIT
(0098)
(0099) //*在这里插入你的系统环境变量初始化代码*//
(0100)
(0101) SEI();
006A 9478 BSET 7
006B 9508 RET
_Insert_Adc_ISR_Code:
ADCValue --> R10
PORTValue --> R20
LoopCounter --> R22
006C D04A RCALL push_gset3
(0102) }
(0103)
(0104) /***********************************************************
(0105) * 函数说明:ADC采样完成中断处理程序 *
(0106) * 输入: 无 *
(0107) * 输出: 无 *
(0108) ***********************************************************/
(0109) void Insert_Adc_ISR_Code(void)
(0110) {
(0111) unsigned int ADCValue = ADC; //获取ADC10位精度的采样结果
006D 90A00078 LDS R10,0x78
006F 90B00079 LDS R11,0x79
(0112) unsigned char LoopCounter = 0,PORTValue = 0;
0071 2766 CLR R22
0072 2744 CLR R20
(0113)
(0114) LoopCounter = ADCValue / 170; //转换为端口光柱显示
0073 EA2A LDI R18,0xAA
0074 E030 LDI R19,0
0075 0185 MOVW R16,R10
0076 D020 RCALL div16u
0077 2F60 MOV R22,R16
0078 C006 RJMP 0x007F
(0115)
(0116) while(LoopCounter)
(0117) {
(0118) PORTValue |= 1<<(LoopCounter-1);
0079 2F16 MOV R17,R22
007A 5011 SUBI R17,1
007B E001 LDI R16,1
007C D083 RCALL lsl8
007D 2B40 OR R20,R16
(0119) LoopCounter--;
007E 956A DEC R22
007F 2366 TST R22
0080 F7C1 BNE 0x0079
(0120) }
(0121)
(0122) PORTB = PORTValue ^ 0xFF; //由于端口上的LED在低电平时点亮,为了适应习惯
0081 EF8F LDI R24,0xFF
0082 E090 LDI R25,0
0083 2E24 MOV R2,R20
0084 2433 CLR R3
0085 2628 EOR R2,R24
0086 2639 EOR R3,R25
0087 B825 OUT 0x05,R2
(0123) //在这里对端口数据做了反相的处理
(0124) IfGotADCValue = True; //设置采样完成标志
0088 E081 LDI R24,1
0089 93800100 STS IfGotADCValue,R24
008B D025 RCALL pop_gset3
008C 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:
008D DFD9 RCALL _System_INIT
008E C004 RJMP 0x0093
(0066)
(0067) while(TRUE) //超级循环
(0068) {
(0069) SMCR |= 0x01; //使能休眠功能
008F B783 IN R24,0x33
0090 6081 ORI R24,1
0091 BF83 OUT 0x33,R24
(0070) asm("SLEEP"); //休眠CPU,进入ADC噪声抑制模式
FILE: <library>
0092 9588 SLEEP
0093 CFFB RJMP 0x008F
0094 9508 RET
mod16u:
0095 9468 BSET 6
0096 C001 RJMP xdiv16u
div16u:
0097 94E8 BCLR 6
xdiv16u:
0098 92EA ST R14,-Y
0099 92FA ST R15,-Y
009A 938A ST R24,-Y
009B 24EE CLR R14
009C 24FF CLR R15
009D E180 LDI R24,0x10
009E 0F00 LSL R16
009F 1F11 ROL R17
00A0 1CEE ROL R14
00A1 1CFF ROL R15
00A2 16E2 CP R14,R18
00A3 06F3 CPC R15,R19
00A4 F018 BCS 0x00A8
00A5 1AE2 SUB R14,R18
00A6 0AF3 SBC R15,R19
00A7 9503 INC R16
00A8 958A DEC R24
00A9 F7A1 BNE 0x009E
00AA F416 BRTC 0x00AD
00AB 2D0E MOV R16,R14
00AC 2D1F MOV R17,R15
00AD 9189 LD R24,Y+
00AE 90F9 LD R15,Y+
00AF 90E9 LD R14,Y+
00B0 9508 RET
pop_gset3:
00B1 E0E4 LDI R30,4
00B2 C00C RJMP pop
push_gset5:
00B3 92FA ST R15,-Y
00B4 92EA ST R14,-Y
push_gset4:
00B5 92DA ST R13,-Y
00B6 92CA ST R12,-Y
push_gset3:
00B7 92BA ST R11,-Y
00B8 92AA ST R10,-Y
push_gset2:
00B9 937A ST R23,-Y
00BA 936A ST R22,-Y
push_gset1:
00BB 935A ST R21,-Y
00BC 934A ST R20,-Y
00BD 9508 RET
pop_gset1:
00BE E0E1 LDI R30,1
pop:
00BF 9149 LD R20,Y+
00C0 9159 LD R21,Y+
00C1 FDE0 SBRC R30,0
00C2 9508 RET
00C3 9169 LD R22,Y+
00C4 9179 LD R23,Y+
00C5 FDE1 SBRC R30,1
00C6 9508 RET
00C7 90A9 LD R10,Y+
00C8 90B9 LD R11,Y+
00C9 FDE2 SBRC R30,2
00CA 9508 RET
00CB 90C9 LD R12,Y+
00CC 90D9 LD R13,Y+
00CD FDE3 SBRC R30,3
00CE 9508 RET
00CF 90E9 LD R14,Y+
00D0 90F9 LD R15,Y+
00D1 9508 RET
push_lset:
00D2 93FA ST R31,-Y
00D3 93EA ST R30,-Y
00D4 93BA ST R27,-Y
00D5 93AA ST R26,-Y
00D6 939A ST R25,-Y
00D7 938A ST R24,-Y
00D8 933A ST R19,-Y
00D9 932A ST R18,-Y
00DA 931A ST R17,-Y
00DB 930A ST R16,-Y
00DC 929A ST R9,-Y
00DD 928A ST R8,-Y
00DE 927A ST R7,-Y
00DF 926A ST R6,-Y
00E0 925A ST R5,-Y
00E1 924A ST R4,-Y
00E2 923A ST R3,-Y
00E3 922A ST R2,-Y
00E4 921A ST R1,-Y
00E5 920A ST R0,-Y
00E6 B60F IN R0,0x3F
00E7 920A ST R0,-Y
00E8 9508 RET
pop_lset:
00E9 9009 LD R0,Y+
00EA BE0F OUT 0x3F,R0
00EB 9009 LD R0,Y+
00EC 9019 LD R1,Y+
00ED 9029 LD R2,Y+
00EE 9039 LD R3,Y+
00EF 9049 LD R4,Y+
00F0 9059 LD R5,Y+
00F1 9069 LD R6,Y+
00F2 9079 LD R7,Y+
00F3 9089 LD R8,Y+
00F4 9099 LD R9,Y+
00F5 9109 LD R16,Y+
00F6 9119 LD R17,Y+
00F7 9129 LD R18,Y+
00F8 9139 LD R19,Y+
00F9 9189 LD R24,Y+
00FA 9199 LD R25,Y+
00FB 91A9 LD R26,Y+
00FC 91B9 LD R27,Y+
00FD 91E9 LD R30,Y+
00FE 91F9 LD R31,Y+
00FF 9508 RET
lsl8:
0100 2311 TST R17
0101 F019 BEQ 0x0105
0102 0F00 LSL R16
0103 951A DEC R17
0104 CFFB RJMP lsl8
0105 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -