Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.06.2006, 14:12
|
|
Прохожий
Регистрация: 11.06.2006
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Проблема с ADUC 812
#include ‹ADuC812.h›
#include ‹stdio.h›
#include ‹sio.h›
#ifndef GlobalDefine
#define ALE_Off 0x10
#define GlobalDefine
#endif
init()
{TH1 = 0xFD; //Скорость 9600
TMOD = 0x20;//Таймер 1 в режиме autoreload
TCON=0x40; //Запуск таймера 1
SCON=0x52; //8 bit UART, разрешение приема
PCON&=0x7F; //Отключение дублирования скорости, установленной в TH1
}
//************************************************** *********************//
//Ждет приема символа из СОМ порта и возвращает его значение
//************************************************** *********************//
unsigned char RSio(void)
{
while(!RI);
RI=0;
return SBUF;
}
//************************************************** ************//
// Вывод символа в СОМ порт
void Wsio(unsigned char Sym)
{
SBUF=Sym;
TI=0;
while(!TI);
}
//************************************************** *************//
main()
{init();
while(1)
{
unsigned char k,k1,k2,channel;
unsigned char iL,iH;
DACCON=0x7F;// режим ЦАП
//DAC0L=0xFF;// запись в ЦАП
channel=0x0;
ADCCON1=0x60;
k=RSio();
if(k=='0')
ADCCON2=0x0;
if(k=='1')
ADCCON2=0x1;
if(k=='C')
{
SCONV=1; // начать преобразование, по окончанию преобразования SCONV равно 0
P: if (SCONV==0)
{
iH=ADCDATAH;//старший байт АЦП
iL=ADCDATAL;//младший байт АЦП
}
else goto P;
}
if(k=='H')
Wsio(iH); // вывод старший байт АЦП
if(k=='L')
Wsio(iL);//вывод младший байт АЦП
if(k=='D')
{k1=RSio();
k2=RSio();
DAC1H=k2;}//установка ст.разрядов ЦАП1
DAC1L=k1;//установка мл.разрядов ЦАП1
}
}
У меня проблема не могу разобраться правильно или
нет написана программа
Вот в этом куске текста вопрос
if(k=='D')
{k1=RSio();
k2=RSio();
DAC1H=k2;}//установка ст.разрядов ЦАП1
DAC1L=k1;//установка мл.разрядов ЦАП1
Получается что принимаем в начале 1 байт и записываем его в регистр DAC1L?
или принимаем два байта и потом записываем второй в
DAC1H а первый в DAC1L?
|
|
|
|
11.06.2006, 15:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Напиши читаемо:
if(k=='D') {
k1=RSio();
k2=RSio();
DAC1H=k2;
} // установка ст.разрядов ЦАП1
DAC1L=k1; //установка мл.разрядов ЦАП1
==============
и срузу будет видно:
если k=='D' то принимаем два байта в k1 и в k2 и потом записываем второй в DAC1H
а k1 помещается в DAC1L не зависимо от истиности k=='D'
==============
Подробно и вто же время коротко - Си для МК
avr123.nm.ru/05.htm
|
|
|
|
11.06.2006, 22:35
|
|
Прохожий
Регистрация: 11.06.2006
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Еще вопрос
когда я отправляю эти два байта
из компьютера через соm порт
имеет значение какой байт отправлять первым а какой вторым или без разницы?
|
|
|
|
11.06.2006, 23:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от oldman19
|
Еще вопрос
имеет значение какой байт отправлять первым а какой вторым или без разницы?
|
ну очевидно что без разницы.
главное что бы и ПК и МК знали порядок следования данных.
|
|
|
|
12.06.2006, 06:01
|
|
Прохожий
Регистрация: 11.06.2006
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Разница есть
значение ЦАП обновляется после записи младшего разряда
значит первым должен записываться старший а потом младший
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:09.
|
|