Gast
#388214
ihr seit meine letzte hoffung.
habe schon stundenlang google gequählt aber noch nicht weiter :((
ich muss den ic mit dem unten stehenden source code programmieren.
ich weiß assembler etc. allerdings weiß ich nicht welchen assembler ich
nehmen muss um den text in hex umzuwandeln.
zum proggen wollte ich mir den programmer bei ebay kaufen und mit
ic-prog programmieren.
passt der sourcecode überhaupt?? weil da ja text drinsteht etc. hab von
sowas echt keine ahnung.
bedanke mich schonmal
chris
// komfort.c
// Komfortschließung, copyright Julian Baker 2004
// 2x Tastendruck innerhalb 2 sek.(t1) --> Ausgang(P1.7)PIN19 nach
t_Einschalt_delay für
// 10sek(t2) High, dann wieder Low
// weiterer Tastendruck: Ausgang Low
// Taster: ext. Interrupts INT0 (P3.2)PIN 6
// PIN 1 Reset(bei High)
// PIN 4,5 XTAL + 2 x 22pF
// PIN 10: GND, PIN 20. VCC(5V)
#include
# define Quarzfrequenz 11059 // f in khz
# define T0_1msec 0xFFFF-Quarzfrequenz/12 // Ladewert von T0
(TH0+TL0), t=1mS
#define t1 2000 // 2sec
#define t2 10000 // 10sec (Wert mit SSD muss 15000 -> 15sec sein!!!)
#define t_Einschalt_delay 500 // 500 msec
# define T0HI_1msec T0_1msec / 256 // T0 High-Order (durch
int.Division)
# define T0LO_1msec T0_1msec % 256 // T0 Low-Order (Modulo liefert
Rest)
#define start_T0 TR0=1; // Timer 0 starten
#define stop_T0 TR0=0; // Timer 0 abschalten
#define Out P1_7 // Ausgang P1.7
#define Out_High Out=1
#define Out_Low Out=0
unsigned char status;
unsigned int msec; //Variable für Zeitverzögerung
void main(void)
{
TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden
TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden
TMOD &= 0xF0; // Timer0 Einstellungen zurücksetzen
TMOD |= 0x01; // T0 Modus1, 16bit Zeitgeber
ET0 = 1; // Freigabe des Interrupts bei Überlauf T0
EX0 = 1; // Freigabe des ext. Interrupts INT0 (P3.2)
IT0 = 1; // externer Interrupt0 wird flankenaktiviert
EA = 1; // alle Interruptquellen möglich
ausgangszustand();
while (1) // Beginn Endlosschleife
{
PCON=0x01; // enter idle mode
}
}
void ext_INT0 (void) interrupt 0 //
{
unsigned char i;
//Tastenentprellung;
EX0 = 0;
for (i=0; i<255; i++);
IE0=0;
EX0 = 1;
switch (status)
{
case 4: // 3.Tastendruck = Abbruch
ausgangszustand();
break;
case 3: // 3.Tastendruck = Abbruch
ausgangszustand();
break;
case 2:
status=3; // Verzögerung aktivieren
msec=0;
case 1: // 1.Tastendruck: starte T0, msec werden gezählt
stop_T0;
msec=0;
TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden
TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden
start_T0;
status=2;
break;
}
}
void random_time (void) interrupt 1 using 1 // Timer0 Interruptroutine
{
TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden
TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden
msec++; // msec inkrementieren
if (msec>t2) // wenn Zeit t2 abgelaufen
{
ausgangszustand();
}
if (msec>t1 && status== 2) // kein weiterer Tastendruck->
{
ausgangszustand();
}
if (msec>t_Einschalt_delay && status==3) // Verzögerung vorbei
{
status=4;
Out_High; // Ausgang für t2 sec = High
msec=0;
}
}
void ausgangszustand (void)
{
Out_Low;
status=1;
stop_T0;
msec=0;
}