|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Pet Sep 28, 2007 4:17 pm Naslov sporočila: |
|
|
Zanima me, kako v spodnjem programu ugotovim, kolikšna je zakasnitev med prižaganjem in ugašanjem LEDice, če imam frekvenco takta 4 MHz.
Koda: |
void main()
{
TRISA=0;
TRISB=0;
OPTION_REG=0;
INTCON=0;
char i;
i=0;
zanka:
i++;
if (i<100) goto zanka;
PORTB.0=!PORTB.0;
i=0;
goto zanka;
}
|
_________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 25.02
|
Objavljeno: Pet Sep 28, 2007 4:24 pm Naslov sporočila: |
|
|
S stoparico ? Alternativa je stetje ciklov zanke v disassemblani kodi. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Pet Sep 28, 2007 5:11 pm Naslov sporočila: |
|
|
Tole je disassemblana koda zanke. Torej, pri taktu 4 MHz traja en cikel 1us. Se pravi, da potem ta zanka traja 0.3 s (ker se zanka ponovi 100x, je potem 100*3us=0.3s)??? Imam prav?
Koda: |
zanka:
i++;
BCF 0x3, 0x5 ; ukaz bcf 1us
if (i<100) goto zanka; ; ukaz goto 2us
|
_________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
NeoTO Član
Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2751 Aktiv.: 12.33 Kraj: Trzic
|
Objavljeno: Pet Sep 28, 2007 5:23 pm Naslov sporočila: |
|
|
kje pa je preverjanje pogoja?
A to si sam disassemblal? Ponavadi ti C prevajalnik to naredi v dodatno datoteko. _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Pet Sep 28, 2007 5:29 pm Naslov sporočila: |
|
|
To mi vrže ven MPLAB, če kliknem na disassembly listing.
Koda: |
1: void main()
2: {
3: TRISA=0;
0001 1683 BSF 0x3, 0x5
4: TRISB=0;
0004 0186 CLRF 0x6
5: OPTION_REG=0;
0005 0181 CLRF 0x1
6: INTCON=0;
0006 018B CLRF 0xb
7:
8: char i;
9: i=0;
0007 1283 BCF 0x3, 0x5
10:
11:
12: zanka:
13: i++;
0009 1283 BCF 0x3, 0x5
14: if (i<100) goto zanka;
000C 3064 MOVLW 0x64
15: PORTB.0=!PORTB.0;
0010 3001 MOVLW 0x1
16: i=0;
0014 01A0 CLRF 0x20
17: goto zanka;
0015 2809 GOTO 0x9
|
_________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
NeoTO Član
Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2751 Aktiv.: 12.33 Kraj: Trzic
|
Objavljeno: Pet Sep 28, 2007 5:42 pm Naslov sporočila: |
|
|
Tukaj vmes kar nekaj ukazov manjka (če gledaš na naslove, se sploh hitro vidi). _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Pet Sep 28, 2007 5:45 pm Naslov sporočila: |
|
|
Aha, to pa mi je napisal v dodatno datoteko.
Koda: |
;void main()
;{
main
; TRISA=0;
BSF 0x03,RP0
BCF 0x03,RP1
CLRF TRISA
; TRISB=0;
CLRF TRISB
; OPTION_REG=0;
CLRF OPTION_REG
; INTCON=0;
CLRF INTCON
;
; char i;
; i=0;
BCF 0x03,RP0
CLRF i
;
;
;zanka:
; i++;
m001 BCF 0x03,RP0
BCF 0x03,RP1
INCF i,1
; if (i<100) goto zanka;
MOVLW .100
SUBWF i,W
BTFSS 0x03,Carry
GOTO m001
; PORTB.0=!PORTB.0;
MOVLW .1
BCF 0x03,RP0
BCF 0x03,RP1
XORWF PORTB,1
; i=0;
CLRF i
; goto zanka;
GOTO m001
END
|
_________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 25.02
|
Objavljeno: Pet Sep 28, 2007 5:55 pm Naslov sporočila: |
|
|
No, zdaj pa se enkrat prestej cikle. Upostevaj tudi, da ob zadnjem prehodu tisti goto preskocis, torej skupaj s predhodnim ukazom ne pozre 3 cikle, ampak 2. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
gkrusi Član
Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.97 Kraj: Ptuj
|
Objavljeno: Pet Sep 28, 2007 7:07 pm Naslov sporočila: |
|
|
To boš imel kar veliko frekvenco.
Koda: je napisal/a: |
(ker se zanka ponovi 100x, je potem 100*3us=0.3s)??? |
Pazi 1 us = 0,000001 s
100*3us=0.3ms , kar je 0,0003 s.
Pa t=1/f, torej je pri 4 MHz čas enega cikla 1/4000000, kar je 0,25 us.
Sicer pa bi jaz raje uporabil naslednji način, ki ti takoj dokaj natančno pove, da se port preklopi na vsake (v tem primeru) pol sekunde. Ta primer je torej veliko preprostejši, je pa res, da se z zgornjim nekaj več naučiš .
Koda: je napisal/a: |
......
#use delay(clock=4000000)
void main()
{
TRISA=0;
TRISB=0;
OPTION_REG=0;
INTCON=0;
zanka:
delay_ms(500); //zakasni 0,5s
PORTB.0=!PORTB.0; //negira port B
goto zanka;
} |
Če je zakasnitev v ms prevelika, lahko uporabiš ukaz dalay_us(...); _________________ Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazadnje urejal/a gkrusi Sob Sep 29, 2007 4:02 pm; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
|
NeoTO Član
Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2751 Aktiv.: 12.33 Kraj: Trzic
|
Objavljeno: Pet Sep 28, 2007 10:00 pm Naslov sporočila: |
|
|
gkrusi, s tem nič kaj velik ne narediš. Pri velikih hitrostih moraš še vedno upoštevati asm ukaze.
Pa btw, to kar si napisal je sintaksa za CCS C Compiler, ki je drugi ne podpirajo (#use delay, delay_ms, delay_us, ...) _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.24 Kraj: Žalec
|
Objavljeno: Pet Sep 28, 2007 10:56 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
No, zdaj pa se enkrat prestej cikle. Upostevaj tudi, da ob zadnjem prehodu tisti goto preskocis, torej skupaj s predhodnim ukazom ne pozre 3 cikle, ampak 2. |
Ne razumem najbolj? _________________ Roke spadajo k telesu, ne k delu. |
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 25.02
|
Objavljeno: Sob Sep 29, 2007 1:22 am Naslov sporočila: |
|
|
Ko si jih stel prvic, je bilo tvoje stetje zelo narobe, mar ne ? Zdaj ko koncno ves koliko ukazov se dejansko izvrsi ob vsaki iteraciji zanke, jih lahko tudi prestejes in tako prides do tocnega casa izvedbe. Ta se precej (vec kot 100%) razlikuje od tvoje prvotve ocene ...
Je zdaj dovolj razumljivo ? _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
Highlag Član
Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 18.07 Kraj: Črnuče
|
Objavljeno: Sob Sep 29, 2007 1:01 pm Naslov sporočila: |
|
|
Če ne gre drugače lahko prevedeno kodo potegneš v MPLAB, pa tam pogledaš koliko ciklov traja ena rutina / podprogram...... _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
|
NeoTO Član
Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2751 Aktiv.: 12.33 Kraj: Trzic
|
Objavljeno: Sob Sep 29, 2007 1:07 pm Naslov sporočila: |
|
|
Highlag je napisal/a: |
Če ne gre drugače lahko prevedeno kodo potegneš v MPLAB, pa tam pogledaš koliko ciklov traja ena rutina / podprogram...... |
Če se da podprogram pognat iz simulacije (če ne komunicira s kakšnim hardware-om), potem se tega poslužujem tudi sam. C prevajalnik ponavadi namreč točno izpiše naslove v ROMu, kjer se nahajajo posamezni C ukazi in po uvažanju v MPLAB, si enostavno postavim breakpoint-e na tiste naslove. Poženeš simulacijo, počakaš da pride do prvega breakpointa in resetiraš štoparico. _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
|
Consty Član
Pridružen-a: Čet 21 Avg 2008 13:15 Prispevkov: 15 Aktiv.: 0.08 Kraj: Celje
|
Objavljeno: Sob Avg 23, 2008 11:44 am Naslov sporočila: |
|
|
Lep pozdrav vsem!
Ja mam pa en problem z inputi na pic-u.
Na faksu smo delal z assemblerjem... za doma pa sem si nabavil vellemanov komplet k8048 in pa program mikroC - da lahk delam v c-ju .
Ne vem zakaj mi inputi ne delajo kot bi morali...
--
void main() {
TRISB = 0; //PORTB vsi output
TRISA = 1; //PORTA vsi input
while(1) {
if(PORTA.F0 = 1); // preverjanje A0
PORTB.F0 = 1; // postavi izhod B0 na 1
};
}
---
izhod je skos na 1 - pa lahk delam kar hočem
Lahko kdo prosim pove v čem je problem - ko se že kr en lep čas mučim s tem |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 82 dni
Powered by phpBB © 2001, 2005 phpBB Group
|