Sida 9 av 9
Postat: 7 oktober 2007, 13:47:34
av sodjan
> Är den korrekt nu?
Fungerar det nu ?
Postat: 7 oktober 2007, 13:52:41
av basmicke
Har inte mplab ide på den här datorn är inte hemma än. Å det är inte min dator som jag sitter på. Lyckades bara hitta den demo filen, men hittade även assembel programmet och den funkade inte där, hittade 25 errors men jag kan kolla över den mer senare, å se om jag hittar dem. Vad som jag har gjort fel med andra ord.
Postat: 7 oktober 2007, 13:56:25
av sodjan
Postar du kod som du inte ens har testat själv ??
Postat: 7 oktober 2007, 20:27:42
av basmicke
Kod: Markera allt
processor pic16f267
include <P16F627.inc>
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
;==========================================================================
; Variable Definition
;==========================================================================
TIMER1 EQU H'20' ;Used in delay routine
TIMER2 EQU H'21' ; " " "
PATERN EQU H'22' ;Pattern data for effect's
ORG 0 ;Reset vector address
GOTO RESET ;goto RESET routine when boot.
; *********************************************
; * Example of a delay routine *
; *********************************************
DELAY_ROUTINE MOVLW D'255' ;54 Generate approx 10mS delay at 4Mhz CLK
MOVWF TIMER2
DEL_LOOP1 MOVLW D'255' ;60
MOVWF TIMER1
DEL_LOOP2 DECFSZ TIMER1,F
GOTO DEL_LOOP2
DECFSZ TIMER2,F
GOTO DEL_LOOP1
RETURN
; **********************************
; ** RESET : main boot routine **
; **********************************
RESET MOVLW B'00000111' ;Disable Comparator module's
MOVWF CMCON
;
BANKSEL 0006 ;Switch to register bank 1
;Disable pull-ups
;INT on rising edge
;TMR0 to CLKOUT
;TMR0 Incr low2high trans.
;Prescaler assign to Timer0
;Prescaler rate is 1:256
MOVLW B'11010111' ;Set PIC options (See datasheet).
MOVWF OPTION_REG ;Write the OPTION register.
;
CLRF INTCON ;Disable interrupts
MOVLW B'11000000'
MOVWF TRISB ;RB7 & RB6 are inputs.
;RB5...RB0 are outputs.
MOVLW B'11111111' ;all RA ports are inputs
MOVWF TRISA
BANKSEL 0005 ;Switch Back to reg. Bank 0
CLRF PORTB
;
EFFECT_1 MOVLW B'00000001' ;Activate LD1 (RB0)
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000010' ;Activate LD2 (RB1)
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00000100' ;Activate LD3 (RB2)
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00001000' ;Activate LD4 (RB3)
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00010000' ;Activate LD5 (RB4)
MOVWF PORTB
CALL DELAY_ROUTINE
MOVLW B'00100000' ;Activate LD6 (RB5)
MOVWF PORTB
CALL DELAY_ROUTINE
GOTO EFFECT_1
END
Så nu visar det inga fel när jag assembla det så nu borde den vara korrekt.
Är det ngt mer med den koden som är "fel"?
Postat: 7 oktober 2007, 20:34:38
av björn
Att skriva kod för en microprocessor utan att kunna testa mot hårdvaran är inget *jag* skulle göra eller rekkomendera.
Visst, man kan ju simulera i mplab men även det är ganska segjobbat jämfört med test IRL.
Jag förstår inte ens hur du kan försöka lära dig detta utan att kunna testa det ordentligt, hur skall du hitta eventuella fel om du skriver all kod utan att testa någon gång på vägen?
Postat: 7 oktober 2007, 22:32:16
av sodjan
> Så nu visar det inga fel när jag assembla det
Fint !
Och fungerar den ??
Postat: 8 oktober 2007, 01:26:24
av Kaggen
> Är det ngt mer med den koden som är "fel"?
Det enda jag reflekterar över är att banksel används lite underligt. Jag använder inte banksel på det viset, men det kanske funkar. Sedan är processor definitionen på första raden fel. Det står "pic16f267" jag antar att du igentligen menar "pic16f627".
Om det sedan fungerar får du prova själv, ingen utvecklare med självbevarelsedrift skulle med säkerhet konstatera att din kod kommer att funka utan problem bara genom att läsa den, oavsett hur många gånger man läst och kontrollerat koden. Det är bättre att be om hjälp att läsa koden efter det du konstaterat att det *inte* funkar, och tillhandahållit en noggran utförlig felbeskrivning för den som skall lägga tid på detta.
Och redan nu kan jag ju ge exempel på hur en felbeskrivning inte ska se ut och hur den bör se ut (enligt mitt tycke):
Hur en felbeskriving INTE skall se ut
Det funkar inte, vad är felet? (bifogar 2000 rader okommenterad kod, alternativt ingenting)
Hur en felbeskrivning BÖR se ut
Jag räknade med att LED1 skulle lysa i 10 ms och vara släckt i 20ms, men den lyser i 40 ms och är släckt i 10 ms. Det här tror jag är de relevanta avsnitten i min kod (bifogar väl utvalda ej skrymmande stycken av kod där felet tros ligga). I ditt fall här är dock koden så liten att det inte är mycket att stycka upp.
För att kunna hjälpa behöver man veta:
1. Vad förväntade du dig skulle hända?
2. Vad hände istället?
Postat: 8 oktober 2007, 10:33:47
av sodjan
> Sedan är processor definitionen på första raden fel. Det står "pic16f267"
Jag har bestämt för mig att MPLAB säger ifrån om "processor" inte
stämmer överens med "device" inställningen i menyerna...
Nä, basmicke får nog göra sin hemläxa lite bättre och återkomma då det
finns mer att gå på. Att korrekturläsa källkod finns ingen anledning till,
det gör MPLAB/MPASM utan problem.
Postat: 11 oktober 2007, 17:35:06
av basmicke
japp jag ska kolla mer på min hemläxa nu.
sen så kanske de blir lite lättare framöver när jag börjar med växelströmsläran.
Postat: 11 oktober 2007, 20:28:18
av Tjille
Ersätt
BANKSEL 0006
med
BSF STATUS,RP0
och
BANKSEL 0005
med
BCF STATUS,RP0
och testa.
Postat: 11 oktober 2007, 21:24:56
av sodjan
Nej nej nej...
ANVÄND BANKSEL !!
Men gör det på korrekt sätt.
T.ex
Kod: Markera allt
BANKSEL PORTB ;Switch Back to reg. Bank 0
CLRF PORTB
O.s.v....
Postat: 11 oktober 2007, 22:28:51
av Tjille
Metoden med BCF och BSF funger och är enligt rekommendation i kap 3.2.2.1 i databladet för PIC16F62X. Genom detta undviker man dessutom att förändra statusbitar.
Postat: 11 oktober 2007, 22:33:44
av sodjan
BCF/BSF fungerar men det är *väldigt* lätt att göra fel.
BANKSEL både fungerar och gör rätt.
Välj det du föredrar....
> Genom detta undviker man dessutom att förändra statusbitar.
Förtydliga.