 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ATA Član

Pridružen-a: Sob 12 Jun 2004 13:40 Prispevkov: 135 Aktiv.: 0.57
|
Objavljeno: Čet Dec 21, 2006 6:26 pm Naslov sporočila: |
|
|
Za moj projekt sem zelel napisati bascom program8051(at89c4051) vendar ga ne znam .Iz induktivnega senzorja peljem impulze na mikrokontroler in rad bi, da mi mikrokontroler šteje impulze in na vsakih 1800 impulzov poveča število za 1. Števec ur in nastavitev količine v litrih sem realiziral in deluje.Če mi kdo kakorkoli lahko pomaga bom vesel za pomoč.Pomagal sem si z raznimi programi vendar ne gre.
lp ata |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Čet Dec 21, 2006 9:16 pm Naslov sporočila: |
|
|
LP!
Sam sicer poznam Bascom AVR (ne vem, če so vsi ukazi isti, a večina je zagotovo), a moja ideja je sledeča:
'spremenljivke
Dim stevilo as word 'stevilo trenutnih impulzov (od 0)
Dim limita as word 'limita nad katero se poveca stevec (v tvojem primeru 1800)
Dim stevec as word 'števec, ki se povečuje ob vsaki prekoračitvi limite
'zacetne nastavitve
stevilo = 0
limita = 1800
stevec = 0
config debounce = 20 'pulz mora trajati vsaj 20ms in nato spustiti da se začne novo štetje
config porta = input 'recimo da imas senzor na porta.0
Zanka:
Do
debounce pina.0 , 1 , Stej 'ko pride pulz na a.0 pojdi v podprogram Stej
locate 1 , 1 'prikaz stevca in stevila na LCDju
lcd "stevec: " : Lcd stevec
Locate 2 , 1
lcd "stevilo: " : Lcd stevilo
Loop
Stej:
Incr stevilo 'povecaj stevilo za 1
If stevilo = limita then 'ko stevilo doseze limito...
stevilo = 0 '...postavi stanje stevila na 0...
incr stevec '...in povecaj stevec za 1.
endif
Goto zanka
Če bo delalo pridem na eno pivo; lahko je malo (k je simpl... )
Nisem nič sprobal, pišem direkt tukaj...
LP, Grega |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Čet Dec 21, 2006 9:25 pm Naslov sporočila: |
|
|
Najprej vprašanje: Na kateri pin si pa peljal izhod induktivnega stikala? Najlažje boš to rešil tako, da boš stikalo povezal z INT0 ali INT1 pin. Tako ti ni treba vsakič znova preverjati spremembe stanja.
V bascomu pa nekako takole:
Config Int0=rising (proženje interrupta na pozitivno flanko)
Enable interrupts
Enable int0
On Int0 Naredinekaj
Do
'Tvoj program...
.
.
.
Loop
Naredinekaj:
Incr Neka_vrednost
If Neka_vrednost=1800 then
Incr Neka_druga_vrednost
Neka_vrednost = 0
End if
Return
Vsakič, ko bo prehod iz "0" na "1", se pravi, vsakič ko bo induktivno stikalo dalo signal, se bo izveldel tisti del programa, ki skrbi za prekinitev.
LP Gorazd _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
ATA Član

Pridružen-a: Sob 12 Jun 2004 13:40 Prispevkov: 135 Aktiv.: 0.57
|
Objavljeno: Pet Dec 22, 2006 11:50 am Naslov sporočila: |
|
|
Grega in Gorazd.Najlepša hvala,sedaj pa na delo.Moje sive stare celice ze delujejo upam da pravilno. Bom videl na rezultatu.Ko bo program tak kot je treba ga bom pripel na forum.Obljubim.Vsem zelim veliko zdravja in vesele praznike
lp ata |
|
Nazaj na vrh |
|
 |
ATA Član

Pridružen-a: Sob 12 Jun 2004 13:40 Prispevkov: 135 Aktiv.: 0.57
|
Objavljeno: Pet Dec 22, 2006 5:45 pm Naslov sporočila: |
|
|
JUHUHU! vse kaze da stevec deluje.Še enkrat hvala. Obljubil sem in prilagam program tak kot je, mogoče bo kdo lahko ta program uporabil za izhodiče svojih aplikacij, ne uspe mi pa napisati kodo za eeprom da bi shranil podatke(zalogo , porabo in ure) v slučaju izpada napetosti. Program deluje tako da lahko spremljam na LCD naslednje podatke : število ur gorilca,zalogo,porabo, nabavo in dopišemo lahko ponovno nabavo. Pri vnosu nabave se zaloga avtomatsko pripiše .Pri prikazu porabe se litri seštevajo pri zalogi pa istočasno odštevajo. V prihodnosti bom pripravil še tiskano vezje( PCB),shemo in seznam uporabljenih elementov.Program je zamenjan,sem ga dopolnil . Pogled na lcd pove vse podatke,tako da vemo tudi koliko olja je v cisterni ne da bi merili v sami cisterni.Ob kompletni porabi in pri ničelni zalogi se program sam ustavi.Če mi je kdo pripravljen pomagati pri shranjevanju podatkov v eprom(24c...)bom zelo vesel.
RESET za porabo , nabavo in uro je dodan.
lp ATA
Prišlo je do hude napake pri programiranju in moram program popraviti , namreč nekaj funkcij ni delovalo pravilno. oprostite mi ,takoj ko bo koda v redu ga bom pripel nazaj. Star sem in malo, vćasih tudi veliko zabrkljam.Hitel sem in se mi je maščevalo. |
|
Nazaj na vrh |
|
 |
ATA Član

Pridružen-a: Sob 12 Jun 2004 13:40 Prispevkov: 135 Aktiv.: 0.57
|
Objavljeno: Sre Jan 10, 2007 6:27 pm Naslov sporočila: |
|
|
PROGRAM SEM POPRAVIL IN GA PRILAGAM
ATA
Koda: |
'PROGRAM ZA MERITEV PORABE,ZALOGE KURILNEGA OLJA IN ČASA DELOVANJA GORILCA
'
'DELNI AVTOR: ATA S POMOČJO KOLEGOV IZ FORUMOV
'///////////////////////////////////////////////////////////////////////////////
'VHOD V MENY NABAVA - ISTOCASNI PRITISK P3.0 IN P3.2 ZA NABAVO
'POCAKAJTE NEKAJ CASA DA SE POKAZE NABAVA V SP. VRSTICI IN ZALOGA V ZGORNJI
'SLEDI:
'ISTOCASNI PRITISK P3.3 IN P3.2 ZMANJSEVANJE NABAVE
'ISTOCASNI PRITISK P3.2 IN P3.1 POVECEVANJE NABAVE
'PRI POVECEVANJU NABAVE SE ISTOCASNO POVISUJE TUDI ZALOGA AUTOMATSKO, OBRATNO SE NE ZMANJSUJE
'RESET URE, NABAVE,PORABE(STEVEC) JE PRITISK P3.3 BREZ VHODA V MENY.
'VRNITEV V PROGRAM IN PRIKAZ PODATKOV NA LCD:ISTOCASNI PRITISK P.3.0 IN P3.1
'KOLICINO ZALOGE IN NABAVE VPISITE PO SVOJI ZELJI.(NAB= 1000/ZAL =1000).PODATKA MORATA BITI ENAKA.
'P3.4 JE VHOD IMPULZOV
'P3.2 JE VHOD ZA PREKINITEV IMPULSOV IN ISTOCASNO URE (DELOVANJE GORILCA)
'TIPKA4 =P3.3,TIPKA3=P3.2,TIPKA2=P3.1,TIPKA1=P3.0
'P3.5 = SDA ALI OBRATNO
'P3.7 = SCL ALI OBRATNO
'UPORABITE AT89C4051 ALI ZMOGLIVEJSEGA, PROGRAMIRAM Z BASCOM 8051 LICENCNI ALI Z BASCOM-8051 2.0.13.0 DEMO KI IMA 4K KODE.
'KO SE ZALOGA IZTECE SE PROGRAM AUTOMATSKO USTAVI,IN GA JE TREBA RESETIRATI.
'PROGRAM LAHKO PROBATEZ MINIPIN TESTNO PLOSCO(UPAM DA TO NE JEMLETE ZA REKLAMO).
'RUTINO ZA EPROM NAPISITE SAMI , MENI NI USPELO(SHRANITEV PORABE,ZALOGE,NABAVE IN URE
'///////////////////////////////////////////////////////////////////////////////
$large
$regfile = "89c4051.dat"
$crystal = 12000000
Declare Sub Keyboard
Declare Sub Debounce
Dim Stevilo As Word
'////////////////////////////////////////////////////////////////////////////////////
Dim Limita As Word
Dim Stevec As Word
Dim Clock As Byte , Clock1 As Byte
Dim Sekunde As Byte , Minute As Byte , Ure As Word ,
Dim Nabava As Word
Dim Zaloga As Word
Dim I As Word
'///////////////////////////////////////////////////////////////////////////
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
Config Debounce = 20
Config Timer0 = Timer , Gate = External , Mode = 2
On Timer0 Timer_0_int
Load Timer0 , 250
Priority Set Timer0
Enable Interrupts
Enable Timer0
Start Timer0
P3.4 = 0
'////////////////////////////////////////////////////////////////////////////
Clock = 0
Clock1 = 0
Sekunde = 0
Minute = 0
Ure = 0
Stevilo = 0
Limita = 1800
Stevec = 0
Zaloga = 500
Nabava = 500
'//////////////////////////////////////////////////////////////////////////////
Cls
Wait 1
Do
Keyboard
Debounce P3.4 , 1 , 1 , Stej
Locate 1 , 1 : Lcd ; "U" ; Chr(41)
Locate 1 , 3 : Lcd Ure ; " "
Locate 1 , 7 : Lcd ":"
Locate 1 , 8 : Lcd Minute ; " "
Locate 1 , 10 : Lcd "P" ; Chr(41) ; Stevec ; " "
Locate 2 , 1 : Lcd "N" ; Chr(41) ; Nabava ; " "
Locate 2 , 10 : Lcd "Z" ; Chr(41) ; Zaloga ; " "
If Sekunde > 59 Then
Incr Minute
Sekunde = 0
End If
If Minute > 59 Then
Incr Ure
Minute = 0
End If
If P3.2 = 0 Then
Stop Timer0
End If
If P3.2 = 1 Then
Start Timer0
End If
If P3.3 = 0 Then
WAIT 1
Reset Nabava
Reset Stevec
Reset Minute
Reset Ure
Nabava =500
Zaloga=zaloga+nabava
Stevec = 0
Minute = 0
Ure = 0
End If
Loop
'////////////////////////////////////////////
Timer_0_int:
Incr Clock
If Clock > 99 Then
Clock = 0
Incr Clock1
End If
If Clock1 > 39 Then
Clock1 = 0
Incr Sekunde
End If
Incr Stevilo
If Stevilo = Limita Then
Stevilo = 0
Incr Stevec
If Stevec > 0then
Decr Zaloga
End If
End If
If Zaloga < 1 Then
Stop
End If
Return
'/////////////////////////////////////////////////////////////
Tipke:
Cls
Do
Home
Upperline
Lcd "ZALOGA " ; Chr(41) ; " " ; Zaloga ; " "
Home
Lowerline
Lcd "NABAVA " ; Chr(41) ; " " ; Nabava ; " "
If P3.1 = 0 Then
If P3.0 = 0 Then
Return
End If
Incr Nabava
Incr Zaloga
Waitms 250
End If
If P3.3 = 0 Then
Decr Nabava
Decr Zaloga
Waitms 250
End If
If P3.0 = 0 Then
If P3.1 = 0 Then
Cls
Return
End If
End If
Loop
Return
'/////////////////////////////////////////////////////////////////////
Tipke1:
Cls
Do
If P3.1 = 0 Then
If P3.0 = 0 Then
Return
End If
End If
If P3.1 = 0 Then
If P3.0 = 0 Then
Cls
Return
End If
Waitms 250
End If
If P3.3 = 0 Then
Waitms 250
End If
If P3.0 = 0 Then
If P3.1 = 0 Then
Cls
Return
End If
End If
Loop
Return
'//////////////////////////////////////////////////////////////////////////////
Sub Keyboard
Debounce P3.0 , 0 , Tipke , Sub
Debounce P3.1 , 0 , Tipke1 , Sub
End Sub
'/////////////////////////////////////////////////////////////////
|
Nazadnje urejal/a ATA Čet Jan 18, 2007 5:30 pm; skupaj popravljeno 14 krat |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.24 Kraj: Ig
|
Objavljeno: Sre Jan 10, 2007 7:36 pm Naslov sporočila: |
|
|
V priloženem programu je pokazano, kako uporabiti eeprom 24C...
Vrednost, ki jo želiš shraniti, najprej shraniš v spremenljivko "value" nato pa s klicanjem subrutine Write_eeprom zapišeš v eeprom. Branje iz EEproma je podobno.
Kličeš subrutino read_eeprom (lokacija, spremenljivka), . Vrednost lokacije se shrani v spremenljivko value.
Pomembne so še definicije SCK in SCL (ter obvezno pull-up upora nekje 5k na obe liniji) ter konstanti adressw ter adressr.
SDA gre na P3.4
SCL pa na P3.5
Malo se poigraj.
$regfile = 89c4051.dat
$crystal = 12000000
$large
$sim
Declare Sub Write_eeprom(adres As Byte , Value As Byte)
Declare Sub Read_eeprom(adres As Byte , Value As Byte)
Declare Sub Pavza
Declare Sub Pavzab
Const Addressw = 160
Const Addressr = 161
Dim A As Byte
Dim Adres As Byte , Value As Byte
Dim M As Byte
Dim S As Byte
Dim Korak As Byte
Dim Maxt As Byte
Dim Dnevno As Byte
Dim Skupno As Byte
Dim Maxt1 As Long
Dim Korak1 As Integer
Dim M1 As Byte
Dim U1 As Byte
Dim U As Long
Dim U2 As Byte
Dim Relstat As Bit
Dim Pipstat As Bit
Dim Status As Byte
Dim Bremstat As Bit
Izbor Alias P3.0
Tipka Alias P3.1
Rele Alias P3.2
Pipser Alias P3.3
Ledika Alias P3.7
Breme Alias P1.0
Config Lcd = 16 * 2
Lcdinit
P3 = 0
Izbor = 1
Tipka = 1
'-----------------------------Main program--------------------------------------
Pipser = 1
Ledika = 1
Wait 1
Cls
If Izbor = 0 Then
'Waitms 10
Goto Nastavitve
End If
If Tipka = 0 Then
'Waitms 10
Goto Brisanje1
End If
Goto Main
Nastavitve:
Cls
Lcd "Nastavi korak"
Wait 1
Zanka:
If Izbor = 0 Then
Incr Korak
Waitms 250
If Korak > 60 Then
Korak = 0
End If
End If
Lowerline
Lcd "KORAK: " ; Korak
Lcd " min "
If Tipka = 0 Then
Goto Tmax
End If
Goto Zanka
Tmax:
Cls
Lcd "Nastavi Tmax"
Wait 1
Zanka1:
If Izbor = 0 Then
Incr Maxt
Waitms 250
If Maxt > 24 Then
Maxt = 0
End If
End If
Lowerline
Lcd "Max. cas: " ; Maxt
Lcd " h "
If Tipka = 0 Then
Goto Rele1
End If
Goto Zanka1
Rele1:
Cls
Lcd "Rele po izteku: "
Wait 1
Zanka4:
If Izbor = 0 Then
Waitms 250
Relstat = Not Relstat
End If
Lowerline
Lcd "Rele = " ; Relstat
Lcd " "
If Tipka = 0 Then
Goto Pipserstat
End If
Goto Zanka4
Pipserstat:
Cls
Lcd "Stanje pipserja:"
Wait 1
Zanka5:
If Izbor = 0 Then
Waitms 250
Pipstat = Not Pipstat
End If
Lowerline
Lcd "Pipser = " ; Pipstat
Lcd " "
If Tipka = 0 Then
Goto Bremestatus
End If
Goto Zanka5
Bremestatus:
Cls
Lcd "Senzanje bremena"
Wait 1
Zanka6:
If Izbor = 0 Then
Waitms 250
Bremstat = Not Bremstat
End If
Lowerline
Lcd "Senzanje = " ; Bremstat
If Tipka = 0 Then
Goto Brisanje
End If
Goto Zanka6
Brisanje:
Cls
Lcd "Brisanje eeproma"
'Lowerline
'Lcd "--------**------"
Waitms 250
Call Write_eeprom(1 , 0)
Call Write_eeprom(2 , 0)
'Waitms 250
Cls
Lcd "Shranjevanje"
'Lowerline
'Lcd "vrednosti"
Value = Korak
Call Write_eeprom(3 , Value)
Value = Maxt
Call Write_eeprom(4 , Value)
If Pipstat = 0 And Relstat = 0 And Bremstat = 0 Then
Status = 0
End If
If Pipstat = 0 And Relstat = 0 And Bremstat = 1 Then
Status = 1
End If
If Pipstat = 0 And Relstat = 1 And Bremstat = 0 Then
Status = 2
End If
If Pipstat = 0 And Relstat = 1 And Bremstat = 1 Then
Status = 3
End If
If Pipstat = 1 And Relstat = 0 And Bremstat = 0 Then
Status = 4
End If
If Pipstat = 1 And Relstat = 0 And Bremstat = 1 Then
Status = 5
End If
If Pipstat = 1 And Relstat = 1 And Bremstat = 0 Then
Status = 6
End If
If Pipstat = 1 And Relstat = 1 And Bremstat = 1 Then
Status = 7
End If
Value = Status
Call Write_eeprom(5 , Value)
'Wait 1
Cls
Brisanje1:
Call Write_eeprom(1 , 0)
Goto Main
Main:
Call Read_eeprom(1 , Value)
Dnevno = Value
Call Read_eeprom(2 , Value)
Skupno = Value
Call Read_eeprom(3 , Value)
Korak = Value
Call Read_eeprom(4 , Value)
Maxt = Value
Maxt1 = Maxt * 3600
Korak1 = Korak * 60
Call Read_eeprom(5 , Value)
Status = Value
Select Case Status
Case 0 : Pipstat = 0
Relstat = 0
Bremstat = 0
Case 1 : Pipstat = 0
Relstat = 0
Bremstat = 1
Case 2 : Pipstat = 0
Relstat = 1
Bremstat = 0
Case 3 : Pipstat = 0
Relstat = 1
Bremstat = 1
Case 4 : Pipstat = 1
Relstat = 0
Bremstat = 0
Case 5 : Pipstat = 1
Relstat = 0
Bremstat = 1
Case 6 : Pipstat = 1
Relstat = 1
Bremstat = 0
Case 7 : Pipstat = 1
Relstat = 1
Bremstat = 1
End Select
Lcd " Dnevno : " ; Dnevno
Lowerline
Lcd " Skupno : " ; Skupno
If Korak = 0 Then
Goto Nastavitve
End If
If Maxt = 0 Then
Goto Nastavitve
End If
Zanka2:
Debounce Izbor , 0 , Odstevaj
Debounce Tipka , 0 , Brisanje_dnevno
Goto Zanka2
Pristej:
Incr Dnevno
Incr Skupno
Goto Odstevaj
Brisanje_dnevno:
Call Write_eeprom(1 , 0)
Adres = 2
Value = Skupno
Call Write_eeprom(2 , Value)
Goto Main
Odstevaj:
Maxt1 = Maxt * 3600
If U < Maxt1 Then
U = U + Korak1
Ledika = 1
Incr Dnevno
Incr Skupno
Value = Dnevno
Call Write_eeprom(1 , Value)
Value = Skupno
Call Write_eeprom(2 , Value)
End If
Goto Odstevanje
Bremsens:
Do
Locate 1 , 1
Lcd " Ni bremena. "
Lowerline
Lcd "STOP:" ; U2 : Lcd ":" ; M : Lcd ":" ; S
If Breme = 1 Then
Goto Odstevanje
End If
Loop
'---------------------------ODSTEVANJE----------------------------------------
Odstevanje:
Cls
Odstevanje1:
While U >= 1
Rele = Not Relstat
If Breme = 0 And Bremstat = 1 Then
Cls
Goto Bremsens
End If
Debounce Izbor , 0 , Odstevaj
S = U Mod 60
M1 = U / 60
M = M1 Mod 60
U2 = U / 3600
If S = 9 Then
Cls
End If
Locate 1 , 1
Lcd Dnevno
Locate 1 , 12
Lcd Skupno
Lowerline
Lcd "Se : " ; U2 : Lcd ":" ; M : Lcd ":" ; S
If U < 300 And S = 59 Then
If Pipstat = 1 Then
Sound , Pipser , 500 , 7000
Pipser = 1
Else
Waitms 250
Waitms 250
Waitms 250
Waitms 30
End If
Ledika = 0
Gosub Pavzab
End If
If U2 = 0 And M = 0 And S < 10 Then
If Pipstat = 1 Then
Sound , Pipser , 500 , 700
Pipser = 1
Else
Waitms 250
Waitms 250
Waitms 250
Waitms 30
End If
Ledika = 1 Xor Ledika
Goto Pavzab
End If
Decr U
Gosub Pavza
Wend
Rele = Relstat
Value = Dnevno
Call Write_eeprom(1 , Value)
Value = Skupno
Call Write_eeprom(2 , Value)
Cls
Goto Main
Sub Write_eeprom(adres As Byte , Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
'Branje EEPROMA
Sub Read_eeprom(adres As Byte , Value As Byte)
I2cstart
I2cwbyte Addressw
I2cwbyte Adres
I2cstart
I2cwbyte Addressr
I2crbyte Value , 9
I2cstop
End Sub
Pavza:
Waitms 250
Waitms 250
Waitms 250
Waitms 239
Delay
Delay
Delay
Return
Pavzab:
Waitms 213
Delay
Delay
Decr U
Goto Odstevanje
LP Gorazd _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
ATA Član

Pridružen-a: Sob 12 Jun 2004 13:40 Prispevkov: 135 Aktiv.: 0.57
|
Objavljeno: Sre Jan 17, 2007 4:44 pm Naslov sporočila: |
|
|
Prilagam še kodo v AVR za meritev olja. Ta KODA polno zaseda prostor v mikrokrmilniku. Pri širitvi kode uporabite zmoglivejši mikrokontroler.Podatke(zaloga itd) lahko sedaj vpišete direktno v mikrokontroler.
lp ata
Koda: |
'PROGRAM ZA MERITEV PORABE,ZALOGE KURILNEGA OLJA IN ČASA DELOVANJA GORILCA BASCOM AVR
'
' AVTOR: ATA S POMOČJO KOLEGOV IZ FORUMOV
'///////////////////////////////////////////////////////////////////////////////
'VHOD V MENY NABAVA - ISTOCASNI PRITISK P3.0 IN P3.2 ZA NABAVO
'POCAKAJTE NEKAJ CASA DA SE POKAZE NABAVA V SP. VRSTICI IN ZALOGA V ZGORNJI
'SLEDI:
'ISTOCASNI PRITISK P3.3 IN P3.2 ZMANJSEVANJE NABAVE
'ISTOCASNI PRITISK P3.2 IN P3.1 POVECEVANJE NABAVE
'PRI POVECEVANJU NABAVE SE ISTOCASNO POVISUJE TUDI ZALOGA AUTOMATSKO, OBRATNO SE NE ZMANJSUJE
'RESET URE, NABAVE PORABE(STEVEC) JE PRITISK P3.3 BREZ VHODA V MENY.
'VRNITEV V PROGRAM IN PRIKAZ PODATKOV NA LCD:ISTOCASNI PRITISK P.3.0 IN P3.1
'KOLICINO ZALOGE IN NABAVE VPISITE PO SVOJI ZELJI.(NAB= 1000/ZAL =1000).PODATKA MORATA BITI ENAKA.
'P3.4 JE VHOD IMPULZOV
'P3.2 JE VHOD ZA PREKINITEV IMPULSOV IN ISTOCASNO URE (DELOVANJE GORILCA)
'TIPKA4 =P3.3,TIPKA3=P3.2,TIPKA2=P3.1,TIPKA1=P3.0
'UPORABITE AT90S2313 ALI ZMOGLIVEJSEGA, PROGRAMIRAM Z BASCOM-AVR DEMO KI IMA 4K KODE.
'KO SE ZALOGA IZTECE SE PROGRAM AUTOMATSKO USTAVI,IN GA JE TREBA RESETIRATI.
'PROGRAM LAHKO PROBATEZ MINIPIN TESTNO PLOSCO(UPAM DA TO NE JEMLETE ZA REKLAMO).
'RUTINO ZA EPROM NAPISITE SAMI , MENI NI USPELO(SHRANITEV PORABE,ZALOGE,NABAVE IN URE )
'///////////////////////////////////////////////////////////////////////////////
$large
$regfile = "2313def.dat"
$crystal = 12000000
Declare Sub Keyboard
Declare Sub Debounce
Dim Stevilo As Word
'////////////////////////////////////////////////////////////////////////////////////
Dim Limita As Word
Dim Stevec As Word
Dim Clock As Byte , Clock1 As Byte
Dim Sekunde As Byte , Minute As Byte , Ure As Word ,
Dim Nabava As Word
Dim Zaloga As Word
Dim I As Word
'///////////////////////////////////////////////////////////////////////////
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
Config Debounce = 20
Config Pind.4 = Input
Config Pind.3 = output
Config Pind.2 = Input
Config Pind.1 = Input
Config Pind.0 = Input
Config Pinb.7 = Output
Config Pinb.6 = Output
Config Pinb.5 = Output
Config Pinb.4 = Output
Config Pinb.3 = Output
Config Pinb.2 = Output
Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_0_int
Enable Interrupts
Enable Timer0
Start Timer0
'////////////////////////////////////////////////////////////////////////////
Clock = 0
Clock1 = 0
Sekunde = 0
Minute = 0
Ure = 0
Stevilo = 0
Limita = 1800
Stevec = 0
Zaloga = 1000
Nabava = 1000
'//////////////////////////////////////////////////////////////////////////////
Cls
Wait 1
Do
Keyboard
Debounce Pind.4 , 1 , 1 , Stej
Locate 1 , 1 : Lcd ; "U" ; Chr(41)
Locate 1 , 3 : Lcd Ure ; " "
Locate 1 , 7 : Lcd ":"
Locate 1 , 8 : Lcd Minute ; " "
Locate 1 , 10 : Lcd "P" ; Chr(41) ; Stevec ; " "
Locate 2 , 1 : Lcd "N" ; Chr(41) ; Nabava ; " "
Locate 2 , 10 : Lcd "Z" ; Chr(41) ; Zaloga ; " "
If Sekunde > 59 Then
Incr Minute
Sekunde = 0
End If
If Minute > 59 Then
Incr Ure
Minute = 0
End If
If Pind.2 = 0 Then
Set Portd.2
Stop Timer0
End If
If Pind.2 = 1 Then
Set Portd.2
Start Timer0
End If
If Pind.3 = 0 Then
Set Portd.3
Reset Stevec
Reset Minute
Reset Ure
Reset nabava
End If
If Pind.3 = 0 Then
'SET PORTD.3-ZA VPIS PREMALO FLASHA(100% ZASEDENO)V2313
Zaloga = Zaloga + Nabava 'ZA VPIS PREMALO FLASHA V2313
Nabava = 1000
Stevec = 0
Minute = 0
Ure = 0
End If
Loop
'////////////////////////////////////////////
Timer_0_int:
Incr Clock
If Clock > 99 Then
Clock = 0
Incr Clock1
End If
If Clock1 > 55 Then 'tukaj korigiramo tocnost ure(<55>)
Clock1 = 0
Incr Sekunde
End If
Incr Stevilo
If Stevilo = Limita Then
Stevilo = 0
Incr Stevec
If Stevec > 0then
Decr Zaloga
End If
End If
If Zaloga < 1 Then
Stop
End If
Return
'/////////////////////////////////////////////////////////////
Tipke:
Cls
Do
Home
Upperline
Lcd "ZALOGA " ; Chr(41) ; " " ; Zaloga ; " "
Home
Lowerline
Lcd "NABAVA " ; Chr(41) ; " " ; Nabava ; " "
If Pind.1 = 0 Then
Set Portd.1
If Pind.0 = 0 Then
Set Portd.0
Return
End If
Incr Nabava
Incr Zaloga
Waitms 250
End If
If Pind.3 = 0 Then
Set Portd.3
Decr Nabava
Decr Zaloga
Waitms 250
End If
If Pind.0 = 0 Then
Set Portd.0
If Pind.1 = 0 Then
Set Portd.1
Cls
Return
End If
End If
Loop
Return
'/////////////////////////////////////////////////////////////////////
Tipke1:
Cls
Do
If Pind.1 = 0 Then
Set Portd.1
If Pind.0 = 0 Then
Set Portd.0
Return
End If
End If
If Pind.1 = 0 Then
Set Portd.1
If Pind.0 = 0 Then
Set Portd.0
Cls
Return
End If
Waitms 250
End If
If Pind.3 = 0 Then
Set Portd.3
Waitms 250
End If
If Pind.0 = 0 Then
Set Portd.3
If Pind.1 = 0 Then
Set Portd.1
Cls
Return
End If
End If
Loop
Return
'//////////////////////////////////////////////////////////////////////////////
Sub Keyboard
Debounce Pind.0 , 0 , Tipke , Sub
Debounce Pind.1 , 0 , Tipke1 , Sub
End Sub
'/////////////////////////////////////////////////////////////////
|
|
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|