ZALICZENIE PIERWSZY TERMIN 2010
1. Pare pojec, z tego co pamietam:
PSW, bdata, data, xdata, psen, ale, ea, ~ea, t0, t0pin
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, ale nalezalo je sterowac inaczej ;p. Nalezalo wyswietlic 2 pierwsze cyfry swojego nr indeksu.
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;}
}
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.
ROZWIĄZANIA
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.
#include<regx51.h>
unsigned char xdata a _at_ 0xFE00;
unsigned char xdata b _at_ 0xFD00;
void main(void)
{
while(1)
{
a=0xYY; - gdzie YY to drugi numer indeksu od lewej(oczywiście w kodzie wyswietlacza 7 segmentowego)
b=0xUU; -gdzie UU to pierwszy numer indeksu od lewej
}
}
zad 4.
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;}
}
albo
unsigned char data Key,Key1;
sbit a= P1^2;
sbit b= P1^3;
sbit c= P1^4;
sbit d= P1^5;
void ISR_Timer1(void)interrupt 3
{
Key = P1;
if((a&b&c&d)!=1){P2=Key;}
}
zad 5.
#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){;}
}