Starý somár začína...

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Lennox
Stály člen
Stály člen
Príspevky: 291
Dátum registrácie: 12 Sep 2019, 22:51
Bydlisko: Bratislava

Re: Starý somár začína...

Príspevok od používateľa Lennox » 03 Mar 2024, 23:22

Upravil som ti to ako si si to predstavoval. LED-ky na porte B (8ks). Beziace svetlo s jednou LEDkou od portu RB0 po port RB7 a spat z RB7 do RB0 a tak dookola. Hadam som pochopil spravne o co si sa snazil. Neskusal som , ale malo by to fungovat. Skompiluj a vyskusaj.

Kód: Vybrať všetko

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
     LIST      p=16F88
     #INCLUDE <P16F88.INC>
;------------------------------------------------------------------------------
; CONFIGURATION WORD SETUP
;------------------------------------------------------------------------------
     __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------
	CBLOCK	0x20
	COUNT_LOOP
	ENDC
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET     ORG     0x0000            ; processor reset vector
;------------------------------------------------------------------------------
; INICIALIZÁCIA PORTOV
;------------------------------------------------------------------------------
	BSF	STATUS, RP0
	CLRF	TRISB
	BCF	STATUS, RP0
	CLRF	COUNT_LOOP
	CLRF	PORTB
;------------------------------------------------------------------------------
; VLASTNÝ PROGRAM
;------------------------------------------------------------------------------
MOVLW b'00000001'
MOVWF PORTB	
	
INCR
	
	CALL	WAIT_LOOP
	RLF     PORTB, F
	BTFSS	PORTB, 7
	GOTO	INCR
DECR
	CALL	WAIT_LOOP
	RRF     PORTB, F
	BTFSS	PORTB, 0
	GOTO	DECR
	GOTO	INCR
;------------------------------------------------------------------------------
; ČAKACIA SĽUČKA
;------------------------------------------------------------------------------
WAIT_LOOP
DELAY
    MOVLW D'162'
    MOVWF 10
    MOVWF 11
DELAY_LOOP
    DECFSZ 10, F
    GOTO DELAY_LOOP
    DECFSZ 11, F
    GOTO DELAY_LOOP
    RETLW 0

	END
Teraz pozerám lepsie, ty sa snazis pocitat od 0 do 255 a potom z 255 do 0 a to zobrazovat na porte B s LED?

Nieco ako toto:

Kód: Vybrať všetko

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
     LIST      p=16F88
     #INCLUDE <P16F88.INC>
;------------------------------------------------------------------------------
; CONFIGURATION WORD SETUP
;------------------------------------------------------------------------------
     __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------
COUNT	EQU 0X20
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET     ORG     0x0000            ; processor reset vector
;------------------------------------------------------------------------------
; INICIALIZÁCIA PORTOV
;------------------------------------------------------------------------------
	BSF	STATUS, RP0
	CLRF	TRISB
	BCF	STATUS, RP0
;------------------------------------------------------------------------------
; VLASTNÝ PROGRAM
;------------------------------------------------------------------------------
INCR
    MOVF COUNT, W
    MOVWF PORTB
    INCF COUNT, F
    CALL WAIT_LOOP
    MOVF COUNT ,W
    XORLW 255
    BTFSS STATUS, Z
    GOTO INCR
    GOTO DECR

DECR
    MOVF COUNT, W
    MOVWF PORTB
    DECF COUNT, F
    CALL WAIT_LOOP
    MOVF COUNT ,W
    BTFSS STATUS, Z
    GOTO DECR
    GOTO INCR
;------------------------------------------------------------------------------
; ČAKACIA SĽUČKA
;------------------------------------------------------------------------------
WAIT_LOOP
DELAY
    MOVLW D'30'
    MOVWF 10
    MOVWF 11
DELAY_LOOP
    DECFSZ 10, F
    GOTO DELAY_LOOP
    DECFSZ 11, F
    GOTO DELAY_LOOP
    RETLW 0

END
Skompiluj a poreferuj, uz je vela hodin tak bez zaruk.
1
Obrázok 1

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 04 Mar 2024, 00:26

Lennox napísal: Teraz pozerám lepsie, ty sa snazis pocitat od 0 do 255 a potom z 255 do 0 a to zobrazovat na porte B s LED?
Áno, O to som sa snažil. Dosiahnuť b´11111111´ a späť na b´00000000´na PORTB. Pekne to binárne vyblikuje a ja som presedel pol nedeľa za klávesnicou!
0

Lennox
Stály člen
Stály člen
Príspevky: 291
Dátum registrácie: 12 Sep 2019, 22:51
Bydlisko: Bratislava

Re: Starý somár začína...

Príspevok od používateľa Lennox » 04 Mar 2024, 21:05

Vcera uz bolo vela hodin som uz na to navidel ci co. Nech sa paci binarny counter s vystupom na PORTB.
Pocita od 0 do 255 a spat z 255 do 0 ako si chcel.

Kód: Vybrať všetko

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
     LIST      p=16F88
     #INCLUDE <P16F88.INC>
;------------------------------------------------------------------------------
; CONFIGURATION WORD SETUP
;------------------------------------------------------------------------------
     __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------
 VARIABLES  UDATA
 COUNT	RES 1
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
 RESET     ORG     0x0000            ; processor reset vector
 GOTO      START
;------------------------------------------------------------------------------
; INICIALIZÁCIA 
;------------------------------------------------------------------------------
START 
    MOVLW   b'01111110'   ; 8MHz int
    BANKSEL OSCCON
    MOVWF   OSCCON

    BANKSEL PORTB
    CLRF    PORTB

    BANKSEL OPTION_REG
    CLRF    ANSEL

    BANKSEL TRISB
    MOVLW   0X00
    MOVWF  TRISB

    CLRF    COUNT
;------------------------------------------------------------------------------
; VLASTNÝ PROGRAM
;------------------------------------------------------------------------------
INCR
   BANKSEL PORTB
   INCF    COUNT, F
   MOVF    COUNT, W
   MOVWF   PORTB
   CALL    WAIT_LOOP
   MOVF    COUNT, W
   XORLW   D'255'
   BTFSS   STATUS, Z
   GOTO    INCR
   
DECR
   DECF    COUNT, F
   MOVF    COUNT, W
   MOVWF   PORTB
   CALL    WAIT_LOOP
   MOVF    COUNT, W
   BTFSS   STATUS, Z
   GOTO    DECR
   GOTO    INCR
;------------------------------------------------------------------------------
; CAKACIA SLUCKA
;------------------------------------------------------------------------------
WAIT_LOOP
DELAY
    MOVLW D'200'
    MOVWF 10
    MOVWF 11
DELAY_LOOP
    DECFSZ 10, F
    GOTO DELAY_LOOP
    DECFSZ 11, F
    GOTO DELAY_LOOP
    RETLW 0

   END
Video simulacia v proteuse:
https://youtu.be/kYKbg4zheAM

Toto si sa snazil dosiahnut?
0
Naposledy upravil/-a Lennox v 05 Mar 2024, 21:31, upravené celkom 2 krát.

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1148
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Starý somár začína...

Príspevok od používateľa Atlan » 04 Mar 2024, 21:35

Dajte mu tu program pre to pic v cecku, rozdiel je minimalny, tusim ze pic tiez pouziva zdarma Ckovy prekladac
0

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 05 Mar 2024, 19:28

Lennox napísal:
04 Mar 2024, 21:05
Toto si sa snazil dosiahnut?
Ano, to je ono!, Až na to prebliknutie po 0xFF... :) ...

Lennox, ďakujem Ti veľmi pekne, že sa snažíš mi pomôcť. Super pocit, že sa mám koho opýtať.
Ale! Tvoja snaha v dobrej viere mi pomôcť, prekročila pedagogický rozmer. Ty to totiž robíš za mňa!
Takto sa prd makový naučím :D Pochop, že to ja sa musím spotiť, ja musím mať ten povestný "aha moment", to mne musia puzzle zapadnúť... až keď sa mi toto stane, tak je informácia dokonalá a nikdy mi už z hlavy nezmizne, pokiaľ nepríde ten oný... bože ako sa... nó ten pán z nemecka... ten, taký... taký čo oné... že keď toto, tak just ani Bohovi, veď vieš, nie...?
Chápem ako sa cítiš. Zažívam to denne v robote, keď vedľa mňa stoji manták, ktorý nevie zašroubovať ani ten poondiaty sprostý PZ šroub, rapoce na ňom PH predstavcom a netuší o tom nič! Mám chuť ho nakopať do riti a urobiť to zaňho! Je to rýchlejšie a bez námahy a nervov, ale ten manták sa nič nenaučí... ba naopak, už sa nabudúce bude odúvať, že má zase čosi šroubovať...
Ja som teraz ten manták! Ale potrebujem kopať do riti tým správnym smerom a nie sa dívať, ako to robia páni majstri...

Tvoj predposledný kód zašiel o pár bitov ďalej, ako môj, ale "dokonalý" nebol :biggrin: . Otočil sa kdesi pred 0xFF a odpočítal sa k nule. Vlastne mi tu na doske beží už 2 dni nonstop. Ale nemal som času a aj tá téma ma mierne vyčerpala nezdarom. Tak som to zatiaľ neriešil. Ale práve som si zdriemol a som čerstvý ako rybička a do polnoci zmáknem analýzu problémov a hádam sa kamsi pohnem...

Ešte raz Ti ďakujem a dúfam, že som Ťa neurazil...
Mimochodom, pekná simulácia. Ale nejdem sa zasierať učením iného SW. MCU je môj cieľ...
1
Obrázok 1
Naposledy upravil/-a 03601 v 05 Mar 2024, 20:36, upravené celkom 1 krát.

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 05 Mar 2024, 19:34

Atlan napísal:
04 Mar 2024, 21:35
Dajte mu tu program pre to pic v cecku, rozdiel je minimalny, tusim ze pic tiez pouziva zdarma Ckovy prekladac
Atlan, viem, chápem, učím sa niečo skoro zabudnuté. Ale už som to tu písal. Mám s ASM zámer, či cieľ. Preto sa ho učím. C bude, ale najprv musím pochopiť HW, s ktorým mám ešte veľa problémov a ten HW sa napr. oveľa lepšie chápe cez ASM, čo som doteraz čítal. Ale to chápanie HW nie je dôvodom, prečo sa trápim s ASM. Zatiaľ ostanem na ASM!
Tak či tak i ďakujem za snahu mi pomôcť...
0

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 05 Mar 2024, 20:28

Lennox napísal:
03 Mar 2024, 23:22
Teraz pozerám lepsie, ty sa snazis pocitat od 0 do 255 a potom z 255 do 0...
Tak som skóknul Tvoj predposledný kód, ktorý má, ako som písal chybičku (som borec). Skrátka,nezačne po spustení na 0, ale kdesi na 247. Keď dosiahne 255, tak ide do nuly a začne pripočítavať znova od 0, ale nedopočíta ani do cca b.01001001 (d.73), keď sa otočí do odčítania. potom dosiahne 0 a ide znova do cca 73...

To by predpokladalo chybu v XORLW 255, kde bit Z zmení hodnotu...

Ďalšou, tu však neviem či to ozaj chybou je, či je to Tvoj zámer, že v časti znižovania hodnoty DECR nevykonávaš XOR...

Kód: Vybrať všetko

INCR
    MOVF COUNT, W		; skopíruj obsah COUNT do W
    MOVWF PORTB			; skopíruj obsah W na PORTB
    INCF COUNT, F		; zvíš hodnotu COUNT o 1
    CALL WAIT_LOOP		; počkaj
    MOVF COUNT ,W		; skopíruj obsah COUNT do W
    XORLW 255			; vykonaj XOR W oproti hodnote d.255
    BTFSS STATUS, Z		; otestuj bit Z
    GOTO INCR			; ak sa bit Z NErovná 1, choď na INCR
    GOTO DECR			; ak sa bit Z rovná 1, choď na DECR 

DECR
    MOVF COUNT, W		; skopíruj obsah COUNT do W		
    MOVWF PORTB			; skopíruj obsah W na PORTB
    DECF COUNT, F		; zníč hodnotu count o 1
    CALL WAIT_LOOP		; čakaj
    MOVF COUNT ,W		; kopíruj hodnotu COUNT do W
    BTFSS STATUS, Z		; otestuj bit Z
    GOTO DECR			; ak sa bit Z NErovná 1, choď na DECR
    GOTO INCR			; ak sa bit Z rovná 1, choď na INCR 
A tiež nerozumiem, kde si zobral v čakacej sľučke 10 a 11...

Kód: Vybrať všetko

WAIT_LOOP
DELAY
    MOVLW D'30'			; vlož hodnotu d.30 do W
    MOVWF 10			; vlož hodnotu W do 10 (??? Kde sa vzalo 10?)
    MOVWF 11			; vlož hodnotu W do 11 (??? Kde sa vzalo 11?)
DELAY_LOOP
    DECFSZ 10, F		; zníž 10 o 1 a otestuj výsledok
    GOTO DELAY_LOOP		; ak sa výsledok NErovná 0, opakuj DECFSZ 10
    DECFSZ 11, F		; ak sa výsledok rovná 0, zníž 11 o 1 a otestuj výsledok
    GOTO DELAY_LOOP		; ak sa výsledok NErovná 0, opakuj DECFSZ 10
    RETLW 0			; ak sa výsledok rovná 0, tak čosi urob, neviem čo to je
Potom je tu príkaz RETLW, predpokladám že sa odtiaľto má vykonávanie programu vrátiť na riadok nižšie od posledného CALL, ale čo to LW znamená?
No nič, idem kráčať do simulátora...
0

Lennox
Stály člen
Stály člen
Príspevky: 291
Dátum registrácie: 12 Sep 2019, 22:51
Bydlisko: Bratislava

Re: Starý somár začína...

Príspevok od používateľa Lennox » 05 Mar 2024, 21:12

MOVLW D'30' uloží dec 30 do W
MOVWF 10 ulož 30 do registra 10
MOVWF 11 ulož 30 do registra 11

RETLW 0 po dokončení vynuluj registre 10, 11 (Return Literal with W)

Na ten kód sa vykašli, kukni ten posledný a od toho sa odraz.

Držím palce keď sa dostaneš k Bankám, to len bude zábava.

ps. to prebliknutie som opravil :mrgreen:
1
Obrázok 1

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4418
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Starý somár začína...

Príspevok od používateľa romiadam » 06 Mar 2024, 02:24

Lennox,
BANK-y to je malina, PAGE-ing, to je nocna mora v ASM, ale k tomu sa dostane az ked napise 1024-ty riadok programu. Od riadku 1025 a vyssie uz mu prestanu fungovat funkcie CALL a GOTO a treba zacat pouzivat PCLATH. (este sa pamatam.....). Velmi pohodlne sa to da urobit direktivou PaGESEL, ale stale treba mat pod kontrolou pages programu. Asi vies o com pisem. Pana 03601 stym zatazovat zatial nebudem.


03601,
Ja som jeden z tych co sa "zamilovali" do ASM ani za b...a som nechcel prejst na C-cko (nechcelo sa mi ucit nieco nove, to bol hlavny dovod), dokonca som naprogramoval PID regulator v ASM (to bol moj top projekt v ASM a aj posledny). Kvoli mojej tvrdohlavosti som si to dokazal ze sa to da, ale bol to casovy zabijak (delenie 32-bitoveho cisla 24-bitovym v ASM - ina kafe :drinkers: V C-ku je to y = a / b a vec je vybvena :biggrin: :biggrin: :biggrin: ). Uz nikdy viac taku blbost nespravim.

ASM ti odporucam ak ta zaujima ako to vsetko funguje v to m MCU a ako mas rad logicke rozmyslanie - logicky skladat program po jednotlivych instrukciach - "asemblovat ho" Mna to velmi bavilo, aj ked to bolo casovo narocne. Len ma dorazil ten PID regulator a vtedy som si povedal, ze uz stacilo asemblovania. Ideme na C-cko.


Ty mas PIC16F88? Ak ano, tak to bola spravna volba, ten podporuje in-Circuit-Debuging. Ak ti nieco nefunguje, prepnes sa do Debug modu (mozem vysvetlit ak treba ako na to, alebo pozri na YT)
https://www.youtube.com/watch?v=6fRrTG8AbU0
a mozes krokovat program "online" sledovat jednotlive registre ako sa menia a budes vidiet co to robi a kde to robi chybu. Mozes presne zistit preco ti ten prvy program nefungoval spravne. Ten debug mod ti odhali kazdu blbost, chybicku ktoru v programe urobis.

Debugovat mozes v simulatore (vyssie YT video) alebo priamo v PIC chipe s pouzitim MPLAB IDE. Pre tuto druhu moznost musis vybrat v Debuger menu PICKIT3 (nie MPLABSIM) cas vo videu 59sec a v hlavicke programu prepisat .....CP1_RB0 & _DEBUG_OFF & _WR....... na ....CP1_RB0 & _DEBUG_ON & _WR.....


Podla mna asembler je pre zaciatocnika spravna volba, len v nom neostan pridlho ako ja. Na jednoduche ukony si vystacis s asemblerom, no ked pridu vypocty (hlavne delenie) tak tam uz by malo nastupit C-ko, hlavne z casoveho dovodu.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 540
Dátum registrácie: 21 Feb 2022, 12:06

Re: Starý somár začína...

Príspevok od používateľa balu » 06 Mar 2024, 07:39

Dělal jsem v assembleru taky moc rád a hodně dlouho. To, co jsem v assembleru dostal do 1kB flashe, bych s Cčkem do procesoru nedostal ani náhodou. Časovač pro osvitku - rotační enkodér, 3,5místný LCD displej připojený pomocí 74595, relé pro spínání - ATtiny13A. 5 IO nožiček - 3 pro 74595, 3 pro rotační enkodér. Bylo nutné jednu nožičku využít pro více účelů - tím pádem jsem PIN pro data pro 595-ky multiplexoval se čtením tlačítka enkodéru. Místo na větší procesor na DPS prostě nebylo. Bylo to docela náročné - musel jsem kód optimalizovat a instrukce přeskládávat tak, abych mohl některé vyřadit a program se choval stejně. Ve flashi nakonec zbylo místo ještě na 3 instrukce.

Přepínání bank, stránkování a syntaxe assembleru u PICů jsou tři věci, které mi při přechodu od 8051 k něčemu lepšímu PICy úplně znechutily a tak jsem přešel na AVRka. Jednak je syntaxe assembleru daleko blíž k té u 8051 a něco jako stránkování se řeší až u čipů s flash větší, než 64kB nebo při psaní bootloaderu, kde se do flashe zapisuje po stránkách u všech procesorů. Kromě toho, že se procesor nemusí zdržovat věčným přepínáním bank a stránek, tak jsou při stejném taktu procesoru až 4x rychlejší. PICy mají všechny instrukce na 4 takty, AVRka většinu na 1-2 takty. Ale to je minulost. Dneska už taky pracuju hlavně v Cčku. Je to rychlejší a i po delší době není problém s čitelností kódu - tedy pokud není vyloženě zprasený.

Jinak souhlasím s tím, že je více, než vhodné mít představu o instrukcích procesoru (assembleru) a vědět, jak procesor uvnitř funguje. Je pak jednodušší jít optimalizacím vstříc a udělat kód co možná nejefektivnější. Totéž platí o periferiích procesoru - jak interních, tak pak připojených zvenku. Jenže pro většinu dnešních začínajících je modla Arduino a pro ty je assembler, nedej Bože datasheet, prostě sprosté slovo... Ti ve většině případů umí koupit modul, podle barevných omalovánek ho připojit na předem dané piny (pokud jsou dané piny obsazené, je s projektem často už v této fázi konec), download a instalaci knihovny, pak XY.begin() a když to nefunguje, tak jsou v koncích.
0

Dumitru
Stály člen
Stály člen
Príspevky: 377
Dátum registrácie: 06 Nov 2011, 22:19
Vek: 32

Re: Starý somár začína...

Príspevok od používateľa Dumitru » 06 Mar 2024, 08:43

balu napísal: Jenže pro většinu dnešních začínajících je modla Arduino a pro ty je assembler, nedej Bože datasheet, prostě sprosté slovo... Ti ve většině případů umí koupit modul, podle barevných omalovánek ho připojit na předem dané piny (pokud jsou dané piny obsazené, je s projektem často už v této fázi konec), download a instalaci knihovny, pak XY.begin() a když to nefunguje, tak jsou v koncích.
S týmto úplne nesúhlasím podľa tejto teórie :

Nesmieš sadnúť za volant kým neposkladáš par aut pretože nevieš presne ako to vnútri funguje
Nemôžeš použiť osciloskop pretože nevieš ako to presne vnútri funguje
Nesmieš použiť operačný zosilňovač kým nerozoberieš presne aký tranzistor vnútri načo slúži
Nemohol by som ani sem prispieť pretože neviem ako presne windows funguje :pain:

A myslím si že aj ten čo napísal tuto stránku vôbec netušil aké registre ma jeho procesor na PC :) ale to z neho nerobí zlého programátora
2
Obrázok 2

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 989
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Starý somár začína...

Príspevok od používateľa budvar10 » 06 Mar 2024, 11:21

balu napísal:
06 Mar 2024, 07:39
To, co jsem v assembleru dostal do 1kB flashe, bych s Cčkem do procesoru nedostal ani náhodou.
S tým by som nesúhlasil. Jednoduché programy, ak dostatočne neovládaš C++. Ak by si mal ale naprogramovať násobenie, delenie, mocninu, odmocninu atď., ani sa len nepriblížiš efektivite.

V podstate s dobrou znalosťou C++ dokážeš napísať veľmi dobré a efektívne programy. Samozrejme, stále aj v Céčku vieš použiť ASM. Napríklad v niektorých častiach, ktoré nevieš ako sa dajú napísať v Céčku alebo kvôli prehľadnosti alebo jednoducho z rozmaru.

A ešte by sme sa mohli pozrieť na pracnosť.
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1148
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Starý somár začína...

Príspevok od používateľa Atlan » 06 Mar 2024, 14:51

len mala ukzaka kodu v C pre zakaldny uP, velmi sa to od asm nebude lisit namiest o2 instrukcii kodu pouzije jedno priradenie.

#include <xc.h>
#pragma config WDT=OFF, OSC=XT, PWRT=OFF, BOR=OFF, DEBUG=OFF, LVP=OFF

void main (void)
{
ADCON1 = 0x07;
TRISB = 0X00;
PORTB = 0b01010101;
T1CON = 0b10111001;
while (1)
{
while (TMR1 < 65530);
TMR1 = 0;
PORTB = ~PORTB;
}
}

namiesto ; su // to si zvykne rychlo
0

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 06 Mar 2024, 16:40

Dumitru napísal:
06 Mar 2024, 08:43
...Nesmieš sadnúť za volant kým neposkladáš par aut pretože nevieš presne ako to vnútri funguje
Nemôžeš použiť osciloskop pretože nevieš ako to presne vnútri funguje
Nesmieš použiť operačný zosilňovač kým nerozoberieš presne aký tranzistor vnútri načo slúži
Nemohol by som ani sem prispieť pretože neviem ako presne windows funguje :pain:
To zase ja nesúhlasím s Tebou, lebo:

Nesmieš sadnúť za volant kým... nevieš kde sú smerovky, spojka, klaksón, stierače, ostrekovač...
Nemôžeš použiť osciloskop pretože... netušíš čo je to časová základňa, čo je to vstupný delič, čo je to sonda...
Nesmieš použiť operačný zosilňovač kým... ho nevieš správne napájkovať, či mu navrhnúť správne DPS...
Nemohol by som ani sem prispieť pretože neviem... otvoriť prehliadač, zadať adresu, ovládať WWW stránku...

Skrátka si netrafil! Ja tiež neviem ako pracuje vo vnútri MCU každý jeden tranzistor a predsa ich dnes a denne používam! Ale viem jeho vonkajšie parametre, jeho uživateľské dáta, ba dokonca im rozumiem a tak s MCU rozblikám LEDku... ba čo naviac, viem dohľadať prečo nebliká, keď by mala!
A balu hovorí práve o tom, že tí obrázkovo youtubový fušeri nemajú šain ani o tej "užívateľskej" vrstve informácií... sadnú si do auta a netušia, či sedia na sedadle vodiča... zapnú si osciloskop a šťukajú gombíkmi v očakávaní dákeho živého kanála...
0
Naposledy upravil/-a 03601 v 06 Mar 2024, 18:44, upravené celkom 1 krát.

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 06 Mar 2024, 16:50

rozhára sa tu úplne zbytočný požiar sporu okolo C vs ASM :axe: !

Ďakujem Vám za Vaše motivačné smerovania a poznámky, ale zvolil som si cestu s ASM. Tým je akákoľvek ďalšia debata na tému použitého jazyka úplne zbytočná. Len si vybíjate baterky. Ak sa rozhodnem učiť sa písať kód v C, bude ma tešiť Váš záujem mi pomôcť. Nateraz sa s C nebudem zaoberať.

Howgh!
0

03601
Okoloidúci
Okoloidúci
Príspevky: 45
Dátum registrácie: 20 Feb 2024, 18:42
Vek: 63

Re: Starý somár začína...

Príspevok od používateľa 03601 » 06 Mar 2024, 17:05

Včera, keď sa lámal deň na dnes, tak som zažil "Ahá moment"!
Prinútil som sa prečítať fest nudnú kapitolu o Read-Modify-Write inštrukciách. Čítal som tie 4 strany asi 8x, lebo som furt klimbal nad tou nudou, stratil som niť a hybaj odznova. Keď som konečne dospel na koniec kaoitoly stála tam jedna veta z mnohých, ktorá jednoznačne zhrnula celý ten hrozný článok!

"V zásadě bychom neměli nikdy přistupovat přímo k registrúm PORTX a obdobným pomoci instrukcí, které z registrú zároveň čtou i do něj zapisují!"

A to som presne robil vo svojom zbabranom kóde. Puzzle zapadli, ide sa ďalej...

Ďalší čarovný moment nastal, keď som prečítal príspevok od romiadam! Nechápal som ,prečo mi nejde kód v PICku, keď mi ho simulant predvedie ako OK. Chcel som robiť debug rovno na PICku cez PICkit 3, ale nemám to nastavené a tak to samozrejme nešlo! Ostala len túžba to vedieť...
A tu sa stane čudeso, ozve sa romiadam, ba čo viac, pošle mi rovno návod ako sa to robí!!! Ďakujem romiadam!
0
Naposledy upravil/-a 03601 v 06 Mar 2024, 18:41, upravené celkom 1 krát.

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4418
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Starý somár začína...

Príspevok od používateľa romiadam » 06 Mar 2024, 18:29

Som rad ze som pomohol. Aj mne tu mnohi pomohli, ked som ja zacinal, tak to teraz odovzdavam dalej.
2
Obrázok 2
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Lennox
Stály člen
Stály člen
Príspevky: 291
Dátum registrácie: 12 Sep 2019, 22:51
Bydlisko: Bratislava

Re: Starý somár začína...

Príspevok od používateľa Lennox » 06 Mar 2024, 21:02

Inac suhlasim s Atlanom. V Ccku je to na 6. riadkov:

Kód: Vybrať všetko

#include <xc.h>
#include <stdint.h>
//PIC16F88

#define _XTAL_FREQ   4000000   

__CONFIG(MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & 
         WDTE_OFF & PWRTE_ON & FOSC_INTOSCIO &
         FCMEN_OFF & IESO_OFF);

void main(){
    TRISB = 0;                     
    PORTB = 0;  
 while (PORTB < 255){            
     PORTB ++;     
     __delay_ms(300); 
 }  
while (PORTB > 0){            
     PORTB --;     
     __delay_ms(300); 
 }       
}
Ale uz je to silne OT.
Evidentne 03601 chce ASM, tak ho tu predsa nebudeme presviedcat.
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4418
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Starý somár začína...

Príspevok od používateľa romiadam » 06 Mar 2024, 21:35

Lennox,
ked uz tak, aby to bolo ferove, daj sem aj vygenerovany ASM kod kompilatorom, aby sme videli ze ci tam toho bude viac alebo nie. Nakolko C-cko sa aj tak preklada kompilatorom do ASM.
Toto je jednoduchy program, v tomto pripade by to mohla byt remiza, ale typujem ze tam bude o zopar instrukcii navyse. Narazam na balu-ho komentar.

To, co jsem v assembleru dostal do 1kB flashe, bych s Cčkem do procesoru nedostal ani náhodou.

Dnes tie flashe su onmoho vacsie, takze tam sa uz moze plytvat s pamatou, takze aj tak vyhrava C-ko.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Lennox
Stály člen
Stály člen
Príspevky: 291
Dátum registrácie: 12 Sep 2019, 22:51
Bydlisko: Bratislava

Re: Starý somár začína...

Príspevok od používateľa Lennox » 06 Mar 2024, 22:09

nech sa paci.
Binarny_Citac_MPASM.lst.txt
(21.23 KiB) 23 stiahnutí
Binarny_citac_XC8.lst.txt
(20.58 KiB) 26 stiahnutí
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok