📄 m128_test.lst
字号:
__start:
__text_start:
015B EFCF LDI R28,0xFF
015C E1D0 LDI R29,0x10
015D BFCD OUT P3D,R28
015E BFDE OUT P3E,R29
015F 52C0 SUBI R28,0x20
0160 40D0 SBCI R29,0
0161 EA0A LDI R16,0xAA
0162 8308 STD R16,0+Y
0163 2400 CLR R0
0164 E2E2 LDI R30,0x22
0165 E0F2 LDI R31,2
0166 E012 LDI R17,2
0167 36E4 CPI R30,0x64
0168 07F1 CPC R31,R17
0169 F011 BEQ 0x016C
016A 9201 ST R0,Z+
016B CFFB RJMP 0x0167
016C 8300 STD R16,0+Z
016D E9E3 LDI R30,0x93
016E E0F1 LDI R31,1
016F E0A0 LDI R26,0
0170 E0B1 LDI R27,1
0171 E012 LDI R17,2
0172 3BE5 CPI R30,0xB5
0173 07F1 CPC R31,R17
0174 F021 BEQ 0x0179
0175 95C8 LPM
0176 9631 ADIW R30,1
0177 920D ST R0,X+
0178 CFF9 RJMP 0x0172
0179 940E0961 CALL _main
_exit:
017B CFFF RJMP _exit
_hextochar:
temp --> R10
target --> R20
first --> R22
hex --> R16
017C 940E0FC1 CALL push_gset3
FILE: H:\m128_test\converse.c
(0001)
(0002) unsigned int hextochar(unsigned char hex){
(0003) unsigned int first = 0 ;
017E 2766 CLR R22
017F 2777 CLR R23
(0004) unsigned int target = 0;
0180 2744 CLR R20
0181 2755 CLR R21
(0005) unsigned char temp = hex & 0x0f;
0182 2F80 MOV R24,R16
0183 708F ANDI R24,0xF
0184 2EA8 MOV R10,R24
(0006) if( temp >= 0x0A )
0185 308A CPI R24,0xA
0186 F028 BCS 0x018C
(0007) first = temp + 0x37;
0187 2F68 MOV R22,R24
0188 2777 CLR R23
0189 5C69 SUBI R22,0xC9
018A 4F7F SBCI R23,0xFF
018B C004 RJMP 0x0190
(0008) else
(0009) first = temp + 0x30;
018C 2D6A MOV R22,R10
018D 2777 CLR R23
018E 5D60 SUBI R22,0xD0
018F 4F7F SBCI R23,0xFF
(0010) target = first;
0190 01AB MOVW R20,R22
(0011) hex = hex >> 4;
0191 2F80 MOV R24,R16
0192 9582 SWAP R24
0193 708F ANDI R24,0xF
0194 2F08 MOV R16,R24
(0012) if( hex >= 0x0A )
0195 308A CPI R24,0xA
0196 F028 BCS 0x019C
(0013) first = hex + 0x37;
0197 2F68 MOV R22,R24
0198 2777 CLR R23
0199 5C69 SUBI R22,0xC9
019A 4F7F SBCI R23,0xFF
019B C004 RJMP 0x01A0
(0014) else
(0015) first = hex + 0x30;
019C 2F60 MOV R22,R16
019D 2777 CLR R23
019E 5D60 SUBI R22,0xD0
019F 4F7F SBCI R23,0xFF
(0016) first = first << 8 ;
01A0 2F76 MOV R23,R22
01A1 2766 CLR R22
(0017) target |= first;
01A2 2B46 OR R20,R22
01A3 2B57 OR R21,R23
(0018) return target;
01A4 2F04 MOV R16,R20
01A5 2F15 MOV R17,R21
01A6 940E0FD0 CALL pop_gset3
01A8 9508 RET
_bcd_char:
kk --> R14
temp --> R12
i --> R20
s --> R10
hex --> R22
01A9 940E0FC9 CALL push_gset5
01AB 0159 MOVW R10,R18
01AC 01B8 MOVW R22,R16
(0019) }
(0020)
(0021)
(0022)
(0023) unsigned char bcd_char( int hex ,char *s ){
(0024) unsigned char i = 0 ,temp = 0;
01AD 2744 CLR R20
01AE 24CC CLR R12
(0025) int kk = 0 ;
01AF 24EE CLR R14
01B0 24FF CLR R15
(0026)
(0027) if( hex < 0){
01B1 3060 CPI R22,0
01B2 E0E0 LDI R30,0
01B3 077E CPC R23,R30
01B4 F45C BGE 0x01C0
(0028) s[i] = '-';
01B5 2FE4 MOV R30,R20
01B6 27FF CLR R31
01B7 0DEA ADD R30,R10
01B8 1DFB ADC R31,R11
01B9 E28D LDI R24,0x2D
01BA 8380 STD R24,0+Z
(0029) i++;
01BB 9543 INC R20
(0030) hex = -hex;
01BC 9560 COM R22
01BD 9570 COM R23
01BE 5F6F SUBI R22,0xFF
01BF 4F7F SBCI R23,0xFF
(0031) }
(0032)
(0033) kk = hex;
01C0 017B MOVW R14,R22
(0034) temp = hex /10000;
01C1 E120 LDI R18,0x10
01C2 E237 LDI R19,0x27
01C3 018B MOVW R16,R22
01C4 940E0E29 CALL div16s
01C6 2EC0 MOV R12,R16
(0035) if( kk >= 10000 ){
01C7 01C7 MOVW R24,R14
01C8 3180 CPI R24,0x10
01C9 E2E7 LDI R30,0x27
01CA 079E CPC R25,R30
01CB F044 BLT 0x01D4
(0036) s[i] = temp + 0x30;
01CC 2FE4 MOV R30,R20
01CD 27FF CLR R31
01CE 0DEA ADD R30,R10
01CF 1DFB ADC R31,R11
01D0 2D8C MOV R24,R12
01D1 5D80 SUBI R24,0xD0
01D2 8380 STD R24,0+Z
(0037) i++;
01D3 9543 INC R20
(0038) }
(0039)
(0040) hex = hex % 10000;
01D4 E120 LDI R18,0x10
01D5 E237 LDI R19,0x27
01D6 018B MOVW R16,R22
01D7 940E0E27 CALL mod16s
01D9 01B8 MOVW R22,R16
(0041) temp = hex /1000;
01DA EE28 LDI R18,0xE8
01DB E033 LDI R19,3
01DC 940E0E29 CALL div16s
01DE 2EC0 MOV R12,R16
(0042) if( kk >= 1000 ){
01DF 01C7 MOVW R24,R14
01E0 3E88 CPI R24,0xE8
01E1 E0E3 LDI R30,3
01E2 079E CPC R25,R30
01E3 F044 BLT 0x01EC
(0043) s[i] = temp + 0x30;
01E4 2FE4 MOV R30,R20
01E5 27FF CLR R31
01E6 0DEA ADD R30,R10
01E7 1DFB ADC R31,R11
01E8 2D8C MOV R24,R12
01E9 5D80 SUBI R24,0xD0
01EA 8380 STD R24,0+Z
(0044) i++;
01EB 9543 INC R20
(0045) }
(0046)
(0047) hex = hex % 1000;
01EC EE28 LDI R18,0xE8
01ED E033 LDI R19,3
01EE 018B MOVW R16,R22
01EF 940E0E27 CALL mod16s
01F1 01B8 MOVW R22,R16
(0048) temp = hex /100;
01F2 E624 LDI R18,0x64
01F3 E030 LDI R19,0
01F4 940E0E29 CALL div16s
01F6 2EC0 MOV R12,R16
(0049) if( kk >= 100 ){
01F7 01C7 MOVW R24,R14
01F8 3684 CPI R24,0x64
01F9 E0E0 LDI R30,0
01FA 079E CPC R25,R30
01FB F044 BLT 0x0204
(0050) s[i] = temp + 0x30;
01FC 2FE4 MOV R30,R20
01FD 27FF CLR R31
01FE 0DEA ADD R30,R10
01FF 1DFB ADC R31,R11
0200 2D8C MOV R24,R12
0201 5D80 SUBI R24,0xD0
0202 8380 STD R24,0+Z
(0051) i++;
0203 9543 INC R20
(0052) }
(0053)
(0054) hex = hex % 100;
0204 E624 LDI R18,0x64
0205 E030 LDI R19,0
0206 018B MOVW R16,R22
0207 940E0E27 CALL mod16s
0209 01B8 MOVW R22,R16
(0055) temp = hex /10;
020A E02A LDI R18,0xA
020B E030 LDI R19,0
020C 940E0E29 CALL div16s
020E 2EC0 MOV R12,R16
(0056) if( kk >= 10 ){
020F 01C7 MOVW R24,R14
0210 308A CPI R24,0xA
0211 E0E0 LDI R30,0
0212 079E CPC R25,R30
0213 F044 BLT 0x021C
(0057) s[i] = temp + 0x30;
0214 2FE4 MOV R30,R20
0215 27FF CLR R31
0216 0DEA ADD R30,R10
0217 1DFB ADC R31,R11
0218 2D8C MOV R24,R12
0219 5D80 SUBI R24,0xD0
021A 8380 STD R24,0+Z
(0058) i++;
021B 9543 INC R20
(0059) }
(0060)
(0061) hex = hex % 10;
021C E02A LDI R18,0xA
021D E030 LDI R19,0
021E 018B MOVW R16,R22
021F 940E0E27 CALL mod16s
0221 01B8 MOVW R22,R16
(0062) s[i] = hex+ 0x30;
0222 2FE4 MOV R30,R20
0223 27FF CLR R31
0224 0DEA ADD R30,R10
0225 1DFB ADC R31,R11
0226 01CB MOVW R24,R22
0227 96C0 ADIW R24,0x30
0228 8380 STD R24,0+Z
(0063) i++;
0229 9543 INC R20
(0064) return i;
022A 2F04 MOV R16,R20
022B 940E0FD6 CALL pop_gset5
022D 9508 RET
_spi_tranByte:
p --> R20
addr --> R18
cData --> R16
022E 940E0FA6 CALL push_gset1
FILE: H:\m128_test\test_isp.c
(0001) //ICC-AVR application builder : 2005-3-21 10:06:01
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004)
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) #include <stdio.h>
(0008) #define CH1 1
(0009) #define CH2 2
(0010) #define CH3 4
(0011) #define READY 0XAA
(0012) #define STOP 0X00
(0013) #define TEST 0x1A
(0014)
(0015) extern long len;
(0016) //SPI initialize
(0017) // clock rate: 2000000hz
(0018)
(0019)
(0020)
(0021)
(0022)
(0023)
(0024)
(0025) unsigned char spi_tranByte (unsigned char cData, int addr)
(0026) {
(0027)
(0028) unsigned char *p = (unsigned char *) addr;
0230 01A9 MOVW R20,R18
(0029)
(0030) *p = 0x00;
0231 2422 CLR R2
0232 01FA MOVW R30,R20
0233 8220 STD R2,0+Z
(0031) SPDR = cData;
0234 B90F OUT P0F,R16
(0032) while (!(SPSR&0x80));
0235 9B77 SBIS P0E,7
0236 CFFE RJMP 0x0235
(0033) return SPDR;
0237 B10F IN R16,P0F
0238 940E0FA9 CALL pop_gset1
023A 9508 RET
_spi_cnt:
temp --> Y+0
buf --> R10
cha --> R12
023B 940E0FC5 CALL push_gset4
023D 2EC0 MOV R12,R16
023E 9724 SBIW R28,4
(0034)
(0035) }
(0036)
(0037)
(0038)
(0039) long spi_cnt(unsigned char cha)
(0040) {
(0041) long temp=0;
023F E040 LDI R20,0
0240 E050 LDI R21,0
0241 E060 LDI R22,0
0242 E070 LDI R23,0
0243 01FE MOVW R30,R28
0244 8340 STD R20,0+Z
0245 8351 STD R21,1+Z
0246 8362 STD R22,2+Z
0247 8373 STD R23,3+Z
(0042) unsigned char buf=0;
0248 24AA CLR R10
(0043) temp=0;
0249 E040 LDI R20,0
024A E050 LDI R21,0
024B E060 LDI R22,0
024C E070 LDI R23,0
024D 8340 STD R20,0+Z
024E 8351 STD R21,1+Z
024F 8362 STD R22,2+Z
0250 8373 STD R23,3+Z
(0044) switch (cha)
0251 24DD CLR R13
0252 01C6 MOVW R24,R12
0253 3081 CPI R24,1
0254 E0E0 LDI R30,0
0255 079E CPC R25,R30
0256 F059 BEQ 0x0262
0257 3082 CPI R24,2
0258 E0E0 LDI R30,0
0259 079E CPC R25,R30
025A F409 BNE 0x025C
025B C08C RJMP 0x02E8
025C 3084 CPI R24,4
025D E0E0 LDI R30,0
025E 079E CPC R25,R30
025F F409 BNE 0x0261
0260 C12E RJMP 0x038F
0261 C1D3 RJMP 0x0435
(0045) {
(0046) case CH1: do
(0047) {
(0048) buf=spi_tranByte (CH1,0X9000);
0262 E020 LDI R18,0
0263 E930 LDI R19,0x90
0264 E001 LDI R16,1
0265 DFC8 RCALL _spi_tranByte
0266 2EA0 MOV R10,R16
(0049) asm ("nop");
0267 0000 NOP
(0050) asm ("nop");
0268 0000 NOP
(0051) asm ("nop");
0269 0000 NOP
(0052) }
(0053) while(buf!=READY);
026A 2D8A MOV R24,R10
026B 3A8A CPI R24,0xAA
026C F7A9 BNE 0x0262
(0054) delay_nus(100);
026D E604 LDI R16,0x64
026E E010 LDI R17,0
026F 940E0462 CALL _delay_nus
(0055) buf=spi_tranByte (CH1,0x9000);
0271 E020 LDI R18,0
0272 E930 LDI R19,0x90
0273 E001 LDI R16,1
0274 DFB9 RCALL _spi_tranByte
0275 2EA0 MOV R10,R16
(0056) temp=buf;
0276 2C2A MOV R2,R10
0277 2433 CLR R3
0278 2444 CLR R4
0279 2455 CLR R5
027A 01FE MOVW R30,R28
027B 8220 STD R2,0+Z
027C 8231 STD R3,1+Z
027D 8242 STD R4,2+Z
027E 8253 STD R5,3+Z
(0057) temp=temp*256;
027F E040 LDI R20,0
0280 E051 LDI R21,1
0281 E060 LDI R22,0
0282 E070 LDI R23,0
0283 925A ST R5,-Y
0284 924A ST R4,-Y
0285 923A ST R3,-Y
0286 922A ST R2,-Y
0287 018A MOVW R16,R20
0288 019B MOVW R18,R22
0289 940E0E44 CALL empy32s
028B 01FE MOVW R30,R28
028C 8300 STD R16,0+Z
028D 8311 STD R17,1+Z
028E 8322 STD R18,2+Z
028F 8333 STD R19,3+Z
(0058)
(0059) buf=spi_tranByte (CH1,0x9000);
0290 E020 LDI R18,0
0291 E930 LDI R19,0x90
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -