Hallo,
ich stehe hier vor einem Problem.
Da ich eigentlich nur mit C programmiere, und da auch nur die eher
einfacheren Befehle weis, wollte ich euch mal fragen, ob ihr mir
weiterhelfen könnt.
Ziel ist es, an einem Port ein PWM Signal zu erzeugen.
Folgenden Code habe ich von meinem Lehrer bekommen, und er meinte ich
sollte mir das mal ansehen. Nur kann ich mir darauf nicht wirklich was
zusammenreimen. Ich lese mir schon den halben Tag das Datenblatt zum uC
durch, aber irgendwie hilft mir das auch nicht weiter
1 | #include <stdio.h> /* standard I/O .h-file */
|
2 | #include <stdlib.h> /* standard library .h-file */
|
3 | #include <ctype.h> /* character functions */
|
4 | #include "reg51xd2.H" // SFR
|
5 |
|
6 | bit ausgabe=0; // Flag für Ausgabe
|
7 | unsigned char cnt_down=1; // Interruptzähler
|
8 |
|
9 | unsigned int i;
|
10 |
|
11 |
|
12 |
|
13 | timer0() interrupt 1 using 1 // Int Vector at 000BH, Reg Bank 1
|
14 | {
|
15 | CCAP0H--; // P1.3
|
16 | CCAP4H++; // P1.7
|
17 |
|
18 |
|
19 |
|
20 | if(!--cnt_down)
|
21 | { cnt_down=28;
|
22 | ausgabe=1;
|
23 | }
|
24 | }
|
25 |
|
26 | void main(void)
|
27 | {
|
28 | CKCON0=0xFF; // X2 fast mode, peripherie NORMAL 12 cycles
|
29 | TMOD=0x21; // Timer0 Modus1, Timer1 Modus2
|
30 | TH1=0xff;
|
31 | //TH0=0x80;
|
32 | PCON |=0x80; // 115kBaud
|
33 | SCON=0x50;
|
34 | TR0 = 1; TR1 = 1; // Timer0 und Timer1 EIN
|
35 | TI=1; // Start TxD COM
|
36 | IEN0=0x82; // Interrupt Timer0 freigeben
|
37 | cnt_down=1;
|
38 |
|
39 | CMOD=0; // f_CLK/6 für PWM
|
40 | CCON|=0x40; // CR=1: PCA counter EIN
|
41 |
|
42 | CCAPM0=0x42; // P1.3: Komparatorfunktion EIN (Bit6), PWM EIN (Bit1)
|
43 | CCAPM4=0x42; // P1.7: Komparatorfunktion EIN (Bit6), PWM EIN (Bit1)
|
44 |
|
45 |
|
46 |
|
47 | while(1)
|
48 | {if(ausgabe)
|
49 | {
|
50 | ausgabe=0;
|
51 | }
|
52 | }
|
53 | }
|
mfg chris