Pozdrav ekipi.Probao sam nekoliko puta da napisem program za 16f628a tako da u svom internom eepromu upamti podatke tek kad se pritisne taster ali nije htelo da proradi pa bih da pitam za pomoc oko toga.Pronasao sam jedan slican primer pa sam ga samo prekopirao ovde,znaci interesuje me kako (neka bude u ovom primeru) kad brojac bodje do nekog broja,na pr bude to broj 20 mi pritiskom na taster zapamtimo taj broj i kad brojac nastavi brojanje pritiskom na drugi taster da moze da se ocita eeprom i da pojavi u drugom redu to sto je upisano,ovde br 20.Mozda ima neka greskica ali samo sam prekopirai i nabrzinu izbacio ono sto netreba.Evo primera pa sad gde i sta dodati za 16f628A
brojac var byte
provera var byte
taster var bit
TRISA = %11111101
brojac=0
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
cekaj0:
lcdout $FE, $80, "BROJ ="
gosub proveri_ulaz
if taster = 0 then cekaj0:
cekaj1:
gosub proveri_ulaz
if taster = 1 then cekaj1
brojac=brojac + 1
lcdout $FE, 2
lcdout "BROJ ", #brojac
goto cekaj0
proveri_ulaz:
taster=0
for provera = 0 to 100
if PORTA.0 = 1 then return
pauseus 100
next provera
taster = 1
return
end
Ovu pitanje sam postavio u temi "skraceni kurs ucenja picbasica" ali neznam da li sam postavio na pravom mestu pa sam prebacio ovde.Izvinjavam se ako gresim.
Pomoc oko int.eeproma 16f628A
Moderators: pedja089, stojke369, [eDo], trax
Re: Pomoc oko int.eeproma 16f628A
Ovdje klik imaš primjer.
Koristiš naredbe read i write.
Koristiš naredbe read i write.
Re: Pomoc oko int.eeproma 16f628A
Sve sam probao i neide.Pokusavan za sad u proteusu ali neverujem da simulator pravi greske.Meni ustvari trba jedan drugi programcic ali isto kao ovde da upis vrsi na pritisak tastera
Re: Pomoc oko int.eeproma 16f628A
Jesi li probao nešto najjednostavnije ?
Tipa pritiskom na prvo tipkalo spremit broj 10, a pritiskom na drugo tipkalo izčitati i ispisati taj broj na LCD-u ?
To probaj, da razriješiš dilemu sa upisom i čitanjem u EEPROM.
Evo probaj nešto ovako, samo dodaj još define za lcd i ostalo...
Tipa pritiskom na prvo tipkalo spremit broj 10, a pritiskom na drugo tipkalo izčitati i ispisati taj broj na LCD-u ?
To probaj, da razriješiš dilemu sa upisom i čitanjem u EEPROM.
Evo probaj nešto ovako, samo dodaj još define za lcd i ostalo...
Code: Select all
A var byte
B var byte
A=10
Start:
IF tipkalo1=1 Then
write 1,A
end if
If tpikalo2=1 then
read 1,B
lcdout "Read:", B
endif
goto start
Re: Pomoc oko int.eeproma 16f628A
Probao sam slicno tako ali nije islo.Sutra cu da napisem ceo kod pa cu da ga postavim,tad ce sigurno da se vidi gde gresim.U savekom slucaju hvala na pomoci jer svaka bi mi dobrodosla a trebace mi malo vise vreme za pisanje pa cu to da ostavim za sutra da bih sve lepo napisao kako mislim da bi trebalo.
Re: Pomoc oko int.eeproma 16f628A
Evo koda ali ipak mozda ima problem i do proteusa jer na drugi pritisak tastera pojavljuje se "write" u drugom redu a mislim da bi trebalo ispis u drugom redu da se pojavi tek kad se pritisne taster ra3 i brojac nenja cifru u prvom redu tek na svaki drugi pritisak tastera na ra0.Ako nije mnogo kompikovano i mnogo za pisanje pomozite ili ako bi to oduzelo nekom mnogo vremena onda neka ostane,nebih da se niko maltretira sa pisanjem zbog mene.
cmcon = 7
brojac var byte
petlja var byte
taster_uk var bit
TRISA = %11111101
brojac=0
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
cekaj_log0:
lcdout $FE, $80 ,"BROJ ="
gosub proveri_ulaz
if taster_uk=0 then cekaj_log0
cekaj_log1:
gosub proveri_ulaz
if taster_uk=1 then cekaj_log1
brojac=brojac + 1
lcdout $FE, 2
lcdout "BROJ ", #brojac
if porta.2=0 then
write 1 , brojac
pause 10
endif
if porta.3=0 then
read 1, brojac
pause 1000
LCDOUT $FE, $C0
lcdout " WRITE =" ' ovo ispisuje na drugi pritisak tastera ra0
endif
goto cekaj_log0
proveri_ulaz:
taster_uk=0
for petlja=0 to 100
if PORTA.0=1 then return
pauseus 100
next petlja
taster_uk=1
return
end
cmcon = 7
brojac var byte
petlja var byte
taster_uk var bit
TRISA = %11111101
brojac=0
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
cekaj_log0:
lcdout $FE, $80 ,"BROJ ="
gosub proveri_ulaz
if taster_uk=0 then cekaj_log0
cekaj_log1:
gosub proveri_ulaz
if taster_uk=1 then cekaj_log1
brojac=brojac + 1
lcdout $FE, 2
lcdout "BROJ ", #brojac
if porta.2=0 then
write 1 , brojac
pause 10
endif
if porta.3=0 then
read 1, brojac
pause 1000
LCDOUT $FE, $C0
lcdout " WRITE =" ' ovo ispisuje na drugi pritisak tastera ra0
endif
goto cekaj_log0
proveri_ulaz:
taster_uk=0
for petlja=0 to 100
if PORTA.0=1 then return
pauseus 100
next petlja
taster_uk=1
return
end
Re: Pomoc oko int.eeproma 16f628A
LCDOUT $FE, $C0-drugi red... Pogledaj hel ili sto je vec bilo napisano na forumu.
Re: Pomoc oko int.eeproma 16f628A
Resen problem,ustvari nije ga ni bilo.Na laptop-u proradilo iz prve a na komjuteru je bilo raznih brljotina sto me je mnogo bunilo a iovako sam nesiguran u programiranju.Hvala vam svima na savetima.