passive_encoder.lst
来自「全场地位系统:小车静止或移动过程中码盘进行全场定位,用的是avr单片机」· LST 代码 · 共 1,758 行 · 第 1/5 页
LST
1,758 行
(0164) * 输入: 无 *
(0165) * 输出: 无 *
(0166) * 调用函数:无 *
(0167) ***********************************************************/
(0168) void Insert_Timer0_OVF_ISR_Code(void)
(0169) {
(0170) g_wSystemTimer++;
_Insert_Timer0_OVF_ISR_Code:
cflags0 --> R16
DE 9180 0102 LDS R24,g_wSystemTimer
E0 9190 0103 LDS R25,g_wSystemTimer+1
E2 9601 ADIW R24,1
E3 9390 0103 STS g_wSystemTimer+1,R25
E5 9380 0102 STS g_wSystemTimer,R24
(0171)
(0172) if (s_wSystemDelayTimerCounter)
E7 9020 0100 LDS R2,0x0100
E9 9030 0101 LDS R3,0x0101
EB 2022 TST R2
EC F411 BNE 0x00EF
ED 2033 TST R3
EE F031 BEQ 0x00F5
(0173) {
(0174) s_wSystemDelayTimerCounter--;
EF 01C1 MOVW R24,R2
F0 9701 SBIW R24,1
F1 9390 0101 STS 0x0101,R25
F3 9380 0100 STS 0x0100,R24
(0175) }
(0176)
(0177) SAFE_CODE_PERFORMANCE
F5 B70F IN R16,0x3F
F6 94F8 BCLR 7
F7 9040 0106 LDS R4,g_lCounterL+2
F9 9050 0107 LDS R5,g_lCounterL+3
FB 9020 0104 LDS R2,g_lCounterL
FD 9030 0105 LDS R3,g_lCounterL+1
FF 9230 010D STS g_lCounterLImage+1,R3
101 9220 010C STS g_lCounterLImage,R2
103 9250 010F STS g_lCounterLImage+3,R5
105 9240 010E STS g_lCounterLImage+2,R4
107 9040 010A LDS R4,g_lCounterR+2
109 9050 010B LDS R5,g_lCounterR+3
10B 9020 0108 LDS R2,g_lCounterR
10D 9030 0109 LDS R3,g_lCounterR+1
10F 9230 0111 STS g_lCounterRImage+1,R3
111 9220 0110 STS g_lCounterRImage,R2
113 9250 0113 STS g_lCounterRImage+3,R5
115 9240 0112 STS g_lCounterRImage+2,R4
117 BF0F OUT 0x3F,R16
(0178) (
(0179) g_lCounterLImage = g_lCounterL;
(0180) g_lCounterRImage = g_lCounterR;
(0181) )
(0182) g_bRunFlagA = TRUE;
118 E081 LDI R24,1
119 9380 014B STS g_bRunFlagA,R24
11B 9508 RET
FILE: E:\单片机\ROOBCO~1\全向定位系统\被动小车\Passive_Encoder\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 INT0_ISR:iv_INT0
(0041) # pragma interrupt_handler INT1_ISR:iv_INT1
(0042) # pragma interrupt_handler PCINT0_ISR:iv_PCINT0
(0043) # pragma interrupt_handler PCINT1_ISR:iv_PCINT1
(0044) # pragma interrupt_handler SPI_STC_ISR:iv_SPI_STC
(0045) /*------------------*
(0046) * 常 数 宏 定 义 *
(0047) *------------------*/
(0048)
(0049) /*------------------*
(0050) * 动 作 宏 定 义 *
(0051) *------------------*/
(0052) #ifndef INSERT_TIMER0_OVF_ISR_CODE
(0053) # define INSERT_TIMER0_OVF_ISR_CODE
(0054) #endif
(0055)
(0056) #ifndef INSERT_INT0_ISR_CODE
(0057) # define INSERT_INT0_ISR_CODE
(0058) #endif
(0059)
(0060) #ifndef INSERT_INT1_ISR_CODE
(0061) # define INSERT_INT1_ISR_CODE
(0062) #endif
(0063)
(0064) #ifndef INSERT_PCINT0_ISR_CODE
(0065) # define INSERT_PCINT0_ISR_CODE
(0066) #endif
(0067)
(0068) #ifndef INSERT_PCINT1_ISR_CODE
(0069) # define INSERT_PCINT1_ISR_CODE
(0070) #endif
(0071)
(0072) #ifndef INSERT_SPI_STC_ISR_CODE
(0073) # define INSERT_SPI_STC_ISR_CODE
(0074) #endif
(0075) /********************
(0076) * 模块结构体定义区 *
(0077) ********************/
(0078)
(0079) /********************
(0080) * 函 数 声 明 区 *
(0081) ********************/
(0082) void Device_INIT(void);
(0083)
(0084) /********************
(0085) * 模块函数声明区 *
(0086) ********************/
(0087) static void Port_INIT(void);
(0088) static void Timer0_INIT(void);
(0089) static void Extend_INT_INIT(void);
(0090) static void SPI_INIT(void);
(0091)
(0092) /********************
(0093) * 模块变量声明区 *
(0094) ********************/
(0095)
(0096) /********************
(0097) * 全局变量声明区 *
(0098) ********************/
(0099)
(0100)
(0101) /***********************************************************
(0102) * 函数说明:系统硬件初始化函数 *
(0103) * 输入: 无 *
(0104) * 输出: 无 *
(0105) * 调用函数:Port_INIT() Timer0_INIT() *
(0106) ***********************************************************/
(0107) void Device_INIT(void)
(0108) {
(0109) Port_INIT();
_Device_INIT:
11C D007 RCALL HD_Support.c:Port_INIT
(0110) Timer0_INIT();
11D D1B1 RCALL _Timer0_INIT
(0111) SPI_INIT();
11E D1E9 RCALL HD_Support.c:SPI_INIT
(0112) Extend_INT_INIT();
11F D02D RCALL HD_Support.c:Extend_INT_INIT
(0113)
(0114) TIMSK0 = BIT(TOIE0); //启动定时期0溢出中断资源
120 E081 LDI R24,1
121 9380 006E STS 0x006E,R24
123 9508 RET
(0115) }
(0116)
(0117) /***********************************************************
(0118) * 函数说明:系统端口初始化函数 *
(0119) * 输入: 无 *
(0120) * 输出: 无 *
(0121) * 调用函数:无 *
(0122) ***********************************************************/
(0123) static void Port_INIT(void)
(0124) {
(0125) //LCDSP027
(0126) DDR_PD1 = PDIR_OUT;_PD1 = HIGH;
HD_Support.c:Port_INIT:
_Port_INIT:
124 B18A IN R24,0x0A
125 6082 ORI R24,2
126 B98A OUT 0x0A,R24
127 B18B IN R24,0x0B
128 6082 ORI R24,2
129 B98B OUT 0x0B,R24
(0127) DDR_PD0 = PDIR_OUT;_PD0 = HIGH;
12A B18A IN R24,0x0A
12B 6081 ORI R24,1
12C B98A OUT 0x0A,R24
12D B18B IN R24,0x0B
12E 6081 ORI R24,1
12F B98B OUT 0x0B,R24
(0128)
(0129) //外部中断
(0130) DDR_PD2 = PDIR_IN; _PD2 = HIGH; //开启上拉电阻
130 B18A IN R24,0x0A
131 7F8B ANDI R24,0xFB
132 B98A OUT 0x0A,R24
133 B18B IN R24,0x0B
134 6084 ORI R24,4
135 B98B OUT 0x0B,R24
(0131) DDR_PC3 = PDIR_IN; _PC3 = HIGH; //开启上拉电阻
136 B187 IN R24,0x07
137 7F87 ANDI R24,0xF7
138 B987 OUT 0x07,R24
139 B188 IN R24,0x08
13A 6088 ORI R24,0x8
13B B988 OUT 0x08,R24
(0132)
(0133) DDR_PD3 = PDIR_IN; _PD3 = HIGH; //开启上拉电阻
13C B18A IN R24,0x0A
13D 7F87 ANDI R24,0xF7
13E B98A OUT 0x0A,R24
13F B18B IN R24,0x0B
140 6088 ORI R24,0x8
141 B98B OUT 0x0B,R24
(0134) DDR_PB0 = PDIR_IN; _PB0 = HIGH; //开启上拉电阻
142 B184 IN R24,0x04
143 7F8E ANDI R24,0xFE
144 B984 OUT 0x04,R24
145 B185 IN R24,0x05
146 6081 ORI R24,1
147 B985 OUT 0x05,R24
(0135)
(0136) //SPI初始化
(0137) DDRB |= BIT(PB5)|BIT(PB3)|BIT(PB2);
148 B184 IN R24,0x04
149 628C ORI R24,0x2C
14A B984 OUT 0x04,R24
(0138) PORTB |= BIT(PB2);
14B 9A2A SBI 0x05,2
14C 9508 RET
(0139) }
(0140)
(0141) /***********************************************************
(0142) * 函数说明:外中断初始化函数 *
(0143) * 输入: 无 *
(0144) * 输出: 无 *
(0145) * 调用函数:无 *
(0146) ***********************************************************/
(0147) static void Extend_INT_INIT(void)
(0148) {
(0149) //INT0 INT1
(0150) EICRA = BIT(ISC10)|BIT(ISC00); //任意电平变化
HD_Support.c:Extend_INT_INIT:
_Extend_INT_INIT:
14D E085 LDI R24,5
14E 9380 0069 STS 0x0069,R24
(0151) EIMSK = BIT(INT1)|BIT(INT0); //中断使能
150 E083 LDI R24,3
151 BB8D OUT 0x1D,R24
(0152)
(0153) //Pin Change Int
(0154) PCICR = BIT(PCIE0)|BIT(PCIE1);
152 9380 0068 STS 0x0068,R24
(0155) PCMSK1 = BIT(PCINT11);
154 E088 LDI R24,0x8
155 9380 006C STS 0x006C,R24
(0156) PCMSK0 = BIT(PCINT0);
157 E081 LDI R24,1
158 9380 006B STS 0x006B,R24
15A 9508 RET
_INT0_ISR:
15B 920A ST R0,-Y
15C 921A ST R1,-Y
15D 922A ST R2,-Y
15E 923A ST R3,-Y
15F 924A ST R4,-Y
160 925A ST R5,-Y
161 930A ST R16,-Y
162 931A ST R17,-Y
163 932A ST R18,-Y
164 933A ST R19,-Y
165 938A ST R24,-Y
166 939A ST R25,-Y
167 93AA ST R26,-Y
168 93BA ST R27,-Y
169 B60F IN R0,0x3F
16A 920A ST R0,-Y
(0157) }
(0158)
(0159) /***********************************************************
(0160) * 函数说明:INT0中断处理程序 *
(0161) * 输入: 无 *
(0162) * 输出: 无 *
(0163) * 调用函数:INSERT_INT0_ISR_CODE *
(0164) ***********************************************************/
(0165) void INT0_ISR(void)
(0166) {
(0167) INSERT_INT0_ISR_CODE
16B 9478 BSET 7
16C B186 IN R24,0x06
16D 9586 LSR R24
16E 9586 LSR R24
16F 9586 LSR R24
170 7081 ANDI R24,1
171 B199 IN R25,0x09
172 9596 LSR R25
173 9596 LSR R25
174 7091 ANDI R25,1
175 1798 CP R25,R24
176 F4C9 BNE 0x0190
177 E081 LDI R24,1
178 E090 LDI R25,0
179 E0A0 LDI R26,0
17A E0B0 LDI R27,0
17B 9040 0106 LDS R4,g_lCounterL+2
17D 9050 0107 LDS R5,g_lCounterL+3
17F 9020 0104 LDS R2,g_lCounterL
181 9030 0105 LDS R3,g_lCounterL+1
183 0E28 ADD R2,R24
184 1E39 ADC R3,R25
185 1E4A ADC R4,R26
186 1E5B ADC R5,R27
187 9230 0105 STS g_lCounterL+1,R3
189 9220 0104 STS g_lCounterL,R2
18B 9250 0107 STS g_lCounterL+3,R5
18D 9240 0106 STS g_lCounterL+2,R4
18F C018 RJMP 0x01A8
190 E081 LDI R24,1
191 E090 LDI R25,0
192 E0A0 LDI R26,0
193 E0B0 LDI R27,0
194 9040 0106 LDS R4,g_lCounterL+2
196 9050 0107 LDS R5,g_lCounterL+3
198 9020 0104 LDS R2,g_lCounterL
19A 9030 0105 LDS R3,g_lCounterL+1
19C 1A28 SUB R2,R24
19D 0A39 SBC R3,R25
19E 0A4A SBC R4,R26
19F 0A5B SBC R5,R27
1A0 9230 0105 STS g_lCounterL+1,R3
1A2 9220 0104 STS g_lCounterL,R2
1A4 9250 0107 STS g_lCounterL+3,R5
1A6 9240 0106 STS g_lCounterL+2,R4
1A8 9009 LD R0,Y+
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?