Перейти к содержанию

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


Рекомендуемые сообщения

_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

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

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

перестал.

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

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

//***** обработчик прерываний ***********************//
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();	// Вызываем процедуру опроса кнопок
	}// ПОХОЖЕ, ЧТО ЕСЛИ ПРЕДЫДУЩАЯ ЛОЖЬ, ТО ВЫХОДИМ ИЗ ПРЕРЫВАНИЯ
}
}

Изменено пользователем Andrey_Ch8

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

Ссылка на комментарий
Поделиться на другие сайты

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

Пример

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

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

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


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


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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

65536 = 0x10000

65537 = 0x10001

65535 = 0xFFFF

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, где взять библиотеки готовых решений для HI-TECH, например как в MicroC Delay_us(30) -задержка на 30 мкс?

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, я воспользовался вашеи первои подсказкои, теперь компилятор ругается на все ( практически все что у меня написано в программе))), даже на главную функцию 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
}

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

Ссылка на комментарий
Поделиться на другие сайты

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

bit flag = 0

; забыли.

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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раз, потому-что один бит уже был отправлен

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

989232.jpg[/img]

Изменено пользователем Andrey_Ch8

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем a_sergeevich

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...