PIC16F1783 - Problem mit Delayfunktion

OP #3175464
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
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.
OP
Problem gelöst!

Es ist wie Teo anfangs vermutet hat, dass cblock Probleme macht.
cblock funktioniert anscheinend weder in C noch in ASM.
Hab nun die Variablen anders deklariert und es gab keine Probleme.

Vielen Dank für eure Hilfe, ganz besonders Teo :)

mfg
Gast
In ASM sollte es aber eigentlich keine Probleme machen?!


    cblock 0x20

was ich noch übersehen hatte, alles vorher is reserviert! (Datenblatt! 
kenn Deinen Typ nich wirklich)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.