czy mógłby mi ktoś wyjaśnić dokładnie ten zapis programu w C dla mikrokontrolera ADUC812 i po co to??:
zmienna = ADCDATAL | ((ADCDATAH& 0x0F) <<8)
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięRejestry (ADUC812)
Moderatorzy:Jacek Bogusz, procesorowiec, robertw, tomasz_jablonski, r-mik, Moderatorzy
http://www.analog.com/UploadedFiles/Dat ... DUC812.pdf -> str.12zmienna = ADCDATAL | ((ADCDATAH& 0x0F) <<8)
Wynikiem przetwarzania ADC jest słowo 12 bitowe rozbite w dwóch osobnych rejestrach ADCDATAH i ADCDATAL.
8 młodszych bitow wyniku mieści się w całości w rejestrze ADCDATAL.
4 najstarsze bity wyniku okupują młodszą połowkę rejestru ADCDATAH, współdzieląc go z numerem kanału (CH-ID) zakodowanym na starszych 4 bitach tegoż rejestru.
Do dalszych obliczeń musisz umieścić wynik przetwarzania w jednej zmiennej typu uint16. No i to właśnie jest zadaniem Twojego kawałka kodu.
ADCDATAH & 0x0F -> zeruje bity numeru kanału (tzn.: xxxxHHHH -> 0000HHHH)
(ADCDATAH& 0x0F) <<8 -> przesuwa użyteczne 4 bity wyniku o 8 miejsc w lewo, czyli de facto do starszego bajtu słowa uint16
(tzn. 0000000 0000HHHH -> 0000HHHH 00000000).
ADCDATAL | ((ADCDATAH& 0x0F) <<8) -> sumuje logicznie z mlodszymi 8 bitami wyniku,
czyli:
0000HHHH 00000000
or
00000000 LLLLLLLL
=
0000HHHH LLLLLLLL
c.n.d.
--
MDz
Dzięki wielkie, bardzo mi to pomogło
[ Dodano: 11-06-2008, 14:23 ]
jest to program napisany w C dla mikrokontrolera ADU812. Wszystko jest jasne do momentu gdy następuje konfiguracja przetwornika A/C. Ustawiony jest tam tryb przeładowania licznika, w momencie gdy licznik chyba T2 zostanie przepełniony, następuje uruchomienie się przetwornika A/C.
Jeżeli jeszcze będziesz mi w stanie pomóc i wytłumaczyc to będe bardzo wdzięczny. Z góry dziękuję za pomoc.
#include <ADUC812.h>
#include <stdio.h>
unsigned int zmienna;
void adc_int () interrupt 6
{
zmienna=ADCDATAL |((ADCDATAH&0x0f)<<8);
P3^=0x10;
printf("Wynik przetwarzania ADC = %02BX%02BX\n",zmienna);
}
void main(void)
{
/* konfiguracja UART */
SCON = 0x52;
TMOD = 0x20;
TH1 = 0xFD;
TR1 = 1;
TI=1;
/*konfiguracja przetwornika A/C */
ADCCON1 = 0x62;
ADCCON2 = 0x01;
RCAP2L = 0x00;
RCAP2H = 0x4C;
TL2 = 0x00;
TH2 = 0x4C;
/*konfiguracja przetwornika C/A */
DACCON=0x7B;
IE = 0xC0;
T2CON = 0x04;
while(1)
{
DACCON&=~0x04;
DAC0H=zmienna >>8;
DAC0L=zmienna&0xff;
DACCON |= 0x04;
}
}
[ Dodano: 11-06-2008, 14:23 ]
jest to program napisany w C dla mikrokontrolera ADU812. Wszystko jest jasne do momentu gdy następuje konfiguracja przetwornika A/C. Ustawiony jest tam tryb przeładowania licznika, w momencie gdy licznik chyba T2 zostanie przepełniony, następuje uruchomienie się przetwornika A/C.
Jeżeli jeszcze będziesz mi w stanie pomóc i wytłumaczyc to będe bardzo wdzięczny. Z góry dziękuję za pomoc.
#include <ADUC812.h>
#include <stdio.h>
unsigned int zmienna;
void adc_int () interrupt 6
{
zmienna=ADCDATAL |((ADCDATAH&0x0f)<<8);
P3^=0x10;
printf("Wynik przetwarzania ADC = %02BX%02BX\n",zmienna);
}
void main(void)
{
/* konfiguracja UART */
SCON = 0x52;
TMOD = 0x20;
TH1 = 0xFD;
TR1 = 1;
TI=1;
/*konfiguracja przetwornika A/C */
ADCCON1 = 0x62;
ADCCON2 = 0x01;
RCAP2L = 0x00;
RCAP2H = 0x4C;
TL2 = 0x00;
TH2 = 0x4C;
/*konfiguracja przetwornika C/A */
DACCON=0x7B;
IE = 0xC0;
T2CON = 0x04;
while(1)
{
DACCON&=~0x04;
DAC0H=zmienna >>8;
DAC0L=zmienna&0xff;
DACCON |= 0x04;
}
}
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości