Vyvolání přerušení u x51
Moderátor: Moderátoři
- martinkopp
- Příspěvky: 1303
- Registrován: 12 říj 2023, 00:00
Vyvolání přerušení u x51
Já už tyhle MCU moc nepoužívám, takže si takové detaily nepamatuju a momentálně to bohužel nemám jak vyzkoušet.
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00
Takže za mě, naslepo a bez záruky, dojde ke skoku do rutiny přerušení při nastavení flagu přerušení.
PF
Kód: Vybrat vše
; Příklad pro 8051 s přerušovacími vektory
;
; Standardní tabulka přerušovacích vektorů 8051:
; RESET : 0000h - Restart/Reset
; INT0 : 0003h - Externí přerušení 0
; Timer0 : 000Bh - Přerušení Timer 0
; INT1 : 0013h - Externí přerušení 1
; Timer1 : 001Bh - Přerušení Timer 1
; UART : 0023h - Přerušení sériového portu (UART)
;
; Vektorové adresy jsou pevně dány a ISR rutiny jsou na těchto adresách
ORG 0000h
ljmp MAIN ; Skok na začátek hlavního programu po resetu
; Vektor přerušení UART na adrese 0023h
ORG 0023h
ljmp UART_ISR
ORG 0100h
MAIN:
; Inicializace Timer1 pro generování baud rate
mov TMOD, #20h ; Timer1: režim 2 (8-bitový auto-reload)
mov TH1, #0FDh ; Nastavení pro 9600 baud při 11.0592 MHz
mov SCON, #50h ; UART: režim 1 (8 bitů), povolení příjmu (REN=1)
setb TR1 ; Spuštění Timer1
; Povolení přerušení
setb ES ; Povolení UART přerušení
setb EA ; Globální povolení přerušení
MAIN_LOOP:
sjmp MAIN_LOOP ; Nekonečná smyčka hlavního programu
;---------------------------------------------------------
; UART ISR - obsluha přerušení sériového portu
;---------------------------------------------------------
UART_ISR:
jb RI, UART_receive ; Pokud je nastaven příznak RI (příjem dat)
jb TI, UART_transmit ; Pokud je nastaven příznak TI (vysílání dat)
reti ; Návrat z přerušení, pokud není žádný flag
UART_receive:
clr RI ; Ruční vymazání příznaku RI
mov A, SBUF ; Načtení přijatého znaku z UART registru SBUF
; Zde lze přijatý znak dále zpracovat, např. uložit do paměti
reti ; Návrat z ISR
UART_transmit:
clr TI ; Ruční vymazání příznaku TI
; Zde lze připravit další znak k odeslání, např. vložit do SBUF
reti ; Návrat z ISR
https://sourceforge.net/projects/mcu8051ide/
https://github.com/jarikomppa/emu8051
https://www.edsim51.com/
- martinkopp
- Příspěvky: 1303
- Registrován: 12 říj 2023, 00:00
Mi šlo jen o to, co se stane pokud nastavím flag RI někde v programu. Nikde v DS jsem to nenašel, takže budu veřit Celeronově chytré knize a počítat s tím, že takto přerušení skutečně vyvolám. Dík moc.