Hi
Ich habe ich habe versucht einen PIC mal mit C zu Programmieren. Dabei
trat allerdings das Problem auf, dass ein Eingang immer "0" ausgibt.
Die Hardware, die ich benutze ist die Versuchsplatine aus dem Buch
"Mikrocontroller für Einsteiger", auf der ein PIC 16F876A ist. Das ganze
möchte ich nun mit C programmieren, da es für mich wesentlich einfacher
ist als Assembler neu zu lernen.
Als Compiler nutze ich den von HI-TECH (lite Version).
Hier der Code ...
1 | #include <htc.h>
|
2 | #include <pic16f876a.h>
|
3 |
|
4 | #ifndef _XTAL_FREQ
|
5 | #define _XTAL_FREQ 4000000
|
6 | #endif
|
7 |
|
8 | __CONFIG(CP_OFF & WDTE_OFF & BOREN_OFF & PWRTE_OFF & FOSC_XT & WRT_OFF & LVP_OFF & DEBUG_OFF & CPD_OFF);
|
9 |
|
10 | #define T1 PORTAbits.RA4
|
11 | #define T2 PORTAbits.RA5
|
12 | #define T3 PORTCbits.RC0
|
13 | #define T4 PORTCbits.RC1
|
14 |
|
15 | #define LED1 PORTAbits.RA2
|
16 | #define LED2 PORTAbits.RA3
|
17 | #define LED3 PORTBbits.RB4
|
18 | #define LED4 PORTBbits.RB5
|
19 |
|
20 | main(void){
|
21 | PORTA = 0x00;
|
22 | PORTB = 0x00;
|
23 | PORTC = 0x00;
|
24 |
|
25 | TRISAbits.TRISA4 = 1;
|
26 | TRISAbits.TRISA5 = 1;
|
27 | TRISCbits.TRISC0 = 1;
|
28 | TRISCbits.TRISC1 = 1;
|
29 |
|
30 | TRISAbits.TRISA2 = 0;
|
31 | TRISAbits.TRISA3 = 0;
|
32 | TRISBbits.TRISB4 = 0;
|
33 | TRISBbits.TRISB5 = 0;
|
34 |
|
35 | while(1){
|
36 |
|
37 | LED1 = !T1;
|
38 | LED2 = !T2;
|
39 | LED3 = !T3;
|
40 | LED4 = !T4;
|
41 | }
|
42 | }
|
Das Programm, welches eigentlich nur Eingänge auf Ausgänge schaltet
funktioniert soweit, außer das die LED2 dauerhaft leuchtet und somit T2
vermutlich immer 0 ausgibt.