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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.