Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CSEG AT 0
- offset EQU 35h // pierwszy adres 16 bjatowego bufora
- maska EQU 0Fh // maska bufora pózniej uzywana do poruszania sie miedzy adresami
- LJMP START // skok do prodecdury start
- CSEG AT 23h // pod adresem 23h z pamieci programu umieszczamy
- LJMP PRZERWANIE // instrukcje skoku do procedury obslugi przerwania
- CSEG AT 30h
- START: // program glówny zaczyna sie od adresu 30h(za tablica wektorów przerwan)
- MOV SCON,#50h // uart w trybie 1 (8 bit), REN=1
- MOV TMOD,#20h // licznik 1 w trybie 2
- MOV TH1, #0FDh // 9600 Bds at 11.0592MHz
- SETB TR1 // uruchomienie licznika T1
- SETB ES // zezwolenie na przerwanie z portu szeregowego
- SETB EA // globalne odblokowanie przerwan
- MOV R0, #offset // adres pod jakim zaczyna sie bufor zostal zapisany do rejestru r0
- PETLA:
- SJMP $ // oczekiwanie na wprowadzenie znaku do UARTa
- PRZERWANIE: // procedura obslugi przerwania
- MOV A, SBUF // czytanie znaku z UART
- CLR RI // czyszczenie flagi RI odpowiadajacej za sygnalizowanie odbioru danych w UART
- MOV SBUF,A // wysylanie kodu znaku z akumulatora do UART
- JNB TI,$ // czekanie na opróznienie bufora nadajnika
- CLR TI // czyszczenie flagi zapisu UART
- MOV A, R0 // zapisanie wskaznika do komorek bufora w akumulatorze
- SUBB A,#offset // roznica offsetu oraz aktualnego adresu komorki bufora
- ANL A, #maska // suma logiczna wskaznika i maski
- ADD A, #offset // dodanie offsetu
- MOV R0, A // zaladowanie adresu jako wyniku sumy logicznej do rejestru r0
- MOV A, SBUF; // zaladowanie znaku z UART do akumulatora
- MOV @R0, A // zapis wartosci akumulatora do komórki o adresie R0
- INC R0 // przesuniecie wskaznika na kolejna komorke bufora
- RETI
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement