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

📄 电量计.lst

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0044) 
(0045) /*------------------*
(0046) *   常 数 宏 定 义  *
(0047) *------------------*/
(0048) 
(0049) /*------------------*
(0050) *   动 作 宏 定 义  *
(0051) *------------------*/
(0052) 
(0053) /********************
(0054) *  模块结构体定义区 *
(0055) ********************/
(0056) 
(0057) /********************
(0058) *   函 数 声 明 区  *
(0059) ********************/
(0060) void System_INIT(void);
(0061) 
(0062) /********************
(0063) *   模块函数声明区  *
(0064) ********************/
(0065) static void Driver_INIT(void);
(0066) 
(0067) /********************
(0068) *   模块变量声明区  *
(0069) ********************/
(0070) 
(0071) /********************
(0072) *   全局变量声明区  *
(0073) ********************/
(0074) 
(0075) /***********************************************************
(0076) *   函数说明:软件驱动初始化函数                           *
(0077) *   输入:    无                                           *
(0078) *   输出:    无                                           *
(0079) *   调用函数:无                                           *
(0080) ***********************************************************/
(0081) static void Driver_INIT(void)
(0082) {
_Driver_INIT:
    005C 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:
    005D 94F8      BCLR	7
(0095)     
(0096)     Device_INIT();
    005E DFDC      RCALL	_Device_INIT
(0097)     Driver_INIT();
    005F DFFC      RCALL	_Driver_INIT
(0098)     
(0099)     //*在这里插入你的系统环境变量初始化代码*//
(0100)     
(0101)     SEI();
    0060 9478      BSET	7
    0061 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) 	unsigned int Voltage;
(0066) 	unsigned char Loop_Counter, Port_Value;
(0067) 
(0068) 	System_INIT();				//调用初始化器件函数
_main:
  Voltage              --> R10
  Port_Value           --> R20
  Loop_Counter         --> R22
    0062 DFFA      RCALL	_System_INIT
(0069) 
(0070) 	SEI();						//器件初始化完成,允许中断
    0063 9478      BSET	7
    0064 C025      RJMP	0x008A
(0071) 
(0072) 	while(TRUE)
(0073) 	{
(0074) 		ADCSRA |= 1<<ADSC;			//置位ADSC位,启动一次转换
    0065 9180007A  LDS	R24,0x7A
    0067 6480      ORI	R24,0x40
    0068 9380007A  STS	0x7A,R24
(0075) 		while(!(ADCSRA&(1<<ADIF)));		//查询方式等待转换完成
    006A 9020007A  LDS	R2,0x7A
    006C FE24      SBRS	R2,4
    006D CFFC      RJMP	0x006A
(0076) 
(0077) 		Voltage = ADC;				//读入ADCH和ADCL中的转换结果
    006E 90A00078  LDS	R10,0x78
    0070 90B00079  LDS	R11,0x79
(0078) 
(0079) 		Loop_Counter = Voltage/170;		//转换为光柱显示
    0072 EA2A      LDI	R18,0xAA
    0073 E030      LDI	R19,0
    0074 0185      MOVW	R16,R10
    0075 D018      RCALL	div16u
    0076 2F60      MOV	R22,R16
(0080) 
(0081) 		Port_Value = 0x00;
    0077 2744      CLR	R20
    0078 C006      RJMP	0x007F
(0082) 		while(Loop_Counter>0)
(0083) 		{
(0084) 			Port_Value |= 1<<(Loop_Counter-1);
    0079 2F16      MOV	R17,R22
    007A 5011      SUBI	R17,1
    007B E001      LDI	R16,1
    007C D02B      RCALL	lsl8
    007D 2B40      OR	R20,R16
(0085) 			Loop_Counter--;
    007E 956A      DEC	R22
    007F 2422      CLR	R2
    0080 1626      CP	R2,R22
    0081 F3B8      BCS	0x0079
(0086) 		}
(0087) 
(0088) 		Port_Value^=0xFF;			//由于端口上的LED在低电平时点亮,为了适应习惯
    0082 EF8F      LDI	R24,0xFF
    0083 E090      LDI	R25,0
    0084 2E24      MOV	R2,R20
    0085 2433      CLR	R3
    0086 2628      EOR	R2,R24
    0087 2639      EOR	R3,R25
    0088 2D42      MOV	R20,R2
(0089) 		PORTB = Port_Value;			//在这里对端口数据做了反相的处理
FILE: <library>
    0089 B825      OUT	0x05,R2
    008A CFDA      RJMP	0x0065
    008B 9508      RET
mod16u:
    008C 9468      BSET	6
    008D C001      RJMP	xdiv16u
div16u:
    008E 94E8      BCLR	6
xdiv16u:
    008F 92EA      ST	R14,-Y
    0090 92FA      ST	R15,-Y
    0091 938A      ST	R24,-Y
    0092 24EE      CLR	R14
    0093 24FF      CLR	R15
    0094 E180      LDI	R24,0x10
    0095 0F00      LSL	R16
    0096 1F11      ROL	R17
    0097 1CEE      ROL	R14
    0098 1CFF      ROL	R15
    0099 16E2      CP	R14,R18
    009A 06F3      CPC	R15,R19
    009B F018      BCS	0x009F
    009C 1AE2      SUB	R14,R18
    009D 0AF3      SBC	R15,R19
    009E 9503      INC	R16
    009F 958A      DEC	R24
    00A0 F7A1      BNE	0x0095
    00A1 F416      BRTC	0x00A4
    00A2 2D0E      MOV	R16,R14
    00A3 2D1F      MOV	R17,R15
    00A4 9189      LD	R24,Y+
    00A5 90F9      LD	R15,Y+
    00A6 90E9      LD	R14,Y+
    00A7 9508      RET
lsl8:
    00A8 2311      TST	R17
    00A9 F019      BEQ	0x00AD
    00AA 0F00      LSL	R16
    00AB 951A      DEC	R17
    00AC CFFB      RJMP	lsl8
    00AD 9508      RET

⌨️ 快捷键说明

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