реклама на сайте
подробности

 
 
> 16 BIT -> 2 * 8 BIT, не получаеться взять побайтовый результат из АЦП
pfg
сообщение Apr 7 2008, 13:05
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 8-02-07
Пользователь №: 25 175



пишу полд ИАРом
Вот кусочек кода с дизасмеблером

unsigned char bb, cc, dd, ee;

ADC12MEM0 = 0x0456;
008130 40B2 0456 0140 mov.w #0x0456,&ADC12MEM0

bb = *((unsigned char*)0x140);
008136 42D2 0140 0200 mov.b &ADC12MEM0,&bb

cc = *((unsigned char*)0x141);
00813C 425C 0141 mov.b &0x141,R12
008140 4CC2 0201 mov.b R12,&cc

dd = ( (unsigned char*) & ADC12MEM0) [1];
008144 42D2 0141 0202 mov.b &0x141,&dd

ee = ( (unsigned char *) ADC12MEM0_) [1];
00814A 42D2 0141 0203 mov.b &0x141,&ee

В програмной эмуляции
происходит желаемое

в bb младший байт
в сс dd ee старший байт.

за пускаю на железе
во все (bb cc dd ee) пишет младший байт
Почему даже понять не могу
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Apr 7 2008, 13:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(pfg @ Apr 7 2008, 19:05) *
во все (bb cc dd ee) пишет младший байт
Почему даже понять не могу
Потому что ADCMEMx это 16-разрядный регистр и работать с ним нужно именно как с 16-и разрядным словом или как с выровненной на границу 16-и разрядного слова (а не байта!) структурой, если так будет понятнее. Если хотите манипулировать со старшим байтом, то считайте все слово, сделайте сдвиг вправо на 8 бит и получите старший байт.
Код
dd=(unsigned char)(ADC12MEM0>>8);
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 13:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016