⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LST
📖 第 1 页 / 共 4 页
字号:
__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 + -