📄 警报灯.lst
字号:
(0119) TCNT1L = 0x2C; //重新加载定时器低位
006B E28C LDI R24,0x2C
006C 93800084 STS 0x84,R24
(0120)
(0121) DoFLASH = TRUE; //设置闪烁执行标志
006E E081 LDI R24,1
006F 93800102 STS DoFLASH,R24
(0122)
(0123) TimeStamp++;
0071 91800100 LDS R24,TimeStamp
0073 91900101 LDS R25,TimeStamp+1
0075 9601 ADIW R24,1
0076 93900101 STS TimeStamp+1,R25
0078 93800100 STS TimeStamp,R24
(0124) if (TimeStamp>Time_Stamp_MAX)
007A E18E LDI R24,0x1E
007B E090 LDI R25,0
007C 90200100 LDS R2,TimeStamp
007E 90300101 LDS R3,TimeStamp+1
0080 1582 CP R24,R2
0081 0593 CPC R25,R3
0082 F430 BCC 0x0089
(0125) TimeStamp = 0; //若时标达到设定的最大值,则清0
0083 2422 CLR R2
0084 2433 CLR R3
0085 92300101 STS TimeStamp+1,R3
0087 92200100 STS TimeStamp,R2
0089 9508 RET
FILE: D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例12_复杂闪烁控制\实例12_复杂闪烁控制_警报灯\System.c
(0001) /*********************************************************/
(0002) /* */
(0003) /* 实例12 复杂闪烁控制 警报灯 */
(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) * 函数说明:LED闪烁控制函数 *
(0059) * 输入: 无 *
(0060) * 输出: 无 *
(0061) * 调用函数: *
(0062) ***********************************************************/
(0063)
(0064) void LED_Flash (void)
(0065) {
(0066) switch (TimeStamp)
_LED_Flash:
008A 90200100 LDS R2,TimeStamp
008C 90300101 LDS R3,TimeStamp+1
008E 2022 TST R2
008F F411 BNE 0x0092
0090 2033 TST R3
0091 F189 BEQ 0x00C3
0092 91800100 LDS R24,TimeStamp
0094 91900101 LDS R25,TimeStamp+1
0096 3081 CPI R24,1
0097 E0E0 LDI R30,0
0098 079E CPC R25,R30
0099 F169 BEQ 0x00C7
009A 3082 CPI R24,2
009B E0E0 LDI R30,0
009C 079E CPC R25,R30
009D F169 BEQ 0x00CB
009E 3083 CPI R24,3
009F E0E0 LDI R30,0
00A0 079E CPC R25,R30
00A1 F169 BEQ 0x00CF
00A2 308A CPI R24,0xA
00A3 E0E0 LDI R30,0
00A4 079E CPC R25,R30
00A5 F169 BEQ 0x00D3
00A6 308B CPI R24,0xB
00A7 E0E0 LDI R30,0
00A8 079E CPC R25,R30
00A9 F169 BEQ 0x00D7
00AA 308C CPI R24,0xC
00AB E0E0 LDI R30,0
00AC 079E CPC R25,R30
00AD F169 BEQ 0x00DB
00AE 308D CPI R24,0xD
00AF E0E0 LDI R30,0
00B0 079E CPC R25,R30
00B1 F169 BEQ 0x00DF
00B2 3184 CPI R24,0x14
00B3 E0E0 LDI R30,0
00B4 079E CPC R25,R30
00B5 F169 BEQ 0x00E3
00B6 3185 CPI R24,0x15
00B7 E0E0 LDI R30,0
00B8 079E CPC R25,R30
00B9 F159 BEQ 0x00E5
00BA 3186 CPI R24,0x16
00BB E0E0 LDI R30,0
00BC 079E CPC R25,R30
00BD F149 BEQ 0x00E7
00BE 3187 CPI R24,0x17
00BF E0E0 LDI R30,0
00C0 079E CPC R25,R30
00C1 F139 BEQ 0x00E9
00C2 C027 RJMP 0x00EA
(0067) {
(0068) case 0 :
(0069) {
(0070) LED_ON_A;
00C3 B188 IN R24,0x08
00C4 7D8D ANDI R24,0xDD
00C5 B988 OUT 0x08,R24
(0071) break;
00C6 C023 RJMP 0x00EA
(0072) }
(0073)
(0074) case 1 :
(0075) {
(0076) LED_OFF_A;
00C7 B188 IN R24,0x08
00C8 6282 ORI R24,0x22
00C9 B988 OUT 0x08,R24
(0077) break;
00CA C01F RJMP 0x00EA
(0078) }
(0079)
(0080) case 2 :
(0081) {
(0082) LED_ON_A;
00CB B188 IN R24,0x08
00CC 7D8D ANDI R24,0xDD
00CD B988 OUT 0x08,R24
(0083) break;
00CE C01B RJMP 0x00EA
(0084) }
(0085)
(0086) case 3 :
(0087) {
(0088) LED_OFF_A;
00CF B188 IN R24,0x08
00D0 6282 ORI R24,0x22
00D1 B988 OUT 0x08,R24
(0089) break;
00D2 C017 RJMP 0x00EA
(0090) }
(0091)
(0092) case 10 :
(0093) {
(0094) LED_ON_B;
00D3 B188 IN R24,0x08
00D4 7E8B ANDI R24,0xEB
00D5 B988 OUT 0x08,R24
(0095) break;
00D6 C013 RJMP 0x00EA
(0096) }
(0097)
(0098) case 11 :
(0099) {
(0100) LED_OFF_B;
00D7 B188 IN R24,0x08
00D8 6184 ORI R24,0x14
00D9 B988 OUT 0x08,R24
(0101) break;
00DA C00F RJMP 0x00EA
(0102) }
(0103)
(0104) case 12 :
(0105) {
(0106) LED_ON_B;
00DB B188 IN R24,0x08
00DC 7E8B ANDI R24,0xEB
00DD B988 OUT 0x08,R24
(0107) break;
00DE C00B RJMP 0x00EA
(0108) }
(0109)
(0110) case 13 :
(0111) {
(0112) LED_OFF_B;
00DF B188 IN R24,0x08
00E0 6184 ORI R24,0x14
00E1 B988 OUT 0x08,R24
(0113) break;
00E2 C007 RJMP 0x00EA
(0114) }
(0115)
(0116) case 20 :
(0117) {
(0118) LED_ON_C;
00E3 9843 CBI 0x08,3
(0119) break;
00E4 C005 RJMP 0x00EA
(0120) }
(0121)
(0122) case 21 :
(0123) {
(0124) LED_OFF_C;
00E5 9A43 SBI 0x08,3
(0125) break;
00E6 C003 RJMP 0x00EA
(0126) }
(0127)
(0128) case 22 :
(0129) {
(0130) LED_ON_C;
00E7 9843 CBI 0x08,3
(0131) break;
00E8 C001 RJMP 0x00EA
(0132) }
(0133)
(0134) case 23 :
(0135) {
(0136) LED_OFF_C;
00E9 9A43 SBI 0x08,3
(0137) break;
00EA 9508 RET
(0138) }
(0139) }
(0140) }
(0141)
(0142) /***********************************************************
(0143) * 函数说明:主函数 *
(0144) * 输入: 无 *
(0145) * 输出: 无 *
(0146) * 调用函数:System_INIT() *
(0147) ***********************************************************/
(0148) void main(void)
(0149) {
(0150) System_INIT(); //代码初始化
_main:
00EB DF77 RCALL _System_INIT
00EC C008 RJMP 0x00F5
(0151)
(0152) while(TRUE) //超级循环
(0153) {
(0154) if (DoFLASH == TRUE)
00ED 91800102 LDS R24,DoFLASH
00EF 3081 CPI R24,1
00F0 F421 BNE 0x00F5
(0155) {
(0156) LED_Flash(); //当闪烁执行标志为真时,调用闪烁控制函数
00F1 DF98 RCALL _LED_Flash
(0157) DoFLASH = FALSE;
FILE: <library>
00F2 2422 CLR R2
00F3 92200102 STS DoFLASH,R2
00F5 CFF7 RJMP 0x00ED
00F6 9508 RET
push_lset:
00F7 93FA ST R31,-Y
00F8 93EA ST R30,-Y
00F9 93BA ST R27,-Y
00FA 93AA ST R26,-Y
00FB 939A ST R25,-Y
00FC 938A ST R24,-Y
00FD 933A ST R19,-Y
00FE 932A ST R18,-Y
00FF 931A ST R17,-Y
0100 930A ST R16,-Y
0101 929A ST R9,-Y
0102 928A ST R8,-Y
0103 927A ST R7,-Y
0104 926A ST R6,-Y
0105 925A ST R5,-Y
0106 924A ST R4,-Y
0107 923A ST R3,-Y
0108 922A ST R2,-Y
0109 921A ST R1,-Y
010A 920A ST R0,-Y
010B B60F IN R0,0x3F
010C 920A ST R0,-Y
010D 9508 RET
pop_lset:
010E 9009 LD R0,Y+
010F BE0F OUT 0x3F,R0
0110 9009 LD R0,Y+
0111 9019 LD R1,Y+
0112 9029 LD R2,Y+
0113 9039 LD R3,Y+
0114 9049 LD R4,Y+
0115 9059 LD R5,Y+
0116 9069 LD R6,Y+
0117 9079 LD R7,Y+
0118 9089 LD R8,Y+
0119 9099 LD R9,Y+
011A 9109 LD R16,Y+
011B 9119 LD R17,Y+
011C 9129 LD R18,Y+
011D 9139 LD R19,Y+
011E 9189 LD R24,Y+
011F 9199 LD R25,Y+
0120 91A9 LD R26,Y+
0121 91B9 LD R27,Y+
0122 91E9 LD R30,Y+
0123 91F9 LD R31,Y+
0124 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -