Помогите с кодом на C
|
|
| Вс, 05.07.2015, 22:55 | Сообщение # 11
|
adamchuk2012
Постов: 14
ОК |
ребят. я впервые сел за это дело. пожалуйста помогите разобраться. у меня нет возможности на пике делать. их после осваивать буду. я заплатить готов
|
|
| Пн, 06.07.2015, 11:04 | Сообщение # 12
|
msmmmm2
Постов: 166
ОК |
if (PINC&(1<<PC1)) { выполняется, если на PC1 - "1" }
Да и зачем так сложно, если пины не перебираются - задай условие железно if (PC1==0){} или if (PC1!=0){} смотри, что у тебя по логике.
Помнишь анекдот про еврея, который просил у бога выигрыша в лотерею, а билетик не покупал? Ты выложи задачу так: входы - нога такая-то это датчик ВУ, наличие воды - "1"; выходы - нога такая-то, уровень "1" - вкл. Условие (пример): пока воды нет, нагрев не включать; если НУ = 1, вкл нагрев и контролировать НУ (для аварийного отключения) и ВУ. Если ВУ = 1, откл нагрев, вкл пищалку на 10с, ....
Если так поставишь задачу, то сам все и сделаешь, да и помогут быстрее, потому что будет понятно, чего хочешь. Это называется "составление математической модели" - 90% работы программиста. Закодить правильно поставленную задачу - легко решаемая задача даже для неопытных.
|
|
| Пн, 06.07.2015, 17:30 | Сообщение # 13
|
adamchuk2012
Постов: 14
ОК |
ага. ну давайте попробуем. PC0- датчик верхнего уровня, PC1- датчик нижнего уровня, PB1- НАГРЕВ, PB2- ЗВУК, PB3- СБРОС ПАРА, PB4- ДОЛИВ ВОДЫ. Логика. если PC0=0 и PC1=0 то- нагрев воды( PB1=1, PB2=0, PB3=0, PB4=0) PC0=1 и PC1=0 то- нагрев воды( PB1=1, PB2=0, PB3=0, PB4=0) PC0=1 и PC1=1 то- отключить нагрев воды -(PB1=0), пописчать- PB2=1 10 сек, сбросить пар PB3=1 минуту, сбрасывать пар и доливать воду PB3=1 PB4=1 пока оба датчика вода заполнит оба датчика PC0=0 и PC1=0, и после опять включить нагрев PB1=1. Вот собственно и всё. и как раз проблема с последним. мои циклы глючат когда я задаю им к проверке оба датчика. то есть прекратить лить воду тогда когда и первый второй в воде.Добавлено (06.07.2015, 18:30) --------------------------------------------- забыл добавить. 1 на датчиках- воды нет. 0 на датчиках- вода есть.
|
|
| Пн, 06.07.2015, 20:51 | Сообщение # 14
|
msmmmm2
Постов: 166
ОК |
Попробуй так, писал в текстовом редакторе, не тестил:
#define F_CPU 1000000 #include <avr/io.h> #include <util/delay.h>
int main(void) { DDRB = 0xFF; PORTB = 0x00; DDRC = 0x00; PORTC = 0xFF; while(1) { switch (PINC & 3) { case 0: PORTB = 0b00000010;break; //PB1=1 case 1: PORTB = 0b00000010;break; //PB1=1 case 2: PORTB = 0b00000000;break; // неисправность: НУ нет, ВУ - есть, все откл case 3: {PORTB = 0b00000100 ; // выключаю нагрев, пищу 10 сек PB2=1 _delay_ms(10000) ; // 10c PORTB = 0b00001000; // прекратил пищать включил сброс пара PB3=1 _delay_ms(60000); // 60c PORTB = 0b00011000; // PB3=1 PB4=1 while ((PINC & 3) != 0){}; // пока оба входа не =0 стоим, тупим }; } } }
|
|
| Пн, 06.07.2015, 23:37 | Сообщение # 15
|
djsanya123
Постов: 1072
Друзья |
adamchuk2012, нарисуй схемку, напишу код
|
|
| Вт, 07.07.2015, 18:29 | Сообщение # 16
|
msmmmm2
Постов: 166
ОК |
Все, код в сообщении #14 подправил, в протеусе работает.
|
|