Hi,
Ich möchte die Pins GP0 und GP1 als Ausgänge, und die Pins GP2 und GP3
eines PIC10F202 als Eingänge schalten. Die Eingänge habe ich noch
zusätzlich mit 2 PullUp Widerständen beschalten. Komisch ist, dass sich
der IC mit dem Taster an GP3 perfekt schalten lässt, ich bei GP2 aber
einen Kurzschluss erhalte :/
Im Datenblatt habe ich natürlich schon gelesen, dass GP2 auch noch
mehrere andere Funktionen hat, welche auch das TRIS-Register
überschreiben, die habe ich soweit allerdings deaktiviert. Oder nicht?
Ich verwende MPLABX 2.00 und den XC8 Compiler.
Vielen Dank für eure Hilfe! :)
LG Markus
1 | /*
|
2 | * File: main.c
|
3 | * Author: Markus
|
4 | *
|
5 | * Created on 26. April 2014, 00:08
|
6 | */
|
7 | #include <pic10f202.h>
|
8 | #include <plib.h>
|
9 | #include <stdlib.h>
|
10 | #include <xc.h>
|
11 |
|
12 | #pragma config OSC = IntRC, MCLRE = OFF, WDTE = OFF, CP = OFF
|
13 |
|
14 |
|
15 | //Flags
|
16 | unsigned char rowOn = 1;
|
17 | unsigned char stopLightOn = 1;
|
18 | unsigned char stopLightBlinking = 0;
|
19 |
|
20 | unsigned int ms = 0;
|
21 | unsigned char ms2 = 0;
|
22 |
|
23 | unsigned char buttonOld = 0;
|
24 | unsigned char button = 0;
|
25 | unsigned char pressed = 0;
|
26 |
|
27 | void main(void)
|
28 | {
|
29 | OSCCAL = 0b01111110; //max frequency;GP2/T0CKI/COUT applied to GP2
|
30 | OPTION = 0b11000101; //WakeUp on PinChange OFF; WeakPullUps OFF; TMR0 internal CLK; undefined; PS to TMR0; PS 1:64
|
31 | TMR0 = 131; //8ms to OF
|
32 | TRISGPIO = 0b00001100;
|
33 | GP0 = 0;
|
34 | GP1 = 1;
|
35 |
|
36 | while(1)
|
37 | {
|
38 |
|
39 | if(TMR0 < 131) //Overflow detected
|
40 | {
|
41 | ms2 = ms2 + 8;
|
42 |
|
43 | buttonOld = button;
|
44 | button = GP3; //0 wenn pressed
|
45 |
|
46 | if((buttonOld != 0) && (button == 0)) //started pressing button
|
47 | {
|
48 | ms = 0;
|
49 | pressed = 1;
|
50 | }
|
51 | else if((buttonOld == 0) && (button == 0)) //continue pressing
|
52 | {
|
53 | ms = ms+8;
|
54 | }
|
55 | else if((buttonOld == 0) && (button != 0) && (pressed == 1)) // stopped pressing
|
56 | {
|
57 |
|
58 | if(ms < 3000)
|
59 | {
|
60 | if(rowOn == 1)
|
61 | rowOn = 0;
|
62 | else
|
63 | rowOn = 1;
|
64 | }
|
65 | else if(ms < 6000)
|
66 | {
|
67 | if(stopLightOn == 1)
|
68 | stopLightOn = 0;
|
69 | else
|
70 | stopLightOn = 1;
|
71 |
|
72 | stopLightBlinking = 0;
|
73 | }
|
74 | else
|
75 | {
|
76 | stopLightBlinking = 1;
|
77 | }
|
78 |
|
79 | pressed = 0;
|
80 |
|
81 |
|
82 | }
|
83 |
|
84 | TMR0 = 131;
|
85 | }
|
86 |
|
87 | if(rowOn != 0) //middle LED row
|
88 | {
|
89 | GP1 = 1;
|
90 | }
|
91 | else
|
92 | {
|
93 | GP1 = 0;
|
94 | }
|
95 |
|
96 | if(stopLightOn != 0) //break light
|
97 | {
|
98 | if(GP2 == 0) //BREAK
|
99 | {
|
100 | if(stopLightBlinking == 1)
|
101 | {
|
102 | if(ms2 > 200)
|
103 | {
|
104 | if(GP0 == 1)
|
105 | GP0 = 0;
|
106 | else
|
107 | GP0 = 1;
|
108 |
|
109 | ms2 = 0;
|
110 | }
|
111 | }
|
112 | else
|
113 | {
|
114 | GP0 = 1;
|
115 | }
|
116 | }
|
117 |
|
118 | }
|
119 | else
|
120 | {
|
121 | GP0 = 0;
|
122 | }
|
123 | }
|
124 | }
|