timer 80C186???
-
Hallo zusammen,
ich versuche einen timer eines 80C186 zustarten, doch irgendwie will das nicht funktionieren!?!
Mein C-Code:
#include <i86.h> #include <i186eb.def> unsigned short i = 0; int z = 0; main() { outword(_zaehlregister_timer_0,0); /* Startwert Timer_0 */ outword(_max_zahl_A_timer_0,1000 /* Endwert Timer_0 */ outword(_zaehlregister_timer_2,0); /* Startwert Timer_0 */ outword(_max_zahl_timer_2,2000); /* Endwert Timer_0 */ outword(_stw_timer_0,0xC005); /* Timer_0 initialisieren */ outword(_stw_timer_2,0xC000); /* Timer_2 initialisieren */ while (1) { /* warten bis MAX COUNT erreicht ist(MC = 1); mc_bit = 0x20 */ while ((inword(_stw_timer_0) & mc_bit) == 0); /* an dieser Stelle bleibt mein Programm stehen ???? */ /* i => 7-Seg.Anzeige */ outword(_port_A+1,i); /* mc_bit von 1 => 0 rücksetzen */ outword(_stw_timer_0,inword(_stw_timer_0) & ~mc_bit & 0x3fff); /* warten bis MAX COUNT erreicht ist(MC = 1); mc_bit = 0x20 */ while ((inword(_stw_timer_2) & mc_bit) == 0); /* i => 7-Seg.Anzeige */ outword(_port_A,i); /* mc_bit von 1 => 0 rücksetzen */ outword(_stw_timer_2,inword(_stw_timer_2) & ~mc_bit & 0x3fff); /* 7-Seg.An. hat nur zwei Stellen */ if (i < 255) i++; else i = 0; outword(_port_A,i); } }
Meine Def-Datei
/*---------------------------------------------*/ /* */ /* Vordefinition von */ /* Prozessor- und Peripherie-Konstanten */ /* */ /* Zielsystem: MCT-Trainer (80C186EB) */ /* Einfuegen mit: #include<i186eb.def> */ /* (c) K.-H.Krauss Juni 2000 Version 1.5 */ /*---------------------------------------------*/ /* Definition von Kanaladressen */ /* (Kanaladressen beginnen mit _xx...x) */ /*---------------------------------------------*/ #define _port_A 0xf2f8 #define _port_B 0xf2fa #define _port_C 0xf2fc #define _stw_8255 0xf2fe #define _stw_timer_0 0xff36 #define _stw_timer_1 0xff3e #define _stw_timer_2 0xff46 #define _zaehlregister_timer_0 0xff30 #define _zaehlregister_timer_1 0xff38 #define _zaehlregister_timer_2 0xff40 #define _max_zahl_A_timer_0 0xff32 #define _max_zahl_B_timer_0 0xff34 #define _max_zahl_A_timer_1 0xff3a #define _max_zahl_B_timer_1 0xff3c #define _max_zahl_timer_2 0xff42 #define _int_timer 0xff12 #define _int_0 0xff18 #define _int_1 0xff1a #define _int_2 0xff1c #define _int_3 0xff1e #define _eoi 0xff02 /*----------------------------------------------*/ /* Definition von Steuerwoertern sowie */ /* Vorbelegungen von Registern (ggf. aendern */ /* je nach Aufgabenstellung */ /*----------------------------------------------*/ #define stw_8255 0x8b89 #define stw_timer_0_start 0xc005 #define stw_timer_0_stop 0x4005 #define stw_timer_1_start 0xc009 #define stw_timer_1_stop 0x4009 #define stw_timer_2_start 0xc001 #define stw_timer_2_stop 0x4001 #define stw_maske (stw_timer_1_start & 0x001f) #define mc_bit 0x0020 #define max_zahl_A_timer_1 1000 #define max_zahl_B_timer_1 0 #define max_zahl_timer_2 1000 #define stw_int_timer 7 #define stw_int_1 0x17 #define motor_rechtslauf 3 #define motor_linkslauf 0x0b #define motor_stop 0 #define tastatur_code_rechts 0xae00 #define tastatur_code_links 0xbc00 #define overflow 0xbbbb #define eoi 0x8000
Mein Programm bleibt an der ersten Schleife stehen????
while ((inword(_stw_timer_0) & mc_bit) == 0); /* an dieser Stelle bleibt mein Programm stehen ???? */
Aber eigentlich sollte das Prog. weiterlaufen sobald MC = 1, also der MAX Count vom Vergleichsreg.A erreicht ist!?!
Vielleicht hat ja jemand von euch eine Idee...
Gruß && Danke
lucifer