Delay vs timer

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
labmaster
Inlägg: 2919
Blev medlem: 5 april 2011, 01:10:25

Re: Delay vs timer

Inlägg av labmaster »

Jo det gör man men efter att ha läst programutvecklingmetodik med högnivåspråk som bas behövs inte så stora kurser i mikrodatorteknik. Det finns därför bara ett par mindre kurser som behandlar detta område. Det blir som inte nödvändigt att lägga så stora kurser på denna låga programspråknivå som assembler utgör. Nu har jag visserligen inte deltagit i några kurser på senare tid men brukar läsa kursprogrammen ibland av ren nyfikenhet och det ser inte så annorlunda ut nu som då jag var student.

Nåväl, denna tråd är ju inte till för att diskutera åsikter om hur man bäst lär sig programutveckling.
Användarvisningsbild
swesysmgr
Inlägg: 14891
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Delay vs timer

Inlägg av swesysmgr »

labmaster skrev:Då är det ju märkligt att man inte börjar med assembler i de stora kurserna i programutvecklingmetodik på de datatekniska linjerna vid landets högskolor.
På CTH börjar man med assembler, det ingår i den första digitalteknikkursen som läses av alla som går E/D/Z/IT åtminstone. Därefter varierar det med vilket program man går, vad man valt och liknande men nästa steg är en kurs med mycket traditionellt C-nötande och lite C på mikrodator.

I mikrodatorkurserna på GU så är första kursen assembler, därefter C.
labmaster
Inlägg: 2919
Blev medlem: 5 april 2011, 01:10:25

Re: Delay vs timer

Inlägg av labmaster »

På den tiden jag läste så kom digitalteknikkursen en bit in i läsåret men generellt sett verkar assemblerprogramring vara en ganska liten del av studietiden men naturligtvis är det bra, ja till och med nödvändigt att kunna. Som sagt var, det går alldeles utmärkt att lära sig assembler genom att tända och släcka lysdioder på en labbplatta. När det är dags för lite större projekt med maskinnära programmering är det bättre att satsa på C.

Det man lärde av assemblerprogrammeringen i labbänken genom att tända och släcka lysdioder är fullt tillräckligt. Det är också därför som jag tycker att det är hög tid för Stewal att ta steget upp till C i detta projekt.

Jag har i och för sig utvecklat en hel del i assembler och det största projektet bestod av 55 000 rader assemblerkod. Så visst går det att även köra stora projekt i lågnivåspråk.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Re: Delay vs timer

Inlägg av Stewal »

Då det nu har blivit en diskution kring ISR, kan jag väl berätta hur koden i min ISR fungerar.
Inget som säger att det att det är bra eller inte behöver ändrar.

Hämtat från en av mina andra trådar
Ex. Data stäng som kommer från klockan 1B 21 34 31 32 (ESC,!,4,1,2) 4 är indexpekare för siffra 1 och 2

ISR tar emot inkommande RS232 data sparar i Rx_data.

1#
Esc_check kollar om Rx_data innehåller 1B om ja så nollställs buffern och div. trigg punkter så som uppdatera display sen går ur ISR, om ej 1B gå till nästa.

2#
If_0x21 söker efter t.ex. 21* om det är 21 sparas Rx_data i Rx_buffer går ur ISR. Om det är annat än 21 går den till index.
(If_0x21 och index har en funktion för att ta 21 och 22)

3#
Index hämtar upp värdet i rx_buffer och kollar om det är t.ex. 21* om annat värde så nollställs buffern och div. trigg punkter och går ur ISR.
Är det annat ej önskvärt data som tas emot går den igenom dessa tre steg och ur ISR för att ta emot nästa.
Om det var t.ex. 21*, så kollas trigger om värde är 00 om ja så sparas rx_data i rx_buffer+1 sen sparas FF i trigger och går ur ISR.
innehåller trigger ett högre värde (FF), gå till index

Index tar värdet i Rx_buffer+1 och sparar i Ind_check.
Ind_check subtraheras med värdet 30 och resultatet av ind_check
Nu subtraheras ind_check genom följande
Index_1
index_2
index_3
index_4
Digit_5
index_5
Digit_4
index_6
Digit_3
index_7
Digit_2
index_8
Digit_1
index_9
Digit_0
EX. om Ind_check blir 00 för index_6, så sparas Rx_data till digit_3 och subtraheras med ch_d3 om inte lika sätts 00 till T3 och går ur ISR.

Ex. om Index pekaren i Rx_buffer+1 är 35 så sparas värdet i Digit_3 (sekund)
Nu ökas värdet i Ind_check med 1 så när nästa inkommande data kommer sparas det i Digit_2 (tiondel)

Det görs även en check om värdet i t.ex.digit_3 är samma som ch_d3 om det inte är samma, så sparas 00 i T3 som triggar en uppdatering av sekunder siffran.

Loopen kollar sedan om det har triggats någon ändring och i så fall uppdaterars siffrorna.

Om vi säger att Digit_3 har ett nytt värde ex. 35 för en 5:a, som triggats i ISR koden.
Så i loopen kollas om någon trigger har satts för de 6 siffrorna och T3 är satt 00 har ändrats då anropas D_3, som gör följande.

Sparar digit_3 i ch_d3 och i chk_number.
Sätter utgångarna till binärt en 3:a (RA0-3)
Anropar Check_number, som kollar vad värdet i chk_number blir i ASCII tabellen och får tillbaka det binära värdet satt till PORTB under D3.
Nu anropas Send_to_display, som först pulsar clr_digit för att släcka ev. satta segment.
Sen pulsas set_digit för att sätta segment för att visa en 5:a och tillbaka till D3, därefter sparas FF i T3 och sen tillbaka till loopen.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Delay vs timer

Inlägg av jesse »

När en del lösningsförslag övergår kompetensen hos den som försöker lösa ett problem förkastas ofta bra lösningar med motivet att de är för komplicerade.
Det händer ofta att jag förkastar bra förslag för att jag inte orkar sätta mig in i dem. Det saknas en massa tid och energi som jag kanske inte har. Då blir jag tvungen att göra något enklare eller helt enkelt lägga ner idén. Det betyder inte att jag är lat eller otacksam för det. Det är bara verkligheten. Jag har alltid massor av idéer och projekt på gång, och jag skulle behöva vara tio heltidsarbetande personer för att genomföra allt på bästa sätt. Man ska inte se ner på folk bara för att man inte orkar läsa till sig just den information man själv tycker är så "enkelt". Var och en måste få utgå från sina egna förutsättningar.

(ursäkta OT i den här tråden, ville bara ge min syn på saken)
Skriv svar