?? pp.lst
字號:
0199 9380006B STS RxUartDely,R24
019B 3080 CPI R24,0
019C 0789 CPC R24,R25
019D F009 BEQ 0x019F
019E C016 RJMP 0x01B5
(0108) RxUartDely=200;
019F EC88 LDI R24,0xC8
01A0 E090 LDI R25,0
01A1 9390006C STS RxUartDely+1,R25
01A3 9380006B STS RxUartDely,R24
(0109) if(--RxUartWait) return;
01A5 9180006D LDS R24,RxUartWait
01A7 9190006E LDS R25,RxUartWait+1
01A9 9701 SBIW R24,1
01AA 9390006E STS RxUartWait+1,R25
01AC 9380006D STS RxUartWait,R24
01AE 3080 CPI R24,0
01AF 0789 CPC R24,R25
01B0 F009 BEQ 0x01B2
01B1 C003 RJMP 0x01B5
(0110) RxUartAddr=0;return;
01B2 2422 CLR R2
01B3 92200072 STS RxUartAddr,R2
01B5 9508 RET
(0111) }
(0112) }
(0113) }
(0114) }
(0115) //***************************************************************輸出三色燈22//
(0116) void OutLed(void)
(0117) {
(0118) switch(OutLedAddr)
_OutLed:
01B6 9100006A LDS R16,OutLedAddr
01B8 2711 CLR R17
01B9 3000 CPI R16,0
01BA 0701 CPC R16,R17
01BB F071 BEQ 0x01CA
01BC 3001 CPI R16,1
01BD E0E0 LDI R30,0
01BE 071E CPC R17,R30
01BF F071 BEQ 0x01CE
01C0 3002 CPI R16,2
01C1 E0E0 LDI R30,0
01C2 071E CPC R17,R30
01C3 F121 BEQ 0x01E8
01C4 3003 CPI R16,3
01C5 E0E0 LDI R30,0
01C6 071E CPC R17,R30
01C7 F409 BNE 0x01C9
01C8 C03B RJMP 0x0204
01C9 C043 RJMP 0x020D
(0119) {
(0120) case(0)://停止閃爍
(0121) {
(0122) OutLedAddr=0;return;
01CA 2422 CLR R2
01CB 9220006A STS OutLedAddr,R2
01CD C03F RJMP 0x020D
(0123) }
(0124) case(1)://綠燈閃
(0125) {
(0126) if(++OutLedDely<1000) return;
01CE 91800068 LDS R24,OutLedDely
01D0 91900069 LDS R25,OutLedDely+1
01D2 9601 ADIW R24,1
01D3 93900069 STS OutLedDely+1,R25
01D5 93800068 STS OutLedDely,R24
01D7 3E88 CPI R24,0xE8
01D8 E0E3 LDI R30,3
01D9 079E CPC R25,R30
01DA F408 BCC 0x01DC
01DB C031 RJMP 0x020D
(0127) OutLedDely=0;PORTC|=0x08;PORTC^=0x06;return;
01DC 2422 CLR R2
01DD 2433 CLR R3
01DE 92300069 STS OutLedDely+1,R3
01E0 92200068 STS OutLedDely,R2
01E2 9AAB SBI 0x15,3
01E3 E086 LDI R24,6
01E4 B225 IN R2,0x15
01E5 2628 EOR R2,R24
01E6 BA25 OUT 0x15,R2
01E7 C025 RJMP 0x020D
(0128) }
(0129) case(2)://紅燈閃
(0130) {
(0131) if(++OutLedDely<1000) return;
01E8 91800068 LDS R24,OutLedDely
01EA 91900069 LDS R25,OutLedDely+1
01EC 9601 ADIW R24,1
01ED 93900069 STS OutLedDely+1,R25
01EF 93800068 STS OutLedDely,R24
01F1 3E88 CPI R24,0xE8
01F2 E0E3 LDI R30,3
01F3 079E CPC R25,R30
01F4 F408 BCC 0x01F6
01F5 C017 RJMP 0x020D
(0132) OutLedDely=0;PORTC|=0x06;PORTC^=0x08;return;
01F6 2422 CLR R2
01F7 2433 CLR R3
01F8 92300069 STS OutLedDely+1,R3
01FA 92200068 STS OutLedDely,R2
01FC B385 IN R24,0x15
01FD 6086 ORI R24,6
01FE BB85 OUT 0x15,R24
01FF E088 LDI R24,0x8
0200 B225 IN R2,0x15
0201 2628 EOR R2,R24
0202 BA25 OUT 0x15,R2
0203 C009 RJMP 0x020D
(0133) }
(0134) case(3)://關燈
(0135) {OutLedDely=0;PORTC|=0x0C;return;}
0204 2422 CLR R2
0205 2433 CLR R3
0206 92300069 STS OutLedDely+1,R3
0208 92200068 STS OutLedDely,R2
020A B385 IN R24,0x15
020B 608C ORI R24,0xC
020C BB85 OUT 0x15,R24
020D 9508 RET
(0136) }
(0137) }
(0138) //***************************************************************輸出提示聲23//
(0139) void OutTone(void)
(0140) {
(0141) switch(OutToneAddr)
_OutTone:
020E 91000067 LDS R16,OutToneAddr
0210 2711 CLR R17
0211 3000 CPI R16,0
0212 0701 CPC R16,R17
0213 F049 BEQ 0x021D
0214 3001 CPI R16,1
0215 E0E0 LDI R30,0
0216 071E CPC R17,R30
0217 F049 BEQ 0x0221
0218 3002 CPI R16,2
0219 E0E0 LDI R30,0
021A 071E CPC R17,R30
021B F0A1 BEQ 0x0230
021C C03B RJMP 0x0258
(0142) {
(0143) case(0)://關閉
(0144) {
(0145) OutToneAddr=0;return;
021D 2422 CLR R2
021E 92200067 STS OutToneAddr,R2
0220 C037 RJMP 0x0258
(0146) }
(0147) case(1)://判斷是否開提示聲
(0148) {
(0149) if(!OutToneCount) return;
0221 90200066 LDS R2,OutToneCount
0223 2022 TST R2
0224 F409 BNE 0x0226
0225 C032 RJMP 0x0258
(0150) OutToneDely=0;OutToneAddr=2;return;
0226 2422 CLR R2
0227 2433 CLR R3
0228 92300064 STS OutToneDely+1,R3
022A 92200063 STS OutToneDely,R2
022C E082 LDI R24,2
022D 93800067 STS OutToneAddr,R24
022F C028 RJMP 0x0258
(0151) }
(0152) case(2):
(0153) {
(0154) if(++OutToneDely<400) return;
0230 91800063 LDS R24,OutToneDely
0232 91900064 LDS R25,OutToneDely+1
0234 9601 ADIW R24,1
0237 93800063 STS OutToneDely,R24
0239 3980 CPI R24,0x90
023A E0E1 LDI R30,1
023B 079E CPC R25,R30
023C F408 BCC 0x023E
023D C01A RJMP 0x0258
(0155) if(!(--OutToneCount)) {PORTC|=0x01;OutToneCount=0;OutToneAddr=1;return;}
023E 91800066 LDS R24,OutToneCount
0240 5081 SUBI R24,1
0241 2E28 MOV R2,R24
0242 92200066 STS OutToneCount,R2
0244 2388 TST R24
0245 F441 BNE 0x024E
0246 9AA8 SBI 0x15,0
0247 2422 CLR R2
0248 92200066 STS OutToneCount,R2
024A E081 LDI R24,1
024B 93800067 STS OutToneAddr,R24
024D C00A RJMP 0x0258
(0156) OutToneDely=0;PORTC^=0x01;return;
024E 2422 CLR R2
024F 2433 CLR R3
0250 92300064 STS OutToneDely+1,R3
0252 92200063 STS OutToneDely,R2
0254 E081 LDI R24,1
0255 B225 IN R2,0x15
0256 2628 EOR R2,R24
0257 BA25 OUT 0x15,R2
0258 9508 RET
_Time2:
0259 D319 RCALL push_lset
(0157) }
(0158) }
(0159) }
(0160) #pragma interrupt_handler Time2:iv_TIMER2_COMP
(0161) //****************************************************************調用中斷任務//
(0162) void Time2(void)
(0163) {
(0164) RxUart();
025A DEDC RCALL _RxUart
(0165) OutLed();
025B DF5A RCALL _OutLed
(0166) OutTone();
025C DFB1 RCALL _OutTone
025D D32C RCALL pop_lset
025E 9518 RETI
(0167) }
(0168) //****************************************************單時任務//
(0169) //********************************************************發送ROM數據到串口31//
(0170) void TxRomUart(const unsigned char *data,unsigned int leng)
(0171) {
_TxRomUart:
leng --> R18
data --> R16
025F C009 RJMP 0x0269
(0172) while(leng)
(0173) {
(0174) while(!((UCSRA)&(1<<UDRE)));
0260 9B5D SBIS 0x0B,5
0261 CFFE RJMP 0x0260
(0175) UDR=*data;data++;leng--;
0262 01F8 MOVW R30,R16
0263 91E4 LPM R30,0(Z)
0264 B9EC OUT 0x0C,R30
0265 5F0F SUBI R16,0xFF
0266 4F1F SBCI R17,0xFF
0267 5021 SUBI R18,1
0268 4030 SBCI R19,0
0269 3020 CPI R18,0
026A 0723 CPC R18,R19
026B F7A1 BNE 0x0260
026C 9508 RET
(0176) }
(0177) }
(0178) //********************************************************發送RAM數據到串口32//
(0179) void TxRamUart(unsigned char *data,unsigned int leng)
(0180) {
_TxRamUart:
leng --> R18
data --> R16
026D C009 RJMP 0x0277
(0181) while(leng)
(0182) {
(0183) while(!((UCSRA)&(1<<UDRE)));
026E 9B5D SBIS 0x0B,5
026F CFFE RJMP 0x026E
(0184) UDR=*data;data++;leng--;
0270 01F8 MOVW R30,R16
0271 8020 LDD R2,Z+0
0272 B82C OUT 0x0C,R2
0273 5F0F SUBI R16,0xFF
0274 4F1F SBCI R17,0xFF
0275 5021 SUBI R18,1
0276 4030 SBCI R19,0
0277 3020 CPI R18,0
0278 0723 CPC R18,R19
0279 F7A1 BNE 0x026E
027A 9508 RET
_CopyRom:
leng2 --> R20
data2 --> R22
leng1 --> R18
data1 --> R16
027B D2DE RCALL push_gset2
027C 816C LDD R22,Y+4
027D 817D LDD R23,Y+5
027E 814E LDD R20,Y+6
(0185) }
(0186) }
(0187) //**************************************************************拷貝ROM數據33//
(0188) unsigned char CopyRom(const unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0189) {
027F C00E RJMP 0x028E
(0190) while(leng1)
(0191) {
(0192) *data2=*data1;data2++;leng2--;data1++;leng1--;
0280 01F8 MOVW R30,R16
0281 91E4 LPM R30,0(Z)
0282 01DB MOVW R26,R22
0283 93EC ST R30,0(X)
0284 5F6F SUBI R22,0xFF
0285 4F7F SBCI R23,0xFF
0286 954A DEC R20
0287 5F0F SUBI R16,0xFF
0288 4F1F SBCI R17,0xFF
0289 952A DEC R18
(0193) if(!leng2) return 1;
028A 2344 TST R20
028B F411 BNE 0x028E
028C E001 LDI R16,1
028D C003 RJMP 0x0291
028E 2322 TST R18
028F F781 BNE 0x0280
(0194) }
(0195) return 0;
0290 2700 CLR R16
0291 D2BE RCALL pop_gset2
0292 9508 RET
_CopyRam:
leng2 --> R20
data2 --> R22
leng1 --> R18
data1 --> R16
0293 D2C6 RCALL push_gset2
0294 816C LDD R22,Y+4
0295 817D LDD R23,Y+5
0296 814E LDD R20,Y+6
(0196) }
(0197) //**************************************************************拷貝RAM數據34//
(0198) unsigned char CopyRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0199) {
0297 C00E RJMP 0x02A6
(0200) while(leng1)
(0201) {
(0202) *data2=*data1;data2++;leng2--;data1++;leng1--;
0298 01F8 MOVW R30,R16
0299 8020 LDD R2,Z+0
029A 01FB MOVW R30,R22
029B 8220 STD Z+0,R2
029C 5F6F SUBI R22,0xFF
029D 4F7F SBCI R23,0xFF
029E 954A DEC R20
029F 5F0F SUBI R16,0xFF
02A0 4F1F SBCI R17,0xFF
02A1 952A DEC R18
(0203) if(!leng2) return 1;
02A2 2344 TST R20
02A3 F411 BNE 0x02A6
02A4 E001 LDI R16,1
02A5 C003 RJMP 0x02A9
02A6 2322 TST R18
02A7 F781 BNE 0x0298
(0204) }
(0205) return 0;
02A8 2700 CLR R16
02A9 D2A6 RCALL pop_gset2
02AA 9508 RET
_CmpsRom:
leng2 --> R20
data2 --> R22
leng1 --> R18
data1 --> R16
02AB D2AE RCALL push_gset2
02AC 816C LDD R22,Y+4
02AD 817D LDD R23,Y+5
02AE 814E LDD R20,Y+6
(0206) }
(0207) //**************************************************************比較ROM數據35//
(0208) unsigned char CmpsRom(unsigned char *data1,unsigned char leng1,const unsigned char *data2,unsigned char leng2)
(0209) {
02AF C011 RJMP 0x02C1
(0210) while(leng1)
(0211) {
(0212) if(*data1!=*data2) return 1;
02B0 01FB MOVW R30,R22
02B1 91E4 LPM R30,0(Z)
02B2 01D8 MOVW R26,R16
02B3 902C LD R2,0(X)
02B4 162E CP R2,R30
02B5 F011 BEQ 0x02B8
02B6 E001 LDI R16,1
02B7 C00C RJMP 0x02C4
(0213) data1++;data2++;leng1--;leng2--;
02B8 5F0F SUBI R16,0xFF
02B9 4F1F SBCI R17,0xFF
02BA 5F6F SUBI R22,0xFF
02BB 4F7F SBCI R23,0xFF
02BC 952A DEC R18
02BD 954A DEC R20
(0214) if(!leng2) return 0;
02BE F411 BNE 0x02C1
02BF 2700 CLR R16
02C0 C003 RJMP 0x02C4
02C1 2322 TST R18
02C2 F769 BNE 0x02B0
(0215) }
(0216) return 1;
02C3 E001 LDI R16,1
02C4 D28B RCALL pop_gset2
02C5 9508 RET
_CmpsRam:
leng2 --> R20
data2 --> R22
leng1 --> R18
data1 --> R16
02C6 D293 RCALL push_gset2
02C7 816C LDD R22,Y+4
02C8 817D LDD R23,Y+5
02C9 814E LDD R20,Y+6
(0217) }
(0218) //**************************************************************比較RAM數據36//
(0219) unsigned char CmpsRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
(0220) {
02CA C011 RJMP 0x02DC
(0221) while(leng1)
(0222) {
(0223) if(*data1!=*data2) return 1;
02CB 01FB MOVW R30,R22
02CC 8020 LDD R2,Z+0
02CD 01F8 MOVW R30,R16
02CE 8030 LDD R3,Z+0
02CF 1432 CP R3,R2
02D0 F011 BEQ 0x02D3
02D1 E001 LDI R16,1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -