; Zrobione: ; -kopiowanie RAM -> RAM (przycisk 3) ; -kopiowanie EEPROM -> RAM (przycisk 4) ; -kopiowanie FLASH -> RAM (przycisk 5) ; -kopiowanie FLASH -> EEPROM (przycisk 6) ; -kopiowanie EEPROM -> EEPROM (przycisk 7) ; �wiczenie 3. ; Rodzaje pami�ci mikrokontrolera ATMEGA128 ; Pami�� programu FLASH ; Pami�� EEPROM ; Pami�� RAM - wewn�trzna 0x100 do 0x10FF ; Pami�� RAM - zewn�trzna 0x1100 do 0xFFFF ; Naci�ni�cie przycisku 7 - przepisanie pami�ci FLASH do pami�ci RAM ; Naci�ni�cie przycisku 6 - przepisanie pami�ci EEPROM do pami�ci RAM ; Naci�ni�cie przycisku 5 - przepisanie pami�ci RAM na wska�nik LCD ; ------------------------------------------------- .NOLIST .INCLUDE "DEF_128.ASM" ;Plik z definicjami port�w mikrokontrolera .INCLUDE "DEF_REG.ASM" ;Plik z definicjami nazw rejestr�w .LIST ;----------------------------------------------- .CSEG ;Dyrektywa okre�laj�ca jeden z trzech ;segment�w programu - segment kodu. .ORG 0 ;Ustala adres pocz�tkowy lokowania kodu. JMP RESET ; Skok omijaj�cy wektor przerwa� ; Wektor przerwa� procesora ATMEGA128 - sk�ada si� z 34 d�ugich skok�w ; do procedur obs�ugi przerwa�. Dla przerwa� wy��czonych w programie ; mo�e by� skok w dowolne miejsce (np. do etykiety RESET). JMP RESET ; 1 Zewn�trzne przerwanie 0 JMP RESET ; 2 Zewn�trzne przerwanie 1 JMP RESET ; 3 Zewn�trzne przerwanie 2 JMP RESET ; 4 Zewn�trzne przerwanie 3 JMP RESET ; 5 Zewn�trzne przerwanie 4 JMP RESET ; 6 Zewn�trzne przerwanie 5 JMP RESET ; 7 Zewn�trzne przerwanie 6 JMP RESET ; 8 Zewn�trzne przerwanie 7 JMP RESET ; 9 Timer 2 - por�wnanie JMP RESET ;10 Timer 2 - przepe�nienie JMP RESET ;11 Timer 1 - zatrzask JMP RESET ;12 Timer 1 - por�wnanie A JMP RESET ;13 Timer 1 - por�wnanie B JMP RESET ;14 Timer 1 - przepe�nienie JMP CLKINT ;15 Timer 0 - por�wnanie - przerwanie zegarowe JMP RESET ;16 Timer 0 - przepe�nienie JMP RESET ;17 SPI - wykonane przes�anie JMP RESET ;18 USART0 - odbiornik pe�ny JMP RESET ;19 USART0 - nadajnik gotowy JMP RESET ;20 USART0 - zako�czone nadawanie JMP RESET ;21 ADC - zako�czone przetwarzanie JMP RESET ;22 EEPROM - gotowy JMP RESET ;23 Komparator analogowy JMP RESET ;24 Timer 1 - por�wnanie C JMP RESET ;25 Timer 3 - zatrzask JMP RESET ;26 Timer 3 - por�wnanie A JMP RESET ;27 Timer 3 - por�wnanie B JMP RESET ;28 Timer 3 - por�wnanie C JMP RESET ;29 Timer 3 - przepe�nienie JMP RESET ;30 USART1 - odbiornik pe�ny JMP RESET ;31 USART1 - nadajnik gotowy JMP RESET ;32 USART1 - zako�czone nadawanie JMP RESET ;33 TWI - wykonane przes�anie JMP RESET ;34 SPM - zako�czona operacja na pami�ci RESET: LDI AL,LOW (RAMEND) ; OUT SPL,AL ; Inicjowanie wska�nika stosu LDI AL,HIGH (RAMEND) ; OUT SPH,AL ; Inicjowanie wska�nika stosu ; LDI AL,0B00000000 OUT DDRD,AL ;Port D zdefiniowany jako wej�cie LDI AL,0B11111111 OUT PORTD,AL ;W porcie D do wej�� s� do��czone oporniki LDI AL,0B11111111 OUT DDRB,AL ;Port B zdefiniowany jako wyj�cie ;--------------------------------------------------------- ;--------------------------------------------------------- LDI AL,0B00001100 ;CS02 CS01 CS00=010 -dzielenie zegara przez 64 ;Tryb pracy WGM01 WGM00 = 10 - CTC ;Licznik TIMERa liczy od 00 do warto�ci OCR0 ;Gdy osi�gnie warto�� OCR0 jest kasowany na 00 ;Dzieli cz�stotliwo�� swojego zegara przez ;liczb� wpisan� do OCR0 ;Zegar procesora = 6 MHz / 64 = 93.750 kHz OUT TCCR0,AL ;Uruchomienie TIMERa 0 LDI AL,0 OUT TCNT0,AL ;Licznik TIMERa 0 b�dzie liczy� od 0 ;Zak�adamy okres przerwa� zegarowych 1 msek ; (cz�stotliwo�� 1000 Hz) ;Licznik TIMERa powinien dzieli� przez 94 LDI AL,94 ; OUT OCR0,AL ;Licznik TIMERa 0 b�dzie liczy� od 0 do 93 ;Gdy osi�gnie 94 to zostanie skasowany na 00 ;--------------------------------------------------------- IN AL,TIMSK ;Rejestr maski przerwa� TIMERa 0 1 2 SBR AL,1<<OCIE0 ;Zezw. na przerwanie od por�wnania TIMERa 0 OUT TIMSK,AL ;--------------------------------------------------------- LDI AL,(1<<SRE)+(1<<SRW10);W��czenie zewn�trznego RAMu i Wait-state OUT MCUCR,AL LDI AL,0x0E ;SRL2 SRL1 SRL0 = 0 - ca�a pami�� zewn�trzna ; nale�y do wy�szego sektora ;SRW01 SRW00 = 3 - ni�szy sektor ; - czeka 2 cykle podczas zap/odc ; - czeka 1 cykl podczas adresu ;SRW11 SRW10 = 3 - wy�szy sektor ; - czeka 2 cykle podczas zap/odc ; - czeka 1 cykl podczas adresu ; SRW10 wpisany do MCUCR STS XMCRA,AL ; ;--------------------------------------------------------- SEI ;Globalna flaga zezwolenia na przerwania ;--------------------------------------------------------- PTL00: SBIS PIND,3 ;Testowanie bitu 3 w porcie E CALL R_RAM ;Call gdy PORTE.3 = 0 (wci�ni�ty przycisk) ;B�dzie przepisanie pami�ci RAM do RAMu SBIS PIND,4 ;Testowanie bitu 4 w porcie E CALL R_EEPRO ;Call gdy PORTE.4 = 0 (wci�ni�ty przycisk) SBIS PIND,5 ;Testowanie bitu 5 w porcie E CALL R_FLASH ;Call gdy PORTE.5 = 0 (wci�ni�ty przycisk) ;B�dzie przepisanie pami�ci EEPROM do RAMu ;B�dzie przepisanie pami�ci FLASH do RAMu SBIS PIND,6 ;Testowanie bitu 6 w porcie E CALL F_EEPROM ;Call gdy PORTE.6 = 0 (wci�ni�ty przycisk) ;B�dzie przepisanie pami�ci FLASH do EEPROMu SBIS PIND,7 ;Testowanie bitu 7 w porcie E CALL E_EEPROM ;Call gdy PORTE.7 = 0 (wci�ni�ty przycisk) ;B�dzie przepisanie pami�ci EEPROM do EEPROMu LDI AL,1 CALL WAIT_YY ;Odczeka czas 1 * 100 msek SBI PORTB,5 ;Gasi diod� do��czon� do PORTB.5 LDI AL,1 CALL WAIT_YY ;Odczeka czas 1 * 100 msek CBI PORTB,5 ;Zapala diod� do��czon� do PORTB.5 JMP PTL00 ;--------------------------------------------------------- ; Przepisanie pami�ci FLASH do RAMu ;--------------------------------------------------------- R_FLASH:LDI ZL,LOW (BUFOR_F * 2);Rejestr indeksowy Z zawiera adres bajtowy LDI ZH,HIGH (BUFOR_F * 2);danych w tablicy BUFOR_F w pami�ci FLASH LDI YL,LOW (BUFOR_R) ;Rejestr indeksowy Y zawiera adres LDI YH,HIGH (BUFOR_R) ;bufora w pami�ci RAM LDI AH,16 ;Licznik p�tli przepisywania PTL10: LPM AL,Z+ ;Pobiera bajt z pami�ci FLASH ST Y+,AL ;Zapisuje bajt do pami�ci RAM DEC AH BRNE PTL10 RET ;--------------------------------------------------------- ; Przepisanie jednego bloku RAMu pod inny adres RAMu ;--------------------------------------------------------- R_RAM:LDI ZL,LOW (BUFOR_R);Rejestr indeksowy Z zawiera adres LDI ZH,HIGH (BUFOR_R);bufora BUFOR_R w pami�ci RAM LDI YL,LOW (BUFOR_R2) ;Rejestr indeksowy Y zawiera adres LDI YH,HIGH (BUFOR_R2) ;bufora BUFOR_R2 w pami�ci RAM LDI AH,16 ;Licznik p�tli przepisywania PTL_RRAM: LD AL,Z+ ;Pobiera bajt z pami�ci FLASH ST Y+,AL ;Zapisuje bajt do pami�ci RAM DEC AH BRNE PTL_RRAM RET ;--------------------------------------------------------- ; Przepisanie pami�ci EEPROM do RAMu ;--------------------------------------------------------- R_EEPRO:LDI XL,LOW (BUFOR_E) ;Rejestr indeksowy X zawiera adres LDI XH,HIGH (BUFOR_E) ;danych w tablicy BUFOR_E w pami�ci EEPROM LDI YL,LOW (BUFOR_R) ;Rejestr indeksowy Y zawiera adres LDI YH,HIGH (BUFOR_R) ;bufora w pami�ci RAM LDI AH,16 ;Licznik p�tli przepisywania PTL11: CALL EERead ;Pobiera bajt z pami�ci EEPROM ADIW XL,1 ;Zwi�ksza o 1 adres pami�ci EEPROM ST Y+,AL ;Zapisuje bajt do pami�ci RAM DEC AH BRNE PTL11 RET ;--------------------------------------------------------- ; Odczyt pami�ci EEPROM ;--------------------------------------------------------- EERead: CLI ;Zabrania przerwa� podczas dost�pu do EEPROMa PTL13: SBIC EECR,EEWE ;Czy gotowy EEPROM JMP PTL13 ;jeszcze nie OUT EEARL,XL ;adres w pami�ci EEPROM OUT EEARH,XH SBI EECR,EERE ;Rozkaz odczytu SBI EECR,EERE ;Rozkaz odczytu - powt�rny IN AL,EEDR ;Odczyt danej z pami�ci EEPROM SEI ;Zezwolenie na przerwania RET ;--------------------------------------------------------- ; Przepisanie bloku pami�ci FLASH do EEPROMu ;--------------------------------------------------------- F_EEPROM: LDI ZL,LOW (BUFOR_F * 2);Rejestr indeksowy Z zawiera adres bajtowy LDI ZH,HIGH (BUFOR_F * 2);danych w tablicy BUFOR_F w pami�ci FLASH LDI XL,LOW (BUFOR_E2) ;Rejestr indeksowy X zawiera adres LDI XH,HIGH (BUFOR_E2) ;danych w tablicy BUFOR_E2 w pami�ci EEPROM LDI AH,16 PTLEE_0: SBIC EECR, EEWE RJMP PTLEE_0 OUT EEARL, XL OUT EEARH, XH LPM AL,Z+ ;Pobiera bajt z pami�ci FLASH OUT EEDR, AL SBI EECR, EEMWE SBI EECR, EEWE ADIW XL,1 DEC AH BRNE PTLEE_0 RET ;--------------------------------------------------------- ; Przepisanie jednego bloku EEPROMu do innego bloku EEPROMu ;--------------------------------------------------------- E_EEPROM: LDI ZL,LOW (BUFOR_E2);Rejestr indeksowy Z zawiera adres LDI ZH,HIGH (BUFOR_E2);danych w tablicy BUFOR_E2 w pami�ci EEPROM LDI XL,LOW (BUFOR_E) ;Rejestr indeksowy X zawiera adres LDI XH,HIGH (BUFOR_E) ;danych w tablicy BUFOR_E w pami�ci EEPROM LDI AH,16 PTLEE_1: SBIC EECR, EEWE RJMP PTLEE_1 CALL EERead OUT EEARL, ZL OUT EEARH, ZH OUT EEDR, AL SBI EECR, EEMWE SBI EECR, EEWE ADIW XL,1 ADIW ZL,1 DEC AH BRNE PTLEE_1 RET ;--------------------------------------------------------- ; Odczeka czas AL * 1 msek ;--------------------------------------------------------- WAIT_XX:ADD AL,TIMEL ;Czas opuszczenia procedury PTL14: CP AL,TIMEL ;Czeka a� licznik przerwa� BRNE PTL14 ;osi�gnie warto�� = AL RET ;Min�� wymagany czas ;--------------------------------------------------------- ; Odczeka czas AL * 100 msek ;--------------------------------------------------------- WAIT_YY:NOP PTL15: PUSH AL LDI AL,100 CALL WAIT_XX ;100 * 1msek = 100 msek POP AL DEC AL BRNE PTL15 RET ;Min�� wymagany czas ;--------------------------------------------------------- ; Czeka na wyst�pienie najbli�szego przerwania zegarowego ;--------------------------------------------------------- TIMECYC:NOP PTL16: SBRS FLAGI_P,NEWINT ;Czy by�o nowe przerwanie JMP PTL16 ;Czeka na przerwanie CBR FLAGI_P,1<<NEWINT ;Kasuje znacznik przerwania RET ;-----------------------------------------------...
PSQ87