Forum: Mikrocontroller und Digitale Elektronik Hile beim PIC12F629


von Franz (Gast)


Lesenswert?

Hallo habe da eine Frage ich bringe einfach das unten stehende Programm 
nicht zu laufen und zwar am GPIO 0-3 ist ein BCD Schalter den ich 
Abfrage und dann denn Wert in die Zeitschleife reinschreibe und dann 
soll am GPIO5 für diese Dauer ein Signal ausgegeben werden, ein Signal 
kommt auch aber die Dauer verändert sich nicht wenn ich den Schalter 
drehe.

Ich bitte um eure Hilfe.
1
List      p=12f629           
2
  #include <p12f629.inc>        
3
4
  
5
6
__CONFIG  _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT & _BODEN_OFF
7
8
  
9
10
    bsf     STATUS, RP0  
11
    call    0x3FF
12
    movwf   OSCCAL
13
    bcf     STATUS, RP0  
14
15
    bsf     STATUS,RP0        
16
    movlw  d'255'
17
    movwf  CMCON
18
    movlw  b'00011111'
19
    movwf  TRISIO
20
    bcf     STATUS,RP0        
21
  
22
    clrf  GPIO
23
    clrf  20h
24
25
26
Start:  movf   GPIO,w
27
    movwf   30h
28
    movlw   b'00001111'
29
    andwf   30h,f
30
    swapf   30h,w
31
    call   Geschwindigkeit
32
    movwf   20h
33
    bsf    GPIO,5
34
    call  Zeit
35
    bcf    GPIO,5
36
  
37
    
38
  
39
    
40
Geschwindigkeit:   addwf PCL,f
41
    retlw d'16'
42
    retlw d'32'
43
    retlw d'48'
44
    retlw d'64'
45
    retlw d'80'
46
    retlw d'96'
47
    retlw d'112'
48
    retlw d'128'
49
    retlw d'144'
50
    retlw d'160'
51
    retlw d'176'
52
    retlw d'192'
53
    retlw d'208'
54
    retlw d'224'
55
    retlw d'240'
56
    retlw d'255'
57
      
58
    
59
60
61
    
62
Zeit:  movlw  d'255'
63
       movwf  26h
64
l2:    movf  20h,w
65
       movwf  27h
66
l1:    nop
67
       nop
68
       nop
69
       nop
70
       nop   
71
       nop
72
       nop
73
       decfsz  27h,f
74
       goto  l1
75
       decfsz  26h,f
76
       goto  l2
77
       return
78
79
       end

: Verschoben durch Admin
von ich (Gast)


Lesenswert?

Mit
movlw   b'00001111'
andwf   30h,f

maskierst du ja die ersten 4 bit. Aber warum drehst du die danach mit
swapf   30h,w
??

Wenn du in BCD eine 1 hast, hast du 00000001 am Port und nach dem 
Maskieren. Nach swapf hast du 00010000 und wenn du das auf den PCL 
addierst, bist du hinter deiner Liste an retlw's... Kommentier mal die 
Zeile mit swapf aus und probiers nochmal.

von Franz (Gast)


Lesenswert?

Nein immer noch das gleiche Problem immer die gleiche dauer!!

von cdk59 (Gast)


Lesenswert?

Nach "bcf    GPIO,5" läuft dein Programm weiter in das U.Progr. 
"Geschwindigkeit", dort wird das W-Register (Inhalt???) zum PCH addiert 
und landet irgendwo!!

Füge "goto Start" nach "bcf    GPIO,5" ein, dann wird der BCD-Schalter 
laufen abgefragt und nicht nur beim 1. Durchlauf!

von Franz (Gast)


Lesenswert?

Habe ich gemacht immer noch das gleiche wie vorhin.

von Franz (Gast)


Lesenswert?

kann es sein das ich in der konfiguration einen Fehler habe ich bitte um 
hilfe!!!

von cdk59 (Gast)


Lesenswert?

Scheint so!
CMCON ist in Bank0!!!...also

bcf     STATUS,RP0   ;bank0
clrf  GPIO
movlw  B'00000111' ;setzt GPIO auf Digital IO
movwf  CMCON
bsf     STATUS,RP0   ;bank1
movlw   b'00011111'
movwf  TRISIO
bcf     STATUS,RP0

von Franz (Gast)


Lesenswert?

Also egal welche änderung ich mache die länge des Signals bleibt immer 
die gleiche auch vom schalter kommen die signale am pic an habe ich 
vieleicht noch was übersehen?

von Lehrmann M. (ubimbo)


Lesenswert?

Franz schrieb:
> habe ich
> vieleicht noch was übersehen?

Du kannst noch kein Assembler - das ist alles. Du hast die vorliegende 
Programmstruktur nicht verstanden und weißt nicht was dein Programm 
macht. Das ist das Problem. Entweder lernst du eine (Hoch)sprache die 
einfacher ist und nicht so viel Abstraktionsvermögen erfordert oder 
machst ein vernünftiges Assemblertutorial für PIC.

von Franz (Gast)


Lesenswert?

Das mit dem Swap ist ein Fehler. Ein Weiterer ist die zumindest gedachte
zeitabhängige Delayroutine mit 0xff zu überschreiben und dadurch jede
configurierte Zeit zunichte zu machen.
Probier mal call Zeit+1 anstelle von call Zeit, aber vorher den
swapf 30h, w in ein mov 30h,w  korrigieren, sonst funktioniert es auch 
nicht.

von Franz (Gast)


Lesenswert?

Das ist mal ne Hilfe danke danke hat super funktioniert!!!!

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.