mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 08:31:49 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			565 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			565 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| unit ATmega48PB;
 | |
| 
 | |
| interface
 | |
| 
 | |
| var
 | |
|   PINB: byte absolute $23;  // Port B Input Pins
 | |
|   DDRB: byte absolute $24;  // Port B Data Direction Register
 | |
|   PORTB: byte absolute $25;  // Port B Data Register
 | |
|   PINC: byte absolute $26;  // Port C Input Pins
 | |
|   DDRC: byte absolute $27;  // Port C Data Direction Register
 | |
|   PORTC: byte absolute $28;  // Port C Data Register
 | |
|   PIND: byte absolute $29;  // Port D Input Pins
 | |
|   DDRD: byte absolute $2A;  // Port D Data Direction Register
 | |
|   PORTD: byte absolute $2B;  // Port D Data Register
 | |
|   PINE: byte absolute $2C;  // Port E Input Pins
 | |
|   DDRE: byte absolute $2D;  // Port E Data Direction Register
 | |
|   PORTE: byte absolute $2E;  // Port E Data Register
 | |
|   TIFR0: byte absolute $35;  // Timer/Counter0 Interrupt Flag register
 | |
|   TIFR1: byte absolute $36;  // Timer/Counter Interrupt Flag register
 | |
|   TIFR2: byte absolute $37;  // Timer/Counter Interrupt Flag Register
 | |
|   PCIFR: byte absolute $3B;  // Pin Change Interrupt Flag Register
 | |
|   EIFR: byte absolute $3C;  // External Interrupt Flag Register
 | |
|   EIMSK: byte absolute $3D;  // External Interrupt Mask Register
 | |
|   GPIOR0: byte absolute $3E;  // General Purpose I/O Register 0
 | |
|   EECR: byte absolute $3F;  // EEPROM Control Register
 | |
|   EEDR: byte absolute $40;  // EEPROM Data Register
 | |
|   EEARL: byte absolute $41;  // EEPROM Address Register Low Byte
 | |
|   GTCCR: byte absolute $43;  // General Timer/Counter Control Register
 | |
|   TCCR0A: byte absolute $44;  // Timer/Counter  Control Register A
 | |
|   TCCR0B: byte absolute $45;  // Timer/Counter Control Register B
 | |
|   TCNT0: byte absolute $46;  // Timer/Counter0
 | |
|   OCR0A: byte absolute $47;  // Timer/Counter0 Output Compare Register
 | |
|   OCR0B: byte absolute $48;  // Timer/Counter0 Output Compare Register
 | |
|   GPIOR1: byte absolute $4A;  // General Purpose I/O Register 1
 | |
|   GPIOR2: byte absolute $4B;  // General Purpose I/O Register 2
 | |
|   SPCR: byte absolute $4C;  // SPI Control Register
 | |
|   SPSR: byte absolute $4D;  // SPI Status Register
 | |
|   SPDR: byte absolute $4E;  // SPI Data Register
 | |
|   ACSRB: byte absolute $4F;  // Analog Comparator Status Register B
 | |
|   ACSR: byte absolute $50;  // Analog Comparator Control And Status Register
 | |
|   SMCR: byte absolute $53;  // Sleep Mode Control Register
 | |
|   MCUSR: byte absolute $54;  // MCU Status Register
 | |
|   MCUCR: byte absolute $55;  // MCU Control Register
 | |
|   SPMCSR: byte absolute $57;  // Store Program Memory Control and Status Register
 | |
|   SP: word absolute $5D;  // Stack Pointer 
 | |
|   SPL: byte absolute $5D;  // Stack Pointer 
 | |
|   SPH: byte absolute $5E;  // Stack Pointer ;
 | |
|   SREG: byte absolute $5F;  // Status Register
 | |
|   WDTCSR: byte absolute $60;  // Watchdog Timer Control Register
 | |
|   CLKPR: byte absolute $61;  // Clock Prescale Register
 | |
|   PRR: byte absolute $64;  // Power Reduction Register
 | |
|   OSCCAL: byte absolute $66;  // Oscillator Calibration Value
 | |
|   PCICR: byte absolute $68;  // Pin Change Interrupt Control Register
 | |
|   EICRA: byte absolute $69;  // External Interrupt Control Register
 | |
|   PCMSK0: byte absolute $6B;  // Pin Change Mask Register 0
 | |
|   PCMSK1: byte absolute $6C;  // Pin Change Mask Register 1
 | |
|   PCMSK2: byte absolute $6D;  // Pin Change Mask Register 2
 | |
|   TIMSK0: byte absolute $6E;  // Timer/Counter0 Interrupt Mask Register
 | |
|   TIMSK1: byte absolute $6F;  // Timer/Counter Interrupt Mask Register
 | |
|   TIMSK2: byte absolute $70;  // Timer/Counter Interrupt Mask register
 | |
|   ADC: word absolute $78;  // ADC Data Register  Bytes
 | |
|   ADCL: byte absolute $78;  // ADC Data Register  Bytes
 | |
|   ADCH: byte absolute $79;  // ADC Data Register  Bytes;
 | |
|   ADCSRA: byte absolute $7A;  // The ADC Control and Status register A
 | |
|   ADCSRB: byte absolute $7B;  // The ADC Control and Status register B
 | |
|   ADMUX: byte absolute $7C;  // The ADC multiplexer Selection Register
 | |
|   DIDR0: byte absolute $7E;  // Digital Input Disable Register
 | |
|   DIDR1: byte absolute $7F;  // Digital Input Disable Register 1
 | |
|   TCCR1A: byte absolute $80;  // Timer/Counter1 Control Register A
 | |
|   TCCR1B: byte absolute $81;  // Timer/Counter1 Control Register B
 | |
|   TCCR1C: byte absolute $82;  // Timer/Counter1 Control Register C
 | |
|   TCNT1: word absolute $84;  // Timer/Counter1  Bytes
 | |
|   TCNT1L: byte absolute $84;  // Timer/Counter1  Bytes
 | |
|   TCNT1H: byte absolute $85;  // Timer/Counter1  Bytes;
 | |
|   ICR1: word absolute $86;  // Timer/Counter1 Input Capture Register  Bytes
 | |
|   ICR1L: byte absolute $86;  // Timer/Counter1 Input Capture Register  Bytes
 | |
|   ICR1H: byte absolute $87;  // Timer/Counter1 Input Capture Register  Bytes;
 | |
|   OCR1A: word absolute $88;  // Timer/Counter1 Output Compare Register  Bytes
 | |
|   OCR1AL: byte absolute $88;  // Timer/Counter1 Output Compare Register  Bytes
 | |
|   OCR1AH: byte absolute $89;  // Timer/Counter1 Output Compare Register  Bytes;
 | |
|   OCR1B: word absolute $8A;  // Timer/Counter1 Output Compare Register  Bytes
 | |
|   OCR1BL: byte absolute $8A;  // Timer/Counter1 Output Compare Register  Bytes
 | |
|   OCR1BH: byte absolute $8B;  // Timer/Counter1 Output Compare Register  Bytes;
 | |
|   TCCR2A: byte absolute $B0;  // Timer/Counter2 Control Register A
 | |
|   TCCR2B: byte absolute $B1;  // Timer/Counter2 Control Register B
 | |
|   TCNT2: byte absolute $B2;  // Timer/Counter2
 | |
|   OCR2A: byte absolute $B3;  // Timer/Counter2 Output Compare Register A
 | |
|   OCR2B: byte absolute $B4;  // Timer/Counter2 Output Compare Register B
 | |
|   ASSR: byte absolute $B6;  // Asynchronous Status Register
 | |
|   TWBR: byte absolute $B8;  // TWI Bit Rate register
 | |
|   TWSR: byte absolute $B9;  // TWI Status Register
 | |
|   TWAR: byte absolute $BA;  // TWI (Slave) Address register
 | |
|   TWDR: byte absolute $BB;  // TWI Data register
 | |
|   TWCR: byte absolute $BC;  // TWI Control Register
 | |
|   TWAMR: byte absolute $BD;  // TWI (Slave) Address Mask Register
 | |
|   UCSR0A: byte absolute $C0;  // USART Control and Status Register A
 | |
|   UCSR0B: byte absolute $C1;  // USART Control and Status Register B
 | |
|   UCSR0C: byte absolute $C2;  // USART Control and Status Register C
 | |
|   UCSR0D: byte absolute $C3;  // USART Control and Status Register D
 | |
|   UBRR0: word absolute $C4;  // USART Baud Rate Register Bytes
 | |
|   UBRR0L: byte absolute $C4;  // USART Baud Rate Register Bytes
 | |
|   UBRR0H: byte absolute $C5;  // USART Baud Rate Register Bytes;
 | |
|   UDR0: byte absolute $C6;  // USART I/O Data Register
 | |
|   DEVID0: byte absolute $F0;
 | |
|   DEVID1: byte absolute $F1;
 | |
|   DEVID2: byte absolute $F2;
 | |
|   DEVID3: byte absolute $F3;
 | |
|   DEVID4: byte absolute $F4;
 | |
|   DEVID5: byte absolute $F5;
 | |
|   DEVID6: byte absolute $F6;
 | |
|   DEVID7: byte absolute $F7;
 | |
|   DEVID8: byte absolute $F8;
 | |
| 
 | |
| const
 | |
|   // Port B Data Register
 | |
|   PB0 = $00;  
 | |
|   PB1 = $01;  
 | |
|   PB2 = $02;  
 | |
|   PB3 = $03;  
 | |
|   PB4 = $04;  
 | |
|   PB5 = $05;  
 | |
|   PB6 = $06;  
 | |
|   PB7 = $07;  
 | |
|   // Port C Data Register
 | |
|   PC0 = $00;  
 | |
|   PC1 = $01;  
 | |
|   PC2 = $02;  
 | |
|   PC3 = $03;  
 | |
|   PC4 = $04;  
 | |
|   PC5 = $05;  
 | |
|   PC6 = $06;  
 | |
|   // Port D Data Register
 | |
|   PD0 = $00;  
 | |
|   PD1 = $01;  
 | |
|   PD2 = $02;  
 | |
|   PD3 = $03;  
 | |
|   PD4 = $04;  
 | |
|   PD5 = $05;  
 | |
|   PD6 = $06;  
 | |
|   PD7 = $07;  
 | |
|   // Port E Data Register
 | |
|   PE0 = $00;  
 | |
|   PE1 = $01;  
 | |
|   PE2 = $02;  
 | |
|   PE3 = $03;  
 | |
|   // Timer/Counter0 Interrupt Flag register
 | |
|   TOV0 = $00;  
 | |
|   OCF0A = $01;  
 | |
|   OCF0B = $02;  
 | |
|   // Timer/Counter Interrupt Flag register
 | |
|   TOV1 = $00;  
 | |
|   OCF1A = $01;  
 | |
|   OCF1B = $02;  
 | |
|   ICF1 = $05;  
 | |
|   // Timer/Counter Interrupt Flag Register
 | |
|   TOV2 = $00;  
 | |
|   OCF2A = $01;  
 | |
|   OCF2B = $02;  
 | |
|   // Pin Change Interrupt Flag Register
 | |
|   PCIF0 = $00;  // Pin Change Interrupt Flags
 | |
|   PCIF1 = $01;  // Pin Change Interrupt Flags
 | |
|   PCIF2 = $02;  // Pin Change Interrupt Flags
 | |
|   // External Interrupt Flag Register
 | |
|   INTF0 = $00;  // External Interrupt Flags
 | |
|   INTF1 = $01;  // External Interrupt Flags
 | |
|   // External Interrupt Mask Register
 | |
|   INT0 = $00;  // External Interrupt Request 1 Enable
 | |
|   INT1 = $01;  // External Interrupt Request 1 Enable
 | |
|   // EEPROM Control Register
 | |
|   EERE = $00;  
 | |
|   EEPE = $01;  
 | |
|   EEMPE = $02;  
 | |
|   EERIE = $03;  
 | |
|   EEPM0 = $04;  // EEPROM Programming Mode Bits
 | |
|   EEPM1 = $05;  // EEPROM Programming Mode Bits
 | |
|   // General Timer/Counter Control Register
 | |
|   PSRSYNC = $00;  
 | |
|   PSRASY = $01;  
 | |
|   TSM = $07;  
 | |
|   // Timer/Counter  Control Register A
 | |
|   WGM00 = $00;  // Waveform Generation Mode
 | |
|   WGM01 = $01;  // Waveform Generation Mode
 | |
|   COM0B0 = $04;  // Compare Output Mode, Fast PWm
 | |
|   COM0B1 = $05;  // Compare Output Mode, Fast PWm
 | |
|   COM0A0 = $06;  // Compare Output Mode, Phase Correct PWM Mode
 | |
|   COM0A1 = $07;  // Compare Output Mode, Phase Correct PWM Mode
 | |
|   // Timer/Counter Control Register B
 | |
|   CS00 = $00;  // Clock Select
 | |
|   CS01 = $01;  // Clock Select
 | |
|   CS02 = $02;  // Clock Select
 | |
|   WGM02 = $03;  
 | |
|   FOC0B = $06;  
 | |
|   FOC0A = $07;  
 | |
|   // SPI Control Register
 | |
|   SPR0 = $00;  // SPI Clock Rate Selects
 | |
|   SPR1 = $01;  // SPI Clock Rate Selects
 | |
|   CPHA = $02;  
 | |
|   CPOL = $03;  
 | |
|   MSTR = $04;  
 | |
|   DORD = $05;  
 | |
|   SPE = $06;  
 | |
|   SPIE = $07;  
 | |
|   // SPI Status Register
 | |
|   SPI2X = $00;  
 | |
|   WCOL = $06;  
 | |
|   SPIF = $07;  
 | |
|   // Analog Comparator Status Register B
 | |
|   ACOE = $00;  
 | |
|   // Analog Comparator Control And Status Register
 | |
|   ACIS0 = $00;  // Analog Comparator Interrupt Mode Select bits
 | |
|   ACIS1 = $01;  // Analog Comparator Interrupt Mode Select bits
 | |
|   ACIC = $02;  
 | |
|   ACIE = $03;  
 | |
|   ACI = $04;  
 | |
|   ACO = $05;  
 | |
|   ACBG = $06;  
 | |
|   ACD = $07;  
 | |
|   // Sleep Mode Control Register
 | |
|   SE = $00;  
 | |
|   SM0 = $01;  // Sleep Mode Select Bits
 | |
|   SM1 = $02;  // Sleep Mode Select Bits
 | |
|   SM2 = $03;  // Sleep Mode Select Bits
 | |
|   // MCU Status Register
 | |
|   PORF = $00;  
 | |
|   EXTRF = $01;  
 | |
|   BORF = $02;  
 | |
|   WDRF = $03;  
 | |
|   // MCU Control Register
 | |
|   PUD = $04;  
 | |
|   BODSE = $05;  
 | |
|   BODS = $06;  
 | |
|   // Store Program Memory Control and Status Register
 | |
|   SELFPRGEN = $00;  
 | |
|   PGERS = $01;  
 | |
|   PGWRT = $02;  
 | |
|   BLBSET = $03;  
 | |
|   RWWSRE = $04;  
 | |
|   RWWSB = $06;  
 | |
|   SPMIE = $07;  
 | |
|   // Status Register
 | |
|   C = $00;  
 | |
|   Z = $01;  
 | |
|   N = $02;  
 | |
|   V = $03;  
 | |
|   S = $04;  
 | |
|   H = $05;  
 | |
|   T = $06;  
 | |
|   I = $07;  
 | |
|   // Watchdog Timer Control Register
 | |
|   WDE = $03;  
 | |
|   WDCE = $04;  
 | |
|   WDP0 = $00;  // Watchdog Timer Prescaler Bits
 | |
|   WDP1 = $01;  // Watchdog Timer Prescaler Bits
 | |
|   WDP2 = $02;  // Watchdog Timer Prescaler Bits
 | |
|   WDP3 = $05;  // Watchdog Timer Prescaler Bits
 | |
|   WDIE = $06;  
 | |
|   WDIF = $07;  
 | |
|   // Clock Prescale Register
 | |
|   CLKPS0 = $00;  // Clock Prescaler Select Bits
 | |
|   CLKPS1 = $01;  // Clock Prescaler Select Bits
 | |
|   CLKPS2 = $02;  // Clock Prescaler Select Bits
 | |
|   CLKPS3 = $03;  // Clock Prescaler Select Bits
 | |
|   CLKPCE = $07;  
 | |
|   // Power Reduction Register
 | |
|   PRADC = $00;  
 | |
|   PRUSART0 = $01;  
 | |
|   PRSPI = $02;  
 | |
|   PRTIM1 = $03;  
 | |
|   PRTIM0 = $05;  
 | |
|   PRTIM2 = $06;  
 | |
|   PRTWI = $07;  
 | |
|   // Oscillator Calibration Value
 | |
|   OSCCAL0 = $00;  // Oscillator Calibration 
 | |
|   OSCCAL1 = $01;  // Oscillator Calibration 
 | |
|   OSCCAL2 = $02;  // Oscillator Calibration 
 | |
|   OSCCAL3 = $03;  // Oscillator Calibration 
 | |
|   OSCCAL4 = $04;  // Oscillator Calibration 
 | |
|   OSCCAL5 = $05;  // Oscillator Calibration 
 | |
|   OSCCAL6 = $06;  // Oscillator Calibration 
 | |
|   OSCCAL7 = $07;  // Oscillator Calibration 
 | |
|   // Pin Change Interrupt Control Register
 | |
|   PCIE0 = $00;  // Pin Change Interrupt Enables
 | |
|   PCIE1 = $01;  // Pin Change Interrupt Enables
 | |
|   PCIE2 = $02;  // Pin Change Interrupt Enables
 | |
|   // External Interrupt Control Register
 | |
|   ISC00 = $00;  // External Interrupt Sense Control 0 Bits
 | |
|   ISC01 = $01;  // External Interrupt Sense Control 0 Bits
 | |
|   ISC10 = $02;  // External Interrupt Sense Control 1 Bits
 | |
|   ISC11 = $03;  // External Interrupt Sense Control 1 Bits
 | |
|   // Pin Change Mask Register 2
 | |
|   PCINT16 = $00;  // Pin Change Enable Masks
 | |
|   PCINT17 = $01;  // Pin Change Enable Masks
 | |
|   PCINT18 = $02;  // Pin Change Enable Masks
 | |
|   PCINT19 = $03;  // Pin Change Enable Masks
 | |
|   PCINT20 = $04;  // Pin Change Enable Masks
 | |
|   PCINT21 = $05;  // Pin Change Enable Masks
 | |
|   PCINT22 = $06;  // Pin Change Enable Masks
 | |
|   PCINT23 = $07;  // Pin Change Enable Masks
 | |
|   // Timer/Counter0 Interrupt Mask Register
 | |
|   TOIE0 = $00;  
 | |
|   OCIE0A = $01;  
 | |
|   OCIE0B = $02;  
 | |
|   // Timer/Counter Interrupt Mask Register
 | |
|   TOIE1 = $00;  
 | |
|   OCIE1A = $01;  
 | |
|   OCIE1B = $02;  
 | |
|   ICIE1 = $05;  
 | |
|   // Timer/Counter Interrupt Mask register
 | |
|   TOIE2 = $00;  
 | |
|   OCIE2A = $01;  
 | |
|   OCIE2B = $02;  
 | |
|   // The ADC Control and Status register A
 | |
|   ADPS0 = $00;  // ADC  Prescaler Select Bits
 | |
|   ADPS1 = $01;  // ADC  Prescaler Select Bits
 | |
|   ADPS2 = $02;  // ADC  Prescaler Select Bits
 | |
|   ADIE = $03;  
 | |
|   ADIF = $04;  
 | |
|   ADATE = $05;  
 | |
|   ADSC = $06;  
 | |
|   ADEN = $07;  
 | |
|   // The ADC Control and Status register B
 | |
|   ADTS0 = $00;  // ADC Auto Trigger Source bits
 | |
|   ADTS1 = $01;  // ADC Auto Trigger Source bits
 | |
|   ADTS2 = $02;  // ADC Auto Trigger Source bits
 | |
|   ACME = $06;  
 | |
|   // The ADC multiplexer Selection Register
 | |
|   MUX0 = $00;  // Analog Channel Selection Bits
 | |
|   MUX1 = $01;  // Analog Channel Selection Bits
 | |
|   MUX2 = $02;  // Analog Channel Selection Bits
 | |
|   MUX3 = $03;  // Analog Channel Selection Bits
 | |
|   ADLAR = $05;  
 | |
|   REFS0 = $06;  // Reference Selection Bits
 | |
|   REFS1 = $07;  // Reference Selection Bits
 | |
|   // Digital Input Disable Register
 | |
|   ADC0D = $00;  
 | |
|   ADC1D = $01;  
 | |
|   ADC2D = $02;  
 | |
|   ADC3D = $03;  
 | |
|   ADC4D = $04;  
 | |
|   ADC5D = $05;  
 | |
|   // Digital Input Disable Register 1
 | |
|   AIN0D = $00;  
 | |
|   AIN1D = $01;  
 | |
|   // Timer/Counter1 Control Register A
 | |
|   WGM10 = $00;  // Waveform Generation Mode
 | |
|   WGM11 = $01;  // Waveform Generation Mode
 | |
|   COM1B0 = $04;  // Compare Output Mode 1B, bits
 | |
|   COM1B1 = $05;  // Compare Output Mode 1B, bits
 | |
|   COM1A0 = $06;  // Compare Output Mode 1A, bits
 | |
|   COM1A1 = $07;  // Compare Output Mode 1A, bits
 | |
|   // Timer/Counter1 Control Register B
 | |
|   CS10 = $00;  // Prescaler source of Timer/Counter 1
 | |
|   CS11 = $01;  // Prescaler source of Timer/Counter 1
 | |
|   CS12 = $02;  // Prescaler source of Timer/Counter 1
 | |
|   ICES1 = $06;  
 | |
|   ICNC1 = $07;  
 | |
|   // Timer/Counter1 Control Register C
 | |
|   FOC1B = $06;  
 | |
|   FOC1A = $07;  
 | |
|   // Timer/Counter2 Control Register A
 | |
|   WGM20 = $00;  // Waveform Genration Mode
 | |
|   WGM21 = $01;  // Waveform Genration Mode
 | |
|   COM2B0 = $04;  // Compare Output Mode bits
 | |
|   COM2B1 = $05;  // Compare Output Mode bits
 | |
|   COM2A0 = $06;  // Compare Output Mode bits
 | |
|   COM2A1 = $07;  // Compare Output Mode bits
 | |
|   // Timer/Counter2 Control Register B
 | |
|   CS20 = $00;  // Clock Select bits
 | |
|   CS21 = $01;  // Clock Select bits
 | |
|   CS22 = $02;  // Clock Select bits
 | |
|   WGM22 = $03;  
 | |
|   FOC2B = $06;  
 | |
|   FOC2A = $07;  
 | |
|   // Asynchronous Status Register
 | |
|   TCR2BUB = $00;  
 | |
|   TCR2AUB = $01;  
 | |
|   OCR2BUB = $02;  
 | |
|   OCR2AUB = $03;  
 | |
|   TCN2UB = $04;  
 | |
|   AS2 = $05;  
 | |
|   EXCLK = $06;  
 | |
|   // TWI Status Register
 | |
|   TWPS0 = $00;  // TWI Prescaler
 | |
|   TWPS1 = $01;  // TWI Prescaler
 | |
|   TWS3 = $03;  // TWI Status
 | |
|   TWS4 = $04;  // TWI Status
 | |
|   TWS5 = $05;  // TWI Status
 | |
|   TWS6 = $06;  // TWI Status
 | |
|   TWS7 = $07;  // TWI Status
 | |
|   // TWI (Slave) Address register
 | |
|   TWGCE = $00;  
 | |
|   TWA0 = $01;  // TWI (Slave) Address register Bits
 | |
|   TWA1 = $02;  // TWI (Slave) Address register Bits
 | |
|   TWA2 = $03;  // TWI (Slave) Address register Bits
 | |
|   TWA3 = $04;  // TWI (Slave) Address register Bits
 | |
|   TWA4 = $05;  // TWI (Slave) Address register Bits
 | |
|   TWA5 = $06;  // TWI (Slave) Address register Bits
 | |
|   TWA6 = $07;  // TWI (Slave) Address register Bits
 | |
|   // TWI Control Register
 | |
|   TWIE = $00;  
 | |
|   TWEN = $02;  
 | |
|   TWWC = $03;  
 | |
|   TWSTO = $04;  
 | |
|   TWSTA = $05;  
 | |
|   TWEA = $06;  
 | |
|   TWINT = $07;  
 | |
|   // TWI (Slave) Address Mask Register
 | |
|   TWAM0 = $01;
 | |
|   TWAM1 = $02;
 | |
|   TWAM2 = $03;
 | |
|   TWAM3 = $04;
 | |
|   TWAM4 = $05;
 | |
|   TWAM5 = $06;
 | |
|   TWAM6 = $07;
 | |
|   // USART Control and Status Register A
 | |
|   MPCM0 = $00;  
 | |
|   U2X0 = $01;  
 | |
|   UPE0 = $02;  
 | |
|   DOR0 = $03;  
 | |
|   FE0 = $04;  
 | |
|   UDRE0 = $05;  
 | |
|   TXC0 = $06;  
 | |
|   RXC0 = $07;  
 | |
|   // USART Control and Status Register B
 | |
|   TXB80 = $00;  
 | |
|   RXB80 = $01;  
 | |
|   UCSZ02 = $02;  
 | |
|   TXEN0 = $03;  
 | |
|   RXEN0 = $04;  
 | |
|   UDRIE0 = $05;  
 | |
|   TXCIE0 = $06;  
 | |
|   RXCIE0 = $07;  
 | |
|   // USART Control and Status Register C
 | |
|   UCPOL0 = $00;  
 | |
|   UCSZ00 = $01;  // Character Size - together with UCSZ2 in UCSR0B
 | |
|   UCSZ01 = $02;  // Character Size - together with UCSZ2 in UCSR0B
 | |
|   USBS0 = $03;  
 | |
|   UPM00 = $04;  // Parity Mode Bits
 | |
|   UPM01 = $05;  // Parity Mode Bits
 | |
|   UMSEL00 = $06;  // USART Mode Select
 | |
|   UMSEL01 = $07;  // USART Mode Select
 | |
|   // USART Control and Status Register D
 | |
|   SFDE = $05;  
 | |
|   RXS = $06;  
 | |
|   RXSIE = $07;  
 | |
| 
 | |
| 
 | |
| implementation
 | |
| {$define RELBRANCHES}
 | |
| {$i avrcommon.inc}
 | |
| 
 | |
| procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
 | |
| procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
 | |
| procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 3 Pin Change Interrupt Request 0
 | |
| procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 4 Pin Change Interrupt Request 0
 | |
| procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 5 Pin Change Interrupt Request 1
 | |
| procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 6 Watchdog Time-out Interrupt
 | |
| procedure TIMER2_COMPA_ISR; external name 'TIMER2_COMPA_ISR'; // Interrupt 7 Timer/Counter2 Compare Match A
 | |
| procedure TIMER2_COMPB_ISR; external name 'TIMER2_COMPB_ISR'; // Interrupt 8 Timer/Counter2 Compare Match A
 | |
| procedure TIMER2_OVF_ISR; external name 'TIMER2_OVF_ISR'; // Interrupt 9 Timer/Counter2 Overflow
 | |
| procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 10 Timer/Counter1 Capture Event
 | |
| procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 11 Timer/Counter1 Compare Match A
 | |
| procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 12 Timer/Counter1 Compare Match B
 | |
| procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 13 Timer/Counter1 Overflow
 | |
| procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 14 TimerCounter0 Compare Match A
 | |
| procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 15 TimerCounter0 Compare Match B
 | |
| procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 16 Timer/Couner0 Overflow
 | |
| procedure SPI_STC_ISR; external name 'SPI_STC_ISR'; // Interrupt 17 SPI Serial Transfer Complete
 | |
| procedure USART_RX_ISR; external name 'USART_RX_ISR'; // Interrupt 18 USART Rx Complete
 | |
| procedure USART_UDRE_ISR; external name 'USART_UDRE_ISR'; // Interrupt 19 USART, Data Register Empty
 | |
| procedure USART_TX_ISR; external name 'USART_TX_ISR'; // Interrupt 20 USART Tx Complete
 | |
| procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 21 ADC Conversion Complete
 | |
| procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 22 EEPROM Ready
 | |
| procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Analog Comparator
 | |
| procedure TWI_ISR; external name 'TWI_ISR'; // Interrupt 24 Two-wire Serial Interface
 | |
| procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
 | |
| procedure USART_START_ISR; external name 'USART_START_ISR'; // Interrupt 26 USART Start Edge Interrupt
 | |
| 
 | |
| procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
 | |
|  asm
 | |
|   rjmp __dtors_end
 | |
|   rjmp INT0_ISR
 | |
|   rjmp INT1_ISR
 | |
|   rjmp PCINT0_ISR
 | |
|   rjmp PCINT1_ISR
 | |
|   rjmp PCINT2_ISR
 | |
|   rjmp WDT_ISR
 | |
|   rjmp TIMER2_COMPA_ISR
 | |
|   rjmp TIMER2_COMPB_ISR
 | |
|   rjmp TIMER2_OVF_ISR
 | |
|   rjmp TIMER1_CAPT_ISR
 | |
|   rjmp TIMER1_COMPA_ISR
 | |
|   rjmp TIMER1_COMPB_ISR
 | |
|   rjmp TIMER1_OVF_ISR
 | |
|   rjmp TIMER0_COMPA_ISR
 | |
|   rjmp TIMER0_COMPB_ISR
 | |
|   rjmp TIMER0_OVF_ISR
 | |
|   rjmp SPI_STC_ISR
 | |
|   rjmp USART_RX_ISR
 | |
|   rjmp USART_UDRE_ISR
 | |
|   rjmp USART_TX_ISR
 | |
|   rjmp ADC_ISR
 | |
|   rjmp EE_READY_ISR
 | |
|   rjmp ANALOG_COMP_ISR
 | |
|   rjmp TWI_ISR
 | |
|   rjmp SPM_Ready_ISR
 | |
|   rjmp USART_START_ISR
 | |
| 
 | |
|   .weak INT0_ISR
 | |
|   .weak INT1_ISR
 | |
|   .weak PCINT0_ISR
 | |
|   .weak PCINT1_ISR
 | |
|   .weak PCINT2_ISR
 | |
|   .weak WDT_ISR
 | |
|   .weak TIMER2_COMPA_ISR
 | |
|   .weak TIMER2_COMPB_ISR
 | |
|   .weak TIMER2_OVF_ISR
 | |
|   .weak TIMER1_CAPT_ISR
 | |
|   .weak TIMER1_COMPA_ISR
 | |
|   .weak TIMER1_COMPB_ISR
 | |
|   .weak TIMER1_OVF_ISR
 | |
|   .weak TIMER0_COMPA_ISR
 | |
|   .weak TIMER0_COMPB_ISR
 | |
|   .weak TIMER0_OVF_ISR
 | |
|   .weak SPI_STC_ISR
 | |
|   .weak USART_RX_ISR
 | |
|   .weak USART_UDRE_ISR
 | |
|   .weak USART_TX_ISR
 | |
|   .weak ADC_ISR
 | |
|   .weak EE_READY_ISR
 | |
|   .weak ANALOG_COMP_ISR
 | |
|   .weak TWI_ISR
 | |
|   .weak SPM_Ready_ISR
 | |
|   .weak USART_START_ISR
 | |
| 
 | |
|   .set INT0_ISR, Default_IRQ_handler
 | |
|   .set INT1_ISR, Default_IRQ_handler
 | |
|   .set PCINT0_ISR, Default_IRQ_handler
 | |
|   .set PCINT1_ISR, Default_IRQ_handler
 | |
|   .set PCINT2_ISR, Default_IRQ_handler
 | |
|   .set WDT_ISR, Default_IRQ_handler
 | |
|   .set TIMER2_COMPA_ISR, Default_IRQ_handler
 | |
|   .set TIMER2_COMPB_ISR, Default_IRQ_handler
 | |
|   .set TIMER2_OVF_ISR, Default_IRQ_handler
 | |
|   .set TIMER1_CAPT_ISR, Default_IRQ_handler
 | |
|   .set TIMER1_COMPA_ISR, Default_IRQ_handler
 | |
|   .set TIMER1_COMPB_ISR, Default_IRQ_handler
 | |
|   .set TIMER1_OVF_ISR, Default_IRQ_handler
 | |
|   .set TIMER0_COMPA_ISR, Default_IRQ_handler
 | |
|   .set TIMER0_COMPB_ISR, Default_IRQ_handler
 | |
|   .set TIMER0_OVF_ISR, Default_IRQ_handler
 | |
|   .set SPI_STC_ISR, Default_IRQ_handler
 | |
|   .set USART_RX_ISR, Default_IRQ_handler
 | |
|   .set USART_UDRE_ISR, Default_IRQ_handler
 | |
|   .set USART_TX_ISR, Default_IRQ_handler
 | |
|   .set ADC_ISR, Default_IRQ_handler
 | |
|   .set EE_READY_ISR, Default_IRQ_handler
 | |
|   .set ANALOG_COMP_ISR, Default_IRQ_handler
 | |
|   .set TWI_ISR, Default_IRQ_handler
 | |
|   .set SPM_Ready_ISR, Default_IRQ_handler
 | |
|   .set USART_START_ISR, Default_IRQ_handler
 | |
| end;
 | |
| 
 | |
| end.
 | 
