;Atmel AVR Test Program - Example #2 ;written 2001 Nov 06 ;This program generates a 1Hz (approx.) square wave ;on all pins of PORTB ;pins 2, 3, 5, 6, 7 on the all 8-pin MCUs ;pins 12 to 19 on the AT90S2313 ;pins 14 to 19 on the AT90S4433 ********************************************************* * Hardware Definitions ********************************************************* ;register definitions A EQU 16 B EQU 17 ********************************************************* * Hardware I/O Definitions ********************************************************* ;I/O addresses for AT90S2313 UBRRHI EQU $03 ;N/A on AT90S2313 ADCL EQU $04 ;N/A on AT90S2313 ADCH EQU $05 ;N/A on AT90S2313 ADCSR EQU $06 ;N/A on AT90S2313 ADMUX EQU $07 ;N/A on AT90S2313 ACSR EQU $08 UBRR EQU $09 UCR EQU $0A USR EQU $0B UDR EQU $0C ;N/A on AT90S2313 SPCR EQU $0D ;N/A on AT90S2313 SPSR EQU $0E ;N/A on AT90S2313 SPDR EQU $0F ;N/A on AT90S2313 PIND EQU $10 DDRD EQU $11 PORTD EQU $12 PINC EQU $13 DDRC EQU $14 PORTC EQU $15 PINB EQU $16 DDRB EQU $17 PORTB EQU $18 EECR EQU $1C EEDR EQU $1D EEAR EQU $1E WDTCR EQU $21 ICR1L EQU $24 ;$26 on AT90S4433 ICR1H EQU $25 ;$27 on AT90S4433 OCR1L EQU $2A OCR1H EQU $2B TCNT1L EQU $2C TCNT1H EQU $2D TCCR1B EQU $2E TCCR1A EQU $2F TCNT0 EQU $32 TCCR0 EQU $33 MCUSR EQU $34 ;N/A on AT90S2313 MCUCR EQU $35 TIFR EQU $38 TIMSK EQU $39 GIFR EQU $3A GIMSK EQU $3B SP EQU $3D SREG EQU $3F ********************************************************* * INTERRUPT VECTORS ********************************************************* ;for AT90S2313 ORG $0000 JMP reset JMP int0 JMP int1 JMP t1cap JMP t1comp JMP t1ovf JMP t0ovf * JMP spiint ;N/A for AT90S2313 JMP sciRD JMP sciDRE JMP sciTD * JMP adcint ;N/A for AT90S2313 * JMP eepRDY ;N/A for AT90S2313 JMP ancomp ********************************************************* * CODE SEGMENT ********************************************************* ORG $0010 ********************************************************* * Interrupt Service Routines ********************************************************* ;all unused interrupt handlers int0 int1 t1cap t1comp t0ovf spiint sciRD sciDRE sciTD adcint eepRDY ancomp RETI ********************************************************* * Timer/Counter1 Interrupt Handler ********************************************************* ;timer1 overflow t1ovf COM B OUT PORTB B RETI ********************************************************* * Start of main program ********************************************************* reset LDI A $DF OUT SP A ;initialize SP ;initialize Timer/Counter1 LDI A $03 ;divide by 64 OUT TCCR1B,A LDI A %10000000 OUT TIMSK A ;enable Timer/Counter1 interrupts SER A CLR B OUT DDRB A ;all PORTB pins are outputs SEI ;enable interrupts loop BRA loop ********************************************************* * End of CODE Segment ********************************************************* END