📄 test.lst
字号:
__text_start:
__start:
012B E5CF LDI R28,0x5F
012C E0D2 LDI R29,2
012D BFCD OUT 0x3D,R28
012E BFDE OUT 0x3E,R29
012F 51C0 SUBI R28,0x10
0130 40D0 SBCI R29,0
0131 EA0A LDI R16,0xAA
0132 8308 STD Y+0,R16
0133 2400 CLR R0
0134 E5E7 LDI R30,0x57
0135 E0F1 LDI R31,1
0136 E011 LDI R17,1
0137 37E4 CPI R30,0x74
0138 07F1 CPC R31,R17
0139 F011 BEQ 0x013C
013A 9201 ST R0,Z+
013B CFFB RJMP 0x0137
013C 8300 STD Z+0,R16
013D E5EE LDI R30,0x5E
013E E0F1 LDI R31,1
013F E6A0 LDI R26,0x60
0140 E0B0 LDI R27,0
0141 E012 LDI R17,2
0142 35E5 CPI R30,0x55
0143 07F1 CPC R31,R17
0144 F021 BEQ 0x0149
0145 95C8 LPM
0146 9631 ADIW R30,1
0147 920D ST R0,X+
0148 CFF9 RJMP 0x0142
0149 D083 RCALL _main
_exit:
014A CFFF RJMP _exit
FILE: C:\ATMega8515\测试程序\init.c
(0001) //ICC-AVR application builder : 2006-4-28 17:54:09
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007)
(0008) void port_init(void)
(0009) {
(0010) PORTA = 0x00;
_port_init:
014B 2422 CLR R2
014C BA2B OUT 0x1B,R2
(0011) DDRA = 0xFF;
014D EF8F LDI R24,0xFF
014E BB8A OUT 0x1A,R24
(0012) PORTB = 0x00;
014F BA28 OUT 0x18,R2
(0013) DDRB = 0xBF;
0150 EB8F LDI R24,0xBF
0151 BB87 OUT 0x17,R24
(0014) PORTC = 0xE0;
0152 EE80 LDI R24,0xE0
0153 BB85 OUT 0x15,R24
(0015) DDRC = 0xFC;
0154 EF8C LDI R24,0xFC
0155 BB84 OUT 0x14,R24
(0016) PORTD = 0x20;
0156 E280 LDI R24,0x20
0157 BB82 OUT 0x12,R24
(0017) DDRD = 0x22;
0158 E282 LDI R24,0x22
0159 BB81 OUT 0x11,R24
(0018) PORTE = 0x00;
015A B827 OUT 0x07,R2
(0019) DDRE = 0x00;
015B B826 OUT 0x06,R2
015C 9508 RET
(0020) }
(0021)
(0022) //TIMER1 initialize - prescale:1
(0023) // WGM: 0) Normal, TOP=0xFFFF
(0024) // desired value: 1mSec
(0025) // actual value: 1.000mSec (0.0%)
(0026) void timer1_init(void)
(0027) {
(0028) TCCR1B = 0x00; //stop
_timer1_init:
015D 2422 CLR R2
015E BC2E OUT 0x2E,R2
(0029) TCNT1H = 0xD4; //setup
015F ED84 LDI R24,0xD4
0160 BD8D OUT 0x2D,R24
(0030) TCNT1L = 0xCE;
0161 EC8E LDI R24,0xCE
0162 BD8C OUT 0x2C,R24
(0031) OCR1AH = 0x2B;
0163 E28B LDI R24,0x2B
0164 BD8B OUT 0x2B,R24
(0032) OCR1AL = 0x32;
0165 E382 LDI R24,0x32
0166 BD8A OUT 0x2A,R24
(0033) OCR1BH = 0x2B;
0167 E28B LDI R24,0x2B
0168 BD89 OUT 0x29,R24
(0034) OCR1BL = 0x32;
0169 E382 LDI R24,0x32
016A BD88 OUT 0x28,R24
(0035) TCCR1A = 0x00;
016B BC2F OUT 0x2F,R2
(0036) TCCR1B = 0x01; //start Timer
016C E081 LDI R24,1
016D BD8E OUT 0x2E,R24
016E 9508 RET
_timer1_ovf_isr:
016F 938A ST R24,-Y
0170 939A ST R25,-Y
0171 B78F IN R24,0x3F
0172 938A ST R24,-Y
(0037) }
(0038)
(0039) unsigned int count =0;
(0040) extern unsigned char ledflag;
(0041) extern unsigned char shuflag;
(0042) extern unsigned char lcdflag;
(0043) #pragma interrupt_handler timer1_ovf_isr:7
(0044) void timer1_ovf_isr(void)
(0045) {
(0046) TCNT1H = 0xD4; //reload counter high value
0173 ED84 LDI R24,0xD4
0174 BD8D OUT 0x2D,R24
(0047) TCNT1L = 0xCE; //reload counter low value
0175 EC8E LDI R24,0xCE
0176 BD8C OUT 0x2C,R24
(0048) if((++count&0xff)==0)ledflag=1;
0177 91800060 LDS R24,count
0179 91900061 LDS R25,count+1
017B 9601 ADIW R24,1
017C 93900061 STS count+1,R25
017E 93800060 STS count,R24
0180 7090 ANDI R25,0
0181 3080 CPI R24,0
0182 0789 CPC R24,R25
0183 F419 BNE 0x0187
0184 E081 LDI R24,1
0185 93800066 STS ledflag,R24
(0049) if((count&0x3ff)==0)shuflag=1;
0187 91800060 LDS R24,count
0189 91900061 LDS R25,count+1
018B 7093 ANDI R25,3
018C 3080 CPI R24,0
018D 0789 CPC R24,R25
018E F419 BNE 0x0192
018F E081 LDI R24,1
0190 93800067 STS shuflag,R24
(0050) if((count&0x1ff)==0)lcdflag=1;
0192 91800060 LDS R24,count
0194 91900061 LDS R25,count+1
0196 7091 ANDI R25,1
0197 3080 CPI R24,0
0198 0789 CPC R24,R25
0199 F419 BNE 0x019D
019A E081 LDI R24,1
019B 93800068 STS lcdflag,R24
019D 9189 LD R24,Y+
019E BF8F OUT 0x3F,R24
019F 9199 LD R25,Y+
01A0 9189 LD R24,Y+
01A1 9518 RETI
(0051)
(0052) }
(0053)
(0054) //SPI initialize
(0055) // clock rate: 5529498hz
(0056) void spi_init(void)
(0057) {
(0058) SPCR = 0xFC; //setup SPI
_spi_init:
01A2 EF8C LDI R24,0xFC
01A3 B98D OUT 0x0D,R24
01A4 9508 RET
_spi_stc_isr:
01A5 922A ST R2,-Y
01A6 938A ST R24,-Y
01A7 B62F IN R2,0x3F
01A8 922A ST R2,-Y
(0059) }
(0060)
(0061) #pragma interrupt_handler spi_stc_isr:9
(0062) void spi_stc_isr(void)
(0063) {
(0064) //byte in SPDR has been sent/received
(0065) PORTB^=0x10;
01A9 E180 LDI R24,0x10
01AA B228 IN R2,0x18
01AB 2628 EOR R2,R24
01AC BA28 OUT 0x18,R2
(0066) PORTB^=0x10;
01AD B228 IN R2,0x18
01AE 2628 EOR R2,R24
01AF BA28 OUT 0x18,R2
01B0 9029 LD R2,Y+
01B1 BE2F OUT 0x3F,R2
01B2 9189 LD R24,Y+
01B3 9029 LD R2,Y+
01B4 9518 RETI
(0067) }
(0068)
(0069) //UART0 initialize
(0070) // desired baud rate: 9600
(0071) // actual: baud rate:9600 (0.0%)
(0072) void uart0_init(void)
(0073) {
(0074) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
01B5 2422 CLR R2
01B6 B82A OUT 0x0A,R2
(0075) UCSRA = 0x00;
01B7 B82B OUT 0x0B,R2
(0076) UCSRC = BIT(URSEL) | 0x06;
01B8 E886 LDI R24,0x86
01B9 BD80 OUT 0x20,R24
(0077) UBRRL = 0x47; //set baud rate lo
01BA E487 LDI R24,0x47
01BB B989 OUT 0x09,R24
(0078) UBRRH = 0x00; //set baud rate hi
01BC BC20 OUT 0x20,R2
(0079) UCSRB = 0x18;
01BD E188 LDI R24,0x18
01BE B98A OUT 0x0A,R24
01BF 9508 RET
(0080) }
(0081)
(0082) //call this routine to initialize all peripherals
(0083) void init_devices(void)
(0084) {
(0085) //stop errant interrupts until set up
(0086) CLI(); //disable all interrupts
_init_devices:
01C0 94F8 BCLR 7
(0087) port_init();
01C1 DF89 RCALL _port_init
(0088) timer1_init();
01C2 DF9A RCALL _timer1_init
(0089) spi_init();
01C3 DFDE RCALL _spi_init
(0090) uart0_init();
01C4 DFF0 RCALL _uart0_init
(0091)
(0092) MCUCR = 0x00;
01C5 2422 CLR R2
01C6 BE25 OUT 0x35,R2
(0093) EMCUCR = 0x00;
01C7 BE26 OUT 0x36,R2
(0094) GICR = 0x00;
01C8 BE2B OUT 0x3B,R2
(0095) TIMSK = 0x80;
01C9 E880 LDI R24,0x80
01CA BF89 OUT 0x39,R24
(0096) SEI(); //re-enable interrupts
01CB 9478 BSET 7
01CC 9508 RET
FILE: C:\ATMega8515\测试程序\main.c
(0001) #include <iom8515v.h>
(0002) #include <macros.h>
(0003) #include <stdio.h>
(0004) #include"ForATmega8515.h"
(0005)
(0006) #define SomeNop NOP();NOP();NOP();NOP();NOP();NOP();\
(0007) NOP();NOP();NOP();NOP();NOP();NOP();\
(0008) NOP();NOP();NOP();NOP();NOP();NOP();
(0009)
(0010) #define C0 0x04
(0011) #define C1 0x08
(0012) #define C2 0x10
(0013) #define R0 0x40
(0014) #define R1 0x80
(0015) ///////////////////////////////
(0016) uchar leddata=0;
(0017) uchar left=0;
(0018) uchar right=0;
(0019) uchar lcdindex=0;
(0020) unsigned char ledflag=0;
(0021) unsigned char shuflag=0;
(0022) unsigned char lcdflag=0;
(0023) uchar index=0;
(0024) uchar key,temp;
(0025) uchar const str[]={"0123456789ABCDEF"};
(0026) uchar const line[]={0,2,4,6,8,10,12,14,
(0027) 0,2,4,6,8,10,12,14};//关
(0028) uchar const pic1[]={0x18,0x18,0x99,0xDB,0x7E,0x3C,0x18,0x00};
(0029) ///////////////////////////////
(0030) void delay(uint ticks);
(0031) void display();
(0032) /////////LCD///////////
(0033) void writedata(uchar lcddata);
(0034) void writecom(uchar lcddata);
(0035) void writeline(uchar x,uchar const *pt);
(0036) void initlcd();
(0037) //////////////////////////////
(0038) uchar GetKey(void);
(0039) /////////////////////////////
(0040) void main()
(0041) {
(0042) init_devices();
_main:
01CD DFF2 RCALL _init_devices
(0043) initlcd();
01CE D123 RCALL _initlcd
(0044) printf("-----------Test For ATMega8515--------------\n");
01CF E60A LDI R16,0x6A
01D0 E010 LDI R17,0
01D1 D431 RCALL _printf
01D2 C087 RJMP 0x025A
(0045) while(1)
(0046) {
(0047) display();
01D3 D096 RCALL _display
(0048) if(ledflag){leddata++;ledflag=0; if(index++==7)index=0;}
01D4 90200066 LDS R2,ledflag
01D6 2022 TST R2
01D7 F0A9 BEQ 0x01ED
01D8 91800062 LDS R24,leddata
01DA 5F8F SUBI R24,0xFF
01DB 93800062 STS leddata,R24
01DD 2422 CLR R2
01DE 92200066 STS ledflag,R2
01E0 90200069 LDS R2,index
01E2 2433 CLR R3
01E3 2D82 MOV R24,R2
01E4 5F8F SUBI R24,0xFF
01E5 93800069 STS index,R24
01E7 2D82 MOV R24,R2
01E8 3087 CPI R24,7
01E9 F419 BNE 0x01ED
01EA 2422 CLR R2
01EB 92200069 STS index,R2
(0049) if(shuflag){if(left++==9)left=0;shuflag=0;}
01ED 90200067 LDS R2,shuflag
01EF 2022 TST R2
01F0 F081 BEQ 0x0201
01F1 90200063 LDS R2,left
01F3 2433 CLR R3
01F4 2D82 MOV R24,R2
01F5 5F8F SUBI R24,0xFF
01F6 93800063 STS left,R24
01F8 2D82 MOV R24,R2
01F9 3089 CPI R24,0x9
01FA F419 BNE 0x01FE
01FB 2422 CLR R2
01FC 92200063 STS left,R2
01FE 2422 CLR R2
01FF 92200067 STS shuflag,R2
(0050) if(lcdflag){if(lcdindex++==16)lcdindex=0;writeline(lcdindex,str);lcdflag=0;}
0201 90200068 LDS R2,lcdflag
0203 2022 TST R2
0204 F0A9 BEQ 0x021A
0205 90200065 LDS R2,lcdindex
0207 2433 CLR R3
0208 2D82 MOV R24,R2
0209 5F8F SUBI R24,0xFF
020A 93800065 STS lcdindex,R24
020C 2D82 MOV R24,R2
020D 3180 CPI R24,0x10
020E F419 BNE 0x0212
020F 2422 CLR R2
0210 92200065 STS lcdindex,R2
0212 E324 LDI R18,0x34
0213 E030 LDI R19,0
0214 91000065 LDS R16,lcdindex
0216 D0C8 RCALL _writeline
0217 2422 CLR R2
0218 92200068 STS lcdflag,R2
(0051) if(lcdindex==16)PORTD&=~BEEL;
021A 91800065 LDS R24,lcdindex
021C 3180 CPI R24,0x10
021D F411 BNE 0x0220
021E 9895 CBI 0x12,5
021F C001 RJMP 0x0221
(0052) else PORTD|=BEEL;
0220 9A95 SBI 0x12,5
(0053) ///////////////////////////////////
(0054) temp=GetKey();
0221 D0DD RCALL _GetKey
0222 93000157 STS temp,R16
(0055) key=temp;
0224 2E20 MOV R2,R16
0225 92200158 STS key,R2
(0056) if((key&0x10)!=0)
0227 FF04 SBRS R16,4
0228 C016 RJMP 0x023F
(0057) {
(0058) if((temp&0x01)==0)right=1;
0229 FD00 SBRC R16,0
022A C004 RJMP 0x022F
022B E081 LDI R24,1
022C 93800064 STS right,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -