📄 model.lst
字号:
__text_start:
__start:
21 E5CF LDI R28,0x5F
22 E0D4 LDI R29,4
23 BFCD OUT 0x3D,R28
24 BFDE OUT 0x3E,R29
25 52C0 SUBI R28,0x20
26 40D0 SBCI R29,0
27 EA0A LDI R16,0xAA
28 8308 STD Y+0,R16
29 2400 CLR R0
2A E7EC LDI R30,0x7C
2B E0F0 LDI R31,0
2C E010 LDI R17,0
2D 37EC CPI R30,0x7C
2E 07F1 CPC R31,R17
2F F011 BEQ 0x0032
30 9201 ST R0,Z+
31 CFFB RJMP 0x002D
32 8300 STD Z+0,R16
33 E2E6 LDI R30,0x26
34 E0F0 LDI R31,0
35 E6A0 LDI R26,0x60
36 E0B0 LDI R27,0
37 E010 LDI R17,0
38 E000 LDI R16,0
39 BF0B OUT 0x3B,R16
3A 34E2 CPI R30,0x42
3B 07F1 CPC R31,R17
3C F021 BEQ 0x0041
3D 95C8 LPM
3E 9631 ADIW R30,1
3F 920D ST R0,X+
40 CFF9 RJMP 0x003A
41 D0DF RCALL _main
_exit:
42 CFFF RJMP _exit
FILE: E:\学习\实践班\单片机程序\硬件SPI\SPI_595\Project_Template_Basic\EX_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化驱动函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:EX_Support.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:底层硬件初始化驱动声明库 *
(0019) * *
(0020) * 支持库名称:PF_Config.h *
(0021) * 需要版本: ----- *
(0022) * 支持库说明:硬件平台配置声明库 *
(0023) * -------------------------------------------------------- *
(0024) * [版本更新] *
(0025) * 修改: *
(0026) * 修改日期: *
(0027) * 版本: *
(0028) * -------------------------------------------------------- *
(0029) * [版本历史] *
(0030) * -------------------------------------------------------- *
(0031) * [使用说明] *
(0032) ***********************************************************/
(0033)
(0034) /********************
(0035) * 头 文 件 配 置 区 *
(0036) ********************/
(0037) # include "PF_Config.h"
(0038) # include "Ex_Support.h"
(0039)
(0040) /********************
(0041) * 系 统 宏 定 义 *
(0042) ********************/
(0043)
(0044) /*------------------*
(0045) * 常 数 宏 定 义 *
(0046) *------------------*/
(0047)
(0048) /*------------------*
(0049) * 动 作 宏 定 义 *
(0050) *------------------*/
(0051)
(0052) /********************
(0053) * 模块结构体定义区 *
(0054) ********************/
(0055)
(0056) /********************
(0057) * 函 数 声 明 区 *
(0058) ********************/
(0059) void Insert_Timer0_OVF_ISR_Code(void);
(0060) void Driver_INIT(void);
(0061) void Delay_MS(uint16 wTime);
(0062) void Insert_SPI_STC_ISR_Code(void);
(0063)
(0064) /********************
(0065) * 模块函数声明区 *
(0066) ********************/
(0067)
(0068)
(0069) /********************
(0070) * 模块变量声明区 *
(0071) ********************/
(0072) static uint16 s_wSystemDelayTimerCounter = 0;
(0073) static const unsigned char s_cDISPCode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0074) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
(0075) 0x00,0x40,0x08,0x01,0x63,0x39,0x0f};
(0076) /********************
(0077) * 全局变量声明区 *
(0078) ********************/
(0079) uint16 g_wSystemTimer = 0;
(0080) UINT8 g_chCounter = 0;
(0081)
(0082) /***********************************************************
(0083) * 函数说明:软件驱动初始化函数 *
(0084) * 输入: 无 *
(0085) * 输出: 无 *
(0086) * 调用函数:无 *
(0087) ***********************************************************/
(0088) void Driver_INIT(void)
(0089) {
_Driver_INIT:
43 9508 RET
(0090) //*在这里插入你的各类软件驱动初始化代码*//
(0091) }
(0092)
(0093) /***********************************************************
(0094) * 函数说明:系统毫秒延时函数 *
(0095) * 输入: 需要延时的时间长度 *
(0096) * 输出: 无 *
(0097) * 调用函数:无 *
(0098) ***********************************************************/
(0099) void Delay_MS(uint16 wTime)
(0100) {
(0101) s_wSystemDelayTimerCounter = wTime;
_Delay_MS:
wTime --> R16
44 9310 0061 STS 0x0061,R17
46 9300 0060 STS 0x0060,R16
(0102)
(0103) while(s_wSystemDelayTimerCounter);
48 9020 0060 LDS R2,0x0060
4A 9030 0061 LDS R3,0x0061
4C 2022 TST R2
4D F7D1 BNE 0x0048
4E 2033 TST R3
4F F7C1 BNE 0x0048
50 9508 RET
(0104) }
(0105)
(0106) /***********************************************************
(0107) * 函数说明:定时器0中断处理程序代码插入函数 *
(0108) * 输入: 无 *
(0109) * 输出: 无 *
(0110) * 调用函数:无 *
(0111) ***********************************************************/
(0112) void Insert_Timer0_OVF_ISR_Code(void)
(0113) {
(0114) g_wSystemTimer++;
_Insert_Timer0_OVF_ISR_Code:
51 9180 0079 LDS R24,g_wSystemTimer
53 9190 007A LDS R25,g_wSystemTimer+1
55 9601 ADIW R24,1
56 9390 007A STS g_wSystemTimer+1,R25
58 9380 0079 STS g_wSystemTimer,R24
(0115)
(0116) if (s_wSystemDelayTimerCounter) //若计数器累加不为零
5A 9020 0060 LDS R2,0x0060
5C 9030 0061 LDS R3,0x0061
5E 2022 TST R2
5F F411 BNE 0x0062
60 2033 TST R3
61 F031 BEQ 0x0068
(0117) {
(0118) s_wSystemDelayTimerCounter--;
62 01C1 MOVW R24,R2
63 9701 SBIW R24,1
64 9390 0061 STS 0x0061,R25
66 9380 0060 STS 0x0060,R24
(0119) }
(0120)
(0121) if (!(g_wSystemTimer & (BIT(10) - 1))) //除以2的10次方取余为0
68 9180 0079 LDS R24,g_wSystemTimer
6A 9190 007A LDS R25,g_wSystemTimer+1
6C 7093 ANDI R25,3
6D 3080 CPI R24,0
6E 0789 CPC R24,R25
6F F441 BNE 0x0078
(0122) {
(0123) g_chCounter++;
70 9180 007B LDS R24,g_chCounter
72 5F8F SUBI R24,0xFF
73 9380 007B STS g_chCounter,R24
(0124) g_chCounter &= (BIT(4)-1); //对2的4次方取余
75 708F ANDI R24,0xF
76 9380 007B STS g_chCounter,R24
(0125) }
78 9508 RET
_Insert_SPI_STC_ISR_Code:
n1 --> R22
bIfKeyPressed0 --> R20
chKeyNUM0 --> R10
79 D0AF RCALL push_xgsetF00C
(0126) }
(0127)
(0128) void Insert_SPI_STC_ISR_Code(void)
(0129) {
(0130) UINT8 chKeyNUM = ~SPDR; //读取数据寄存器存贮的数据
7A B0AF IN R10,0x0F
7B 94A0 COM R10
(0131) UINT8 n = 0;
(0132) BOOL bIfKeyPressed = FALSE;
7C 2744 CLR R20
(0133)
(0134) PORT_SS = HIGH; //SS拉高
7D B388 IN R24,0x18
7E 6084 ORI R24,4
7F BB88 OUT 0x18,R24
(0135) PORT_SS = LOW; //ss拉低
80 B388 IN R24,0x18
81 7F8B ANDI R24,0xFB
82 BB88 OUT 0x18,R24
(0136) for (n = 0;n < 8;n++) //读取数据的每一位
83 2766 CLR R22
84 C012 RJMP 0x0097
(0137) {
(0138) if (chKeyNUM & BIT(n)) //读取第n位
85 E001 LDI R16,1
86 2F16 MOV R17,R22
87 D0AF RCALL lsl8
88 2C2A MOV R2,R10
89 2220 AND R2,R16
8A F059 BEQ 0x0096
(0139) {
(0140) SPDR = ~s_cDISPCode[n];
8B E682 LDI R24,0x62
8C E090 LDI R25,0
8D 2FE6 MOV R30,R22
8E 27FF CLR R31
8F 0FE8 ADD R30,R24
90 1FF9 ADC R31,R25
91 8020 LDD R2,Z+0
92 9420 COM R2
93 B82F OUT 0x0F,R2
(0141) bIfKeyPressed = TRUE;
94 E041 LDI R20,1
(0142) break;
95 C003 RJMP 0x0099
96 9563 INC R22
97 3068 CPI R22,0x8
98 F360 BCS 0x0085
(0143) }
(0144) }
(0145)
(0146) if (!bIfKeyPressed)
99 2344 TST R20
9A F451 BNE 0x00A5
(0147) {
(0148) SPDR = ~s_cDISPCode[g_chCounter];
9B E682 LDI R24,0x62
9C E090 LDI R25,0
9D 91E0 007B LDS R30,g_chCounter
9F 27FF CLR R31
A0 0FE8 ADD R30,R24
A1 1FF9 ADC R31,R25
A2 8020 LDD R2,Z+0
A3 9420 COM R2
A4 B82F OUT 0x0F,R2
(0149) }
A5 C08A RJMP pop_xgsetF00C
FILE: E:\学习\实践班\单片机程序\硬件SPI\SPI_595\Project_Template_Basic\HD_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:PF_Config.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:硬件平台配置声明库 *
(0019) * -------------------------------------------------------- *
(0020) * [版本更新] *
(0021) * 修改: *
(0022) * 修改日期: *
(0023) * 版本: *
(0024) * -------------------------------------------------------- *
(0025) * [版本历史] *
(0026) * -------------------------------------------------------- *
(0027) * [使用说明] *
(0028) ***********************************************************/
(0029)
(0030) /********************
(0031) * 头 文 件 配 置 区 *
(0032) ********************/
(0033) # include "PF_Config.h"
(0034) # include "HD_Support.h"
(0035)
(0036) /********************
(0037) * 系 统 宏 定 义 *
(0038) ********************/
(0039) # pragma interrupt_handler Timer0_OVF_ISR:iv_TIMER0_OVF
(0040) # pragma interrupt_handler SPI_STC_ISR:iv_SPI_STC
(0041) /*------------------*
(0042) * 常 数 宏 定 义 *
(0043) *------------------*/
(0044)
(0045) /*------------------*
(0046) * 动 作 宏 定 义 *
(0047) *------------------*/
(0048) #ifndef INSERT_TIMER0_OVF_ISR_CODE
(0049) # define INSERT_TIMER0_OVF_ISR_CODE
(0050) # warning "TIMER0_OVF_ISR haven`t been used but initialed!"
(0051) #endif
(0052) #ifndef INSERT_SPI_STC_ISR_CODE
(0053) # define INSERT_SPI_STC_ISR_CODE
(0054) # warning "SPI_STC_ISR haven`t been used but initialed!"
(0055) #endif
(0056)
(0057) /********************
(0058) * 模块结构体定义区 *
(0059) ********************/
(0060)
(0061) /********************
(0062) * 函 数 声 明 区 *
(0063) ********************/
(0064) void Device_INIT(void);
(0065)
(0066) /********************
(0067) * 模块函数声明区 *
(0068) ********************/
(0069) static void Port_INIT(void);
(0070) static void Timer0_INIT(void);
(0071) static void SPI_INIT(void);
(0072)
(0073) /********************
(0074) * 模块变量声明区 *
(0075) ********************/
(0076)
(0077) /********************
(0078) * 全局变量声明区 *
(0079) ********************/
(0080)
(0081)
(0082) /***********************************************************
(0083) * 函数说明:系统硬件初始化函数 *
(0084) * 输入: 无 *
(0085) * 输出: 无 *
(0086) * 调用函数:Port_INIT() Timer0_INIT() *
(0087) ***********************************************************/
(0088) void Device_INIT(void)
(0089) {
(0090) Port_INIT();
_Device_INIT:
A6 D038 RCALL HD_Support.c:Port_INIT
(0091) Timer0_INIT();
A7 D03C RCALL _Timer0_INIT
(0092) SPI_INIT();
A8 D003 RCALL _SPI_INIT
(0093) //*在这里添加其他初始化函数*//
(0094)
(0095) TIMSK = BIT(TOIE0); //启动定时期0溢出中断资源
A9 E081 LDI R24,1
AA BF89 OUT 0x39,R24
AB 9508 RET
(0096) //*在这里添加其他全局寄存器的初始化代码*//
(0097) }
(0098)
(0099) /***********************************************************
(0100) * 函数说明:SPI硬件初始化函数 *
(0101) * 输入: 无 *
(0102) * 输出: 无 *
(0103) * 调用函数:无 *
(0104) ***********************************************************/
(0105) static void SPI_INIT(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -