Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 11.02.2008, 11:57  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Так сдвигать или устанавливать ???
Если по рабоче-крестьянски, без структур, то..
Код:
#define BITSET(var,bitno) ((var) |= 1 ‹‹ (bitno))	
#define BITCLR(var,bitno) ((var) &= ~(1 ‹‹ (bitno)))
//-------------------------------------------------------------
void set_clr(unsigned char nomer,unsigned char position,unsigned char value)
{
if (value == 0)BITCLR(mas[nomer],position);
else BITSET(mas[nomer],position);
}
//-----------------------------------------------------
// номер байта в массиве, номер бита в байте, 0 - сбросить, 1 -установить
set_clr(0,1,0);
// сбрасываем первый бит в маs[0]
set_clr(5,3,1);
// устанавливаем третий бит  в маs[5]
Реклама:
urry вне форума  
Непрочитано 11.02.2008, 14:24  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Мне надо опросить два датчика DS18B20(наверно я всех уже запарил с этим датчиком,если взялся,то стараюсь до конца),создаю два масива промежуточных,один для запоминания где был конфликт другой для нахождения адреса.
Хочу сделать так: по байтам,то есть найдя первый байт адреса присваиваю младшему числу в масиве,потом следущий и т д,то есть сдвигать буду только промежуточный байт, когда ищу отдельный байт адреса.
Если не понятно будет код выложу когда напишу.
CERGEI1982 вне форума  
Непрочитано 11.02.2008, 15:27  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Вот что типа такого,на быструю руку накидал,еще не проверял и не компилировал,может есть даже ошибки.

Код:
//это из главной программы
   struct DS_1W
   {
      int addres[8]; //
      int temper; /
      short min; //
   };
   //////////////////////////////////////////////////////////
   
   struct DS_1W *temp_1,*temp_2; 
   int *temp_addres[8];
   int *temp_conflic[8]={0,0,0,0,0,0,0,0};

//это сам обработчик адреса,пока что для одного,но для второго хочу типа того же.Можно было и не сохранять конфликт,а просто во втором адресу сверну наоборот
//первый А0-вход,А1-управляем шиной

void search()
{
   int m,n,conf,temp,error;
   error=0;
   temp=0;
   //
   reset();
   command_1w(0xf0);
   for(m=0;m‹8;m++)
   {
      for(n=0;n‹8;n++)
      {
         set_tris_A(0x01);
         set_tris_A(0x03);
         if(input_1w)
            temp|=0x02;
         //
         delay_us(50);
         //
         set_tris_A(0x01);
         set_tris_A(0x03);
         if(input_1w)
            temp|=0x01;
         //
         if(temp==0x03)
         {
            error=1
            break;
         }
         if(temp==0)   //
            conf|=1;
         //
         set_tris_A(0x01);
         if(temp&0x02)
            set_tris_A(0x03);
         delay_us(30);
         set_tris_A(0x03);
      }
         temp‹‹=1;
         conf‹‹=1;
      }
      if(error==1)
         return 1;
      temp_1-›addres[m]=temp;
      *(temp_conflic+m)=conf;
   }
CERGEI1982 вне форума  
Непрочитано 11.02.2008, 18:44  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Ниче не понял... вот ты анализируешь развилку - возможные варианты - 10, 01 - развилки нет - 00 - развилка, 11 - бред, нужно выходить с ошибкой. Где у тебя анализ, что куда писать ?? идет анализ - 3 и 0, а где анализ 10 и 01 ? И после этого ты ОБЯЗАН выдать то, что выбираешь - где выдача ??? По какому-то принципу устройство должно ориентироваться, по какому пути ты пошел от развилки, так ведь ?
или нет ? (с) Bill от микрочипа
urry вне форума  
Непрочитано 12.02.2008, 02:35  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от urry
Ниче не понял... вот ты анализируешь развилку - возможные варианты - 10, 01 - развилки нет - 00 - развилка, 11 - бред, нужно выходить с ошибкой. Где у тебя анализ, что куда писать ?? идет анализ - 3 и 0, а где анализ 10 и 01 ? И после этого ты ОБЯЗАН выдать то, что выбираешь - где выдача ??? По какому-то принципу устройство должно ориентироваться, по какому пути ты пошел от развилки, так ведь ?
или нет ? (с) Bill от микрочипа
Почему бред когда контролер читает с шины 11,это значит или датчик не рабочий или его нет.Вот выбираем куда идти:
Код:
set_tris_A(0x01);
         if(temp&0x02) //логическое И temp и 0b00000010
            set_tris_A(0x03); //если единица выводы переведены на вход
                              //если не было выполнения if то вывод котролера остается как выход опуская шину к нулю
         delay_us(30);
         set_tris_A(0x03);
В temp у меня сохранено два прочитаных бита с шины,первый бит истиное значение,нулевой инверсное.В порте A1 у меня 0 и когда я перевожу tris на выход он опускает шину к нулю.Идет пока что по наименьшему адресу,то есть когда был конфлик,я выставляю на шину 0.

Неправлено я сделал наверно что сдвигаю temp и conf влево.И определение второго адреса там не было.Что еще не понятно.

-- Прилагается рисунок: --

CERGEI1982 вне форума  
Непрочитано 12.02.2008, 13:49  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Подскажите как по сылки передать указатель на структуру.Я делаю так:
структуры у меня temp_1 и temp_2
сама структура:
Код:
struct DS_1W
   {
      int addres[8]; 
      int temper; 
      short min; 
   };
   //////////////////////////////////////////////////////////
   struct DS_1W temp_1,temp_2;
из main вызываю так test=search(&temp_1,&temp_2,&temp_conflic[8]);
это вызываемая функция, заголовок:
int search(*temp_1,*temp_2,*temp_conflic)
При компиляции находит ошибку

-- Прилагается рисунок: --

CERGEI1982 вне форума  
Непрочитано 12.02.2008, 14:48  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Так, к предыдущему посту...
Определение серийного номера 2 параллельно включенных термометров
Код:
   out_byte(0xf0);
	rd.razv=0;	// та инфа, которую выдаем на развилке
	find (serijn1);
    reset_();
   DelayBigUs(500);
   out_byte(0xf0);
	rd.razv=1;
	find (serijn2);
и, соответственно, программа поиска серийных номеров
unsigned char find (unsigned char *mas)
{
 unsigned char error, n_byt, n_bit; //
error=0; // обнуляем ошибку 
	 for (n_byt=0;n_byt‹8;n_byt++) // номер байта в массиве
    	     {
    	     for(n_bit=0;n_bit‹8;n_bit++) // номер бита в байте
                  {
                  rd.bit_=read_bit();   // читаем первый бит
                  rd.bit_inv=read_bit(); // читаем второй бит
                  if (rd.bit_ != rd.bit_inv) // если они не равны, то 
                     {                       // 01 или 10 
                     if (rd.bit_ == 1)
                     	{
                     	send_bit(1);      // выдаем первый бит
                     	}
                     	else
                     	{
                     	send_bit(0);     // выдаем первый бит
                     	}
                     set_clr(mas,n_byt,n_bit,rd.bit_);	
                     } //---------условие без развилки , окончание
		     else // начало - если биты равны
		     {
		      if (rd.bit_ == 1)  //достаточно знать первый
		       {
		      error=1;  // ошибка и на хуй с пляжа
		      return error;
		       } //--------условие -11 ошибка
		      else
		       {
		     send_bit(rd.razv);// выдаем условие 	
                      set_clr(mas,n_byt,n_bit,rd.razv); // пишем в серийник
                       } //-----условие 00 развилка
                     } // окончание - если биты равны
		  } // окончание обработки битов в байте   
		}// окончание обработки байтов в массиве 
return error;   
	}
//----------
Проект в протеусе присоединяю

Прикрепленный файл: 5985554.rar
urry вне форума  
Непрочитано 12.02.2008, 14:52  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

а что это за оболочка если не секрет? CCS?
stri вне форума  
Непрочитано 12.02.2008, 15:27  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

За проект urry спасибо,разберу,но ведь я хочу сам написать его,спрашиваю же по мелочи,разве так научишся на готовом
CERGEI1982 вне форума  
Непрочитано 12.02.2008, 15:28  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от stri
а что это за оболочка если не секрет? CCS?
Для написания на Си для пиков.
CERGEI1982 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
i2c+ccs pic Gladkih Микроконтроллеры, АЦП, память и т.д 9 18.04.2016 22:17
PIC BASIC PRO Compiler 2.47 dosikus Proteus, KiCAD и другие ECAD 27 05.12.2009 05:48
изучение IAR AVR C compiler granel Микроконтроллеры, АЦП, память и т.д 0 10.10.2008 20:45
PIC C Compiler PCWH458 sergxxx Микроконтроллеры, АЦП, память и т.д 9 23.09.2008 18:25
Не включается дебаггер в CCS C Compiler BigMazzi Микроконтроллеры, АЦП, память и т.д 4 19.09.2008 13:34


Часовой пояс GMT +4, время: 13:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot