guten Tag zusammen ich versuche ein Port zum blinken zu bringen, mit timer 0 modus 2 als verzögerungsgeber.das port soll invertieren, nach jedem überlauf (TF0) wer weiß wie der timer interrupt aussieht. vielen dank
Gast
#824833
[Oberlehrer] Davon abgesehen das Du im falschem Forum postest, solltest Du erstmal selber einen Programm-Ansatz bringen, als hier nach einer kompletten Lösung zu fragen. Wie willst Du es sonst lernen. [/Oberlehrer] Ich gebe Dir trotzdem mal ein Beispiel, zwar nicht für XC866 aber anderer 8051.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
dies habe ich gemancht aber P1 geht ein uns aus und dann nix
# include <XC888CLM.h>
void T01_vInit(void)
{
TMOD = 0x02; // TMOD für Timer 0 Modus 2
TL0 = 0x00;
TH0 = 0x11; // Reloadwert
ET0 = 1; // Enable Timer 0 interrupt
EA = 1;
TR0 = 1; // Start Timer 0
TF0 = 0;
}
void T01_viTmr0(void) interrupt 1 using 0 // Timer 0 Interrupt
{
unsigned int ueberl;
for (ueberl=0; ueberl<500; ueberl=ueberl+50)
{
while (TF0==0);
TR0 = 0;
P1_DATA=!(P1_DATA);
}
}
int main ()
{
SFR_PAGE(_pp0, noSST); // Change to page 0
P1_DIR = 0xFF; // Festlegen von P1 als Ausgang
P1_DATA = 0xFF; // Initialisieren des Aungangs auf High
CMCON = 0x12; // load Clock Control Register (12Mhz)
T01_vInit();
while(1);
}
was mache ich da falsch?
Gast
#825197
> TR0 = 0;
Du hälst den Timer an. Da kommt er 1x und dann nie wieder in die
Interrupt-Routine.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.