TimoH
05.12.2010, 18:39
Hallo!
Ich bin neu hier und auch neu beim PIC-Programmieren. Seit einigen Tagen beschäftige ich mich mit dem PIC 12F675. Zum Brennen habe ich ein PICkit2. Die Sprut-Seite kenne ich auch schon und habe dort schon viel gelesen. Ebenso versuche ich mich mit dem Datenblatt zu beschäftigen.
Ich habe jetzt ein Problem, bei dem ich nicht weiterkomme. Vielleicht kann jemand aus dem Forum mir ein wenig auf die Sprünge helfen.
Ich habe am PIC an GPIO0 eine LED mit Vorwiderstand angeschlossen und möchte die zunächst einmal nur zum Blinken bringen. Als Warteschleife für jeweils 0,5 Sekunden habe ich einen Codeschnipsel aus http://www.piclist.com/techref/piclist/codegen/delay.htm
Ich verwende den internen Oszillator.
Jetzt habe ich mir das folgende Programm zusammengestrickt:
list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions
__CONFIG _CP_OFF&_CPD_OFF&_BODEN_OFF&_MCLRE_OFF&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT
cblock 0x20
d1
d2
d3
endc
;************************************************* *********************
ORG 0x000 ; processor reset vector
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
bcf STATUS,RP0 ; set file register bank to 0
bsf STATUS,RP0
bcf ANSEL,ANS0
bcf TRISIO,GPIO0
Anfang bcf STATUS,RP0
movf GPIO,0
xorlw 0x01
movwf GPIO
;499994 cycles
movlw 0x03
movwf d1
movlw 0x18
movwf d2
movlw 0x02
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;6 cycles
goto $+1
goto $+1
goto $+1
goto Anfang
END
Mit dem XORLW nach der Marke "Anfang" will ich einfach bei jedem Durchlauf das Bit vom GPIO0 ändern. Das klappt aber seltsamerweise nicht. Hat da vielleicht jemand eine Erklärung dafür?
Ich bin neu hier und auch neu beim PIC-Programmieren. Seit einigen Tagen beschäftige ich mich mit dem PIC 12F675. Zum Brennen habe ich ein PICkit2. Die Sprut-Seite kenne ich auch schon und habe dort schon viel gelesen. Ebenso versuche ich mich mit dem Datenblatt zu beschäftigen.
Ich habe jetzt ein Problem, bei dem ich nicht weiterkomme. Vielleicht kann jemand aus dem Forum mir ein wenig auf die Sprünge helfen.
Ich habe am PIC an GPIO0 eine LED mit Vorwiderstand angeschlossen und möchte die zunächst einmal nur zum Blinken bringen. Als Warteschleife für jeweils 0,5 Sekunden habe ich einen Codeschnipsel aus http://www.piclist.com/techref/piclist/codegen/delay.htm
Ich verwende den internen Oszillator.
Jetzt habe ich mir das folgende Programm zusammengestrickt:
list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions
__CONFIG _CP_OFF&_CPD_OFF&_BODEN_OFF&_MCLRE_OFF&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT
cblock 0x20
d1
d2
d3
endc
;************************************************* *********************
ORG 0x000 ; processor reset vector
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
bcf STATUS,RP0 ; set file register bank to 0
bsf STATUS,RP0
bcf ANSEL,ANS0
bcf TRISIO,GPIO0
Anfang bcf STATUS,RP0
movf GPIO,0
xorlw 0x01
movwf GPIO
;499994 cycles
movlw 0x03
movwf d1
movlw 0x18
movwf d2
movlw 0x02
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;6 cycles
goto $+1
goto $+1
goto $+1
goto Anfang
END
Mit dem XORLW nach der Marke "Anfang" will ich einfach bei jedem Durchlauf das Bit vom GPIO0 ändern. Das klappt aber seltsamerweise nicht. Hat da vielleicht jemand eine Erklärung dafür?