+;***************************************************************************\r
+;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y\r
+;* \r
+;* Number : AVR000\r
+;* File Name : "m104def.inc"\r
+;* Title : Register/Bit Definitions for the ATmega104\r
+;* Date : January 25th, 2000\r
+;* Version : 1.0\r
+;* Support telephone : +47 72 88 43 88 (ATMEL Norway)\r
+;* Support fax : +47 72 88 43 99 (ATMEL Norway)\r
+;* Support E-mail : support@atmel.no\r
+;* Target MCU : ATmega104\r
+;*\r
+;* DESCRIPTION\r
+;* When including this file in the assembly program file, all I/O register \r
+;* names and I/O register bit names appearing in the data book can be used.\r
+;* In addition, the six registers forming the three data pointers X, Y and\r
+;* Z have been assigned names XL - ZH. Highest RAM address for Internal \r
+;* SRAM is also defined \r
+;*\r
+;* The Register names are represented by their hexadecimal address.\r
+;* \r
+;* The Register Bit names are represented by their bit number (0-7).\r
+;* \r
+;* Please observe the difference in using the bit names with instructions\r
+;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" \r
+;* (skip if bit in register set/cleared). The following example illustrates\r
+;* this:\r
+;* \r
+;* in r16,PORTB ;read PORTB latch\r
+;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)\r
+;* out PORTB,r16 ;output to PORTB\r
+;*\r
+;* in r16,TIFR ;read the Timer Interrupt Flag Register\r
+;* sbrc r16,TOV0 ;test the overflow flag (use bit#)\r
+;* rjmp TOV0_is_set ;jump if set\r
+;* ... ;otherwise do something else\r
+;***************************************************************************\r
+;$Author: hackbard $\r
+;$Date: 2003-12-06 01:15:10 $\r
+;$Revision: 1.1 $\r
+;$Source: /chroot/cvs/my-code/atmel/include/m104def.inc,v $\r
+\r
+;**** Specify Device ****\r
+;.device ATmega104\r
+\r
+\r
+;*****************************************************************************\r
+; I/O Register Definitions\r
+;*****************************************************************************\r
+\r
+;**** Memory Mapped I/O Register Definitions ($FF-$60) ****\r
+.equ UCSR1C = $9D\r
+.equ UDR1 = $9C\r
+.equ UCSR1A = $9B\r
+.equ UCSR1B = $9A\r
+.equ UBRR1L = $99\r
+.equ UBRR1H = $98\r
+ \r
+.equ UCSR0C = $95\r
+ \r
+.equ UBRR0H = $90\r
+\r
+.equ TCCR3C = $8C\r
+.equ TCCR3A = $8B\r
+.equ TCCR3B = $8A\r
+.equ TCNT3H = $89\r
+.equ TCNT3L = $88\r
+.equ OCR3AH = $87\r
+.equ OCR3AL = $86\r
+.equ OCR3BH = $85\r
+.equ OCR3BL = $84\r
+.equ OCR3CH = $83\r
+.equ OCR3CL = $82\r
+.equ ICR3H = $81\r
+.equ ICR3L = $80\r
+\r
+.equ ETIMSK = $7D\r
+.equ ETIFR = $7C\r
+\r
+.equ TCCR1C = $7A\r
+.equ OCR1CH = $79\r
+.equ OCR1CL = $78\r
+\r
+.equ TWCR = $74\r
+.equ TWDR = $73\r
+.equ TWAR = $72\r
+.equ TWSR = $71\r
+.equ TWBR = $70\r
+ \r
+.equ OSCCAL = $6F\r
+\r
+.equ XMCRA = $6D\r
+.equ XMCRB = $6C\r
+\r
+.equ EICRA = $6A\r
+\r
+.equ SPMCSR = $68\r
+.equ SPMCR = $68 ; old name for SPMCSR\r
+\r
+.equ PORTG = $65\r
+.equ DDRG = $64\r
+.equ PING = $63\r
+\r
+.equ PORTF = $62\r
+.equ DDRF = $61\r
+\r
+;**** I/O Register Definitions ($3F-$00) ****\r
+.equ SREG = $3F\r
+.equ SPH = $3E\r
+.equ SPL = $3D\r
+.equ XDIV = $3C\r
+.equ RAMPZ = $3B\r
+.equ EICRB = $3A\r
+.equ EIMSK = $39\r
+.equ GIMSK = $39 ; old name for EIMSK\r
+.equ GICR = $39 ; old name for EIMSK\r
+.equ EIFR = $38\r
+.equ GIFR = $38 ; old name for EIFR\r
+.equ TIMSK = $37\r
+.equ TIFR = $36\r
+.equ MCUCR = $35\r
+.equ MCUCSR = $34\r
+.equ TCCR0 = $33\r
+.equ TCNT0 = $32\r
+.equ OCR0 = $31\r
+.equ ASSR = $30\r
+.equ TCCR1A = $2F\r
+.equ TCCR1B = $2E\r
+.equ TCNT1H = $2D\r
+.equ TCNT1L = $2C\r
+.equ OCR1AH = $2B\r
+.equ OCR1AL = $2A\r
+.equ OCR1BH = $29\r
+.equ OCR1BL = $28\r
+.equ ICR1H = $27\r
+.equ ICR1L = $26\r
+.equ TCCR2 = $25\r
+.equ TCNT2 = $24\r
+.equ OCR2 = $23\r
+.equ OCDR = $22 ; New\r
+.equ WDTCR = $21\r
+.equ SFIOR = $20 ; New\r
+.equ EEARH = $1F\r
+.equ EEARL = $1E\r
+.equ EEDR = $1D\r
+.equ EECR = $1C\r
+.equ PORTA = $1B\r
+.equ DDRA = $1A\r
+.equ PINA = $19\r
+.equ PORTB = $18\r
+.equ DDRB = $17\r
+.equ PINB = $16\r
+.equ PORTC = $15\r
+.equ DDRC = $14 ; New\r
+.equ PINC = $13 ; New\r
+.equ PORTD = $12\r
+.equ DDRD = $11\r
+.equ PIND = $10\r
+.equ SPDR = $0F\r
+.equ SPSR = $0E\r
+.equ SPCR = $0D\r
+.equ UDR0 = $0C\r
+.equ UCSR0A = $0B\r
+.equ UCSR0B = $0A\r
+.equ UBRR0L = $09\r
+.equ ACSR = $08\r
+.equ ADMUX = $07\r
+.equ ADCSR = $06\r
+.equ ADCH = $05\r
+.equ ADCL = $04\r
+.equ PORTE = $03\r
+.equ DDRE = $02\r
+.equ PINE = $01\r
+.equ PINF = $00\r
+\r
+\r
+;*****************************************************************************\r
+; Bit Definitions\r
+;*****************************************************************************\r
+\r
+;**** MCU Control ****\r
+.equ SRE = 7 ; MCUCR\r
+.equ SRW10 = 6\r
+.equ SE = 5\r
+.equ SM1 = 4\r
+.equ SM0 = 3\r
+.equ SM2 = 2\r
+.equ IVSEL = 1\r
+.equ IVCE = 0\r
+\r
+.equ JTD = 7 ; MCUCSR\r
+.equ JTRF = 4 \r
+.equ WDRF = 3\r
+.equ BORF = 2\r
+.equ EXTRF = 1\r
+.equ PORF = 0\r
+\r
+.equ SRL2 =6 ; XMCRA\r
+.equ SRL1 =5\r
+.equ SRL0 =4\r
+.equ SRW01 =3\r
+.equ SRW00 =2\r
+.equ SRW11 =1\r
+\r
+.equ XMBK = 7 ; XMCRB\r
+.equ XMM2 = 2\r
+.equ XMM1 = 1\r
+.equ XMM0 = 0\r
+\r
+.equ SPMIE =7 ; SPMCSR\r
+.equ ASB =6 ; backwards compatiblity\r
+.equ ASRE =4 ; backwards compatiblity\r
+.equ RWWSB =6\r
+.equ RWWSRE =4 \r
+.equ BLBSET =3\r
+.equ PGWRT =2\r
+.equ PGERS =1\r
+.equ SPMEN =0\r
+\r
+.equ IDRD = 7 ; OCDR\r
+.equ OCDR6 = 6\r
+.equ OCDR5 = 5\r
+.equ OCDR4 = 4 \r
+.equ OCDR3 = 3\r
+.equ OCDR2 = 2\r
+.equ OCDR1 = 1\r
+.equ OCDR0 = 0\r
+\r
+.equ XDIVEN = 7 ; XDIV\r
+.equ XDIV6 = 6\r
+.equ XDIV5 = 5\r
+.equ XDIV4 = 4\r
+.equ XDIV3 = 3\r
+.equ XDIV2 = 2\r
+.equ XDIV1 = 1\r
+.equ XDIV0 = 0\r
+\r
+.equ TSM = 7 ; SFIOR\r
+.equ ADHSM = 4\r
+.equ ACME = 3\r
+.equ PUD = 2\r
+.equ PSR0 = 1\r
+.equ PSR1 = 0\r
+.equ PSR2 = 0\r
+.equ PSR3 = 0\r
+.equ PSR321 = 0 \r
+\r
+;**** Analog to Digital Converter ****\r
+.equ ADEN = 7 ; ADCSR\r
+.equ ADSC = 6\r
+.equ ADFR = 5\r
+.equ ADIF = 4\r
+.equ ADIE = 3\r
+.equ ADPS2 = 2\r
+.equ ADPS1 = 1\r
+.equ ADPS0 = 0\r
+\r
+.equ REFS1 =7 ; ADMUX\r
+.equ REFS0 =6\r
+.equ ADLAR =5\r
+.equ MUX4 =4\r
+.equ MUX3 =3\r
+.equ MUX2 =2\r
+.equ MUX1 =1\r
+.equ MUX0 =0\r
+\r
+;**** Analog Comparator ****\r
+.equ ACD = 7 ; ACSR\r
+.equ ACBG = 6\r
+.equ ACO = 5\r
+.equ ACI = 4\r
+.equ ACIE = 3\r
+.equ ACIC = 2\r
+.equ ACIS1 = 1\r
+.equ ACIS0 = 0\r
+ \r
+\r
+;**** External Interrupts ****\r
+.equ INT7 = 7 ; EIMSK\r
+.equ INT6 = 6\r
+.equ INT5 = 5\r
+.equ INT4 = 4\r
+.equ INT3 = 3\r
+.equ INT2 = 2\r
+.equ INT1 = 1\r
+.equ INT0 = 0\r
+\r
+.equ INTF7 = 7 ; EIFR\r
+.equ INTF6 = 6\r
+.equ INTF5 = 5\r
+.equ INTF4 = 4\r
+.equ INTF3 = 3\r
+.equ INTF2 = 2\r
+.equ INTF1 = 1\r
+.equ INTF0 = 0\r
+\r
+.equ ISC71 = 7 ; EICRB\r
+.equ ISC70 = 6\r
+.equ ISC61 = 5\r
+.equ ISC60 = 4\r
+.equ ISC51 = 3\r
+.equ ISC50 = 2\r
+.equ ISC41 = 1\r
+.equ ISC40 = 0\r
+\r
+.equ ISC31 = 7 ; EICRA\r
+.equ ISC30 = 6\r
+.equ ISC21 = 5\r
+.equ ISC20 = 4\r
+.equ ISC11 = 3\r
+.equ ISC10 = 2\r
+.equ ISC01 = 1\r
+.equ ISC00 = 0\r
+\r
+;**** Timer Interrupts ****\r
+.equ OCIE2 = 7 ; TIMSK\r
+.equ TOIE2 = 6\r
+.equ TICIE1 = 5\r
+.equ OCIE1A = 4\r
+.equ OCIE1B = 3\r
+.equ TOIE1 = 2\r
+.equ OCIE0 = 1\r
+.equ TOIE0 = 0\r
+\r
+.equ TICIE3 = 5 ; ETIMSK\r
+.equ OCIE3A = 4\r
+.equ OCIE3B = 3\r
+.equ TOIE3 = 2\r
+.equ OCIE3C = 1\r
+.equ OCIE1C = 0\r
+\r
+.equ OCF2 = 7 ; TIFR\r
+.equ TOV2 = 6\r
+.equ ICF1 = 5\r
+.equ OCF1A = 4\r
+.equ OCF1B = 3\r
+.equ TOV1 = 2\r
+.equ OCF0 = 1\r
+.equ TOV0 = 0\r
+\r
+.equ ICF3 = 5 ; ETIFR\r
+.equ OCF3A = 4\r
+.equ OCF3B = 3\r
+.equ TOV3 = 2\r
+.equ OCF3C = 1\r
+.equ OCF1C = 0\r
+\r
+;**** Asynchronous Timer ****\r
+.equ AS0 = 3 ; ASSR\r
+.equ TCN0UB = 2\r
+.equ OCR0UB = 1\r
+.equ TCR0UB = 0\r
+\r
+;**** Timer 0 ****\r
+.equ FOC0 = 7 ; TCCR0\r
+.equ PWM0 = 6\r
+.equ COM01 = 5\r
+.equ COM00 = 4\r
+.equ CTC0 = 3\r
+.equ CS02 = 2\r
+.equ CS01 = 1\r
+.equ CS00 = 0\r
+\r
+;**** Timer 1 ****\r
+.equ COM1A1 = 7 ; TCCR1A\r
+.equ COM1A0 = 6\r
+.equ COM1B1 = 5\r
+.equ COM1B0 = 4\r
+.equ COM1C1 = 3\r
+.equ COM1C0 = 2\r
+.equ PWM11 = 1 ; OBSOLETE! Use WGM11\r
+.equ PWM10 = 0 ; OBSOLETE! Use WGM10\r
+.equ WGM11 = 1\r
+.equ WGM10 = 0\r
+\r
+.equ ICNC1 = 7 ; TCCR1B\r
+.equ ICES1 = 6\r
+.equ CTC11 = 4 ; OBSOLETE! Use WGM13\r
+.equ CTC10 = 3 ; OBSOLETE! Use WGM12\r
+.equ WGM13 = 4\r
+.equ WGM12 = 3\r
+.equ CS12 = 2\r
+.equ CS11 = 1\r
+.equ CS10 = 0\r
+\r
+.equ FOC1A = 7 ; TCCR1C\r
+.equ FOC1B = 6\r
+.equ FOC1C = 5\r
+\r
+;**** Timer 2 ****\r
+.equ FOC2 = 7 ; TCCR2\r
+.equ PWM2 = 6\r
+.equ COM21 = 5\r
+.equ COM20 = 4\r
+.equ CTC2 = 3\r
+.equ CS22 = 2\r
+.equ CS21 = 1\r
+.equ CS20 = 0\r
+\r
+;**** Timer 3 ****\r
+.equ COM3A1 = 7 ; TCCR3A\r
+.equ COM3A0 = 6\r
+.equ COM3B1 = 5\r
+.equ COM3B0 = 4\r
+.equ COM3C1 = 3\r
+.equ COM3C0 = 2\r
+.equ PWM31 = 1 ; OBSOLETE! Use WGM31\r
+.equ PWM30 = 0 ; OBSOLETE! Use WGM30\r
+.equ WGM31 = 1\r
+.equ WGM30 = 0\r
+\r
+.equ ICNC3 = 7 ; TCCR3B\r
+.equ ICES3 = 6\r
+.equ CTC31 = 4 ; OBSOLETE! Use WGM33\r
+.equ CTC30 = 3 ; OBSOLETE! Use WGM32\r
+.equ WGM33 = 4\r
+.equ WGM32 = 3\r
+.equ CS32 = 2\r
+.equ CS31 = 1\r
+.equ CS30 = 0\r
+\r
+.equ FOC3A = 7 ; TCCR3C\r
+.equ FOC3B = 6\r
+.equ FOC3C = 5\r
+\r
+;**** Watchdog Timer ****\r
+.equ WDCE = 4 ; WDTCR\r
+.equ WDTOE = 4 ; For Mega103 compability\r
+.equ WDE = 3\r
+.equ WDP2 = 2\r
+.equ WDP1 = 1\r
+.equ WDP0 = 0\r
+\r
+;**** EEPROM Control Register ****\r
+.equ EERIE = 3 ; EECR\r
+.equ EEMWE = 2\r
+.equ EEWE = 1\r
+.equ EERE = 0\r
+\r
+;**** USART 0 and USART 1 ****\r
+.equ RXC = 7 ; (UCSRA0/1)\r
+.equ TXC = 6\r
+.equ UDRE = 5\r
+.equ FE = 4\r
+.equ DOR = 3\r
+.equ PE = 2 ; OBSOLETED!\r
+.equ U2X = 1\r
+.equ MPCM = 0\r
+\r
+.equ RXC0 = 7 ; (UCSR0A)\r
+.equ TXC0 = 6\r
+.equ UDRE0 = 5\r
+.equ FE0 = 4\r
+.equ DOR0 = 3\r
+.equ UPE0 = 2\r
+.equ U2X0 = 1\r
+.equ MPCM0 = 0\r
+\r
+.equ RXC1 = 7 ; (UCSR1A)\r
+.equ TXC1 = 6\r
+.equ UDRE1 = 5\r
+.equ FE1 = 4\r
+.equ DOR1 = 3\r
+.equ UPE1 = 2\r
+.equ U2X1 = 1\r
+.equ MPCM1 = 0\r
+\r
+.equ RXCIE = 7 ; (UCSRB0/1)\r
+.equ TXCIE = 6\r
+.equ UDRIE = 5\r
+.equ RXEN = 4\r
+.equ TXEN = 3\r
+.equ UCSZ2 = 2\r
+.equ RXB8 = 1\r
+.equ TXB8 = 0\r
+\r
+.equ RXCIE0 = 7 ; (UCSR0B)\r
+.equ TXCIE0 = 6\r
+.equ UDRIE0 = 5\r
+.equ RXEN0 = 4\r
+.equ TXEN0 = 3\r
+.equ UCSZ02 = 2\r
+.equ RXB80 = 1\r
+.equ TXB80 = 0\r
+\r
+.equ RXCIE1 = 7 ; (UCSR1B)\r
+.equ TXCIE1 = 6\r
+.equ UDRIE1 = 5\r
+.equ RXEN1 = 4\r
+.equ TXEN1 = 3\r
+.equ UCSZ12 = 2\r
+.equ RXB81 = 1\r
+.equ TXB81 = 0\r
+\r
+.equ UMSEL = 6 ; (UCSRC0/1)\r
+.equ UPM1 = 5\r
+.equ UPM0 = 4\r
+.equ USBS = 3\r
+.equ UCSZ1 = 2\r
+.equ UCSZ0 = 1\r
+.equ UCPOL = 0\r
+\r
+.equ UMSEL0 = 6 ; (UCSR0C)\r
+.equ UPM01 = 5\r
+.equ UPM00 = 4\r
+.equ USBS0 = 3\r
+.equ UCSZ01 = 2\r
+.equ UCSZ00 = 1\r
+.equ UCPOL0 = 0\r
+\r
+.equ UMSEL1 = 6 ; (UCSR1C)\r
+.equ UPM11 = 5\r
+.equ UPM10 = 4\r
+.equ USBS1 = 3\r
+.equ UCSZ11 = 2\r
+.equ UCSZ10 = 1\r
+.equ UCPOL1 = 0\r
+\r
+ \r
+;**** SPI ****\r
+.equ SPIE = 7 ; SPCR\r
+.equ SPE = 6\r
+.equ DORD = 5\r
+.equ MSTR = 4\r
+.equ CPOL = 3\r
+.equ CPHA = 2\r
+.equ SPR1 = 1\r
+.equ SPR0 = 0\r
+\r
+.equ SPIF = 7 ; SPSR\r
+.equ WCOL = 6\r
+.equ SPI2X = 0\r
+\r
+;**** TWI ****\r
+ \r
+.equ TWINT = 7\r
+.equ TWEA = 6\r
+.equ TWSTA = 5\r
+.equ TWSTO = 4\r
+.equ TWWC = 3\r
+.equ TWEN = 2\r
+.equ TWIE = 0\r
+.equ TWS7 = 7 ; TWSR\r
+.equ TWS6 = 6\r
+.equ TWS5 = 5\r
+.equ TWS4 = 4\r
+.equ TWS3 = 3\r
+.equ TWGCE = 0 ; TWAR\r
+\r
+ \r
+;**** PORT A ****\r
+.equ PA7 = 7 ; PORTA\r
+.equ PA6 = 6\r
+.equ PA5 = 5\r
+.equ PA4 = 4\r
+.equ PA3 = 3\r
+.equ PA2 = 2\r
+.equ PA1 = 1\r
+.equ PA0 = 0\r
+.equ PORTA7 = 7\r
+.equ PORTA6 = 6\r
+.equ PORTA5 = 5\r
+.equ PORTA4 = 4\r
+.equ PORTA3 = 3\r
+.equ PORTA2 = 2\r
+.equ PORTA1 = 1\r
+.equ PORTA0 = 0\r
+\r
+.equ DDA7 = 7 ; DDRA\r
+.equ DDA6 = 6\r
+.equ DDA5 = 5\r
+.equ DDA4 = 4\r
+.equ DDA3 = 3\r
+.equ DDA2 = 2\r
+.equ DDA1 = 1\r
+.equ DDA0 = 0\r
+\r
+.equ PINA7 = 7 ; PINA\r
+.equ PINA6 = 6\r
+.equ PINA5 = 5\r
+.equ PINA4 = 4\r
+.equ PINA3 = 3\r
+.equ PINA2 = 2\r
+.equ PINA1 = 1\r
+.equ PINA0 = 0\r
+\r
+;**** PORT B ****\r
+.equ PB7 = 7 ; PORTB\r
+.equ PB6 = 6\r
+.equ PB5 = 5\r
+.equ PB4 = 4\r
+.equ PB3 = 3\r
+.equ PB2 = 2\r
+.equ PB1 = 1\r
+.equ PB0 = 0\r
+.equ PORTB7 = 7\r
+.equ PORTB6 = 6\r
+.equ PORTB5 = 5\r
+.equ PORTB4 = 4\r
+.equ PORTB3 = 3\r
+.equ PORTB2 = 2\r
+.equ PORTB1 = 1\r
+.equ PORTB0 = 0\r
+\r
+.equ DDB7 = 7 ; DDRB\r
+.equ DDB6 = 6\r
+.equ DDB5 = 5\r
+.equ DDB4 = 4\r
+.equ DDB3 = 3\r
+.equ DDB2 = 2\r
+.equ DDB1 = 1\r
+.equ DDB0 = 0\r
+\r
+.equ PINB7 = 7 ; PINB\r
+.equ PINB6 = 6\r
+.equ PINB5 = 5\r
+.equ PINB4 = 4\r
+.equ PINB3 = 3\r
+.equ PINB2 = 2\r
+.equ PINB1 = 1\r
+.equ PINB0 = 0\r
+\r
+;**** PORT C ****\r
+.equ PC7 = 7 ; PORTC\r
+.equ PC6 = 6\r
+.equ PC5 = 5\r
+.equ PC4 = 4\r
+.equ PC3 = 3\r
+.equ PC2 = 2\r
+.equ PC1 = 1\r
+.equ PC0 = 0\r
+.equ PORTC7 = 7\r
+.equ PORTC6 = 6\r
+.equ PORTC5 = 5\r
+.equ PORTC4 = 4\r
+.equ PORTC3 = 3\r
+.equ PORTC2 = 2\r
+.equ PORTC1 = 1\r
+.equ PORTC0 = 0\r
+\r
+.equ DDC7 = 7 ; DDRC\r
+.equ DDC6 = 6\r
+.equ DDC5 = 5\r
+.equ DDC4 = 4\r
+.equ DDC3 = 3\r
+.equ DDC2 = 2\r
+.equ DDC1 = 1\r
+.equ DDC0 = 0\r
+\r
+.equ PINC7 = 7 ; PINC\r
+.equ PINC6 = 6\r
+.equ PINC5 = 5\r
+.equ PINC4 = 4\r
+.equ PINC3 = 3\r
+.equ PINC2 = 2\r
+.equ PINC1 = 1\r
+.equ PINC0 = 0\r
+\r
+;**** PORT D ****\r
+.equ PD7 = 7 ; PORTD\r
+.equ PD6 = 6\r
+.equ PD5 = 5\r
+.equ PD4 = 4\r
+.equ PD3 = 3\r
+.equ PD2 = 2\r
+.equ PD1 = 1\r
+.equ PD0 = 0\r
+.equ PORTD7 = 7\r
+.equ PORTD6 = 6\r
+.equ PORTD5 = 5\r
+.equ PORTD4 = 4\r
+.equ PORTD3 = 3\r
+.equ PORTD2 = 2\r
+.equ PORTD1 = 1\r
+.equ PORTD0 = 0\r
+\r
+.equ DDD7 = 7 ; DDRD\r
+.equ DDD6 = 6\r
+.equ DDD5 = 5\r
+.equ DDD4 = 4\r
+.equ DDD3 = 3\r
+.equ DDD2 = 2\r
+.equ DDD1 = 1\r
+.equ DDD0 = 0\r
+\r
+.equ PIND7 = 7 ; PIND\r
+.equ PIND6 = 6\r
+.equ PIND5 = 5\r
+.equ PIND4 = 4\r
+.equ PIND3 = 3\r
+.equ PIND2 = 2\r
+.equ PIND1 = 1\r
+.equ PIND0 = 0\r
+\r
+;**** PORT E ****\r
+.equ PE7 = 7 ; PORTE\r
+.equ PE6 = 6\r
+.equ PE5 = 5\r
+.equ PE4 = 4\r
+.equ PE3 = 3\r
+.equ PE2 = 2\r
+.equ PE1 = 1\r
+.equ PE0 = 0\r
+.equ PORTE7 = 7 ; PORTE\r
+.equ PORTE6 = 6\r
+.equ PORTE5 = 5\r
+.equ PORTE4 = 4\r
+.equ PORTE3 = 3\r
+.equ PORTE2 = 2\r
+.equ PORTE1 = 1\r
+.equ PORTE0 = 0\r
+\r
+.equ DDE7 = 7 ; DDRE\r
+.equ DDE6 = 6\r
+.equ DDE5 = 5\r
+.equ DDE4 = 4\r
+.equ DDE3 = 3\r
+.equ DDE2 = 2\r
+.equ DDE1 = 1\r
+.equ DDE0 = 0\r
+\r
+.equ PINE7 = 7 ; PINE\r
+.equ PINE6 = 6\r
+.equ PINE5 = 5\r
+.equ PINE4 = 4\r
+.equ PINE3 = 3\r
+.equ PINE2 = 2\r
+.equ PINE1 = 1\r
+.equ PINE0 = 0\r
+\r
+;**** PORT F ****\r
+.equ PF7 = 7 ; PORTF\r
+.equ PF6 = 6\r
+.equ PF5 = 5\r
+.equ PF4 = 4\r
+.equ PF3 = 3\r
+.equ PF2 = 2\r
+.equ PF1 = 1\r
+.equ PF0 = 0\r
+.equ PORTF7 = 7\r
+.equ PORTF6 = 6\r
+.equ PORTF5 = 5\r
+.equ PORTF4 = 4\r
+.equ PORTF3 = 3\r
+.equ PORTF2 = 2\r
+.equ PORTF1 = 1\r
+.equ PORTF0 = 0\r
+\r
+.equ DDF7 = 7 ; DDRF\r
+.equ DDF6 = 6\r
+.equ DDF5 = 5\r
+.equ DDF4 = 4\r
+.equ DDF3 = 3\r
+.equ DDF2 = 2\r
+.equ DDF1 = 1\r
+.equ DDF0 = 0\r
+\r
+.equ PINF7 = 7 ; PINF\r
+.equ PINF6 = 6\r
+.equ PINF5 = 5\r
+.equ PINF4 = 4\r
+.equ PINF3 = 3\r
+.equ PINF2 = 2\r
+.equ PINF1 = 1\r
+.equ PINF0 = 0\r
+\r
+;**** PORT G ****\r
+.equ PG4 = 4 ; PORTG\r
+.equ PG3 = 3\r
+.equ PG2 = 2\r
+.equ PG1 = 1\r
+.equ PG0 = 0\r
+\r
+.equ DDG4 = 4 ; DDRG\r
+.equ DDG3 = 3\r
+.equ DDG2 = 2\r
+.equ DDG1 = 1\r
+.equ DDG0 = 0\r
+\r
+.equ PING4 = 4 ; PING\r
+.equ PING3 = 3\r
+.equ PING2 = 2\r
+.equ PING1 = 1\r
+.equ PING0 = 0\r
+\r
+\r
+;*****************************************************************************\r
+; CPU Register Declarations\r
+;*****************************************************************************\r
+\r
+.def XL = r26 ; X pointer low\r
+.def XH = r27 ; X pointer high\r
+.def YL = r28 ; Y pointer low\r
+.def YH = r29 ; Y pointer high\r
+.def ZL = r30 ; Z pointer low\r
+.def ZH = r31 ; Z pointer high\r
+\r
+\r
+;*****************************************************************************\r
+; Data Memory Declarations\r
+;*****************************************************************************\r
+\r
+.equ RAMEND = $10ff ; Highest internal data memory (SRAM) address.\r
+.equ EEPROMEND = $0fff ; Highest EEPROM address.\r
+ \r
+;*****************************************************************************\r
+; Program Memory Declarations\r
+;*****************************************************************************\r
+\r
+.equ FLASHEND = $FFFF ; Highest program memory (flash) address\r
+ ; (When addressed as 16 bit words)\r
+ \r
+;**** Boot Vectors ****\r
+ ; byte groups\r
+ ; /--\/--\/--\/--\ \r
+.equ SMALLBOOTSTART = 0b1111111000000000 ; ($FE00) Smallest boot block is 512W\r
+.equ SECONDBOOTSTART = 0b1111110000000000 ; ($FC00) 2'nd boot block size is 1KW\r
+.equ THIRDBOOTSTART = 0b1111100000000000 ; ($F800) Third boot block size is 2KW\r
+.equ LARGEBOOTSTART = 0b1111000000000000 ; ($F000) Largest boot block is 4KW\r
+\r
+\r
+;**** Page Size ****\r
+.equ PAGESIZE = 128 ; Number of WORDS in a page\r
+\r
+\r
+;**** Interrupt Vectors ****\r
+.equ INT0addr = $002 ; External Interrupt0 Vector Address\r
+.equ INT1addr = $004 ; External Interrupt1 Vector Address\r
+.equ INT2addr = $006 ; External Interrupt2 Vector Address\r
+.equ INT3addr = $008 ; External Interrupt3 Vector Address\r
+.equ INT4addr = $00a ; External Interrupt4 Vector Address\r
+.equ INT5addr = $00c ; External Interrupt5 Vector Address\r
+.equ INT6addr = $00e ; External Interrupt6 Vector Address\r
+.equ INT7addr = $010 ; External Interrupt7 Vector Address\r
+.equ OC2addr = $012 ; Output Compare2 Interrupt Vector Address\r
+.equ OVF2addr = $014 ; Overflow2 Interrupt Vector Address\r
+.equ ICP1addr = $016 ; Input Capture1 Interrupt Vector Address\r
+.equ OC1Aaddr = $018 ; Output Compare1A Interrupt Vector Address\r
+.equ OC1Baddr = $01a ; Output Compare1B Interrupt Vector Address\r
+.equ OVF1addr = $01c ; Overflow1 Interrupt Vector Address\r
+.equ OC0addr = $01e ; Output Compare0 Interrupt Vector Address\r
+.equ OVF0addr = $020 ; Overflow0 Interrupt Vector Address\r
+.equ SPIaddr = $022 ; SPI Interrupt Vector Address\r
+.equ URXC0addr = $024 ; USART0 Receive Complete Interrupt Vector Address\r
+.equ UDRE0addr = $026 ; USART0 Data Register Empty Interrupt Vector Address\r
+.equ UTXC0addr = $028 ; USART0 Transmit Complete Interrupt Vector Address\r
+.equ ADCCaddr = $02a ; ADC Conversion Complete Handle\r
+.equ ERDYaddr = $02c ; EEPROM Write Complete Handle\r
+.equ ACIaddr = $02e ; Analog Comparator Interrupt Vector Address\r
+\r
+.equ OC1Caddr = $030 ; Output Compare1C Interrupt Vector Address\r
+.equ ICP3addr = $032 ; Input Capture3 Interrupt Vector Address\r
+.equ OC3Aaddr = $034 ; Output Compare3A Interrupt Vector Address\r
+.equ OC3Baddr = $036 ; Output Compare3B Interrupt Vector Address\r
+.equ OC3Caddr = $038 ; Output Compare3C Interrupt Vector Address\r
+.equ OVF3addr = $03A ; Overflow3 Interrupt Vector Address\r
+.equ URXC1addr = $03C ; USART1 Receive Complete Interrupt Vector Address\r
+.equ UDRE1addr = $03E ; USART1 Data Register Empty Interrupt Vector Address\r
+.equ UTXC1addr = $040 ; USART1 Transmit Complete Interrupt Vector Address\r
+.equ TWIaddr = $042 ; TWI Interrupt Vector Address\r
+.equ SPMRaddr = $044 ; Store Program Memory Ready Interrupt Vector Address\r
+\r
+\r
+;**** End of File ****\r