
En lite anorlunda blik kod
Du behöver inte ändra någon inställning. Det räcker att byta ut MPLAB mot ett annat utvecklingsverktyg som använder BASIC istället för assembler. T.ex. MikroBASIC. Sedan om det är det rätta eller inte är en helt annan sak.
Vill Du kunna skriva små och effektiva program för attfå ut mesta möjliga ur processorn så håll fast vid assembler. Där är en tämligenhög tröskel för att komma igång och det finns inga genvägar. Du måste lära en del innan Du kan behärska det. När Du väl kommit över tröskeln så går det tämligen lätt.
Vill Du kunna skriva små och effektiva program för attfå ut mesta möjliga ur processorn så håll fast vid assembler. Där är en tämligenhög tröskel för att komma igång och det finns inga genvägar. Du måste lära en del innan Du kan behärska det. När Du väl kommit över tröskeln så går det tämligen lätt.
Jag hade tänkt att först göra koden i BASIC sen göra koden i assembler. Det tycker jag efter som att jag precis har börjat med PIC programering och då hade jag tänkt att bara starta i BASIC för att kanske förstå någonting utav assembler. Men så fort jag har lyckats skriva programet som jag vill i BASIC så ska jag skriva det i assembler.
Jag ser nu (missade det först) att det fungerade OK med exemplen från den
CD som följde med PICkit2. Så kör vidare med det. Du ställde någon fråga
i samma inlägg:
> Tredje gången gilt! Nu kan jag öppna project filen!
> men då kommer så klart den riktiga saken hur ska koden se ut?
Är det inte kompletta exempelkoder ? Jag har inte kollat, men det
låter lite underligt. Kan du förtydliga vad det är som strular ?
CD som följde med PICkit2. Så kör vidare med det. Du ställde någon fråga
i samma inlägg:
> Tredje gången gilt! Nu kan jag öppna project filen!
> men då kommer så klart den riktiga saken hur ska koden se ut?
Är det inte kompletta exempelkoder ? Jag har inte kollat, men det
låter lite underligt. Kan du förtydliga vad det är som strular ?
Jag menade hur den koden som skulle vara baserad på blink koden från cdn. Jag skulle ju göra det där med 3 blikningar mellanrum 3 bilkningar mellanrum osv. Men om jag nu ska göra koden i assemble så behöver jag förstå hur blink koden från cdn är uppbyggd och hur jag ska göra för att den ska blinka som jag vill. Jag har läst de 3 första lektionerna från cdn flera gånger men jag har ändå inte fått klart för mig hur koden är uppbygd.
Det här sa Marta tidigare i tråden:
Jag håller med om att det exempel Du har är väldigt stökigt, det kan göras både enklare och tydligare.
Finns det flera sätt att skriva den här koden fast den fortfarande har samma funktion? I sånna fall hur skulle den annars kunna se ut? Det kanske hjälper mig att förstå hur jag ska skriva min slutgiltiga kod (3 blink...)
Tack!
Det här sa Marta tidigare i tråden:
Jag håller med om att det exempel Du har är väldigt stökigt, det kan göras både enklare och tydligare.
Finns det flera sätt att skriva den här koden fast den fortfarande har samma funktion? I sånna fall hur skulle den annars kunna se ut? Det kanske hjälper mig att förstå hur jag ska skriva min slutgiltiga kod (3 blink...)
Tack!
OK.
Jag plockade ner "PICkit 2 Starter Kit Lessons", installerade och öppnade
"02 Blink" i MPLAB. Inga problem, tog ca 30 sekunder...
> Men om jag nu ska göra koden i assemble så behöver jag förstå hur
> blink koden från cdn är uppbyggd
Det är ju bara 10-15 rader, vad är problemet ?
Det finns säkert massor av sätt att skriva en kod som gör
(ungefär) samma sak, men jag sr inte varför. Det är ju bara
10-15 rader, och det är ju ganska klart vad den gör. Jag håller
*inte* med om att den är speciellt stökig, kanske lite väl övertydlig,
man skulle kunna ha en delay-loop som anropas istället för att
ha två stycken, men det är bara en liten detalj.
Det som var stökigt var att du hade postat koden utan code-taggar,
så här ska det se ut :
Som sagt, det är inte många rader, och varje ASM rad har en egen
kommentar. Alla instruktioner finns beskrivna i databladet.
Ställ en tydlig och konkret fråga så att det finns något vettigt att svara på.
Är det ungefär detta du vill ha ? :
<start>
Tänd LED, vänta 0.5 s, släck LED, vänta 0.5 s. <Upprepa 3 gånger>
Vänta 5 s.
<Gå till start>
Jag plockade ner "PICkit 2 Starter Kit Lessons", installerade och öppnade
"02 Blink" i MPLAB. Inga problem, tog ca 30 sekunder...
> Men om jag nu ska göra koden i assemble så behöver jag förstå hur
> blink koden från cdn är uppbyggd
Det är ju bara 10-15 rader, vad är problemet ?
Det finns säkert massor av sätt att skriva en kod som gör
(ungefär) samma sak, men jag sr inte varför. Det är ju bara
10-15 rader, och det är ju ganska klart vad den gör. Jag håller
*inte* med om att den är speciellt stökig, kanske lite väl övertydlig,
man skulle kunna ha en delay-loop som anropas istället för att
ha två stycken, men det är bara en liten detalj.
Det som var stökigt var att du hade postat koden utan code-taggar,
så här ska det se ut :
Kod: Markera allt
;******************************************************************************
;Software License Agreement
;
;The software supplied herewith by Microchip Technology
;Incorporated (the "Company") is intended and supplied to you, the
;Companys customer, for use solely and exclusively on Microchip
;products. The software is owned by the Company and/or its supplier,
;and is protected under applicable copyright laws. All rights are
;reserved. Any use in violation of the foregoing restrictions may
;subject the user to criminal sanctions under applicable laws, as
;well as to civil liability for the breach of the terms and
;conditions of this license.
;
;THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES,
;WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
;TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
;PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
;IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
;CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
; *******************************************************************
; PICkit 2 Lesson 2 - "Blink"
;
; First lesson showed how to make an LED turn on,
; Now we'll look at how to make it blink. Delay loops are necessary
; to slow down the on and off commands so they are visible to humans.
; *******************************************************************
; * See Low Pin Count Demo Board User's Guide for Lesson Information*
; *******************************************************************
; * NOTE: The PIC16F690 requires the AC162061 header for debugging *
; *******************************************************************
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay1 ; Define two file registers for the
Delay2 ; delay loop
endc
org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
bcf TRISC,0 ; make IO Pin B.0 an output
bcf STATUS,RP0 ; back to Register Page 0
MainLoop:
bsf PORTC,0 ; turn on LED C0
OndelayLoop:
decfsz Delay1,f ; Waste time.
goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops
goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
; call it a two-tenths of a second.
bcf PORTC,0 ; Turn off LED C0
OffDelayLoop:
decfsz Delay1,f ; same delay as above
goto OffDelayLoop
decfsz Delay2,f
goto OffDelayLoop
goto MainLoop ; Do it again...
end
kommentar. Alla instruktioner finns beskrivna i databladet.
Ställ en tydlig och konkret fråga så att det finns något vettigt att svara på.
Är det ungefär detta du vill ha ? :
<start>
Tänd LED, vänta 0.5 s, släck LED, vänta 0.5 s. <Upprepa 3 gånger>
Vänta 5 s.
<Gå till start>
Du förstår ganska presic vad jag menar det ända som inte är rätt är mellanrummen jag skulle vilja ha ungefär så här:
<start>
Tänd LED, vänta 0.1 s, släck LED, vänta 0.2 s. <Upprepa 3 gånger>
Vänta 1 s.
<Gå till start>
Anledningen till att jag inte riktigt förstår koden är bland annat:
Vad fyller ''OffDelayLoop'' för funktio? Kan man inte bara lägga till lite delay i slutet av ''OndelayLoop''?
Varför fins det 2 stycken ''goto OndelayLoop'' i ''OndelayLoop'' borde inte lampan lysa hela tiden eftersom att den bara går tillbaka till början av ''OndelayLoop'' av den första?
Tack!
<start>
Tänd LED, vänta 0.1 s, släck LED, vänta 0.2 s. <Upprepa 3 gånger>
Vänta 1 s.
<Gå till start>
Anledningen till att jag inte riktigt förstår koden är bland annat:
Vad fyller ''OffDelayLoop'' för funktio? Kan man inte bara lägga till lite delay i slutet av ''OndelayLoop''?
Varför fins det 2 stycken ''goto OndelayLoop'' i ''OndelayLoop'' borde inte lampan lysa hela tiden eftersom att den bara går tillbaka till början av ''OndelayLoop'' av den första?
Tack!