EX0 1=Enable External interrupt 0
ET0 1=Enable Timer 0 interrupt
EX1 1=Enable External interrupt 1
ET1 1=Enable Timer 1 interrupt
ES 1=Enable Serial port interrupt
ET2 1=Enable Timer 2 interrupt
EA 0=Disable all interrupts
CP_RL2 0=Reload, 1=Capture select
C_T2 0=Timer, 1=Counter
TR2 0=Stop timer, 1=Start timer
EXEN2 Timer 2 external enable
TCLK 0=Serial clock uses Timer 1 overflow,1=Timer 2
RCLK 0=Serial clock uses Timer 1 overflow,1=Timer2
EXF2 Timer 2 external flag
TF2 Timer 2 overflow flag
PSW - Program status Word - czyli rejestr stanu wykonywanego programu Przykladowo w 8051 zawiera flagi na 8 bitach: CY -przeniesienia AC -pomocniczego przeniesienia F0 -flaga0 ustawiana przez usera RS1 - Register bank select 1. RS0 - Register bank select 0. OV - flga przepełnienia F1 -flaga1 ustawiana przez usera PARITY - wskazanie parzystości
Pamięć mikrokontrolera 8051 została podzielona na następujące obszary:
DATA – bezpośrednio adresowany obszar wewnętrznej pamięci RAM (128 bajtów),
IDATA – pośrednio adresowany obszar wewnętrznej pamięci RAM mikrokontrolera (128 lub 256 bajtów),
BDATA – obszar pamięci RAM, w którym możliwe jest adresowanie pojedynczych bitów
SFR – obszar rejestru funkcji specjalnych w pamięci RAM (special function register),
SBIT – obszar pojedynczego bitu w obrębie rejestru funkcji specjalnych SFR, na przykład sbit OV = PSW^2,
PDATA – tak samo, jak XDATA z tym, że adres dostępu do pamięci zewnętrznej jest 8 bitowy,
XDATA – zewnętrzna pamięć danych, adres dostępu 16 bitowy (64kB),
CODE – pamięć programu; może być albo wewnętrzny, albo zewnętrzny ROM mikrokontrolera
!PSEN (Program Store Enable) = WY sterujące „odczyt z zewnętrzenj pamięci programu”; koniec stanu aktywnego („0”) => wczytanie rozkazu
!ALE (Address Latch Enable) = WY sterujące „zatrzaśnięcie podanego adresu w P0” (zboczem opadającym)
!RST (Reset) = WE sygnału inicjalizacji (resetowania)układu
!EA(External Access) = WE testowane w trakcie inicjalizacji (reset); wymusza pobieranie wszystkich rozkazów z zewnętrznej pamięci programu (ignorowanie pamięci wewnętrznej)
zad 2. a) #include<regx51.h> void main(void) { while(1){P3_0 ~=P2_0; } } b) #include<regx51.h> void main(void) { P3_0=0; while(1){; } } zad 3. 3. Był wyswietlacz CC podłączony do P0, mógł wyświetlać 2 cyfry na raz. L i P były podłączone do P2_0 i P2_1. Nalezalo wyswietlic 2 pierwsze cyfry swojego nr indeksu. #include<regx51.h> unsigned char xdata lewy _at_ 0xFE00; unsigned char xdata prawy _at_ 0xFD00; void main(void) { while(1) { lewy=0x66; prawy=0x6D; } } zad 4. 4. Była funkcja, należało ją przerobic przy użyciu Sbit. Takie zadanie juz tu chyba bylo i wygladalo tak: unsigned char data Key,Key1; void ISR_Timer1(void)interrupt 3 { Key = P1; Key1 = Key; Key1 &= 0x3C; Key1 = (Key1>>2); if(Key1 != 15){P2=Key;} } ROZW:unsigned char data Key,Key1; sbit a= Key1^2; sbit b= Key1^3; sbit c= Key1^4; sbit d= Key1^5; void ISR_Timer1(void)interrupt 3 { Key = P1; Key1 = Key; Key1 &= 0x3C; if((a&b&c&d)!=1){P2=Key;} } zad 5. 5. Do P1 były podłączone diody. Do int0 i int1 przyciski. Licznik (zmienna) zlicza wcisniecia przycisku 1 od zera w góre, a przycisku 2 w dół do zera, a jego stan jest wyswietlany na diodach. #include<regx51.h> void Init(void) { P1=0xFF; IT0 =1; IT1 =1; EX0=1; EX1=1; EA=1; } void ISR_INT0(void) interrupt 0 { P1--; } void ISR_INT1(void) interrupt 2 { if(P1<0xFF){P1++;} } void main(void) { Init(); while(1){;} }
Bayaniss