Hallo Leute,
ich habe mir erstmalig einen PIC zugelegt und wollte als erstes eine LED
zum leuchten/blinken bringen - allerdings ohne Erfolgt. Der
Microcontroller gibt keine Lebenszeichen von sich.
Den PIC 12F675 an sich konnte ich fast problemlos mit meinem Programm
beschreiben, was ich auch nachträglich nochmal durch Lesen getestet
habe.
An der Beschaltung kann es eigentlich auch nicht liegen, hab den
Vorwiderstand mal rausgenommen und die Diode direkt an den PIN gesteckt
und wieder nichts.
Also entweder es liegt am PIC oder am Programm.
Ich hoffe jemand kann mir bei letzterem weiterhelfen, denn ich bin
verzweifelt :-&
Danke schonmal im Voraus!!!
LIST ;P=PIC12F675
NOLIST
#include <C:\PicProg2006\Include\p12f675.inc>
ORG 0 ;PIC's reset vector
BSF STATUS,RP0 ;Bank1
MOVWF OSCCAL ;Calibrate the Int RC osc
GOTO START ;Jump to START routine when boot
DELAY100MS BCF STATUS,RP0 ;Bank0
CLRW
MOVLW D'255'
MOVWF TMR0
;-----------------------------------------------------------------------
----------------
START CLRWDT ;Clear the watchdog a power up
MOVWF CMCON ;disable comparator
BSF STATUS,RP0 ;Bank1
MOVLW B'11111100' ;
MOVWF TRISIO ;GP0,GP1 = Outputs
CLRF ANSEL ;Digital I/O
LOOP BCF STATUS, RP0 ;Bank0
MOVLW B'11111100' ;
MOVWF GPIO ;GPIO0,GPIO1 = on
CALL DELAY100MS ;Wait for 100mS
CLRF GPIO ;Clear the LED
CALL DELAY100MS ;and wait again for 100mS
GOTO LOOP ;Do forever this loop....
END ;End of source code.
Hi,
so wie ich das sehe beschreibst du CMCON mit Nullen oder einem
zufälligem Wert
sollte eigendlich so in der Art aussehen
START CLRWDT ;Clear the watchdog a power up
MOVLW B'111' ; <- COMP = off
MOVWF CMCON
BSF STATUS,RP0 ;Bank1
MOVLW B'11111100' ;
MOVWF TRISIO ;GP0,GP1 = Outputs
CLRF ANSEL ;Digital I/O
BCF STATUS,RP0 ; Bank0 <- gleich zurückschalten, dann musst du das
nicht im UP
loop
MOVLW b'00000011'
MOVWF GPIO
call DELAY100MS
MOVLW b'00000000'
MOVWF GPIO
call DELAY100MS
goto loop
und aus dem unterprogramm kommst du nicht zurrück, sondern landest bei
Start aber ziehst keine 4000 ein:)
ich würde die Warteschleife in etwa so gestalten:
DELAY100MS
bcf INTCON,T0IF ;flag löschen
MOVLW D'255'
MOVWF TMR0
BTFSS INTCON,T0IF ;timer fertig?
goto $-1 ; nein warten
return ; ja, rücksprung
im Datenblatt ab seite 27 findest du noch Infos zum Timer 0, du wirst
sicher noch ein paar Einstellungen vornehmen müssen( Quelle, teiler
usw.)
Danke erstmal für die Hilfe!
Leider klappt es immer noch nicht und ich bin so langsam am verzweifeln,
versuche das jetzt schon seit gut zwei Wochen ...
Ich hab die Sache mit dem Zähler jetzt mal rausgenommen und bin dazu
übergegangen, einfach nur eine LED leuchten zu lassen aber es
funktioniert nicht. Hab die P12F675.inc - Datei im selben Ordner wie die
ASM - Datei, also müsste MPASM zumindest richtig compilieren, oder?
Vielleicht könnte mir ja mal jemand meinen Quellcode einfach nur in eine
HEX-Datei umwandeln, oder noch besser, irgendwer schickt mir ein
Programm in HEX-Code, das auf jeden Fall funktionieren sollte.
Hier mein Programm:
;LED-TEST
list P=12F675 ; Prozessor definieren
include "P12F675.inc" ; entsprechende .inc Datei für MPASM
nolist
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF &
_INTRC_OSC_NOCLKOUT
org 0x0000
call Init
goto Main
;-----------------------------------------------------------------------
Main
movlw b'00000011'
movwf GPIO
loop goto loop ; Endlosschleife
;-----------------------------------------------------------------------
-
Init clrf GPIO ; lösche Port
movlw b'111' ; COMP = off
movwf CMCON
bsf STATUS,RP0 ; auf Bank1 umschalten
clrf ANSEL ; GP0,1,2,4 von ADC auf digital
movlw b'11111100' ; GPIO 0,1 = Ausgänge
movwf TRISIO
bcf STATUS,RP0 ; auf Bank0 zurückschalten
return ; springe zurück zu Main
;-----------------------------------------------------------------------
-
end
Es klaaaaaaaaapt!!!
hab wieder die Raute vor dem include vergessen und damit wusste er ja
nix mit den Befehlen anzufangen. Es lag wohl bei meinen vorherigen
Versionen einfach immer daran, dass er die library also P12F675.inc
nicht gefunden hatte.
Danke nochmal für die vielen Ratschläge!
Also an alle, die sich wie ich mit Anfängerproblemen herumschlagen:
!!! Checken, ob Library sich auch dort befindet, wo man sie angibt !!!
!!! Raute nicht vergessen: #include "P..." !!!
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.