📄 i2c抢答器_主机程序.lst
字号:
0183 0F00 LSL R16
0184 1F11 ROL R17
0185 0F00 LSL R16
0186 1F11 ROL R17
0187 2902 OR R16,R2
0188 2913 OR R17,R3
(0068) if (a<b)
0189 1720 CP R18,R16
018A 0731 CPC R19,R17
018B F520 BCC 0x01B0
(0069) {
(0070) LEDDisBuffer[7] = (RecArr[0]>>4);
018C 91800113 LDS R24,RecArr
018E 9582 SWAP R24
018F 708F ANDI R24,0xF
0190 93800112 STS 0x112,R24
(0071) LEDDisBuffer[6] = SPACE;
0192 E187 LDI R24,0x17
0193 93800111 STS 0x111,R24
(0072) LEDDisBuffer[5] = SPACE;
0195 93800110 STS 0x110,R24
(0073) LEDDisBuffer[4] = SPACE;
0197 9380010F STS 0x10F,R24
(0074) LEDDisBuffer[3] = (RecArr[1]>>4);
0199 91800114 LDS R24,RecArr+1
019B 9582 SWAP R24
019C 708F ANDI R24,0xF
019D 9380010E STS LEDDisBuffer+3,R24
(0075) LEDDisBuffer[2] = (RecArr[1]&0x0F);
019F 91800114 LDS R24,RecArr+1
01A1 708F ANDI R24,0xF
01A2 9380010D STS LEDDisBuffer+2,R24
(0076) LEDDisBuffer[1] = (RecArr[2]>>4);
01A4 91800115 LDS R24,RecArr+2
01A6 9582 SWAP R24
01A7 708F ANDI R24,0xF
01A8 9380010C STS LEDDisBuffer+1,R24
(0077) LEDDisBuffer[0] = (RecArr[2]&0x0F);
01AA 91800115 LDS R24,RecArr+2
01AC 708F ANDI R24,0xF
01AD 9380010B STS LEDDisBuffer,R24
(0078) }
01AF C023 RJMP 0x01D3
(0079) else
(0080) {
(0081) LEDDisBuffer[7] = (RecArr[3]>>4);
01B0 91800116 LDS R24,RecArr+3
01B2 9582 SWAP R24
01B3 708F ANDI R24,0xF
01B4 93800112 STS 0x112,R24
(0082) LEDDisBuffer[6] = SPACE;
01B6 E187 LDI R24,0x17
01B7 93800111 STS 0x111,R24
(0083) LEDDisBuffer[5] = SPACE;
01B9 93800110 STS 0x110,R24
(0084) LEDDisBuffer[4] = SPACE;
01BB 9380010F STS 0x10F,R24
(0085) LEDDisBuffer[3] = (RecArr[4]>>4);
01BD 91800117 LDS R24,0x117
01BF 9582 SWAP R24
01C0 708F ANDI R24,0xF
01C1 9380010E STS LEDDisBuffer+3,R24
(0086) LEDDisBuffer[2] = (RecArr[4]&0x0F);
01C3 91800117 LDS R24,0x117
01C5 708F ANDI R24,0xF
01C6 9380010D STS LEDDisBuffer+2,R24
(0087) LEDDisBuffer[1] = (RecArr[5]>>4);
01C8 91800118 LDS R24,0x118
01CA 9582 SWAP R24
01CB 708F ANDI R24,0xF
01CC 9380010C STS LEDDisBuffer+1,R24
(0088) LEDDisBuffer[0] = (RecArr[5]&0x0F);
01CE 91800118 LDS R24,0x118
01D0 708F ANDI R24,0xF
01D1 9380010B STS LEDDisBuffer,R24
(0089) }
01D3 9508 RET
(0090) }
(0091)
(0092) /***********************************************************
(0093) * 函数说明:主函数 *
(0094) * 输入: 无 *
(0095) * 输出: 无 *
(0096) * 调用函数:System_INIT() *
(0097) ***********************************************************/
(0098) void main(void)
(0099) {
(0100) System_INIT(); //代码初始化
_main:
01D4 DEDD RCALL _System_INIT
(0101)
(0102) RecArr[0]=0xFF;
01D5 EF8F LDI R24,0xFF
01D6 93800113 STS RecArr,R24
(0103) RecArr[1]=0xFF;
01D8 93800114 STS RecArr+1,R24
(0104) RecArr[2]=0xFF;
01DA 93800115 STS RecArr+2,R24
(0105) RecArr[3]=0xFF;
01DC 93800116 STS RecArr+3,R24
(0106) RecArr[4]=0xFF;
01DE 93800117 STS 0x117,R24
(0107) RecArr[5]=0xFF;
01E0 93800118 STS 0x118,R24
(0108) LEDDisBuffer[0] = Led__;
01E2 E185 LDI R24,0x15
01E3 9380010B STS LEDDisBuffer,R24
(0109) LEDDisBuffer[1] = Led__;
01E5 9380010C STS LEDDisBuffer+1,R24
(0110) LEDDisBuffer[2] = Led__;
01E7 9380010D STS LEDDisBuffer+2,R24
(0111) LEDDisBuffer[3] = Led__;
01E9 9380010E STS LEDDisBuffer+3,R24
(0112) LEDDisBuffer[4] = Led__;
01EB 9380010F STS 0x10F,R24
(0113) LEDDisBuffer[5] = Led__;
01ED 93800110 STS 0x110,R24
(0114) LEDDisBuffer[6] = Led__;
01EF 93800111 STS 0x111,R24
(0115) LEDDisBuffer[7] = Led__;
01F1 93800112 STS 0x112,R24
(0116)
(0117) TIMERSTART;
01F3 E084 LDI R24,4
01F4 93800081 STS 0x81,R24
(0118)
(0119) TWCR |= (1<<TWSTA); //启动总线
01F6 918000BC LDS R24,0xBC
01F8 6280 ORI R24,0x20
01F9 938000BC STS 0xBC,R24
01FB C025 RJMP 0x0221
(0120) while(1) //超级循环
(0121) {
(0122) if (ShowTime == TRUE)
01FC 91800105 LDS R24,ShowTime
01FE 3081 CPI R24,1
01FF F4C1 BNE 0x0218
(0123) {
(0124) if (RecArr[0] == 0xFF) //没有任何从机响应
0200 91800113 LDS R24,RecArr
0202 3F8F CPI R24,0xFF
0203 F499 BNE 0x0217
(0125) {
(0126) LEDDisBuffer[0] = Led__;
0204 E185 LDI R24,0x15
0205 9380010B STS LEDDisBuffer,R24
(0127) LEDDisBuffer[1] = Led__;
0207 9380010C STS LEDDisBuffer+1,R24
(0128) LEDDisBuffer[2] = Led__;
0209 9380010D STS LEDDisBuffer+2,R24
(0129) LEDDisBuffer[3] = Led__;
020B 9380010E STS LEDDisBuffer+3,R24
(0130) LEDDisBuffer[4] = Led__;
020D 9380010F STS 0x10F,R24
(0131) LEDDisBuffer[5] = Led__;
020F 93800110 STS 0x110,R24
(0132) LEDDisBuffer[6] = Led__;
0211 93800111 STS 0x111,R24
(0133) LEDDisBuffer[7] = 0x0E;
0213 E08E LDI R24,0xE
0214 93800112 STS 0x112,R24
(0134) }
0216 C001 RJMP 0x0218
(0135) else
(0136) {
(0137) winner();
0217 DF51 RCALL _winner
(0138) }
(0139) }
(0140)
(0141) if (DoTime == 1)
0218 91800104 LDS R24,DoTime
021A 3081 CPI R24,1
021B F429 BNE 0x0221
(0142) {
(0143) DoTime=0;
021C 2422 CLR R2
021D 92200104 STS DoTime,R2
(0144) LEDDisplay();
021F DF23 RCALL _LEDDisplay
(0145) Port_refresh();
FILE: <library>
0220 DF0F RCALL _Port_refresh
0221 CFDA RJMP 0x01FC
0222 9508 RET
mod16u:
0223 9468 BSET 6
0224 C001 RJMP xdiv16u
div16u:
0225 94E8 BCLR 6
xdiv16u:
0226 92EA ST R14,-Y
0227 92FA ST R15,-Y
0228 938A ST R24,-Y
0229 24EE CLR R14
022A 24FF CLR R15
022B E180 LDI R24,0x10
022C 0F00 LSL R16
022D 1F11 ROL R17
022E 1CEE ROL R14
022F 1CFF ROL R15
0230 16E2 CP R14,R18
0231 06F3 CPC R15,R19
0232 F018 BCS 0x0236
0233 1AE2 SUB R14,R18
0234 0AF3 SBC R15,R19
0235 9503 INC R16
0236 958A DEC R24
0237 F7A1 BNE 0x022C
0238 F416 BRTC 0x023B
0239 2D0E MOV R16,R14
023A 2D1F MOV R17,R15
023B 9189 LD R24,Y+
023C 90F9 LD R15,Y+
023D 90E9 LD R14,Y+
023E 9508 RET
push_gset5:
023F 92FA ST R15,-Y
0240 92EA ST R14,-Y
push_gset4:
0241 92DA ST R13,-Y
0242 92CA ST R12,-Y
push_gset3:
0243 92BA ST R11,-Y
0244 92AA ST R10,-Y
push_gset2:
0245 937A ST R23,-Y
0246 936A ST R22,-Y
push_gset1:
0247 935A ST R21,-Y
0248 934A ST R20,-Y
0249 9508 RET
pop_gset1:
024A E0E1 LDI R30,1
pop:
024B 9149 LD R20,Y+
024C 9159 LD R21,Y+
024D FDE0 SBRC R30,0
024E 9508 RET
024F 9169 LD R22,Y+
0250 9179 LD R23,Y+
0251 FDE1 SBRC R30,1
0252 9508 RET
0253 90A9 LD R10,Y+
0254 90B9 LD R11,Y+
0255 FDE2 SBRC R30,2
0256 9508 RET
0257 90C9 LD R12,Y+
0258 90D9 LD R13,Y+
0259 FDE3 SBRC R30,3
025A 9508 RET
025B 90E9 LD R14,Y+
025C 90F9 LD R15,Y+
025D 9508 RET
push_lset:
025E 93FA ST R31,-Y
025F 93EA ST R30,-Y
0260 93BA ST R27,-Y
0261 93AA ST R26,-Y
0262 939A ST R25,-Y
0263 938A ST R24,-Y
0264 933A ST R19,-Y
0265 932A ST R18,-Y
0266 931A ST R17,-Y
0267 930A ST R16,-Y
0268 929A ST R9,-Y
0269 928A ST R8,-Y
026A 927A ST R7,-Y
026B 926A ST R6,-Y
026C 925A ST R5,-Y
026D 924A ST R4,-Y
026E 923A ST R3,-Y
026F 922A ST R2,-Y
0270 921A ST R1,-Y
0271 920A ST R0,-Y
0272 B60F IN R0,0x3F
0273 920A ST R0,-Y
0274 9508 RET
pop_lset:
0275 9009 LD R0,Y+
0276 BE0F OUT 0x3F,R0
0277 9009 LD R0,Y+
0278 9019 LD R1,Y+
0279 9029 LD R2,Y+
027A 9039 LD R3,Y+
027B 9049 LD R4,Y+
027C 9059 LD R5,Y+
027D 9069 LD R6,Y+
027E 9079 LD R7,Y+
027F 9089 LD R8,Y+
0280 9099 LD R9,Y+
0281 9109 LD R16,Y+
0282 9119 LD R17,Y+
0283 9129 LD R18,Y+
0284 9139 LD R19,Y+
0285 9189 LD R24,Y+
0286 9199 LD R25,Y+
0287 91A9 LD R26,Y+
0288 91B9 LD R27,Y+
0289 91E9 LD R30,Y+
028A 91F9 LD R31,Y+
028B 9508 RET
lsl8:
028C 2311 TST R17
028D F019 BEQ 0x0291
028E 0F00 LSL R16
028F 951A DEC R17
0290 CFFB RJMP lsl8
0291 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -