model.lst
来自「移动机器人(小车)的物理坐标和逻辑坐标的转换源码」· LST 代码 · 共 1,693 行 · 第 1/5 页
LST
1,693 行
(0061) # include "RD_UseSerialBuff.h"
(0062)
(0063) /********************
(0064) * 系 统 宏 定 义 *
(0065) ********************/
(0066)
(0067) /*------------------*
(0068) * 常 数 宏 定 义 *
(0069) *------------------*/
(0070) #ifndef SERIAL_RX_BUFF_SIZE
(0071) # define SERIAL_RX_BUFF_SIZE 32
(0072) #endif
(0073) #ifndef SERIAL_TX_BUFF_SIZE
(0074) # define SERIAL_TX_BUFF_SIZE 32
(0075) #endif
(0076) #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0077) #ifndef UDR_PORT
(0078) # error Need for UDR_PORT!
(0079) #endif
(0080)
(0081) #ifndef SERIAL_ENABLE_WRITE
(0082) # define SERIAL_ENABLE_WRITE
(0083) #endif
(0084)
(0085) #ifndef SERIAL_DISABLE_WRITE
(0086) # define SERIAL_DISABLE_WRITE
(0087) #endif
(0088) #endif
(0089) /********************
(0090) * 函 数 声 明 区 *
(0091) ********************/
(0092) #ifdef _USE_SERIAL_RX_BUFF
(0093) BOOL UARTaddDataToRxBuff(uint8 Data);
(0094) BOOL UARTgetDataFromRxBuff(uint8 *Data);
(0095) #endif
(0096)
(0097) #ifdef _USE_SERIAL_TX_BUFF
(0098) BOOL UARTaddDataToTxBuff(uint8 Data);
(0099) BOOL UARTgetDataFromTxBuff(uint8 *Data);
(0100) #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0101) BOOL PROC_Serial_Transmitter(void);
(0102) #endif
(0103) #endif
(0104)
(0105) /********************
(0106) * 模块变量定义区 *
(0107) ********************/
(0108) #ifdef _USE_SERIAL_RX_BUFF
(0109) static uint8 UARTRxBuff[SERIAL_RX_BUFF_SIZE];
(0110) static unsigned int UARTRxBuffHead = 0;
(0111) static unsigned int UARTRxBuffTail = 0;
(0112) static unsigned int UARTRxBuffCounter = 0;
(0113) #endif
(0114)
(0115) #ifdef _USE_SERIAL_TX_BUFF
(0116) static uint8 UARTTxBuff[SERIAL_TX_BUFF_SIZE];
(0117) static unsigned int UARTTxBuffHead = 0;
(0118) static unsigned int UARTTxBuffTail = 0;
(0119) static unsigned int UARTTxBuffCounter = 0;
(0120) #endif
(0121)
(0122) /********************
(0123) * 全局变量定义区 *
(0124) ********************/
(0125) #ifdef _USE_SERIAL_TX_BUFF
(0126) #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0127) BOOL g_bIfSerialTransmitCompleted = TRUE;
(0128) #endif
(0129) #endif
(0130)
(0131) /***********************************************************
(0132) * 函数说明:接收缓冲区取值函数 *
(0133) * 输入: 存储取出数据地址的指针 *
(0134) * 输出: 取值是否成功 *
(0135) * 调用函数:无 *
(0136) ***********************************************************/
(0137) #ifdef _USE_SERIAL_RX_BUFF
(0138) BOOL UARTgetDataFromRxBuff(uint8 *Data)
(0139) {
(0140) SAFE_CODE_PERFORMANCE
F8 B6AF IN R10,0x3F
F9 94F8 BCLR 7
FA 9020 0105 LDS R2,RD_UseCooperatingMiniOs.c:n+3
FC 9030 0106 LDS R3,0x0106
FE 9040 0103 LDS R4,RD_UseCooperatingMiniOs.c:n+1
100 9050 0104 LDS R5,RD_UseCooperatingMiniOs.c:n+2
102 1442 CP R4,R2
103 0453 CPC R5,R3
104 F459 BNE 0x0110
105 9020 0107 LDS R2,0x0107
107 9030 0108 LDS R3,0x0108
109 2022 TST R2
10A F429 BNE 0x0110
10B 2033 TST R3
10C F419 BNE 0x0110
10D 9478 BSET 7
10E 2700 CLR R16
10F C02B RJMP 0x013B
110 9020 0103 LDS R2,RD_UseCooperatingMiniOs.c:n+1
112 9030 0104 LDS R3,RD_UseCooperatingMiniOs.c:n+2
114 01C1 MOVW R24,R2
115 9601 ADIW R24,1
116 9390 0104 STS RD_UseCooperatingMiniOs.c:n+2,R25
118 9380 0103 STS RD_UseCooperatingMiniOs.c:n+1,R24
11A EB85 LDI R24,0xB5
11B E091 LDI R25,1
11C 01F1 MOVW R30,R2
11D 0FE8 ADD R30,R24
11E 1FF9 ADC R31,R25
11F 8020 LDD R2,Z+0
120 01F8 MOVW R30,R16
121 8220 STD Z+0,R2
122 9180 0107 LDS R24,0x0107
124 9190 0108 LDS R25,0x0108
126 9701 SBIW R24,1
127 9390 0108 STS 0x0108,R25
129 9380 0107 STS 0x0107,R24
12B 9180 0103 LDS R24,RD_UseCooperatingMiniOs.c:n+1
12D 9190 0104 LDS R25,RD_UseCooperatingMiniOs.c:n+2
12F 3280 CPI R24,0x20
130 E0E0 LDI R30,0
131 079E CPC R25,R30
132 F431 BNE 0x0139
133 2422 CLR R2
134 2433 CLR R3
135 9230 0104 STS RD_UseCooperatingMiniOs.c:n+2,R3
137 9220 0103 STS RD_UseCooperatingMiniOs.c:n+1,R2
139 BEAF OUT 0x3F,R10
(0141) (
(0142) if ((UARTRxBuffHead == UARTRxBuffTail)
(0143) && (UARTRxBuffCounter == 0))
(0144) {
(0145) SEI();
(0146) return FALSE;
(0147) }
(0148) (*Data) = UARTRxBuff[UARTRxBuffHead++];
(0149)
(0150) UARTRxBuffCounter--;
(0151)
(0152) if (UARTRxBuffHead == SERIAL_RX_BUFF_SIZE)
(0153) {
(0154) UARTRxBuffHead = 0;
(0155) }
(0156) )
(0157) return TRUE;
13A E001 LDI R16,1
13B 90A9 LD R10,Y+
13C 9508 RET
_UARTPeekDataFromRxBuff:
cflags0 --> R10
pData --> R16
13D 92AA ST R10,-Y
(0158) }
(0159)
(0160) /***********************************************************
(0161) * 函数说明:接收缓冲区首数据察看函数 *
(0162) * 输入: 存储取出数据地址的指针 *
(0163) * 输出: 取值是否成功 *
(0164) * 调用函数:无 *
(0165) ***********************************************************/
(0166) BOOL UARTPeekDataFromRxBuff(uint8 *pData)
(0167) {
(0168) SAFE_CODE_PERFORMANCE
13E B6AF IN R10,0x3F
13F 94F8 BCLR 7
140 9020 0105 LDS R2,RD_UseCooperatingMiniOs.c:n+3
142 9030 0106 LDS R3,0x0106
144 9040 0103 LDS R4,RD_UseCooperatingMiniOs.c:n+1
146 9050 0104 LDS R5,RD_UseCooperatingMiniOs.c:n+2
148 1442 CP R4,R2
149 0453 CPC R5,R3
14A F459 BNE 0x0156
14B 9020 0107 LDS R2,0x0107
14D 9030 0108 LDS R3,0x0108
14F 2022 TST R2
150 F429 BNE 0x0156
151 2033 TST R3
152 F419 BNE 0x0156
153 9478 BSET 7
154 2700 CLR R16
155 C00D RJMP 0x0163
156 EB85 LDI R24,0xB5
157 E091 LDI R25,1
158 91E0 0103 LDS R30,RD_UseCooperatingMiniOs.c:n+1
15A 91F0 0104 LDS R31,RD_UseCooperatingMiniOs.c:n+2
15C 0FE8 ADD R30,R24
15D 1FF9 ADC R31,R25
15E 8020 LDD R2,Z+0
15F 01F8 MOVW R30,R16
160 8220 STD Z+0,R2
161 BEAF OUT 0x3F,R10
(0169) (
(0170) if ((UARTRxBuffHead == UARTRxBuffTail)
(0171) && (UARTRxBuffCounter == 0))
(0172) {
(0173) SEI();
(0174) return FALSE;
(0175) }
(0176) (*pData) = UARTRxBuff[UARTRxBuffHead];
(0177) )
(0178) return TRUE;
162 E001 LDI R16,1
163 90A9 LD R10,Y+
164 9508 RET
_UARTaddDataToRxBuff:
cflags0 --> R10
Data --> R16
165 92AA ST R10,-Y
(0179) }
(0180)
(0181) /***********************************************************
(0182) * 函数说明:向通讯输入缓冲区添加数据函数 *
(0183) * 输入: 收到的数据 *
(0184) * 输出: 无 *
(0185) * 调用函数:无 *
(0186) ***********************************************************/
(0187) BOOL UARTaddDataToRxBuff(uint8 Data)
(0188) {
(0189) SAFE_CODE_PERFORMANCE
166 B6AF IN R10,0x3F
167 94F8 BCLR 7
168 9020 0105 LDS R2,RD_UseCooperatingMiniOs.c:n+3
16A 9030 0106 LDS R3,0x0106
16C 9040 0103 LDS R4,RD_UseCooperatingMiniOs.c:n+1
16E 9050 0104 LDS R5,RD_UseCooperatingMiniOs.c:n+2
170 1442 CP R4,R2
171 0453 CPC R5,R3
172 F459 BNE 0x017E
173 9180 0107 LDS R24,0x0107
175 9190 0108 LDS R25,0x0108
177 3280 CPI R24,0x20
178 E0E0 LDI R30,0
179 079E CPC R25,R30
17A F419 BNE 0x017E
17B 9478 BSET 7
17C 2700 CLR R16
17D C029 RJMP 0x01A7
17E 9020 0105 LDS R2,RD_UseCooperatingMiniOs.c:n+3
180 9030 0106 LDS R3,0x0106
182 01C1 MOVW R24,R2
183 9601 ADIW R24,1
184 9390 0106 STS 0x0106,R25
186 9380 0105 STS RD_UseCooperatingMiniOs.c:n+3,R24
188 EB85 LDI R24,0xB5
189 E091 LDI R25,1
18A 01F1 MOVW R30,R2
18B 0FE8 ADD R30,R24
18C 1FF9 ADC R31,R25
18D 8300 STD Z+0,R16
18E 9180 0107 LDS R24,0x0107
190 9190 0108 LDS R25,0x0108
192 9601 ADIW R24,1
193 9390 0108 STS 0x0108,R25
195 9380 0107 STS 0x0107,R24
197 9180 0105 LDS R24,RD_UseCooperatingMiniOs.c:n+3
199 9190 0106 LDS R25,0x0106
19B 3280 CPI R24,0x20
19C E0E0 LDI R30,0
19D 079E CPC R25,R30
19E F431 BNE 0x01A5
19F 2422 CLR R2
1A0 2433 CLR R3
1A1 9230 0106 STS 0x0106,R3
1A3 9220 0105 STS RD_UseCooperatingMiniOs.c:n+3,R2
1A5 BEAF OUT 0x3F,R10
(0190) (
(0191) if ((UARTRxBuffHead == UARTRxBuffTail)
(0192) && (UARTRxBuffCounter == SERIAL_RX_BUFF_SIZE))
(0193) {
(0194) SEI();
(0195) return FALSE;
(0196) }
(0197) UARTRxBuff[UARTRxBuffTail++] = Data;
(0198)
(0199) UARTRxBuffCounter++;
(0200)
(0201) if (UARTRxBuffTail == SERIAL_RX_BUFF_SIZE)
(0202) {
(0203) UARTRxBuffTail = 0;
(0204) }
(0205) )
(0206) return TRUE;
1A6 E001 LDI R16,1
1A7 90A9 LD R10,Y+
1A8 9508 RET
_UARTgetDataFromTxBuff:
cflags0 --> R10
Data --> R16
1A9 92AA ST R10,-Y
(0207) }
(0208) #endif
(0209)
(0210) #ifdef _USE_SERIAL_TX_BUFF
(0211) /***********************************************************
(0212) * 函数说明:发送中断取值函数 *
(0213) * 输入: 存储取出数据地址的指针 *
(0214) * 输出: 取值是否成功 *
(0215) * 调用函数:无 *
(0216) ***********************************************************/
(0217) BOOL UARTgetDataFromTxBuff(uint8 *Data)
(0218) {
(0219)
(0220) SAFE_CODE_PERFORMANCE
1AA B6AF IN R10,0x3F
1AB 94F8 BCLR 7
1AC 9020 010B LDS R2,0x010B
1AE 9030 010C LDS R3,0x010C
1B0 9040 0109 LDS R4,0x0109
1B2 9050 010A LDS R5,0x010A
1B4 1442 CP R4,R2
1B5 0453 CPC R5,R3
1B6 F459 BNE 0x01C2
1B7 9020 010D LDS R2,0x010D
1B9 9030 010E LDS R3,0x010E
1BB 2022 TST R2
1BC F429 BNE 0x01C2
1BD 2033 TST R3
1BE F419 BNE 0x01C2
1BF 9478 BSET 7
1C0 2700 CLR R16
1C1 C02B RJMP 0x01ED
1C2 9020 0109 LDS R2,0x0109
1C4 9030 010A LDS R3,0x010A
1C6 01C1 MOVW R24,R2
1C7 9601 ADIW R24,1
1C8 9390 010A STS 0x010A,R25
1CA 9380 0109 STS 0x0109,R24
1CC E785 LDI R24,0x75
1CD E091 LDI R25,1
1CE 01F1 MOVW R30,R2
1CF 0FE8 ADD R30,R24
1D0 1FF9 ADC R31,R25
1D1 8020 LDD R2,Z+0
1D2 01F8 MOVW R30,R16
1D3 8220 STD Z+0,R2
1D4 9180 010D LDS R24,0x010D
1D6 9190 010E LDS R25,0x010E
1D8 9701 SBIW R24,1
1D9 9390 010E STS 0x010E,R25
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?