📄 单灯连闪.lst
字号:
(0073)
(0074) /********************
(0075) * 全局变量声明区 *
(0076) ********************/
(0077)
(0078) /***********************************************************
(0079) * 函数说明:软件驱动初始化函数 *
(0080) * 输入: 无 *
(0081) * 输出: 无 *
(0082) * 调用函数:无 *
(0083) ***********************************************************/
(0084) static void Driver_INIT(void)
(0085) {
(0086) //*在这里插入你的各类软件驱动初始化代码*//
(0087) DoFLASH = FALSE;
_Driver_INIT:
005F 2422 CLR R2
0060 92200102 STS DoFLASH,R2
0062 9508 RET
(0088) }
(0089)
(0090) /***********************************************************
(0091) * 函数说明:系统初始化函数 *
(0092) * 输入: 无 *
(0093) * 输出: 无 *
(0094) * 调用函数:Device_INIT() Driver_INIT() *
(0095) ***********************************************************/
(0096) void System_INIT(void)
(0097) {
(0098) CLI();
_System_INIT:
0063 94F8 BCLR 7
(0099)
(0100) Device_INIT();
0064 DFD6 RCALL _Device_INIT
(0101) Driver_INIT();
0065 DFF9 RCALL _Driver_INIT
(0102)
(0103) //*在这里插入你的系统环境变量初始化代码*//
(0104)
(0105) SEI();
0066 9478 BSET 7
0067 9508 RET
(0106) }
(0107)
(0108) /***********************************************************
(0109) * 函数说明:定时器1中断处理程序代码插入函数 *
(0110) * 输入: 无 *
(0111) * 输出: 无 *
(0112) * 调用函数:无 *
(0113) ***********************************************************/
(0114)
(0115) void Insert_Timer1_OVF_ISR_Code (void)
(0116) {
(0117) TCNT1H = 0xCF; //重新加载定时器高位
_Insert_Timer1_OVF_ISR_Code:
0068 EC8F LDI R24,0xCF
0069 93800085 STS 0x85,R24
(0118) TCNT1L = 0x2C; //重新加载定时器低位
006B E28C LDI R24,0x2C
006C 93800084 STS 0x84,R24
(0119)
(0120) DoFLASH = TRUE; //设置闪烁执行标志
006E E081 LDI R24,1
006F 93800102 STS DoFLASH,R24
(0121)
(0122) 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
(0123) if (TimeStamp>Time_Stamp_MAX)
007A E08A LDI R24,0xA
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
(0124) 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) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [支 持 库] *
(0008) * 支持库名称:PF_Config.h *
(0009) * 需要版本: ----- *
(0010) * 支持库说明:硬件平台配置声明库 *
(0011) * -------------------------------------------------------- *
(0012) * [版本更新] *
(0013) * 修改: *
(0014) * 修改日期: *
(0015) * 版本: *
(0016) * -------------------------------------------------------- *
(0017) * [版本历史] *
(0018) * -------------------------------------------------------- *
(0019) * [使用说明] *
(0020) ***********************************************************/
(0021)
(0022) /********************
(0023) * 头 文 件 配 置 区 *
(0024) ********************/
(0025) # include "PF_Config.h"
(0026)
(0027) /********************
(0028) * 系 统 宏 定 义 *
(0029) ********************/
(0030)
(0031) /*------------------*
(0032) * 常 数 宏 定 义 *
(0033) *------------------*/
(0034)
(0035) /*------------------*
(0036) * 动 作 宏 定 义 *
(0037) *------------------*/
(0038)
(0039) /********************
(0040) * 模块结构体定义区 *
(0041) ********************/
(0042)
(0043) /********************
(0044) * 模块函数声明区 *
(0045) ********************/
(0046)
(0047) /********************
(0048) * 模块变量声明区 *
(0049) ********************/
(0050)
(0051) /***********************************************************
(0052) * 函数说明:LED闪烁控制函数 *
(0053) * 输入: 无 *
(0054) * 输出: 无 *
(0055) * 调用函数: *
(0056) ***********************************************************/
(0057)
(0058) void LED_Flash (void)
(0059) {
(0060) 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 F089 BEQ 0x00A3
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 F059 BEQ 0x00A5
009A 3082 CPI R24,2
009B E0E0 LDI R30,0
009C 079E CPC R25,R30
009D F049 BEQ 0x00A7
009E 3083 CPI R24,3
009F E0E0 LDI R30,0
00A0 079E CPC R25,R30
00A1 F039 BEQ 0x00A9
00A2 C007 RJMP 0x00AA
(0061) {
(0062) case 0 :
(0063) {
(0064) LED_ON;
00A3 9845 CBI 0x08,5
(0065) break;
00A4 C005 RJMP 0x00AA
(0066) }
(0067)
(0068) case 1 :
(0069) {
(0070) LED_OFF;
00A5 9A45 SBI 0x08,5
(0071) break;
00A6 C003 RJMP 0x00AA
(0072) }
(0073)
(0074) case 2 :
(0075) {
(0076) LED_ON;
00A7 9845 CBI 0x08,5
(0077) break;
00A8 C001 RJMP 0x00AA
(0078) }
(0079)
(0080) case 3 :
(0081) {
(0082) LED_OFF;
00A9 9A45 SBI 0x08,5
(0083) break;
00AA 9508 RET
(0084) }
(0085) }
(0086) }
(0087)
(0088) /***********************************************************
(0089) * 函数说明:主函数 *
(0090) * 输入: 无 *
(0091) * 输出: 无 *
(0092) * 调用函数:System_INIT() *
(0093) ***********************************************************/
(0094) void main(void)
(0095) {
(0096) System_INIT(); //代码初始化
_main:
00AB DFB7 RCALL _System_INIT
00AC C008 RJMP 0x00B5
(0097)
(0098) while(TRUE) //超级循环
(0099) {
(0100) if (DoFLASH == TRUE)
00AD 91800102 LDS R24,DoFLASH
00AF 3081 CPI R24,1
00B0 F421 BNE 0x00B5
(0101) {
(0102) LED_Flash(); //当闪烁执行标志为真时,调用闪烁控制函数
00B1 DFD8 RCALL _LED_Flash
(0103) DoFLASH = FALSE;
FILE: <library>
00B2 2422 CLR R2
00B3 92200102 STS DoFLASH,R2
00B5 CFF7 RJMP 0x00AD
00B6 9508 RET
push_lset:
00B7 93FA ST R31,-Y
00B8 93EA ST R30,-Y
00B9 93BA ST R27,-Y
00BA 93AA ST R26,-Y
00BB 939A ST R25,-Y
00BC 938A ST R24,-Y
00BD 933A ST R19,-Y
00BE 932A ST R18,-Y
00BF 931A ST R17,-Y
00C0 930A ST R16,-Y
00C1 929A ST R9,-Y
00C2 928A ST R8,-Y
00C3 927A ST R7,-Y
00C4 926A ST R6,-Y
00C5 925A ST R5,-Y
00C6 924A ST R4,-Y
00C7 923A ST R3,-Y
00C8 922A ST R2,-Y
00C9 921A ST R1,-Y
00CA 920A ST R0,-Y
00CB B60F IN R0,0x3F
00CC 920A ST R0,-Y
00CD 9508 RET
pop_lset:
00CE 9009 LD R0,Y+
00CF BE0F OUT 0x3F,R0
00D0 9009 LD R0,Y+
00D1 9019 LD R1,Y+
00D2 9029 LD R2,Y+
00D3 9039 LD R3,Y+
00D4 9049 LD R4,Y+
00D5 9059 LD R5,Y+
00D6 9069 LD R6,Y+
00D7 9079 LD R7,Y+
00D8 9089 LD R8,Y+
00D9 9099 LD R9,Y+
00DA 9109 LD R16,Y+
00DB 9119 LD R17,Y+
00DC 9129 LD R18,Y+
00DD 9139 LD R19,Y+
00DE 9189 LD R24,Y+
00DF 9199 LD R25,Y+
00E0 91A9 LD R26,Y+
00E1 91B9 LD R27,Y+
00E2 91E9 LD R30,Y+
00E3 91F9 LD R31,Y+
00E4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -