Jump to content

Язык СИ для микроконтроллеров


 Share

Recommended Posts

_http://www.kodges.ru/63890-mikrokontrollery-pic-24.-arxitektura-i.html

_http://www.kodges.ru/61234-primenenie-mikrokontrollerov-pic18.-arxitektura.html

_http://www.kodges.ru/2007/03/01/programmirovanie_na_jazyke_c_dlja_avr_i_.html

и часто внизу аннотации к книге перечислены книги близкой тематики

Link to comment
Share on other sites

Третья приведенная книга она везде, куда ни плюнь. Но там слишком уж вкратце , что-ж поробую сам как нибудь.

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

у меня был период, когда я с фанатизмом, достойным лучшего применения, покупал книги по программированию.

перестал.

почему я так сейчас говорю об этом? 99 процентов книг являются пересказом или переводом соответствующих хелпов, с той разницей, что в хелпе есть поиск, а в книге только пальцем листать.

из оставшихся хороших книг бОльшая часть пишется и особенно - переводится тогда, когда уже не нужно.

т.е. например автор пишет для крупной конторы игрушку, проходит пара лет, продажи падают, автор увольняется и пишет книгу "как самому написать звездные войны".

в этот момент дисплеи EGA уже не производятся, а фирмы делавшей Voodoo не существует ;)

и так примерно в любом направлении.

поэтому если реально хочется что-то изучить, бумажные книги и тем более их сканы - это последний вариант по значимости.

а читать два и более учебника программированию подряд - чистый маразм, без обид.

Link to comment
Share on other sites

Выгодные LED-драйверы MOSO для индустриальных приложений

Компэл представляет выгодные светодиодные драйверы MOSO для промышленных решений с высоким классом защиты от внешних воздействующих факторов, хорошей устойчивостью к импульсным помехам и высокой надежностью. В ряде серий реализована возможность дистанционного контроля, кроме того, отдельные версии драйверов могут программироваться на работу в автономном режиме по заранее заданному сценарию. Рассмотрим подробнее их характеристики. 

Читать статью>>

ER10450 – литий-тионилхлоридная батарейка FANSO EVE Energy формата ААА
Компания FANSO EVE Energy расширила номенклатуру продукции, разработав новый химический источник тока (ХИТ) – батарейку литий-тионилхлоридной электрохимической системы (Li-SOCl2; номинальное напряжение 3,6 В) типоразмера ААА – ER10450. Батарейка имеет бобинную конструкцию (тип Energy) и предназначена для долговременной работы при малых токах.
Батарейка может применяться в приборах учета ресурсов, в различных датчиках, устройствах IoT и в других приборах и устройствах, в которых требуется компактный ХИТ соответствующей емкости.
Подробнее >>

Форумчане, помогите мне истолковать код этои программы , то как я понял я в коментариях НАПИСАЛ В ВЕРХНЕМ , а оригинальные коментарии без изменений.

//***** обработчик прерываний ***********************//
void interrupt _isr(void)  // МОЖНО ЖЕ ПРОСТО INTERRUPT(VOID)  ?
{
static unsigned char ind_num=0;	// Номер индикатора // ЗАЧЕМ СТАТИК?
static char cnt_ms=10;			// Счётчик mS для опроса кнопок


if(TMR1IF)	// Проверяем флаг И ЕСЛИ ИСТИНА(1), ТО СЛЕДУЮЩАЯ СТРОЧКА
{
	TMR1IF=0;	// Сбрасываем флаг
	TMR1 = 65537-2500 + TMR1;	// Переустанавливаем таймер на 1 mS
// ПОЧЕМУ НЕ 63073+TMR1 (ДЛЯ НАГЛЯДНОСТИ)
	ind_num++;	// Следующий индикатор
//ЭТА ИНСТРУКЦИЯ ИСПОЛНИТСЯ, ЕСЛИ ПРЕДЫДУЩАЯ IF ЛОЖЬ.
	if(ind_num>3)	ind_num=0;	// Если зашкалило, выбираем первый 

	PORTD &=0b11110000;	// Гасим индикаторы (КАТОДЫ)
	NOP();NOP();NOP();NOP();NOP();	// Небольшая задержка
	PORTC=buf_ind[ind_num];			// Выводим в порт значение текущего индикатора из буфера
	PORTD |=(1<<ind_num);			// Зажигаем текущий индикатор 

//ЛОЖЬ, ДЛЯ ПРЕДЫДУЩЕГО IF
	if(!--cnt_ms){	// Отсчитываем 10 mS
		cnt_ms=10;
		keyboard();	// Вызываем процедуру опроса кнопок
	}// ПОХОЖЕ, ЧТО ЕСЛИ ПРЕДЫДУЩАЯ ЛОЖЬ, ТО ВЫХОДИМ ИЗ ПРЕРЫВАНИЯ
}
}

Edited by Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Новое семейство HRP/N3 от MEAN WELL – ИП с 350% перегрузкой для промышленных приложений

В промышленных устройствах и установках с электроприводом на двигателях постоянного тока в момент пуска требуется обеспечить повышенный ток. Для решения этой задачи MEAN WELL предлагает вместо ИП с повышенной избыточной мощностью, более оптимальное решение - источник питания с необходимой перегрузочной способностью семейства HRP/N3. 

Новое семейство, представленное в Компэл, экономичнее и расширяет уже существующее HRP/N в увеличении кратности перегрузки. Подробнее>>

МОЖНО ЖЕ ПРОСТО INTERRUPT(VOID) ?
Нельзя. interrupt это квалификатор, указывающий на то, что данная процедура лежит в области обработчика прерываний. А само название процедуры (_isr) уже можно писать как угодно.
// Номер индикатора // ЗАЧЕМ СТАТИК?
Что бы при следующем вызове процедуры она сохранила своё значение. Точнее чтобы при выходе не теряла.
//ЭТА ИНСТРУКЦИЯ ИСПОЛНИТСЯ, ЕСЛИ ПРЕДЫДУЩАЯ IF ЛОЖЬ.
Нет. Будут выполняться все инструкции до закрывающейся скобки.

Пример

if(a==1){// Если а равно 1

 if(b>0){ // Если b больше 0

 } // конец блока b>0


}// конец блока a==1
else{   // а не равно 1


}// конец блока else

Link to comment
Share on other sites

TMR1 = 65537-2500 + TMR1; // Переустанавливаем таймер на 1 mS

// ПОЧЕМУ НЕ 63073+TMR1 (ДЛЯ НАГЛЯДНОСТИ)

потому, что значения

65536 = 0x10000

65537 = 0x10001

65535 = 0xFFFF

нужно на память среди ночи знать, они сами по себе образец наглядности :)

Link to comment
Share on other sites

Как составляется алгоритм программы при использовании языка Си, мне кажется есть отличия с ассемблером.

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Я так же нашел на саите www.microchipc.com, скачал архив и распоковал в папку Microchip/library , в проект добавил delay.h но компилятор на него ругается

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Спасибо, я воспользовался вашеи первои подсказкои, теперь компилятор ругается на все ( практически все что у меня написано в программе))), даже на главную функцию void main (void)???

#include <pic.h>
#include <htc.h>/* Памятка
	_delay(1000);		// delay for 1000 instruction cycles
	CLRWDT();
	__delay_us(400);	// delay for 400 microseconds
	CLRWDT();
	__delay_ms(2);		// delay for 2 milliseconds
*/
__CONFIG ( RC & WDTDIS & PWRTEN & BOREN & LVPDIS & DUNPROT &
WRTEN & DEBUGDIS & UNPROTECT );
unsigned char schet=0;     // Глобальная переменная
bit flag = 0               // Глобальный флаг
void main (void)
{
ADCON1  = 0x03;            // Порт А цифровои, 00000111
TRISA   = 0xFF;            // на вход (кнопки)
TRISB   = 0   ;            // на выход (датчик темп)
TRISC   = 0   ;            // На выход, подключен индикатор
TRISD   = 0   ;            // На выход  катод индикатора и зумер
OPTION_REG = b01000110 ;   // Подтяжка вкл(сидит датчик), 1:128 от TMR0
INTCON = 0;                // Выключить все прерывания//(10100000)включить от TMR0 
CMCON = 0b00000111;        // Comparator off
}
void init_DS1821(void)      // Инициализация DS1821
{                           /* Послать импульс сброса(<480мкс)
                              переключиться на вход и ждать импульс присутствия
                              измерить PRESENCE, если его нет,то
                              повторить сначала
                              Если есть, продолжить инициализацию
                            */
}                              
void interrupt timers (void) // прерывания от TMR0, каждые 32 мкс
{
if(flag=1)                   // Если установлен флаг, то 
{schet = schet--, flag = 0};// Декрементирую и сбрасываю флаг.
TMR0IF=0;                    // Сбрасываю флаг прерывания от TMR0
}

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Спасибо, я воспользовался вашеи первои подсказкои, теперь компилятор ругается на все
Ну извините, я не хотел :unknw: Я всего лишь хотел сказать где лежит пример :umnik2:

bit flag = 0

; забыли.

Link to comment
Share on other sites

Ура скомпилил, оказывается надо писать не OPTION_REG а просто OPTION, и ноль перед двоичным числом забыл и точку с запятои забыл и не там поставил( вторая строчка снизу с ошибкои)

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Как мне передать по 1 wire баит? Я придумал такои алгоритм- записываю в порт баит, как раз у меня датчик на младшем разряде, жду 100мкс, потом уставлю на RB0 1 и сразу 0 , сдвигаю следующий разряд и декрементирую счетчик битов. Это закольцовываю пока счетчик битов не обнулится.

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Ну вот что я написал

void out_ds1821(void)
 {char count_byte=7;       // счетчик битов
  char out_ds=0   ;        // то что буду отправлять в ds
out_ds=PORTB;TRISB=0;      // Загрузил, младший разряд пошел на передачу
  __delay_us(100);         // Жду пока закачается
do {RB0=1;RB0=0;PORTB<<1;  // Импульс восстановления, сдвигаю влево на один разряд
   __delay_us(100);}       // Задержка
while  (--count_byte) ;    // Зацикливается 7раз, потому-что один бит уже был отправлен

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Компиль постоянно ругается на вторую строчку сверху. Уже ума не приложу что делать.

Error [314] C:\Program Files\Microchip\Project_C\Signpic_C2\Signpic_C2.c; 52.18 ";" expected

и что означают цифры в данной ошибке, после того как я меняю код они постоянно меняются 52.18

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

Ну вот что я написал

void out_ds1821(void)
 {char count_byte=7;       // счетчик битов
  char out_ds=0   ;        // то что буду отправлять в ds
out_ds=PORTB;TRISB=0;      // Загрузил, младший разряд пошел на передачу
  __delay_us(100);         // Жду пока закачается
do {RB0=1;RB0=0;PORTB<<1;  // Импульс восстановления, сдвигаю влево на один разряд
   __delay_us(100);}       // Задержка
while  (--count_byte) ;    // Зацикливается 7раз, потому-что один бит уже был отправлен

PORTB <<= 1;

или PORTB = PORTB << 1;

Компиль постоянно ругается на вторую строчку сверху. Уже ума не приложу что делать.

Error [314] C:\Program Files\Microchip\Project_C\Signpic_C2\Signpic_C2.c; 52.18 ";" expected

написано же: ожидается ; точка с запятой.

цифры думаю это номер строки и символа в ней.

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

Link to comment
Share on other sites

весь текст нет имеет смысла выкладывать, но компиль уверенно показывает на код( втораЯ строчка сверху)( точку с запятои уже поставил везде, где только можно)

989232.jpg[/img]

Edited by Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Link to comment
Share on other sites

если по-вашему нет смысла в выкладывании исходника, то ковыряйтесь дальше сами.

если в вашем тексте компилятор четко ругается в самом начале, ругается одинаково, и визуально нет ошибок в этой строке - логично предположить, что проблема в предшествующих: в #include или где-то выше по тексту.

вы не меня пытаетесь переупрямить, а свой компилятор и компьютер, а это куда сложнее.

пока не исправите, будете топтаться на этом же месте.

Link to comment
Share on other sites

Я тут выкладывал, готовые функции на Си от самого производителя этих датчиков, там есть всё и чтение и запись, зачем изобретать велосипед заново если его уже изобрели до вас ?

Даже вот тебе ссылка: http://forum.cxem.net/index.php?app=core&module=attach&section=attach&attach_id=56666

Edited by a_sergeevich

Будьте проще и люди к вам потянутся.

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...