Forum: Mikrocontroller und Digitale Elektronik PIC12LF1840 MPLAB X C-Problem


von rolf77 (Gast)


Lesenswert?

Hallo,

ich beginne gerade mit C auf dem PIC12LF1840 mit dem MPLAB X C-compiler.
Mir ist nicht klar, warum sich RA0 nur für 3us statt für 30ms auf HIGH 
befindet. Wird das irgend was vom compiler wegoptimiert oder wieso?
1
int main(void)
2
{
3
  initPorts();
4
  ctrl=0;
5
  while(1)
6
  {
7
            PORTA=(1<<RA0);  //PORTA0=1
8
            pulse(); //Durchlaufzeit 30ms
9
            PORTA=(0<<RA0);  //PORTA0=0  wird schon nach 3us ausgeführt!
10
            __delay_ms(1000);
11
  }
12
}
13
14
int pulse(void)
15
{int i=1;
16
    while(i!=30)
17
    {
18
    data=1;
19
    __delay_us(500);
20
    data=0;
21
    __delay_us(500);
22
                i++;
23
    }
24
}


Gruß+Danke
Rolf

von Teo D. (teoderix)


Lesenswert?

Da fehlen wichtige teile vom Code x(
Zeig ALLES, so wie es sich gehört!

von rolf77 (Gast)


Lesenswert?

OK, sorry, ich date das reicht...
1
#include  "xc.h"      // XC general include file
2
#include  "stdint.h"    // Integer definition
3
#include  "stdbool.h"    // Boolean (true/false) definition
4
5
// CONFIG1
6
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
7
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
8
#pragma config PWRTE = ON       // Power-up Timer Enable (PWRT enabled)
9
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
10
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
11
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
12
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
13
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
14
#pragma config IESO = OFF       // Internal/External Switchover (Internal/External Switchover mode is disabled)
15
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
16
// CONFIG2
17
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
18
#pragma config PLLEN = ON       // PLL Enable (4x PLL enabled)
19
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
20
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
21
#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
22
#define  _XTAL_FREQ 16000000  // Set xtal frequency for time delays
23
24
#define ctrl RA5
25
#define data RA2
26
#define led RA0
27
/********************************************************/
28
main();
29
/********************************************************/
30
31
void initPorts(void)
32
{
33
// Initialize user ports and peripherals.
34
//      OSCCON=0b11110010; //8 MHz
35
        OSCCON=0b11111010; //16 MHz
36
//      OPTION_REG = 0b01010111;  // PORTB pull-ups on, TMR0 interal div 256
37
// Set port directions for I/O pins: 0 = Output, 1 = Input
38
  TRISA = 0b00000000;  // Set runLED, IR LEDs as outputs in PORTA
39
        PORTA = 0;        // Turn all PORTA outputs off
40
}
41
42
/*==============================================================================
43
  Main program loop. The main() function is called first by the compiler.
44
==============================================================================*/
45
int main(void)
46
{
47
  initPorts();
48
        ctrl=0;
49
  while(1)
50
  {
51
            led=1;
52
            pulse(); //Durchlaufzeit 30ms
53
            led=0;  //PORTA0=0  wird schon nach 3us statt nach 30ms ausgeführt!
54
            __delay_ms(1000);
55
  }
56
}
57
58
int pulse(void)
59
{int i=1;
60
    while(i!=30)
61
    {
62
    data=1;
63
    __delay_us(500);
64
    data=0;
65
    __delay_us(500);
66
                i++;
67
    }
68
}

von Witkatz :. (wit)


Lesenswert?

Was mir auffällt:
1. main sollte man nich aufrufen, du solltest den Aufruf main() löschen. 
Die Definition genügt, der Linker legt die Funktion auf Startadresse, 
auf die der Mikrocontroller nach Reset springt. In XC8 User's Guide wird 
folgende Definition ohne Rückgabeparameter vorgeschlagen:
1
void main(void){
2
...
3
}

2. Es fehlt die Deklaration der Funktion pulse vor dem Aufruf. Ich 
vermute, dass das die wichtigste Ursache des Problems ist. Der Compiler 
kennt die Funktion pulse in main noch nicht und ruft eine implizit 
definierte leere Funktion auf. Also bitte vor main die Deklaration 
einfügen
1
int pulse(void);

3. In der Funktion pulse fehlt ein return mit int-Parameter. Wenn die 
Funktion nichts zurückgibt, dann sollte sie als void pulse(void); 
deklariert (und die Definition angepasst) werden.

4. Der Compiler dürfte für diesen Quellcode einige Warnungen zu den o.g. 
Punkten rausgeben. Wurden die Compilerwarnungen ignoriert oder 
unterdrückt?

Gruß
witkatz

: Bearbeitet durch User
von TK (Gast)


Lesenswert?

Wie stehen denn die ADCON Register? Gibt es da nicht einen Konflikt mit 
RA0?
Dann gab es - glaube ich - auch noch ein CMCON Register, das man 
vorbelegen muss.

Gruß
TK

von Witkatz :. (wit)


Lesenswert?

TK schrieb:
> ADCON Register? Gibt es da nicht einen Konflikt mit
> RA0

Stimmt, bei 12F1840 ist es das ANSEL Register. Nach dem Reset sin die 
PORTA Pins als analoge Pins konfiguriert.

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

rolf77 schrieb:
> #define  _XTAL_FREQ 16000000  // Set xtal frequency for time delays

Das sollte auch UNBEDINGT, mit dem tatsächlichem Takt übereinstimmen. 
Sonst funzen die Delays nicht wie gewünscht!
(Hab's nicht überprüft!)

: Bearbeitet durch User
von rolf77 (Gast)


Lesenswert?

Habe die Funktionen jetzt deklariert (Warnung übersehen), main-Aufruf 
entfernt, ADCON initialisiert, aber die LED "leuchtet" immer noch nur 
für 3us....
1
// CONFIG1
2
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
3
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
4
#pragma config PWRTE = ON       // Power-up Timer Enable (PWRT enabled)
5
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
6
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
7
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
8
#pragma config BOREN = OFF      // Brown-out Reset Enable (Brown-out Reset disabled)
9
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
10
#pragma config IESO = OFF       // Internal/External Switchover (Internal/External Switchover mode is disabled)
11
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
12
// CONFIG2
13
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
14
#pragma config PLLEN = ON       // PLL Enable (4x PLL enabled)
15
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
16
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
17
#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
18
19
#include    "xc.h"    // XC general include file
20
#include    "stdint.h"    // Integer definition
21
#include    "stdbool.h"    // Boolean (true/false) definition
22
23
#define  _XTAL_FREQ 16000000  // Set xtal frequency for time delays
24
#define ctrl RA5
25
#define data RA2
26
#define led RA0
27
28
void initPorts(void);
29
void main(void);
30
void pulse(void);
31
/********************************************************/
32
//main();
33
/********************************************************/
34
/*==============================================================================
35
  Main program loop. The main() function is called first by the compiler.
36
==============================================================================*/
37
void main(void)
38
{
39
  initPorts();
40
        ctrl=0;
41
        while(1)
42
  {
43
            led=1;
44
            pulse(); //gemessene Durchlaufzeit 30ms
45
            led=0;  //wird schon nach 3us statt nach 30ms ausgeführt!
46
            __delay_ms(1000);
47
  }
48
}
49
50
//Funktionen
51
52
void initPorts(void)
53
{
54
// Initialize user ports and peripherals.
55
//      OSCCON=0b11110010; //8 MHz
56
        OSCCON=0b11111010; //16 MHz
57
        ADCON0=0b00001100;  //AD an RA4, AD aus
58
// Set port directions for I/O pins: 0 = Output, 1 = Input
59
  TRISA = 0b00000000;  // Set runLED, IR LEDs as outputs in PORTA
60
//      TRISA0=0;
61
//      TRISA1=0;
62
        PORTA = 0;        // Turn all PORTA outputs off
63
}
64
65
void pulse(void)
66
{int i=1;
67
    while(i!=30)
68
    {
69
    data=1;
70
    __delay_us(500);
71
    data=0;
72
    __delay_us(500);
73
                i++;
74
    }
75
}

1
   125  0FEE                       ;# 
2
   126  0FEF                       ;# 
3
   127  000C                     _PORTA  set  12
4
   128  0060                     _RA0  set  96
5
   129  0062                     _RA2  set  98
6
   130  0065                     _RA5  set  101
7
   131  009D                     _ADCON0  set  157
8
   132  0099                     _OSCCON  set  153
9
   133  008C                     _TRISA  set  140
10
   134                           
11
   135                             psect  text0
12
   136  0000                     __ptext0:  
13
   137                           ; #config settings
14
   138                           
15
   139                           
16
   140                           ;psect for function _initPorts
17
   141  0000                     
18
   142                             psect  cinit
19
   143  07FD                     start_initialization:  
20
   144  07FD                     __initialization:  
21
   145  07FD                     end_of_initialization:  
22
   146                           ;End of C runtime variable initialization code
23
   147                           
24
   148  07FD                     __end_of__initialization:  
25
   149  07FD  0020                 movlb  0
26
   150  07FE  3187  2FBF           ljmp  _main  ;jump to C main() function
27
   151                           
28
   152                             psect  cstackCOMMON
29
   153  0070                     __pcstackCOMMON:  
30
   154  0070                     ?_initPorts:  
31
   155  0070                     ??_initPorts:  
32
   156                           ; 0 bytes @ 0x0
33
   157                           
34
   158  0070                     ?_pulse:  
35
   159                           ; 0 bytes @ 0x0
36
   160                           
37
   161  0070                     ??_pulse:  
38
   162                           ; 0 bytes @ 0x0
39
   163                           
40
   164  0070                     ?_main:  
41
   165                           ; 0 bytes @ 0x0
42
   166                           
43
   167                           
44
   168                           ; 0 bytes @ 0x0
45
   169  0070                       ds  2
46
   170  0072                     pulse@i:  
47
   171                           
48
   172                           ; 2 bytes @ 0x2
49
   173  0072                       ds  2
50
   174  0074                     ??_main:  
51
   175                           
52
   176                           ; 0 bytes @ 0x4
53
   177  0074                       ds  3
54
   178                           
55
   179                             psect  maintext
56
   180  07BF                     __pmaintext:  
57
   181 ;;
58
   182 ;;Main: autosize = 0, tempsize = 3, incstack = 0, save=0
59
   183 ;;
60
   184 ;; *************** function _main *****************
61
   185 ;; Defined at:
62
   186 ;;    line 41 in file "main.c"
63
   187 ;; Parameters:    Size  Location     Type
64
   188 ;;    None
65
   189 ;; Auto vars:     Size  Location     Type
66
   190 ;;    None
67
   191 ;; Return value:  Size  Location     Type
68
   192 ;;    None               void
69
   193 ;; Registers used:
70
   194 ;;    wreg, status,2, status,0, pclath, cstack
71
   195 ;; Tracked objects:
72
   196 ;;    On entry : B1F/0
73
   197 ;;    On exit  : 0/0
74
   198 ;;    Unchanged: 0/0
75
   199 ;; Data sizes:     COMMON   BANK0   BANK1   BANK2
76
   200 ;;      Params:         0       0       0       0
77
   201 ;;      Locals:         0       0       0       0
78
   202 ;;      Temps:          3       0       0       0
79
   203 ;;      Totals:         3       0       0       0
80
   204 ;;Total ram usage:        3 bytes
81
   205 ;; Hardware stack levels required when called:    1
82
   206 ;; This function calls:
83
   207 ;;    _initPorts
84
   208 ;;    _pulse
85
   209 ;; This function is called by:
86
   210 ;;    Startup code after reset
87
   211 ;; This function uses a non-reentrant model
88
   212 ;;
89
   213                           
90
   214                           
91
   215                           ;psect for function _main
92
   216  07BF                     _main:  
93
   217                           
94
   218                           ;main.c: 43: initPorts();
95
   219                           
96
   220                           ;incstack = 0
97
   221                           ; Regs used in _main: [wreg+status,2+status,0+pclath+cstack]
98
   222  07BF  3187  27B6  3187     fcall  _initPorts
99
   223                           
100
   224                           ;main.c: 44: RA5=0;
101
   225  07C2  0020                 movlb  0  ; select bank0
102
   226  07C3  128C                 bcf  12,5  ;volatile
103
   227  07C4                     l513:  
104
   228                           ;main.c: 45: while(1)
105
   229                           
106
   230                           
107
   231                           ;main.c: 46: {
108
   232                           ;main.c: 47: RA0=1;
109
   233  07C4  0020                 movlb  0  ; select bank0
110
   234  07C5  140C                 bsf  12,0  ;volatile
111
   235                           
112
   236                           ;main.c: 48: pulse();
113
   237  07C6  3187  27D9  3187     fcall  _pulse
114
   238                           
115
   239                           ;main.c: 49: RA0=0;
116
   240  07C9  0020                 movlb  0  ; select bank0
117
   241  07CA  100C                 bcf  12,0  ;volatile
118
   242                           
119
   243                           ;main.c: 50: _delay((unsigned long)((1000)*(16000000/4000.0)));
120
   244  07CB  3015                 movlw  21
121
   245  07CC  00F6                 movwf  ??_main+2
122
   246  07CD  304B                 movlw  75
123
   247  07CE  00F5                 movwf  ??_main+1
124
   248  07CF  30D1                 movlw  209
125
   249  07D0  00F4                 movwf  ??_main
126
   250  07D1                     u27:  
127
   251  07D1  0BF4                 decfsz  ??_main,f
128
   252  07D2  2FD1                 goto  u27
129
   253  07D3  0BF5                 decfsz  ??_main+1,f
130
   254  07D4  2FD1                 goto  u27
131
   255  07D5  0BF6                 decfsz  ??_main+2,f
132
   256  07D6  2FD1                 goto  u27
133
   257  07D7  0000                 nop
134
   258  07D8  2FC4                 goto  l513
135
   259  07D9                     __end_of_main:  
136
   260                           
137
   261                             psect  text1
138
   262  07D9                     __ptext1:  
139
   263 ;; *************** function _pulse *****************
140
   264 ;; Defined at:
141
   265 ;;    line 69 in file "main.c"
142
   266 ;; Parameters:    Size  Location     Type
143
   267 ;;    None
144
   268 ;; Auto vars:     Size  Location     Type
145
   269 ;;  i               2    2[COMMON] int 
146
   270 ;; Return value:  Size  Location     Type
147
   271 ;;    None               void
148
   272 ;; Registers used:
149
   273 ;;    wreg, status,2, status,0
150
   274 ;; Tracked objects:
151
   275 ;;    On entry : 0/0
152
   276 ;;    On exit  : 0/0
153
   277 ;;    Unchanged: 0/0
154
   278 ;; Data sizes:     COMMON   BANK0   BANK1   BANK2
155
   279 ;;      Params:         0       0       0       0
156
   280 ;;      Locals:         2       0       0       0
157
   281 ;;      Temps:          2       0       0       0
158
   282 ;;      Totals:         4       0       0       0
159
   283 ;;Total ram usage:        4 bytes
160
   284 ;; Hardware stack levels used:    1
161
   285 ;; This function calls:
162
   286 ;;    Nothing
163
   287 ;; This function is called by:
164
   288 ;;    _main
165
   289 ;; This function uses a non-reentrant model
166
   290 ;;
167
   291                           
168
   292                           
169
   293                           ;psect for function _pulse
170
   294  07D9                     _pulse:  
171
   295                           
172
   296                           ;incstack = 0
173
   297                           ; Regs used in _pulse: [wreg+status,2+status,0]
174
   298  07D9  3001                 movlw  1
175
   299  07DA  00F2                 movwf  pulse@i
176
   300  07DB  3000                 movlw  0
177
   301  07DC  00F3                 movwf  pulse@i+1
178
   302  07DD                     l507:  
179
   303                           ;main.c: 71: while(i!=30)
180
   304                           
181
   305  07DD  301E                 movlw  30
182
   306  07DE  0672                 xorwf  pulse@i,w
183
   307  07DF  0473                 iorwf  pulse@i+1,w
184
   308  07E0  1903                 btfsc  3,2
185
   309  07E1  0008                 return
186
   310                           
187
   311                           ;main.c: 72: {
188
   312                           ;main.c: 73: RA2=1;
189
   313  07E2  0020                 movlb  0  ; select bank0
190
   314  07E3  150C                 bsf  12,2  ;volatile
191
   315                           
192
   316                           ;main.c: 74: _delay((unsigned long)((500)*(16000000/4000000.0)));
193
   317  07E4  3003                 movlw  3
194
   318  07E5  00F1                 movwf  ??_pulse+1
195
   319  07E6  3097                 movlw  151
196
   320  07E7  00F0                 movwf  ??_pulse
197
   321  07E8                     u37:  
198
   322  07E8  0BF0                 decfsz  ??_pulse,f
199
   323  07E9  2FE8                 goto  u37
200
   324  07EA  0BF1                 decfsz  ??_pulse+1,f
201
   325  07EB  2FE8                 goto  u37
202
   326  07EC  3200                 nop2
203
   327                           
204
   328                           ;main.c: 75: RA2=0;
205
   329  07ED  0020                 movlb  0  ; select bank0
206
   330  07EE  110C                 bcf  12,2  ;volatile
207
   331                           
208
   332                           ;main.c: 76: _delay((unsigned long)((500)*(16000000/4000000.0)));
209
   333  07EF  3003                 movlw  3
210
   334  07F0  00F1                 movwf  ??_pulse+1
211
   335  07F1  3097                 movlw  151
212
   336  07F2  00F0                 movwf  ??_pulse
213
   337  07F3                     u47:  
214
   338  07F3  0BF0                 decfsz  ??_pulse,f
215
   339  07F4  2FF3                 goto  u47
216
   340  07F5  0BF1                 decfsz  ??_pulse+1,f
217
   341  07F6  2FF3                 goto  u47
218
   342  07F7  3200                 nop2
219
   343                           
220
   344                           ;main.c: 77: i++;
221
   345  07F8  3001                 movlw  1
222
   346  07F9  07F2                 addwf  pulse@i,f
223
   347  07FA  3000                 movlw  0
224
   348  07FB  3DF3                 addwfc  pulse@i+1,f
225
   349  07FC  2FDD                 goto  l507
226
   350  07FD                     __end_of_pulse:  
227
   351                           
228
   352                             psect  text2
229
   353  07B6                     __ptext2:  
230
   354 ;; *************** function _initPorts *****************
231
   355 ;; Defined at:
232
   356 ;;    line 56 in file "main.c"
233
   357 ;; Parameters:    Size  Location     Type
234
   358 ;;    None
235
   359 ;; Auto vars:     Size  Location     Type
236
   360 ;;    None
237
   361 ;; Return value:  Size  Location     Type
238
   362 ;;    None               void
239
   363 ;; Registers used:
240
   364 ;;    wreg, status,2
241
   365 ;; Tracked objects:
242
   366 ;;    On entry : 0/0
243
   367 ;;    On exit  : 0/0
244
   368 ;;    Unchanged: 0/0
245
   369 ;; Data sizes:     COMMON   BANK0   BANK1   BANK2
246
   370 ;;      Params:         0       0       0       0
247
   371 ;;      Locals:         0       0       0       0
248
   372 ;;      Temps:          0       0       0       0
249
   373 ;;      Totals:         0       0       0       0
250
   374 ;;Total ram usage:        0 bytes
251
   375 ;; Hardware stack levels used:    1
252
   376 ;; This function calls:
253
   377 ;;    Nothing
254
   378 ;; This function is called by:
255
   379 ;;    _main
256
   380 ;; This function uses a non-reentrant model
257
   381 ;;
258
   382                           
259
   383                           
260
   384                           ;psect for function _initPorts
261
   385  07B6                     _initPorts:  
262
   386                           
263
   387                           ;main.c: 60: OSCCON=0b11111010;
264
   388                           
265
   389                           ;incstack = 0
266
   390                           ; Regs used in _initPorts: [wreg+status,2]
267
   391  07B6  30FA                 movlw  250
268
   392  07B7  0021                 movlb  1  ; select bank1
269
   393  07B8  0099                 movwf  25  ;volatile
270
   394                           
271
   395                           ;main.c: 61: ADCON0=0b00001100;
272
   396  07B9  300C                 movlw  12
273
   397  07BA  009D                 movwf  29  ;volatile
274
   398                           
275
   399                           ;main.c: 63: TRISA = 0b00000000;
276
   400  07BB  018C                 clrf  12  ;volatile
277
   401                           
278
   402                           ;main.c: 66: PORTA = 0;
279
   403  07BC  0020                 movlb  0  ; select bank0
280
   404  07BD  018C                 clrf  12  ;volatile
281
   405  07BE  0008                 return
282
   406  07BF                     __end_of_initPorts:  
283
   407  007E                     btemp  set  126  ;btemp
284
   408  007E                     wtemp  set  126
285
   409  007E                     wtemp0  set  126
286
   410  0080                     wtemp1  set  128
287
   411  0082                     wtemp2  set  130
288
   412  0084                     wtemp3  set  132
289
   413  0086                     wtemp4  set  134
290
   414  0088                     wtemp5  set  136
291
   415  007F                     wtemp6  set  127
292
   416  007E                     ttemp  set  126
293
   417  007E                     ttemp0  set  126
294
   418  0081                     ttemp1  set  129
295
   419  0084                     ttemp2  set  132
296
   420  0087                     ttemp3  set  135
297
   421  007F                     ttemp4  set  127
298
   422  007E                     ltemp  set  126
299
   423  007E                     ltemp0  set  126
300
   424  0082                     ltemp1  set  130
301
   425  0086                     ltemp2  set  134
302
   426  0080                     ltemp3  set  128


Gruß
Rolf

von rolf77 (Gast)


Lesenswert?

Die Delay-Zeiten stimmen genau. Habs mit nem Oszi gecheckt..
Auch die 3us sind gemessen.

von Witkatz :. (wit)


Lesenswert?

rolf77 schrieb:
> Habe die Funktionen jetzt deklariert (Warnung übersehen), main-Aufruf
> entfernt, ADCON initialisiert, aber die LED "leuchtet" immer noch nur
> für 3us....

und ANSEL ignoriert, also im Datenblatt im Kapitel zu PORTA 
wahrschenlich gar nicht rein geguckt

von rolf77 (Gast)


Lesenswert?

Ja, man muss wirklich alles lesen... ANSELA=0 dann funktionierts, wie es 
soll.

Danke
Rolf

von Witkatz :. (wit)


Lesenswert?

Du schreibst auf RA0 in main und das funktioniert noch, weil TRIS 
Vorrang vor ANSEL hat. Aber in pulse schreibst du auf RA2, da wird RA0 
(wegen der  Konfiguration als Analogpin) als 0 gelesen und durch 
Read-Modify-Write auf 0 geschrieben. Soviel zu Erklärung.

Würdest du auf LATA statt auf PORTA schreiben, könnte dein Programm 
vielleicht sogar trotz fehlerhaftem ANSEL funktionieren.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.