410 likes | 686 Views
Tekstovno programiranje Basic (Fast Avr). Matjaž Kocjančič. Mikrokrmilnik (Atmel – AT90SMega8). uP mikroprocesor. vodila. EEPROM. vodila. TWI (IIC). SPI. SRAM. Usart (rs232). Oscilator. ADC. Timer/Counter. Comp. Interrupt u. Port B. Port C. Port D. Port B? Port C? Port D?
E N D
Tekstovno programiranjeBasic (Fast Avr) Matjaž Kocjančič
Mikrokrmilnik(Atmel – AT90SMega8) uP mikroprocesor vodila EEPROM vodila TWI (IIC) SPI SRAM Usart (rs232) Oscilator ADC Timer/Counter Comp. Interrupt u. Port B Port C Port D
Port B? Port C? Port D? Skupine sponk na katere lahko priključimo led, tipke LCD, temp. tipala, druga integ. vezja (ura…) Sponko lahko obremenimo do 20 mA! Vrata – Port-i
Spremenljivke • Kaj je spremenljivka? • Kako program ve, da je “a” spremenljivka? • “a” je lahko “karkoli”! Kaj moramo narediti? • Kakšno vrednost lahko vpišemo v “a”?
Tipi spremenljivk • Bit • 0 - 1; 8 v 1x byte • Byte • 0 - 255; 1x byte • Word • 0 – 64.000 (65.535), 2x byte • Integer • -32.000 - +32.000, 2x byte, MSB=1 je minus • String • za nize (besede), npr. “Dober dan”= 9x byte • pa še druge …
Kaj pomeni spremenljivka? • ang. “variable” • Spremenljivka bo hranila neko vrednost, ki se bo spreminjala! (a = 1, a = 146, a = a + 1 …) • Kje se spremenljivka hrani? • Ob deklaraciji, imenovanju spremenljivke • Dim a as byte • Program rezervira določen prostor v RAM-u • byte – rezervira 1 vrstico, 8 bitov v ram-u • Na rezervirano mesto se ne sme vpisati nič drugega!
Priredilni stavki • a = 0 • Kaj naredi? • Spremenljivki a določi vrednost 0! • Seštevanje in odštevanje • a = a + 2 • vzame staro vrednost a in ji prišteje 2, shrani na lokacijo a • a = a – 2 • vzame staro vrednost a in ji odšteje 2, shrani na lokacijo a • če gre v minus mora a biti tipa integer • a=(b+12)*c-3*d
Množenje in deljenje • a = a * 2, množenje • a = a / 2, celoštevilčno deljenje • a = a mod 2, ostanek celoštevilčnega deljenja • 27 / 4 = 6; 27 mod 4 = 3
a = a or 2 a = 33 or 2 a = 35 0010 0001 (33) 0000 0010 (2) 0010 0011 (35) a = 33 or 3 a = 35 a = a and 2 a = 33 and 2, a = 0 0010 0001 (33) 0000 0010 (2) 0000 0000 (0) a = 33 and 15, a = 1 0010 0001 (33) 0000 1111 (15,&hF) 0000 0001 (1) Logične operacije
Simbol Enačbe: y = x1 * x2, y = x1 ^ x2 Izhod je “1” le če so vsi vhodi “1”. Pravilnostna tabela Stikala: x1 x1 x2 & y y x2 AND – slo: IN
Simbol Enačbe: y = x1 + x2, y = x1 V x2 Izhod je “1”, če je vsaj en vhod “1”. Pravilnostna tabela Stikala: x1 x2 OR – slo: ALI x1 ≥1 y x2 y
Logične operacije • a = a xor 2 • b = not b • negacija na bitu
Simbol Enačbe: y = x1 + x2, y = Izhod je “1”, le če je en vhod “1”. XOR – slo: izključni ALI • Pravilnostna tabela x1 >1 y x2
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 bit7 bit7 bit6 bit6 bit5 bit5 bit4 bit4 bit3 bit3 bit2 bit2 bit1 bit1 bit0 bit0 0 0 0 0 0 0 0 0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Pozor pri priredbah • če spremenljivka preseže vrednost • a = 1; a = a * 2 • a = 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 128 v ram-u a b c 256 v ram-u ? Pokvari b
Pozor pri priredbah • uK je vseeno kaj mi vpišemo v “a” • uK ne preverja, če je “a” prevelik • 128 sledi 2*128 = 256 v Ram-u le 0 • a = 0 * 2 je vedno 0 • Kdo mora nadzirati velikost “a”? • Program oz. ustvarjalec programa!!
Pogojni stavki • Pogojni stavek • If <pogoj> then en ukaz • If <pogoj> then • prvi ukaz • drugi ukaz • … • end if • Select
If <pogoj> then prva možnost else druga možnost end if If <pogoj> then en ukaz else if <pogoj2> (lahko večkrat) drugi ukaz else tretji ukaz end if Vejitve
pogoj (boolean) • a = 1 • če je pogoj izpolnjen vrne true (“1”) • sicer false (“0”) • a > 1 • a = 3, Pogoj = ? • true • a = 1 and b=0
Zanke • Skupina ukazov v zanki se ponavlja • Število ponovitev je odvisno od zanke in od pogojev • For-Next • točno določeno število ponovitev • Do-Loop • neskončna ali pogojno zanka (pogoj na koncu) • While-Repeat • pogojna zanka (pogoj na začetku)
Zanka for - next • for i = 1 to 10 • stavki • next • Stavki se 10x ponovijo, “next” poveča i za ena • korak večanja je privzeto 1 • lahko pa ga nastavimo • for i = 100 to 10 step -2 • stavki • next • Stavki se 10x ponovijo, “next” poveča i za ena
a= 2 for i = 1 to 4 a = a * 2 next print a a = ? a = 32 a = 2 for k = 10 to 0 step -2 a = a + 2 next print a a = ? a = 14 • k a • 4 • 6 • 8 • 10 • 12 • 0 14 • i a • 4 • 8 • 16 • 32 Primeri for-next
Zanka do-loop • Praviloma neskončna zanka • Ponavlja se, dokler čip deluje • do • stavki • exit do ali goto ‘s tema ukazoma lahko zapustimo zanko • loop
Zanka do-loop • Lahko tudi pogojna zanka • do • stavki • loop while <pogoj> • Ponavlja, dokler je pogoj izpolnjen
dim a as bit a = 1 do portd.1 = a waitms 100 a = not a loop Kaj počne zanka? Lučka d.1 se prižiga in ugaša vsakih 100 ms do portd = 2 waitms 100 portd = 0 waitms 100 loop Kaj počne zanka? Lučka d.1 se prižiga in ugaša vsakih 100 ms Primeri do-loop
Branje port-ov (stikalo) • Reset DDRB.0 • sponka B0 postane vhod • a = PinB.0 • preberemo stanje sponke B0 • a = 1 (Vcc) • a = 0 (Gnd) • Enako, ko beremo druga digitalna vezja!
Branje port-ov (tipk) - PullUp • Pritisnjena • PD.7 =0 • Spuščena PD.7 = odprte sponke • Rešimo s PullUp uporom! • PD.7=1 • Še boljše z internim PullUp uporom! ??
Stikalo od daleč! Stikalo preden pristane v končni poziciji nekajkrat poskoči! Človek tega ne zazna! uK (glede na program) lahko zazna vsa stanja! Programer mora to upoštevati! 10-20 ms Branje port-ov (tipk) - iskrenje
Branje port-ov (tipk) - Key • Višji programski jeziki imajo za pogoste probleme tovarniške podprograme! • Key Rows za nas naredi vse potrebno za branje tipk (ddr, iskrenje, pin). • &hc0 – pove kje so tipke na D! Kje? • c(16) = 12(10), 0(16)=0(10) • 1100 0000(2) • Na d7 in d6 sta priključeni tipki
Primer uporabe tipk • uK določimo, kje so tipke. • Pripravimo spremenljivko za tipke • Stanje tipk prenesemo v spremenljivko • Izpisi glede na pritisnjeno tipko
Tipke so na portB7, 5, 3 $Key Rows=? portb 7 6 5 4 3 2 1 0 1 0 1 0 1 0 0 0 (2) A 8 (16) $Key Rows=PORTB &hA8 $key rows=PORTC &h7E Na katerih sponkah so tipke? Koliko tipk je? 7(16)=0111, E(16)=1110 7654 3210 0111 1110 Tipke so portC6, 5, 4, 3, 2, 1 Priključenih je 6 tipk Primera izračuna &h
Podprogrami • Ko program ni več kratek, • ko vključuje več neodvisnih delov • je dobro program razdeliti: • glavni program, • podprogrami! • Pri nas bodo podprogrami v isti datoteki! • Lahko pa ima vsak svojo datoteko ali več. Npr Key()
Podprogram • Imenovanje (definiranje) podprograma • Declare Sub ime() • Postavitev podprograma (nekam na konec) • Sub ime() • Set Portd.1 : waitms 100 • Reset Portd.1 : waitms 100 • End Sub • Klic podprograma (nekje iz glavnega programa) • do • ime() • loop
Imenovanje Postavitev podprograma Klic podprograma Primer Sub
Kaj dela program? a. Utripajo desne 3 led b. Utripajo leve 3 led c. Izmenično utripajo leve in desne d. Enkrat leve nato le desne a. Naloga Sub
Pisno preverjanje znanja • Tisti, ki ne pride pisat ali piše negativno bo pri vajah ustno vprašan (ni ocene iz izdelka). • Če bo več kot tretjina negativna, pišemo ponovno med vajami!
Red pri pouku • Ure postajajo naporne!? • Mnenje lahko pove tisti, ki dvigne roko in ga povabim. Ostali tišina sicer povem nov način! • Eni se zelo dolgočasite! Eni sploh ne sledite! Zakaj? • Tisti, ki moti dobi termin pri vajah (Najprej ustno v SP3, šele nato vaje v KRA).
Zvezki • V kratkem bom pobral zvezke (teorija + vaje)! • Tisti brez dobijo termin pri vajah. Vsi v sp3, po spraševanju v KRA.