Хочу написать программу, что при нажатии кнопки, светодиод начинает мигать, но проверив в протеусе программу, работает неправльно. Почему-то в протеусе мигает PB0, хотя должно мигать PB1, типо при нажатии кнопки которая подключается к ПБ0, у меня ПБ1 должна мигать, но этого не происходит, где ошибочка то. #include <avr/io.h> #include <util/delay.h>
int main(void) {
PORTB = 0x02; DDRB = 0x01;
/* Replace with your application code */ while (1) { if (PORTB = (0 == PB0)) { PORTB = (1 == PB1); _delay_ms(100); PORTB = (0 ==PB1); _delay_ms(1000); }
такая навтройка порта делает выходом пин 0 порта B, а все остальные входами, а на пин 1 этого же порта делает подтяжку... если хотите разобраться — выкладывайте код с комментариями, хоть ход мысли проследим и подскажем когда она пошла не туда.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
я на это и вывожу только хочу чтоб он сам на это вышел
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Такая вот тема, если я напишу эту программу для одной кнопки, то всё рабоает, а если для двух, то почему-то при нажати, светодиод не горит, а мигает, кто-нибудь мне скажает почему. программа для атмеги8. /* * GccApplication5.c * * Created: 03.07.2017 14:05:22 * Author : PC */ #define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h>
int main(void) {
DDRD = 0x01;// ДЕЛАЮ ПД0 НА ВЫХОД PORTD= 0b11000000; //ДЕЛАЮ ТАК ЧТО БЫ НА ПД7 и ПД 6 БЫЛА ЕДИНИЦА, ТИПО ЧТОБ КОГДА КНОПКА НЕ НАЖИМАЛАСЬ ЧТО СВЕТИК НЕ ГОРЕЛ
/* Replace with your application code */ while (1) { if (!(PIND&0b10000000)) //СЧИТЫВАНИЕ С ПД7 { PORTD =0x01;//ЕСЛИ В ПБ7 СТОИТ 1, ТО В ПБ0 БУДЕТ 0, СЛЕДОВАТЕЛЬНО НИЧЁ ГОРЕТЬ НЕ БУДЕТ } else { PORTD = 0x00; // НУ ИНАЧЕ. ЕСЛИ БУДЕТ ПОДАН НУЛЬ. ТО В ПБ7 БУДЕТ ИДТИ 1, И СВЕТИК ЗАГОРИТСЯ. }
if (!(PIND&0b01000000)) //СЧИТЫВАНИЕ С ПД6 { PORTD =0x02;//ЕСЛИ В ПБ6 СТОИТ 1, ТО В ПБ0 БУДЕТ 0, СЛЕДОВАТЕЛЬНО НИЧЁ ГОРЕТЬ НЕ БУДЕТ } else { PORTD = 0x00; // НУ ИНАЧЕ. ЕСЛИ БУДЕТ ПОДАН НУЛЬ. ТО В ПБ6 БУДЕТ ИДТИ 1, И СВЕТИК ЗАГОРИТСЯ. }
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
пиши: PORTD = (1<<7); //подаем 1 на 7ю ногу порта D. но все остальные ноги порта обнулятся тогда: PORTD|=(1<<7); //подаём 1 на 7ю ногу порта, не стирая состояния остальных ног а стирать: PORTD&=~(1<<7); // подаём 0 на ногу 7 порта не трогая остальных П.С.: в учебниках практически в самом начале знаки "|", "&", "~", "<<" описаны.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
пиши: PORTD = (1<<7); //подаем 1 на 7ю ногу порта D. но все остальные ноги порта обнулятся тогда: PORTD|=(1<<7); //подаём 1 на 7ю ногу порта, не стирая состояния остальных ног а стирать: PORTD&=~(1<<7); // подаём 0 на ногу 7 порта не трогая остальных П.С.: в учебниках практически в самом начале знаки "|", "&", "~", "<<" описаны.
чувак, вроде сделал как ты сказала, всё равно каша, где ошибка то, сейчас у меня 2 и 4 , это светодиоды, а 1 и 3 там кнопки. */ #define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h> //----------—
//----------— int main(void) {
DDRD = 0b00001010;// PORTD= 0b00000101; //Д
/* Replace with your application code */ while (1) { if (!(PIND = 0x01)) { PORTD |= (1«2); } else { PORTD = ~(1«2); } if (!(PIND = 0b00000100)) { PORTD |= (1«4); } else { PORTD = ~(1«4); } } }
прежде следует хотя бы бегло ознакомиться с основами языка Си, прежде чем начинать что-то писать на нём
кто б слушал...
COKPOWEHEU писал(а):
Странно что компилятор не ругается warning'ами
кто б ещё их читал...
я КОРОЧЕ ЩА ОТКРЫЛ КНИГУ П ПРОГРАММИРОВАНИЮ, там почитал. и в итоге у меня всё получилось, радости полные штаны. #define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h>
int main(void) { DDRD = 0b00001010; PORTD = 0b00000101;
/* Replace with your application code */ while (1) { if (PIND &0b00000001) { PORTD &=~(1<<PD1); } else { PORTD |= (1<<PD1); } if (PIND &0b00000100) { PORTD &=~(1<<PD3); } else { PORTD |= (1<<PD3); } }
Всем привет, хочу напистаь прогу, типо нажал кнопку(ну нажал и отпустил, т.е не зажимая её). и светодиод загорелся, потом опять так нажал, и он выключился. Я что-то пытался через цикл while, но не получилось, потом подумал дайка блок-схему составлю, и в итоге выяснилось что даже без понятие как это сделать. Мб у кого есть идеи. С++ знаю очень плохо, только цикл whi;e и if освовил, такжезнаю как сделать порт на выход или вход. и как присвоить портам единицу. регистами pin,ddr,port владею
есть: изучайте язык Си! минимальный уровень, после которого с вами можно будет культурно разговаривать - это четкое понимание отличий Си от C++. до этого момента других идей не будет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
есть: изучайте язык Си! минимальный уровень, после которого с вами можно будет культурно разговаривать - это четкое понимание отличий Си от C++. до этого момента других идей не будет.
Вот я и говорю: разберитесь, на чем именно вы программируете, изучите это самое, и тогда будем разговаривать по существу. Освойте что-то помощнее if-ов.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения