PIC16F1783 - Problem mit Delayfunktion

OP #3175464
Lesenswert?

Hallo,

Ich programmiere seit längerem PIC Mikrocontroller und seit kurzem auch 
den Typ 16F1783.

Ich habe nun folgendes Problem.
Das Programm sollte nur ein Rechtecksignal an PortB ausgeben,
und dafür habe ich eine kleine Delayfunktion geschrieben:
1
#include <pic14/pic16f1783.h>
2

3
unsigned int __at (_CONFIG1) __CONFIG1 = _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF & _CP_OFF & _CLKOUTEN_OFF;
4
unsigned int __at (_CONFIG2) __CONFIG2 = _PLLEN_ON & _LVP_OFF;
5

6
void delay(void)
7
{
8
    __asm
9

10
    cblock
11
    d1
12
    d2
13
    endc
14

15
    //ca 8000 Zyklen:
16
    movlw 0x3F
17
    movwf d1
18
    movlw 0x07
19
    movwf d2
20

21
    decfsz d1,1
22
    goto $+2
23
    decfsz d2,1
24
    goto $-3
25

26
    __endasm;
27
}
28

29
void main(void)
30
{
31
    OSCCON=0xF8; // INTOSC
32

33
    TRISB=0x00;
34
    LATB=0x00;
35

36
    while(1)
37
    {
38
        LATB=~LATB;
39
        delay();
40
    }
41
}

Wenn ich das Programm jedoch in den PIC brenne, ist PORTB auf 0xFF und 
es ändert sich nichts. Es scheint als würde das Programm in der 
Delayfunktion hängen bleiben.
Wenn ich jedoch das Programm geringfügig ändere und die zweite Schleife 
in ASM entferne:
1
#include <pic14/pic16f1783.h>
2

3
unsigned int __at (_CONFIG1) __CONFIG1 = _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF & _CP_OFF & _CLKOUTEN_OFF;
4
unsigned int __at (_CONFIG2) __CONFIG2 = _PLLEN_ON & _LVP_OFF;
5

6
void delay(void)
7
{
8
    __asm
9

10
    cblock
11
    d1
12
    d2
13
    endc
14

15
    movlw 0x3F
16
    movwf d1
17
    movlw 0x07
18
    movwf d2
19

20
    decfsz d1,1
21
    goto $-1
22

23
    __endasm;
24
}
25

26
void main(void)
27
{
28
    OSCCON=0xF8; // INTOSC
29

30
    TRISB=0x00;
31
    LATB=0x00;
32

33
    while(1)
34
    {
35
        LATB=~LATB;
36
        delay();
37
    }
38
}

funktioniert das Programm problemlos und es entsteht eine 
Rechteckfrequenz an PORTB. (Weiters kann ich auch sicherstellen dass der 
uC mit dem internen Oszillator von 32MHz läuft)

Ich weiss jedoch nicht wo der Fehler in der Delayfunktion liegt, da 
dieselbe Funktion problemlos bei anderen Typen funktioniert.
Weiters habe ich das Programm an mehreren 16F1783 getestet, und 
dasgleiche Ergebnis bekommen.
Hoffe ihr könnt mir helfen.

Zur Info:
Compiler: sdcc v3.2
Brennter: sprut Brenner8 v0.17

mfg
OP #3176549
Lesenswert?

hm, hatte bis jetzt eig keine Probleme damit...

Habe jedoch als Versuch die 2 Programme in ASM geschrieben und
mit MPLAB compiliert und kam zum gleichen Ergebnis.

Aber vielen Dank für deine Antwort ;)

mfg

Edit:
Könnte vl jemand der ebenfals den uC-Typ programmiert
das Programm compilieren/testen und das HEX-File vl uploadn?
Könnte nämlich sein das beim Brennen was schief geht.
Wäre echt dankbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren