Advertisement
Szewo

Untitled

May 23rd, 2021
367
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CSEG AT 0
  2.     offset EQU 35h          // pierwszy adres 16 bjatowego bufora
  3.     maska EQU 0Fh           // maska bufora pózniej uzywana do poruszania sie miedzy adresami
  4.     LJMP START              // skok do prodecdury start
  5. CSEG AT 23h                 // pod adresem 23h z pamieci programu umieszczamy
  6.     LJMP PRZERWANIE         // instrukcje skoku do procedury obslugi przerwania
  7. CSEG AT 30h
  8.    
  9. START:                      // program glówny zaczyna sie od adresu 30h(za tablica wektorów przerwan)
  10.     MOV SCON,#50h           // uart w trybie 1 (8 bit), REN=1
  11.     MOV TMOD,#20h           // licznik 1 w trybie 2
  12.     MOV TH1, #0FDh          // 9600 Bds at 11.0592MHz
  13.     SETB TR1                // uruchomienie licznika T1
  14.     SETB ES                 // zezwolenie na przerwanie z portu szeregowego
  15.     SETB EA                 // globalne odblokowanie przerwan
  16.     MOV R0, #offset         // adres pod jakim zaczyna sie bufor zostal zapisany do rejestru r0
  17.  
  18. PETLA:
  19. SJMP $                      // oczekiwanie na wprowadzenie znaku do UARTa
  20.  
  21.    
  22. PRZERWANIE:                 // procedura obslugi przerwania    
  23.     MOV A, SBUF             // czytanie znaku z UART
  24.     CLR RI                  // czyszczenie flagi RI odpowiadajacej za sygnalizowanie odbioru danych w UART
  25.     MOV SBUF,A              // wysylanie kodu znaku z akumulatora do UART
  26.     JNB TI,$                // czekanie na opróznienie bufora nadajnika
  27.     CLR TI                  // czyszczenie flagi zapisu UART
  28.     MOV A, R0               // zapisanie wskaznika do komorek bufora w akumulatorze
  29.     SUBB A,#offset          // roznica offsetu oraz aktualnego adresu komorki bufora
  30.     ANL A, #maska           // suma logiczna wskaznika i maski
  31.     ADD A, #offset          // dodanie offsetu
  32.     MOV R0, A               // zaladowanie adresu jako wyniku sumy logicznej do rejestru r0
  33.     MOV A, SBUF;            // zaladowanie znaku z UART do akumulatora
  34.     MOV @R0, A              // zapis wartosci akumulatora do komórki o adresie R0
  35.     INC R0                  // przesuniecie wskaznika na kolejna komorke bufora
  36. RETI
  37.  
  38. END
Advertisement
RAW Paste Data Copied
Advertisement