|
|
|
| Software projekti |
Autor: Tomislav Ratić |
|
E-mail: tomara@uns.ns.ac.yu |
|
|
SOFTVERSKA KAŠNJENJA Intel - asembler U prošlom broju je prikazana realizacija softverskih kašnjenja pomoću naredbi NOP i DJNZ. Iako jednostavan, ovaj način je veoma nepraktičan za ostvarivanje većih kašnjenja, npr. reda 1 sekunde i više. Naime, upotreba naredbe DJNZ se svodi na izvršavanje potprograma određenog trajanja. Za vreme njegovog izvršavanja, moguće je odraditi samo određene radnje koje se obavljaju preko interapt rutina. Ovo praktično znači da je ceo program na neki način “zaglavljen” u petlji kašnjenja i tako onemogućen da za to vreme radi ostale poslove. Kako je mikrokontroleru 8031 (koji radi na 12MHz) za izvršavanje instrukcija potrebno od jedne do četiri mikrosekunde, potprogram za kašnjenje od 1 sekunde bi onemogućio kontroler da (u neinterapt rutinama) izvrši oko 500000 instrukcija prosečnog trajanja od 2 ms. Na osnovu ovoga se nameće ideja da se kašnjenja koja su potrebna ostvaruju u “pozadinskom radu” kontrolera. Posle njihovog isteka generiše se interapt koji daje indikaciju da je kašnjenje završeno. Ovako nešto podrazumeva korišćenje mehanizma sistemskog tajmera. To znači da u pozadini glavnog programa jedan od tajmera u 8031 stalno (ciklično) odbrojava neko poznato (osnovno) vreme i po njegovom isteku generiše interapt. Korišćenjem brojača proteklih osnovnih ciklusa, ovo vreme se može znatno povećati do potrebnog. Recimo da je potrebno generisati pravougaoni signal frequencije 1 Hz faktora ispune 50% na portu P1.6. U inicijalizaciji programa, prvo treba definisati npr. tajmer T0, kao 16-bitni tajmer. Maximalno vreme koje se može ostvariti pomoću T0 je 65536 ms. Radi pogodnosti trajanje osnovnog ci-klusa je zgodno postaviti na 10 ms. Svakih 10 ms program ulazi u interapt rutinu za servisiranje interapta tajmera T0. U ovoj rutini, tj potprogramu, prvo se T0 zaustavlja, postavlja na početnu vrednost i ponovo startuje. Zatim se dekrementira brojač ciklusa tajmera i ako se smanjio do nule postavlja se ponovo na početnu vrednost od 0.5s/10ms = 50. Potom se setuje ili resetuje bit P1.6 i to u zavisnosti od prethodnog stanja. Ovim je potrprogram završen. (Primećuje se da na ovaj način brojač ciklusa T0 u stvari određuje polovinu periode izlaznog signala.) Listing programa u asembleru koji radi gore navedeno dat je u prilogu. Kao zaključak može se reći da je ovaj način ostvarivanja softverskog kašnjenja mnogo elegantniji i ekonomičniji što se tiče procesorskog rada, a vremena koja se mogu ostvariti su velike tačnosti. Ako se koristi samo jedan brojač ciklusa tajmera, maximalno trajanje je 256 ciklusa po 65.536 ms, tj. približno 16.7 sekundi. Veća vremena se mogu ostvariti pomoću više brojača koji su “kaskadno vezani”.
|
|
C o p y r i g h t 1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji |