Pytania z wejściówek Murawa SWB
1. na P1 zapalic diode podlaczona katodą (wyswietlic binarnie swój numer) - u nas 3.
#include <REGX52.h>
void main(void)
{
while(1)
{
P1 = 0xFC;
}
}
2. na P1 zapalic diode podlaczona anodą (wyswietlic binarnie swój numer) - u nas 3.
#include <REGX52.h>
void main(void)
{
while(1)
{
P1 = 0x03;
}
}
3. na P0 zapalic wyswietlacz podlaczony anodą (CC) (wyswietlic swoj numer)
Nie da się, P0 wykonany jest w technologii otwartego drenu i jeśli wyświetlacz jest podłączony anodą, należy do P0 dołączyć rezystancję.
4. na P0 zapalic wyswietlacz podlaczony katodą (wyswietlic swoj numer) 5
h g f e d c b a //////////////// h to kropka
0 1 1 0 1 1 0 1
6 | D
#include <REGX52.h>
unsigned char xdata rejestr _at_0x8000;
void main(void)
{
while(1)
{
rejestr = 0x6D;
}
}
5. Co oznacza:
EA - bit w rejestrze przerwań Interrupt Enable. Jeśli jest ustawiony na '1' umożliwia wykonywanie przerwań. '0' wyłącza przerwania w całym mikrokontrolerze.
~EA (W sensie zanegowane) - External Access Enable - jeśli chcemy korzystać z zewnętrznej pamięci programu powinniśmy zewrzeć to do masy.
PSEN - aktywuje się dwukrotnie na cykl, kiedy mikrokontroler wykonuje kod z zewnętrznej pamięci programu.
ALE - Address Latch Enable. Wskazuje na ważność danego adresu. (EDIT 3: PSurma: na P0 jest młodsza część adresu)
T0 (T 'zero') - (timer 0 external input). Zewnętrzne wejście timera 0.
Sbit - deklarator, który definiuje bit w rejestrze specjalnego przeznaczenia (SFR).
PSW
T0Pin
T0
data
xdata
Bdata
6. Napisz program zwiększający o dwa liczbę A , zdefiniowaną w pamięci kodu pod adresem 0x55;wynik zapisz w zmiennej umieszczonej pod adresem 0x55 w zewnetrznej pamięci danych:
#include<regx51.h>
unsigned char code A _at_ 0x55;
unsigned char xdata B _at_ 0x55;
void main(void)
{
B=A+2;
while(1){;}
}
7. Napisz uzywając dyrektywę sbit funkcję równoważną podanej
******************************************
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;}
}
******************************************
ODP:
SBit Key1^2; SBit Key1^3; SBit Key1^4; SBit Key1^5;
void ISR_Timer1 (void) Interupt 3
{
Key = P1;
Key1 =Key;
Key1 &=0x3C;
if ((Key1^2 & Key1^3 & Key1^4 & Key1^5) != 1) {P2 = Key;}
}
nie jestem pewny na 100%
tam jest operacja and na Key1 z 0x3C czyli jeśli bity 2,3,4,5 są jedynkami to będzie
00111100, potem jest przesuniecie o dwa czyli 00001111 i sprawdzenie czy (Key1 !=15), a za pomocą sbit można sprawdzic te bity od razu czyli ((Key1^2 & Key1^3 & Key1^4 & Key1^5) != 1)
8. Dla podanego schematu napisz program wyświetlający binarnie na diodach liczbę wciśnięć przycisków P1 i P2, przy czym P1 zwiększa/od zera/ , a P2 zmniejsza /do zera/ wartość wyświetlaną. Do obsługi przycisków użyj przerwań.
na schemacie był mikrokontroler a do portu P1 podłączone 8 diod chyba katodami i do portu P3.2 przycisk P1,a do P3.3 przycisk P2.
************************************chyba dobrze bo się go pytałem***********
#include<regx51.h>
void Init(void)
{
P1=0xFF;// jedynki na porcie powodują wygaszenie
EX0=1;
EX1=1;
EA=1;
}
void ISR_INT0(void) interrupt 0
{
P1--;
}
void ISR_INT1(void) interrupt 2
{
P1++;
}
void main(void)
{
Init();
while(1){;}
}