jeg har svært ved at få interrupts til at fungere på min DS89C450 med kode skrevet i Keil C51 efter vejledning gennem Application Note 105 fra keil.de.
Koden kompilerer fejlfrit, endda uden warnings og kan uden videre flashes ind i controlleren, men når jeg så resetter controlleren og måler med oscilloscopet på det ben, jeg har sat til at oscillere hvert sekund får jeg intet ud - bortset fra en pæn vandret streg ...
Hele min kode ser (uden kommentarer) således ud - noget af den er ren copy-paste fra pdf'en:
Begge dele er rettet til, men lige lidt hjælper det på hardwaren. Simulatoren kører lige så fint som før ...
På printet - et splynternit veroboard anskaffet til dette formål og loddet med rolig hånd i sirligt mønster - er der ingen kortslutninger at se omkring Int1 og \Int1, ej heller om de andre interrupt-ben.
/Thomas Som lægger sig og tænker over det i drømmeland.
Det gør den skam, men de if-sætninger jeg nu har plastret ind i den for at tælle sekunder, minutter og timer op, springer uC'en let og elefant hen over.
Den aktuelle kode ser sådan ud og virker fint i simulatoren, men på uC'en bliver if'erne som sagt ignoreret.
+--------------------------+ #include
unsigned int timer0_tick; unsigned int secs,mins,hrs;
void timer0_initialize(void) { /*-------------------------------------- Set Timer0 for 16-bit timer mode. The timer counts to 65535, overflows, and generates an interrupt.
Set the Timer0 Run control bit. --------------------------------------*/ EA = 0; /* disable interrupts */ TMOD = (TMOD & 0xF0) | 0x01; /* Set T/C0 Mode */ ET0 = 1; /* Enable Timer 0 Interrupts */ TR0 = 1; /* Start Timer 0 Running */ EA = 1; /* enable interrupts */
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.