📄 dispkeyboard.lst
字号:
1B4 2700 CLR R16
1B5 C014 RJMP 0x01CA
1B6 01FB MOVW R30,R22
1B7 0DEC ADD R30,R12
1B8 1DFD ADC R31,R13
1B9 8320 STD Z+0,R18
1BA 5F6F SUBI R22,0xFF
1BB 4F7F SBCI R23,0xFF
1BC 5F4F SUBI R20,0xFF
1BD 4F5F SBCI R21,0xFF
1BE 156A CP R22,R10
1BF 057B CPC R23,R11
1C0 F411 BNE 0x01C3
1C1 2766 CLR R22
1C2 2777 CLR R23
1C3 01F8 MOVW R30,R16
1C4 8377 STD Z+7,R23
1C5 8366 STD Z+6,R22
1C6 8751 STD Z+9,R21
1C7 8740 STD Z+8,R20
1C8 9478 BSET 7
(0086) (
(0087) pBuffer = pQueue->pBuffer;
(0088) nSize = pQueue->nSize;
(0089)
(0090) if ((pBuffer == NULL) || (!nSize))
(0091) {
(0092) SEI();
(0093) return FALSE; //缓冲区未分配空间
(0094) }
(0095) nTail = pQueue->nTail;
(0096) nHead = pQueue->nHead;
(0097) nCount = pQueue->nCount;
(0098)
(0099)
(0100) if ((nTail == nHead) && (nCount == nSize)) //缓冲区已满
(0101) {
(0102) SEI();
(0103) return FALSE;
(0104) }
(0105)
(0106) pBuffer[nTail] = cData;
(0107) nTail++;
(0108) nCount++;
(0109) if (nTail == nSize)
(0110) {
(0111) nTail = 0;
(0112) }
(0113)
(0114) pQueue->nTail = nTail;
(0115) pQueue->nCount = nCount;
(0116) )
(0117)
(0118) return TRUE;
1C9 E001 LDI R16,1
1CA 940C 0E7F JMP pop_xgsetF0FC
_ADT_Queue_Get_From_Buffer:
pBuffer --> R12
nHead1 --> R22
nCount0 --> R20
nHead0 --> R14
nTail0 --> R22
nSize0 --> R10
pData --> R18
pQueue --> R16
1CC 940E 0E8A CALL push_xgsetF0FC
(0119) }
(0120)
(0121) /***********************************************************
(0122) * 函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
(0123) * 输入: 存放读取变量的空间指针 *
(0124) * 输出: 队列是否为空 *
(0125) * 调用函数:无 *
(0126) ***********************************************************/
(0127) BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0128) {
(0129) uint8 *pBuffer;
(0130) uint nSize;
(0131) uint nTail;
(0132) uint nHead;
(0133) uint nCount;
(0134)
(0135) SAFE_CODE_PERFORMANCE //原子操作
1CE 94F8 BCLR 7
1CF 01F8 MOVW R30,R16
1D0 80C0 LDD R12,Z+0
1D1 80D1 LDD R13,Z+1
1D2 80A2 LDD R10,Z+2
1D3 80B3 LDD R11,Z+3
1D4 20CC TST R12
1D5 F411 BNE 0x01D8
1D6 20DD TST R13
1D7 F021 BEQ 0x01DC
1D8 20AA TST R10
1D9 F429 BNE 0x01DF
1DA 20BB TST R11
1DB F419 BNE 0x01DF
1DC 9478 BSET 7
1DD 2700 CLR R16
1DE C027 RJMP 0x0206
1DF 01F8 MOVW R30,R16
1E0 8166 LDD R22,Z+6
1E1 8177 LDD R23,Z+7
1E2 80E4 LDD R14,Z+4
1E3 80F5 LDD R15,Z+5
1E4 8540 LDD R20,Z+8
1E5 8551 LDD R21,Z+9
1E6 156E CP R22,R14
1E7 057F CPC R23,R15
1E8 F431 BNE 0x01EF
1E9 3040 CPI R20,0
1EA 0745 CPC R20,R21
1EB F419 BNE 0x01EF
1EC 9478 BSET 7
1ED 2700 CLR R16
1EE C017 RJMP 0x0206
1EF 01B7 MOVW R22,R14
1F0 5F6F SUBI R22,0xFF
1F1 4F7F SBCI R23,0xFF
1F2 01F7 MOVW R30,R14
1F3 0DEC ADD R30,R12
1F4 1DFD ADC R31,R13
1F5 8020 LDD R2,Z+0
1F6 01F9 MOVW R30,R18
1F7 8220 STD Z+0,R2
1F8 5041 SUBI R20,1
1F9 4050 SBCI R21,0
1FA 156A CP R22,R10
1FB 057B CPC R23,R11
1FC F411 BNE 0x01FF
1FD 2766 CLR R22
1FE 2777 CLR R23
1FF 01F8 MOVW R30,R16
200 8375 STD Z+5,R23
201 8364 STD Z+4,R22
202 8751 STD Z+9,R21
203 8740 STD Z+8,R20
204 9478 BSET 7
(0136) (
(0137) pBuffer = pQueue->pBuffer;
(0138) nSize = pQueue->nSize;
(0139)
(0140) if ((pBuffer == NULL) || (!nSize))
(0141) {
(0142) SEI();
(0143) return FALSE; //缓冲区未分配空间
(0144) }
(0145) nTail = pQueue->nTail;
(0146) nHead = pQueue->nHead;
(0147) nCount = pQueue->nCount;
(0148)
(0149)
(0150) if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
(0151) {
(0152) SEI();
(0153) return FALSE;
(0154) }
(0155)
(0156) (*pData) = pBuffer[nHead++];
(0157)
(0158) nCount--;
(0159) if (nHead == nSize)
(0160) {
(0161) nHead = 0;
(0162) }
(0163)
(0164) pQueue->nHead = nHead;
(0165) pQueue->nCount = nCount;
(0166) )
(0167)
(0168) return TRUE;
205 E001 LDI R16,1
206 940C 0E7F JMP pop_xgsetF0FC
_ADT_Queue_Check_Empty:
pBuffer --> R10
pQueue --> R16
208 92AA ST R10,-Y
209 92BA ST R11,-Y
(0169) }
(0170)
(0171) /***********************************************************
(0172) * 函数说明:队列判空函数 *
(0173) * 输入: 队列指针 *
(0174) * 输出: 队列是否为空 *
(0175) * 调用函数:无 *
(0176) ***********************************************************/
(0177) BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue)
(0178) {
(0179) uint8 *pBuffer;
(0180)
(0181) SAFE_CODE_PERFORMANCE
20A 94F8 BCLR 7
20B 01F8 MOVW R30,R16
20C 80A0 LDD R10,Z+0
20D 80B1 LDD R11,Z+1
20E 20AA TST R10
20F F411 BNE 0x0212
210 20BB TST R11
211 F031 BEQ 0x0218
212 8022 LDD R2,Z+2
213 8033 LDD R3,Z+3
214 2022 TST R2
215 F429 BNE 0x021B
216 2033 TST R3
217 F419 BNE 0x021B
218 9478 BSET 7
219 E001 LDI R16,1
21A C013 RJMP 0x022E
21B 01F8 MOVW R30,R16
21C 8024 LDD R2,Z+4
21D 8035 LDD R3,Z+5
21E 8046 LDD R4,Z+6
21F 8057 LDD R5,Z+7
220 1442 CP R4,R2
221 0453 CPC R5,R3
222 F449 BNE 0x022C
223 8420 LDD R2,Z+8
224 8431 LDD R3,Z+9
225 2022 TST R2
226 F429 BNE 0x022C
227 2033 TST R3
228 F419 BNE 0x022C
229 9478 BSET 7
22A E001 LDI R16,1
22B C002 RJMP 0x022E
22C 9478 BSET 7
(0182) (
(0183) pBuffer = pQueue->pBuffer;
(0184)
(0185) if ((pBuffer == NULL) || (!(pQueue->nSize)))
(0186) {
(0187) SEI();
(0188) return TRUE; //缓冲区未分配空间
(0189) }
(0190)
(0191)
(0192) if (((pQueue->nTail) == (pQueue->nHead))
(0193) && ((pQueue->nCount) == 0)) //缓冲区为空
(0194) {
(0195) SEI();
(0196) return TRUE;
(0197) }
(0198) )
(0199)
(0200) return FALSE;
22D 2700 CLR R16
22E 90B9 LD R11,Y+
22F 90A9 LD R10,Y+
230 9508 RET
_ADT_Queue_Peek_From_Buffer:
pBuffer --> R10
nCount0 --> R14
nHead0 --> R12
nTail0 --> R20
nSize0 --> R12
pData --> R18
pQueue --> R16
231 940E 0E8C CALL push_xgset30FC
(0201) }
(0202)
(0203) /***********************************************************
(0204) * 函数说明:队列首个数据预览函数 *
(0205) * 输入: 存放读取变量的空间指针 *
(0206) * 输出: 队列是否为空 *
(0207) * 调用函数:无 *
(0208) ***********************************************************/
(0209) BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0210) {
(0211) uint8 *pBuffer;
(0212) uint nSize;
(0213) uint nTail;
(0214) uint nHead;
(0215) uint nCount;
(0216)
(0217) SAFE_CODE_PERFORMANCE //原子操作
233 94F8 BCLR 7
234 01F8 MOVW R30,R16
235 80A0 LDD R10,Z+0
236 80B1 LDD R11,Z+1
237 80C2 LDD R12,Z+2
238 80D3 LDD R13,Z+3
239 20AA TST R10
23A F411 BNE 0x023D
23B 20BB TST R11
23C F021 BEQ 0x0241
23D 20CC TST R12
23E F429 BNE 0x0244
23F 20DD TST R13
240 F419 BNE 0x0244
241 9478 BSET 7
242 2700 CLR R16
243 C019 RJMP 0x025D
244 01F8 MOVW R30,R16
245 8146 LDD R20,Z+6
246 8157 LDD R21,Z+7
247 80C4 LDD R12,Z+4
248 80D5 LDD R13,Z+5
249 84E0 LDD R14,Z+8
24A 84F1 LDD R15,Z+9
24B 154C CP R20,R12
24C 055D CPC R21,R13
24D F439 BNE 0x0255
24E 20EE TST R14
24F F429 BNE 0x0255
250 20FF TST R15
251 F419 BNE 0x0255
252 9478 BSET 7
253 2700 CLR R16
254 C008 RJMP 0x025D
255 01F6 MOVW R30,R12
256 0DEA ADD R30,R10
257 1DFB ADC R31,R11
258 8020 LDD R2,Z+0
259 01F9 MOVW R30,R18
25A 8220 STD Z+0,R2
25B 9478 BSET 7
(0218) (
(0219) pBuffer = pQueue->pBuffer;
(0220) nSize = pQueue->nSize;
(0221)
(0222) if ((pBuffer == NULL) || (!nSize))
(0223) {
(0224) SEI();
(0225) return FALSE; //缓冲区未分配空间
(0226) }
(0227) nTail = pQueue->nTail;
(0228) nHead = pQueue->nHead;
(0229) nCount = pQueue->nCount;
(0230)
(0231)
(0232) if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
(0233) {
(0234) SEI();
(0235) return FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -