Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;//////////////////////////////////////////////////////////////////////////////
- ; Laboratory AVR Microcontrollers Part1
- ; Program template for lab 20
- ; Authors:
- ;
- ; Group:
- ; Section:
- ;
- ; Task:
- ;
- ; Todo:
- ;
- ;
- ; Version: 1.0
- ;//////////////////////////////////////////////////////////////////////////////
- .nolist
- .include "m128def.inc"
- .list
- .equ RAMTAB_SIZE=512
- .equ ROMTAB_SIZE=514
- ;//////////////////////////////////////////////////////////////////////////////
- ; StaticRAM - data memory.segment
- .DSEG
- .ORG 0x100; may be omitted this is default value
- ; Destination table (xlengthx bytes).
- ; Replace "xlengthx" with correct value
- ramtab: .BYTE RAMTAB_SIZE
- ;//////////////////////////////////////////////////////////////////////////////
- ; CODE - Program memory segment
- ; Please Remember that it is "word" address space
- ;
- .CSEG
- .org 0x0000 ; may be omitted this is default value
- jmp RESET ; Reset Handler
- ; Interrupts vector table / change to your procedure only when needed
- jmp EXT_INT0 ; IRQ0 Handler
- jmp EXT_INT1 ; IRQ1 Handler
- jmp EXT_INT2 ; IRQ2 Handler
- jmp EXT_INT3 ; IRQ3 Handler
- jmp EXT_INT4 ; IRQ4 Handler
- jmp EXT_INT5 ; IRQ5 Handler
- jmp EXT_INT6 ; IRQ6 Handler
- jmp EXT_INT7 ; IRQ7 Handler
- jmp TIM2_COMP ; Timer2 Compare Handler
- jmp TIM2_OVF ;Timer2 Overflow Handler
- jmp TIM1_CAPT ;Timer1 Capture Handler
- jmp TIM1_C0MPA ;Timer1 CompareA Handler
- jmp TIM1_C0MPB ;Timer1 CompareB Handler
- jmp TIM1_0VF ;Timer1 Overflow Handler
- jmp TIM0_COMP ;Timer0 Compare Handler
- jmp TIM0_OVF ;Timer0 Overflow Handler
- jmp SPI_STC ;SPI Transfer Complete Handler
- jmp USART0_RXC ;USART0 RX Complete Handler
- jmp USART0_DRE ;USART0,UDR Empty Handler
- jmp USART0_TXC ;USART0 TX Complete Handler
- jmp ADC1 ;ADC Conversion Complete Handler
- jmp EE_RDY ;EEPROM Ready Handler
- jmp ANA_COMP ;Analog Comparator Handler
- jmp TIM1_C0MPC ;Timer1 CompareC Handler
- jmp TIM3_CAPT ;Timer3 Capture Handler
- jmp TIM3_COMPA ;Timer3 CompareA Handler
- jmp TIM3_COMPB ; Timer3 CompareB Handler
- jmp TIM3_COMPC ;Timer3 CompareC Handler
- jmp TIM3_OVF ;Timer3 Overflow Handler
- jmp USART1_RXC ;USART1 RX Complete Handler
- jmp USART1_DRE ;USART1,UDR Empty Handler
- jmp USART1_TXC ;USART1 TX Complete Handler
- jmp TWI ;Two-wire Serial Interface Interrupt Handler
- jmp SPM_RDY ;SPM Ready Handler
- ;//////////////////////////////////////////////////////////////////////////////
- EXT_INT0: ; IRQ0 Handler
- EXT_INT1: ; IRQ1 Handler
- EXT_INT2: ; IRQ2 Handler
- EXT_INT3: ; IRQ3 Handler
- EXT_INT4: ; IRQ4 Handler
- EXT_INT5: ; IRQ5 Handler
- EXT_INT6: ; IRQ6 Handler
- EXT_INT7: ; IRQ7 Handler
- TIM2_COMP: ; Timer2 Compare Handler
- TIM2_OVF: ;Timer2 Overflow Handler
- TIM1_CAPT: ;Timer1 Capture Handler
- TIM1_C0MPA: ;Timer1 CompareA Handler
- TIM1_C0MPB: ;Timer1 CompareB Handler
- TIM1_0VF: ;Timer1 Overflow Handler
- TIM0_COMP: ;Timer0 Compare Handler
- TIM0_OVF: ;Timer0 Overflow Handler
- SPI_STC: ;SPI Transfer Complete Handler
- USART0_RXC: ;USART0 RX Complete Handler
- USART0_DRE: ;USART0,UDR Empty Handler
- USART0_TXC: ;USART0 TX Complete Handler
- ADC1: ;ADC Conversion Complete Handler
- EE_RDY: ;EEPROM Ready Handler
- ANA_COMP: ;Analog Comparator Handler
- TIM1_C0MPC: ;Timer1 CompareC Handler
- TIM3_CAPT: ;Timer3 Capture Handler
- TIM3_COMPA: ;Timer3 CompareA Handler
- TIM3_COMPB: ; Timer3 CompareB Handler
- TIM3_COMPC: ;Timer3 CompareC Handler
- TIM3_OVF: ;Timer3 Overflow Handler
- USART1_RXC: ;USART1 RX Complete Handler
- USART1_DRE: ;USART1,UDR Empty Handler
- USART1_TXC: ;USART1 TX Complete Handler
- TWI: ;Two-wire Serial Interface Interrupt Handler
- SPM_RDY: ;SPM Ready Handler
- reti ; return from all no used
- ;//////////////////////////////////////////////////////////////////////////////
- ; Program start
- RESET:
- cli ; disable all interrupts
- ; sprawdź, czy można kopiować, trzeba porównać liczby większe od 255 (tj. <0,512>) więc na
- 2 razy
- ; najpierw starszy bajt możliwie 2-bajtowej liczby
- ldi r16, high(RAMTAB_SIZE)
- cpi r16, high(ROMTAB_SIZE-2)
- brlo koniec
- ldi r16, low(RAMTAB_SIZE)
- cpi r16, low(ROMTAB_SIZE-2)
- brlo koniec
- ; Set stack pointer to top of RAM
- ldi R16, HIGH(RAMEND)
- out SPH, R16
- ldi R16, LOW(RAMEND)
- out SPL, R16
- ;------------------------------------------------------------------------------
- ; Main program code place here
- ; 1. Place here code related to initialization of ports and interrupts
- ; porty
- ldi r16, 0x00
- out DDRA, r16
- ldi r16, 0xff
- out PORTA, r16
- ; co prawda nie używamy diod, ale...
- ldi r16, 0x00 ; stan wysokiej imped - diody nie świecą
- out DDRB, r16
- ; czekaj na guzik
- czekaj:
- in r16, PINA
- cpi r16, 0xff
- breq czekaj
- ; RAMPZ dla rom żeby obejść 64kB limit
- ldi r30, low(romtab<<1)
- ldi r31, high(romtab<<1)
- ldi r16, byte3(romtab<<1)
- out RAMPZ, r16
- ; przygotuj czytanie do pamieci RAM
- ldi r28, low(ramtab) ;
- ldi r29, high(ramtab) ;
- loop:
- ; wczytaj 2 bajty z romtab
- elpm r16, Z+
- elpm r17, Z
- ; if (t[0] == 0 && t[1] == 0) ...
- cpi r16, 0x00
- brne kopiuj
- cpi r17, 0x00
- brne kopiuj
- koniec:
- rjmp koniec
- kopiuj:
- ; tu kopiowanie
- st Y+,r16 ; kopiuj bajt
- rjmp loop
- ;------------------------------------------------------------------------------
- ; Table Declaration - place here test values
- ; Test with different table values and different begin addresses of table (als above
- 0x8000)
- ;
- .org 0x7ff0
- romtab: .DB
- 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
- ,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
- 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,9
- 4,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,11
- 8,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,1
- 41,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,
- 164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186
- ,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,20
- 9,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,2
- 32,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,
- 255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,3
- 2,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62
- ,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,
- 93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,11
- 7,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,1
- 40,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,
- 163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185
- ,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,20
- 8,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,2
- 31,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,
- 254,255, 0, 0
- .EXIT
- ;------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement