134 13. Przetwornik analogowo-cyfrowy w mikrokontrolerze SAB 80515 535
-> najkrótsza instrukcja, np. przesłania wyniku pomiaru do akumulatora A (MOV A,ADDAT) wykonywana jest w 1 cyklu maszynowym. Znacznik przerwania IADC w rejestrze 1RCON (o adresie OCOh) musi być kasowany programowo w trakcie obsługi przerwania.
134 13. Przetwornik analogowo-cyfrowy w mikrokontrolerze SAB 80515 535
Cykle
maszynowe
BSY
*S
MOV DAPR,#xx
Przerwanie IADC=1
Wynik do ADDAT
Rys. 13-6 Zależności czasowe w trakcie pracy przetwornika analogowo-cyfrowego w mikrokontrolerze SAB 80C515/535.
• przetwornik zgłasza zakończenie przetwarzania ustawiając znacznik stanu przetwarzania BSY w stan zera logicznego 2 cykle maszynowe przed zakończeniem przetwarzania; taka sytuacja wynika z faktu, że w programie do testowania znacznika BSY i pobrania wyniku przetwarzania wykorzystywane są najczęściej instrukcje:
Czekaj JB BSY,Czekaj ;jeśli BSY = 1 to skok do adresu Czekaj
MOV A,ADDAT ;A <- (ADDAT)
Czas pierwszej instrukcji wynosi 2 cykle maszynowe, a drugiej 1 cykl maszynowy
• wynik przetwarzania wpisywany jest do rejestru ADDAT w pierwszej części ostatniego cyklu maszynowego, cyklu, w którym w jego drugiej części może być pobrana zawartość jednego z podanych rejestrów, np-MOV A,ADDAT. Ta dwu bajtowa instrukcja wykonywana jest w ciągu jednego cyklu maszynowego.
Wynik przetwarzania analogowo-cyfrowego dostępny jest po zakończonym pomiarze w rejestrze ADDAT (A/D converter DATa register):
ADDAT rejestr wyniku przetwarzania (adres 0D9h), rw-00:
bit 2 bit 1 bit 0 LSB
bit 7 bit 6 bit 5 bit 4 || bit 3 MSB
Ponieważ wynik pomiaru uaktualniany jest po każdym pomiarze, dlatego w trakcie wykonywania sera pomiarów wynik poprzedniego przetwarzania zastępowany jest następnym wynikiem. Jeśli po zgłoszeniu gotowości przez przetwornik, przez przerwanie lub przez testowanie znacznika BSY, nie zostanie pobrany wynik pomiaru, to wynik ten jest tracony.
Jeśli przetwornik analogowo-cyfrowy nie jest wykorzystywany to rejestr ADDAT może służyć jako rejestr ogólnego przeznaczenia.
Należy wykonać 5 pomiarów’ napięcia Ux dołączonego do kanału AN2 zmieniającego się w zakresie 0..+3V testując znacznik stanu przetwornika BSY. Wyniki pomiarów przesłać do wewmętrznej pamięci RAM od adresu 3Bh. Przykładowy program jest następujący:
A_C_Pomiar
MOV
R0,#3Bh MOV R7,#5 ;rejestr ADCON:
0
;R0 * 3Bh, rejestr R0 adresuje ; wewnętrzną pamięć RAM
;R7 <- 5, rejestr R7 jest licznikiem
; 2 pomiarów
0 l BSY I ADM I MX2 | MX1 | MX0
MOV ADCON,#0000 lOlOb ;ADM <- 1, praca ciągła
;MX2, MX1, MX0 <- OlOb, kanał AN2 ;rejestr DAPR: / Ou O9
; I-i | o | 1 [ o | o | o | o | o |
MOV DAPR,#1010 OOOOb ;DAPRy ą <— lOlOb
;górna wartość napięcia podzakresu pomiarowego \;intAREF “ 3.125 V, ;DAPR3..0 <- OOOOb
;dolna wartość napięcia podzakresu pomiarowego VIntAGND = 0 V, ;wpis dowolnej wartości do DAPR rozpoczyna przetwarzanie, ;znacznik stanu przetwornika BSY = 1
Czekaj:
JB |
BSY,Czekaj |
;jeśli BSY ^ 1 to skok do etykiety ; (adresu) Czekaj |
MOV |
@R0,ADDAT |
;(R0) <- (ADDAT), przesłanie wyniku ;pomiaru do wewnętrznej pamięci RAM |
INC |
R0 |
;R0 <- R0 + 1 |
DJNZ |
R7,Czekaj |
;R7 <— R7 - 1, jeśli R7 *0 to skok do etykiety (adresu) Czekaj, ;wykonanie następnego pomiaru |
ANL |
ADCON,#1111 011 lb |
;ADM <— 0, koniec serii pomiarów |