Buchstaben an LPT Port senden

titaniumnet010

Grünschnabel
hiho!
Also
Bis jetzt habe ich meinen Atmel prozessor einigermaßen ordentlich programmieren können.

erste Diode blink blink, erste Diode leuchtet

zweite Diode blink blink, zweite Diode leuchtet

dritte Diode blink blink, dritte Diode leuchtet

Alle drei Dioden blinken

und dann kommen drei verschiedene tonhöhen aus dem kleinen Lautsprechen *g*

so.
Ich weiß is ne einfache sache bis jetzt aber ich will das ding ma größer kriegen.
erster schritt dazu:

Bis jetzt muss ich jedes mal wenn ich in den nächsten schritt gehn will nen knopf drücken...
Das ganze will ich jetzt aber per PC steuern...

Also ich habe gerade mit meinem onkel gechattet (hat leider nicht viel zeit)
udn jetzt weiß ich folgendes:

Ich soll meinen Atmel Prozessor via COM-Port steuern. Er hat gemeint ich brauche dafür noch einen billigen Chip... Weiß jemand was für einer das ist? Bezeichnung?
ok

und dann bräuchte ich noch einen Schaltplan wie ich diesen CHIP mit dem COM-Port und dem Atmel verbinde...

hmmm... Also ich hab einen Atmel 89C2051 Prozessor...

kann mir da jemand weiterhelfen?
pmb Matthew
 
Zuletzt bearbeitet:
hmmm... ok ich versuch des ding jetzt ma mit VB zum laufen zu kriegen...
Des is ein Atmel 89C2051 Prozessor....
Der quellcode den ich kompilier is folgender:


#include <Reg3051.h>


/*FUNKCJE TYPU EXTERN*/

//extern void _nop_();
//extern void _Pauza_();
//extern _Resetuj_();
//extern unsigned char _LongLSB_();
//extern unsigned char _Long2LSB_();

/*KOLEJNOŒÆ WYSTÊPOWANIA FUNKCJI*/

void timer0 (void) interrupt 1 using 1; //przerwanie zegarowe
void timer1 (void) interrupt 1 using 1; //przerwanie zegarowe
void ObslugaKlawiszy(void);
void InterpretacjaKlawiszy(void);
void main(void);


/*FUNKCJE DEFINIOWANE*/

#define ZapiszDana(dana) Zapisz(dana,1,0)
#define ZapiszRozkaz(rozkaz) Zapisz(rozkaz,0,0)
#define Zapisz1Rozkaz(rozkaz) Zapisz(rozkaz,0,1)
#define CzytajI2C() ObslugaI2C(1,0)
#define ZapiszI2C(znak) ObslugaI2C(2,znak)

/*DEKLARACJA ZMIENNYCH*/

/*bdata char P1Mem;

sbit SCL = P1Mem ^ 0;
sbit SDA = P1Mem ^ 1;
*/
bdata char BDTemp;
sbit BDTemp_0 = BDTemp ^ 0;
sbit BDTemp_1 = BDTemp ^ 1;
sbit BDTemp_2 = BDTemp ^ 2;
sbit BDTemp_3 = BDTemp ^ 3;
sbit BDTemp_4 = BDTemp ^ 4;
sbit BDTemp_5 = BDTemp ^ 5;
sbit BDTemp_6 = BDTemp ^ 6;
sbit BDTemp_7 = BDTemp ^ 7;

bit BWolno=1, P3_0_Temp=0, P3_1_Temp=0, P3_4_Temp=0, P3_5_Temp=0, P3_7_Temp=0, BKlawiszNacisniety=0;
unsigned char CTemp, Czas=0, Czas1=0, P1_Mem = 0xff, OdebranyZnak=0, CStan=0, Czas1Start=1,
Naciskany=0,Nacisniety=0,Przytrzymany=0,Przytrzymywany=0;
unsigned long Licznik=0;

/*POCZ¥TEK ROZWIJANIA PROCEDUR*/



void timer0 (void) interrupt 1 using 1
{
}

void timer1 (void) interrupt 3 using 1
{
}

void UART (void) interrupt 4 using 1
{
}
void Zwolnij1(void)
{
Czas1=Czas1Start;
while(Czas1!=0) // Wieczna pêtla programu g³ównego
{
Czas1++;
}
}

void Zwolnij(void)
{
Czas=1;
while(Czas!=0) // Wieczna pêtla programu g³ównego
{
Czas++;
if(BWolno) Zwolnij1();
}
}



void main(void)
{
// INICJACJA
P1=0xff; //Porty jako wwyjsciowe
P1_Mem = 0x00;
P3=0xff;

//Timer0
ET0=0; //Przerwanie od Td0 nieodmaskowane
PT0=1; //Priorytet wy¿szy
TR0=1; //=TCON.4 Praca licznika ci¹g³a
TH0=72; // 256-72=184; Podzia³ przez 184 -> Przerwanie co 184/(11.059MHz/12) = 200[us]


//Timer1 //przeznaczony do UART
ET1=0; //Przerwanie od T1 nieodmaskowane
PT1=1; //Priorytet wy¿szy
TR1=1; //=TCON.6 Praca licznika ci¹g³a
TH1=0xfd; //szybkoϾ transmisji; dla SMOD=0:
// 0xfd -> 9600 bodów
// 0xfa -> 4800 bodów
// 0xf4 -> 2400 bodów
// 0xe8 -> 1200 bodów
// 0xd0 -> 600 bodów
TMOD=0x22; //Tryb 2. Timera1 i tryb 2. Timera0

//UART
PCON=PCON&0x7F;//Dzielnik; SMOD = 0 tzn z dzielnikiem/2 = f_{osc}/32
SM0=0;SM1=1;//Tryb 1: asynchr. 8bitów, szybk. ustalana programowo
SM2=0;
ES=0; //Przerwanie od UART nieodmaskowane
PS=0; //Priorytet niski
REN=1; //Zezwolenie na odbiór znaku

EA=0; //nieOdblokowanie przerwañ

// BStareS1 = P3_3; //S1
// BStareS2 = P3_2; //S2

P3_7 =1; // By moc czytac
BKlawiszNacisniety=0;
P3_7_Temp=0;
while(1==1) // Wieczna pêtla programu g³ównego
{
P3_0 = P3_0_Temp; //Dioda 1
P3_1 = P3_1_Temp; //Dioda 2
P3_4 = P3_4_Temp; //Dioda 3
P3_5 = P3_5_Temp; // Glosnik
if (!P3_7 & !P3_7_Temp) // Reset-Knopf gedrueckt Nacis Klawisz ; W pamieci zero
{
P3_7_Temp = 1;
}

Zwolnij();

if (P3_7 & P3_7_Temp) // Reset-Knopf gedrueckt Puszczony klawisz ; w pamieci jest 1
{
P3_7_Temp = 0;
}

if (!P3_7 & P3_7_Temp) // Reset-Knopf gedrueckt Nacisniety klawisz; w pamieci jest 1
{
BKlawiszNacisniety = 1;
}

if(P3_7 & BKlawiszNacisniety) // Puszczony klawisz; BKlawiszNacisniety jest jeden
{
BKlawiszNacisniety = 0;
P3_7_Temp=0;
CStan++;
if(CStan==11)CStan=0;
}



if(CStan==0)
{
Czas1Start=1;
BWolno=1;
P3_0_Temp = 1; //
P3_1_Temp = 1; //
P3_4_Temp = 1; //
}
if(CStan==1)
{
P3_1_Temp = !P3_1_Temp; //aendere wert P3-0
}
if(CStan==2)
{
P3_1_Temp = 0; //
}
if(CStan==3)
{
P3_0_Temp = !P3_0_Temp; //aendere wert P3-0
}
if(CStan==4)
{
P3_0_Temp = 0;
}
if(CStan==5)
{
P3_4_Temp = !P3_4_Temp; //aendere wert P3-4
}
if(CStan==6)
{
P3_4_Temp = 0;
}
if(CStan==7)
{
P3_0_Temp = !P3_0_Temp;
P3_1_Temp = !P3_1_Temp;
P3_4_Temp = !P3_4_Temp;
}
if(CStan==8)
{
P3_5_Temp = !P3_5_Temp; //aendere wert P3-0
BWolno=0;
}
if(CStan==9)
{
P3_5_Temp = !P3_5_Temp; //aendere wert P3-0
BWolno=1;
Czas1Start=240;
}
if(CStan==10)
{
P3_5_Temp = !P3_5_Temp; //aendere wert P3-0
BWolno=1;
Czas1Start=0;
}
} //end of while
}
 
Zurück