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

📄 m8demo.lst

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    00CA E5CF      LDI	R28,0x5F
    00CB E0D4      LDI	R29,4
    00CC BFCD      OUT	0x3D,R28
    00CD BFDE      OUT	0x3E,R29
    00CE 52C0      SUBI	R28,0x20
    00CF 40D0      SBCI	R29,0
    00D0 EA0A      LDI	R16,0xAA
    00D1 8308      STD	Y+0,R16
    00D2 2400      CLR	R0
    00D3 EBEE      LDI	R30,0xBE
    00D4 E0F1      LDI	R31,1
    00D5 E011      LDI	R17,1
    00D6 3CEF      CPI	R30,0xCF
    00D7 07F1      CPC	R31,R17
    00D8 F011      BEQ	0x00DB
    00D9 9201      ST	R0,Z+
    00DA CFFB      RJMP	0x00D6
    00DB 8300      STD	Z+0,R16
    00DC E3E6      LDI	R30,0x36
    00DD E0F0      LDI	R31,0
    00DE E6A0      LDI	R26,0x60
    00DF E0B0      LDI	R27,0
    00E0 E011      LDI	R17,1
    00E1 39E4      CPI	R30,0x94
    00E2 07F1      CPC	R31,R17
    00E3 F021      BEQ	0x00E8
    00E4 95C8      LPM
    00E5 9631      ADIW	R30,1
    00E6 920D      ST	R0,X+
    00E7 CFF9      RJMP	0x00E1
    00E8 D56D      RCALL	_main
_exit:
    00E9 CFFF      RJMP	_exit
FILE: D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\M8Demo.c
(0001) //ICC-AVR application builder : 2003-11-10 10:04:46
(0002) // Target : M8
(0003) // Crystal: 7.3728Mhz
(0004) #include <iom8v.h>
(0005) #include <macros.h>
(0006) #include "M8Demo.h"
(0007) #include"I2C.H"
(0008) #include "Eeprom.h"
(0009) #include "AT45DB021.h"
(0010) #include "Uart.h"
(0011) #include "assembly.h"
(0012) unsigned int  DelayTimer;
(0013) unsigned int  TimerCount;
(0014) unsigned int  TimerCountOld;
(0015) unsigned int  key_tick;
(0016) unsigned char key_state;
(0017) unsigned char key_value;
(0018) unsigned char  key_pressed;
(0019) unsigned char mode_state;
(0020) 
(0021) unsigned  char *OutPutStr;
(0022) unsigned char out_eeprom_data;
(0023) unsigned char  out_eeprom_addr=0;
(0024) unsigned char in_eeprom_data;
(0025) unsigned char  in_eeprom_addr=0;
(0026) unsigned int    adc_value=0;
(0027) unsigned char  AT45DB021_data;
(0028) unsigned char  AT45DB021_addr=0;
(0029) unsigned char  Display_Position=0;
(0030) 
(0031) const char DataTab[16]=
(0032) 	{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
(0033) 	  0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8E};
(0034) 
(0035) 
(0036) void Delay(unsigned int delay_time)
(0037) {
_Delay:
  delay_time           --> R16
    00EA C002      RJMP	0x00ED
(0038) while(delay_time)
(0039) delay_time--;
    00EB 5001      SUBI	R16,1
    00EC 4010      SBCI	R17,0
    00ED 3000      CPI	R16,0
    00EE 0701      CPC	R16,R17
    00EF F7D9      BNE	0x00EB
    00F0 9508      RET
(0040) }
(0041) 
(0042) void Delayms(unsigned int timers)
(0043) { 
(0044) DelayTimer=0;
_Delayms:
  timers               --> R16
    00F1 2422      CLR	R2
    00F2 2433      CLR	R3
    00F3 923001CE  STS	DelayTimer+1,R3
    00F5 922001CD  STS	DelayTimer,R2
    00F7 C008      RJMP	0x0100
(0045) while(1)
(0046) {if(DelayTimer>timers)
    00F8 902001CD  LDS	R2,DelayTimer
    00FA 903001CE  LDS	R3,DelayTimer+1
    00FC 1502      CP	R16,R2
    00FD 0513      CPC	R17,R3
    00FE F408      BCC	0x0100
(0047) return;
    00FF C001      RJMP	0x0101
    0100 CFF7      RJMP	0x00F8
    0101 9508      RET
(0048) }
(0049) }
(0050) 
(0051) void port_init(void)
(0052) {
(0053)  PORTB = 0xFF;
_port_init:
    0102 EF8F      LDI	R24,0xFF
    0103 BB88      OUT	0x18,R24
(0054)  DDRB  = 0xFF;
    0104 BB87      OUT	0x17,R24
(0055)  PORTC = 0x7F; //m103 output only
    0105 E78F      LDI	R24,0x7F
    0106 BB85      OUT	0x15,R24
(0056)  DDRC  = 0x79;
    0107 E789      LDI	R24,0x79
    0108 BB84      OUT	0x14,R24
(0057)  PORTD = 0xFF;
    0109 EF8F      LDI	R24,0xFF
    010A BB82      OUT	0x12,R24
(0058)  DDRD  = 0xFC;
    010B EF8C      LDI	R24,0xFC
    010C BB81      OUT	0x11,R24
    010D 9508      RET
(0059) }
(0060) 
(0061) //TIMER0 initialisation - prescale:1024
(0062) // WGM: Normal
(0063) // desired value: 10mSec
(0064) // actual value: 10.000mSec (0.0%)
(0065) void timer0_init(void)
(0066) {
(0067)   TCCR0 = 0x00; //stop
_timer0_init:
    010E 2422      CLR	R2
    010F BE23      OUT	0x33,R2
(0068)  TCNT0 = 0x8D; //set count
    0110 E88D      LDI	R24,0x8D
    0111 BF82      OUT	0x32,R24
(0069)  TCCR0 = 0x03; //start timer
    0112 E083      LDI	R24,3
    0113 BF83      OUT	0x33,R24
    0114 9508      RET
_timer0_ovf_isr:
    0115 D9CC      RCALL	push_lset
    0116 D9B4      RCALL	push_gset1
(0070)  
(0071) }
(0072) 
(0073) #pragma interrupt_handler timer0_ovf_isr:10
(0074) void timer0_ovf_isr(void)
(0075) {
(0076)  TCNT0 = 0x8D; //reload counter value
    0117 E88D      LDI	R24,0x8D
    0118 BF82      OUT	0x32,R24
(0077)  // TCNT0 = 0xA4; //reload counter value
(0078) 
(0079)   DelayTimer++;
    0119 918001CD  LDS	R24,DelayTimer
    011B 919001CE  LDS	R25,DelayTimer+1
    011D 9601      ADIW	R24,1
    011E 939001CE  STS	DelayTimer+1,R25
    0120 938001CD  STS	DelayTimer,R24
(0080)   key_tick++;
    0122 918001C7  LDS	R24,key_tick
    0124 919001C8  LDS	R25,key_tick+1
    0126 9601      ADIW	R24,1
    0127 939001C8  STS	key_tick+1,R25
    0129 938001C7  STS	key_tick,R24
(0081)     Display_Position++;
    012B 91800065  LDS	R24,Display_Position
    012D 5F8F      SUBI	R24,0xFF
    012E 93800065  STS	Display_Position,R24
(0082)  if(Display_Position>=5)
    0130 3085      CPI	R24,5
    0131 F018      BCS	0x0135
(0083)  	Display_Position=1;
    0132 E081      LDI	R24,1
    0133 93800065  STS	Display_Position,R24
(0084) 
(0085)    switch(mode_state)
    0135 914001C3  LDS	R20,mode_state
    0137 2755      CLR	R21
    0138 3040      CPI	R20,0
    0139 0745      CPC	R20,R21
    013A F129      BEQ	0x0160
    013B 3041      CPI	R20,1
    013C E0E0      LDI	R30,0
    013D 075E      CPC	R21,R30
    013E F139      BEQ	0x0166
    013F 3042      CPI	R20,2
    0140 E0E0      LDI	R30,0
    0141 075E      CPC	R21,R30
    0142 F119      BEQ	0x0166
    0143 3043      CPI	R20,3
    0144 E0E0      LDI	R30,0
    0145 075E      CPC	R21,R30
    0146 F0F9      BEQ	0x0166
    0147 3044      CPI	R20,4
    0148 E0E0      LDI	R30,0
    0149 075E      CPC	R21,R30
    014A F109      BEQ	0x016C
    014B 3045      CPI	R20,5
    014C E0E0      LDI	R30,0
    014D 075E      CPC	R21,R30
    014E F0E9      BEQ	0x016C
    014F 3046      CPI	R20,6
    0150 E0E0      LDI	R30,0
    0151 075E      CPC	R21,R30
    0152 F0C9      BEQ	0x016C
    0153 3047      CPI	R20,7
    0154 E0E0      LDI	R30,0
    0155 075E      CPC	R21,R30
    0156 F0D9      BEQ	0x0172
    0157 3048      CPI	R20,0x8
    0158 E0E0      LDI	R30,0
    0159 075E      CPC	R21,R30
    015A F0E9      BEQ	0x0178
    015B 3049      CPI	R20,0x9
    015C E0E0      LDI	R30,0
    015D 075E      CPC	R21,R30
    015E F0C9      BEQ	0x0178
    015F C01D      RJMP	0x017D
(0086)  	 	       	{
(0087)  	 	       	  case clock_mode: DisplayTimer(TimerCount);break;
    0160 910001CB  LDS	R16,TimerCount
    0162 911001CC  LDS	R17,TimerCount+1
    0164 D164      RCALL	_DisplayTimer
    0165 C017      RJMP	0x017D
(0088)  	 	                case out_eeprom_addr_modify_mode:
(0089)  	 	                case out_eeprom_data_modify_mode:
(0090)  	 	                case out_eeprom_read_mode:DisplayHexData(out_eeprom_addr,out_eeprom_data);break;
    0166 912001C0  LDS	R18,out_eeprom_data
    0168 91000060  LDS	R16,out_eeprom_addr
    016A D0BD      RCALL	_DisplayHexData
    016B C011      RJMP	0x017D
(0091)  	 	                case in_eeprom_addr_modify_mode:
(0092)  	 	                case in_eeprom_data_modify_mode:
(0093)  	 	                case in_eeprom_read_mode:DisplayHexData(in_eeprom_addr,in_eeprom_data);break;
    016C 912001BF  LDS	R18,in_eeprom_data
    016E 91000061  LDS	R16,in_eeprom_addr
    0170 D0B7      RCALL	_DisplayHexData
    0171 C00B      RJMP	0x017D
(0094)  	 	                case adc_mode:DisplayData( adc_value);break;
    0172 91000062  LDS	R16,adc_value
    0174 91100063  LDS	R17,adc_value+1
    0176 D0CD      RCALL	_DisplayData
    0177 C005      RJMP	0x017D
(0095)  	 	                case AT45DB021_addr_modify_mode:
(0096) 				  case AT45DB021_data_modify_mode:DisplayHexData(AT45DB021_addr,AT45DB021_data);break;
    0178 912001BE  LDS	R18,AT45DB021_data
    017A 91000064  LDS	R16,AT45DB021_addr
    017C D0AB      RCALL	_DisplayHexData
(0097)                               default :break;
    017D D950      RCALL	pop_gset1
    017E D97A      RCALL	pop_lset
    017F 9518      RETI
(0098)  	 	       	}
(0099) 
(0100) }
(0101) 
(0102) //TIMER1 initialisation - prescale:256
(0103) // WGM: 0) Normal, TOP=0xFFFF
(0104) // desired value: 1Sec
(0105) // actual value:  1.000Sec (0.0%)
(0106) void timer1_init(void)
(0107) {
(0108)  TCCR1B = 0x00; //stop
_timer1_init:
    0180 2422      CLR	R2
    0181 BC2E      OUT	0x2E,R2
(0109)  TCNT1H = 0x8F; //setup
    0182 E88F      LDI	R24,0x8F
    0183 BD8D      OUT	0x2D,R24
(0110)  TCNT1L = 0x80;
    0184 E880      LDI	R24,0x80
    0185 BD8C      OUT	0x2C,R24
(0111)  OCR1AH = 0x70;
    0186 E780      LDI	R24,0x70
    0187 BD8B      OUT	0x2B,R24
(0112)  OCR1AL = 0x80;
    0188 E880      LDI	R24,0x80
    0189 BD8A      OUT	0x2A,R24
(0113)  OCR1BH = 0x70;
    018A E780      LDI	R24,0x70
    018B BD89      OUT	0x29,R24
(0114)  OCR1BL = 0x80;
    018C E880      LDI	R24,0x80
    018D BD88      OUT	0x28,R24
(0115)  ICR1H  = 0x70;
    018E E780      LDI	R24,0x70
    018F BD87      OUT	0x27,R24
(0116)  ICR1L  = 0x80;
    0190 E880      LDI	R24,0x80
    0191 BD86      OUT	0x26,R24
(0117)  TCCR1A = 0x00;
    0192 BC2F      OUT	0x2F,R2
(0118)  TCCR1B = 0x04; //start Timer
    0193 E084      LDI	R24,4
    0194 BD8E      OUT	0x2E,R24
    0195 9508      RET
_timer1_ovf_isr:
    0196 922A      ST	R2,-Y
    0197 923A      ST	R3,-Y
    0198 938A      ST	R24,-Y
    0199 939A      ST	R25,-Y
    019A 93EA      ST	R30,-Y
    019B B62F      IN	R2,0x3F
    019C 922A      ST	R2,-Y
(0119) }
(0120) 
(0121) #pragma interrupt_handler timer1_ovf_isr:9
(0122) void timer1_ovf_isr(void)
(0123) {
(0124)  //TIMER1 has overflowed
(0125)  TCNT1H = 0x8F; //reload counter high value
    019D E88F      LDI	R24,0x8F
    019E BD8D      OUT	0x2D,R24
(0126)  TCNT1L = 0x80; //reload counter low value
    019F E880      LDI	R24,0x80
    01A0 BD8C      OUT	0x2C,R24
(0127)   TimerCount++;
    01A1 918001CB  LDS	R24,TimerCount
    01A3 919001CC  LDS	R25,TimerCount+1
    01A5 9601      ADIW	R24,1
    01A6 939001CC  STS	TimerCount+1,R25
    01A8 938001CB  STS	TimerCount,R24
(0128) if(TimerCount==3600)
    01AA 3180      CPI	R24,0x10
    01AB E0EE      LDI	R30,0xE
    01AC 079E      CPC	R25,R30
    01AD F431      BNE	0x01B4
(0129) 	TimerCount=0;
    01AE 2422      CLR	R2
    01AF 2433      CLR	R3
    01B0 923001CC  STS	TimerCount+1,R3
    01B2 922001CB  STS	TimerCount,R2
    01B4 9029      LD	R2,Y+
    01B5 BE2F      OUT	0x3F,R2
    01B6 91E9      LD	R30,Y+
    01B7 9199      LD	R25,Y+
    01B8 9189      LD	R24,Y+
    01B9 9039      LD	R3,Y+
    01BA 9029      LD	R2,Y+
    01BB 9518      RETI
(0130) }
(0131) 
(0132) 
(0133) void spi_init(void)
(0134) {
(0135)  SPCR = 0x70; //setup SPI
_spi_init:
    01BC E780      LDI	R24,0x70
    01BD B98D      OUT	0x0D,R24
(0136)  SPSR = 0x00; //setup SPI
    01BE 2422      CLR	R2
    01BF B82E      OUT	0x0E,R2
    01C0 9508      RET
(0137) }
(0138) 
(0139) //TWI initialisation
(0140) // bit rate:1
(0141) void twi_init(void)
(0142) {
(0143)  TWCR= 0X00; //disable twi
_twi_init:
    01C1 2422      CLR	R2
    01C2 BE26      OUT	0x36,R2
(0144)  TWBR= 0x01; //set bit rate
    01C3 E081      LDI	R24,1
    01C4 B980      OUT	0x00,R24
(0145)  TWSR= 0x00; //set prescale
    01C5 B821      OUT	0x01,R2
(0146)  TWAR= 0x02; //set slave address
    01C6 E082      LDI	R24,2
    01C7 B982      OUT	0x02,R24
(0147)  TWCR= 0x44; //enable twi
    01C8 E484      LDI	R24,0x44
    01C9 BF86      OUT	0x36,R24
    01CA 9508      RET
(0148) }
(0149) 
(0150) void twi_Enable(void)
(0151) {
(0152)  TWCR= 0x44; //enable twi
_twi_Enable:
    01CB E484      LDI	R24,0x44
    01CC BF86      OUT	0x36,R24
    01CD 9508      RET
(0153) }
(0154) void twi_Disable(void)
(0155) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -