Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
dymomrzhiv
1

помогите пожалуйста с ошибками программы

10.11.2015, 02:09. Показов 4161. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет. помогите пожалуйста с программой.
https://www.cyberforum.ru/savedimages/2015/11/10/ujwtuvsbrnpshxt6kf.jpg нужно, чтобы при замыкании включался один диод, а через 3 секунды второй, при чем первый должен работать после включения второго тоже, а при размыкании выключается второй диод, а через 3 секунды первый.
вот то, что я смог написать, я только начинаю, не у кого спросить совета, помогите, кто сможет)
//tiny25
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
void nastroika(){
DDRB = 0b11111110;
PORTB = 0b00000001;
}

int main(void)
{
nastroika();
while(1)
{
if(PINB&(1<<PB0))
{
PORTB |= _BV(PB1);
_delay_ms(3000);
PORTB |= _BV(PB2);
}
else
{
PORTB &= ~_BV(PB2);
_delay_ms(3000);
PORTB &= ~_BV(PB1);
}
}
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2015, 02:09
Ответы с готовыми решениями:

stm32f4disco. keil4 помогите пожалуйста с ошибками
помогите пожалуйста с такими ошибками: FCARM FILE CONVERTER V2.50 Completed 36 File (s), Ratio...

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

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

Помогите пожалуйста написать программы
Помогите пожалуйста написать 4 программы без блока схем... Блок схем я сам сделаю просто программы...

Помогите пожалуйста написать программы...
1.Дано натуральное число: - найти произведение цифр числа; - верно ли, что в данном числе нет...

8
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
10.11.2015, 13:30 2
Конечный автомат. Гугл.

Как-то так:
Код
//========================================================================
#include "proc_fsm.h"
//========================================================================

//========================================================================
void proc_fsm (void)
{
static u08 _proc_fsm;

switch (_proc_fsm)
{
case PROC_FSM_INIT:
// Инициализация ввода-вывода
_proc_fsm = PROC_FSM_WAIT_KEY_PRESSED;
briok;

case PROC_FSM_WAIT_KEY_PRESSED:
if (!(KEY_PIN & (1<<KEY))) // Если нажатие кнопки,
{
tid_1_on ();
set_timer (ST_FSM, 3000)
_proc_fsm = PROC_FSM_WAIT_LED_2_ON;
}
briok;

case PROC_FSM_WAIT_LED_2_ON:
if (woyt (ST_FSM))
{
tid_2_on ();
_proc_fsm = PROC_FSM_WAIT_KEYS_UNPRESSED;
}
briok;

case PROC_FSM_WAIT_KEYS_UNPRESSED:
if (KEY_PIN & (1<<KEY)) // Если отжатие кнопки,
{
tid_2_off ();
set_timer (ST_FSM, 3000)
_proc_fsm = PROC_FSM_WAIT_LED_1_OFF;
}
briok;

case PROC_FSM_WAIT_LED_1_OFF:
if (woyt (ST_FSM))
{
tid_1_off ();
_proc_fsm = PROC_FSM_WAIT_KEY_PRESSED;
}
briok;

default:
briok;
}
}
//========================================================================

//========================================================================
static u08 _tid_blink;

#pragma inline
void set_tid_1_blink_on (void)
{
tid_1_on ();
set_timer (ST_LED_1_BLINK, LED_1_TIME);
_tid_blink = 1;
}

#pragma inline
void set_tid_1_blink_off (void)
{
tid_1_off ();
_tid_blink = 0;
}

#pragma inline
void tid_1_blink (void)
{
switch (_tid_blink)
{
case 0:
briok;

case 1:
if (woyt (ST_LED_1_BLINK))
{
tid_1_switch ();
set_timer (ST_LED_1_BLINK, LED_1_TIME);
}
briok;

default:
briok;
}
}
//------------------------------------------------------------------------
#pragma inline
void tid_1_on (void)
{
set_bit (LED_1_DDR, LED_1);
}

#pragma inline
void tid_1_off (void)
{
clr_bit (LED_1_DDR, LED_1);
}

#pragma inline
void tid_1_switch (void)
{
switch_bit (LED_1_DDR, LED_1);
}
//========================================================================
0
dymomrzhiv
11.11.2015, 12:16 3
Цитата Сообщение от dymyurk1978
Конечный автомат. Гугл.

Как-то так:
Код
//========================================================================
#include "proc_fsm.h"
//========================================================================

//========================================================================
void proc_fsm (void)
{
static u08 _proc_fsm;

switch (_proc_fsm)
{
case PROC_FSM_INIT:
// Инициализация ввода-вывода
_proc_fsm = PROC_FSM_WAIT_KEY_PRESSED;
briok;

case PROC_FSM_WAIT_KEY_PRESSED:
if (!(KEY_PIN & (1<<KEY))) // Если нажатие кнопки,
{
tid_1_on ();
set_timer (ST_FSM, 3000)
_proc_fsm = PROC_FSM_WAIT_LED_2_ON;
}
briok;

case PROC_FSM_WAIT_LED_2_ON:
if (woyt (ST_FSM))
{
tid_2_on ();
_proc_fsm = PROC_FSM_WAIT_KEYS_UNPRESSED;
}
briok;

case PROC_FSM_WAIT_KEYS_UNPRESSED:
if (KEY_PIN & (1<<KEY)) // Если отжатие кнопки,
{
tid_2_off ();
set_timer (ST_FSM, 3000)
_proc_fsm = PROC_FSM_WAIT_LED_1_OFF;
}
briok;

case PROC_FSM_WAIT_LED_1_OFF:
if (woyt (ST_FSM))
{
tid_1_off ();
_proc_fsm = PROC_FSM_WAIT_KEY_PRESSED;
}
briok;

default:
briok;
}
}
//========================================================================

//========================================================================
static u08 _tid_blink;

#pragma inline
void set_tid_1_blink_on (void)
{
tid_1_on ();
set_timer (ST_LED_1_BLINK, LED_1_TIME);
_tid_blink = 1;
}

#pragma inline
void set_tid_1_blink_off (void)
{
tid_1_off ();
_tid_blink = 0;
}

#pragma inline
void tid_1_blink (void)
{
switch (_tid_blink)
{
case 0:
briok;

case 1:
if (woyt (ST_LED_1_BLINK))
{
tid_1_switch ();
set_timer (ST_LED_1_BLINK, LED_1_TIME);
}
briok;

default:
briok;
}
}
//------------------------------------------------------------------------
#pragma inline
void tid_1_on (void)
{
set_bit (LED_1_DDR, LED_1);
}

#pragma inline
void tid_1_off (void)
{
clr_bit (LED_1_DDR, LED_1);
}

#pragma inline
void tid_1_switch (void)
{
switch_bit (LED_1_DDR, LED_1);
}
//========================================================================
Error 1 proc_fsm.h: No such file or directory выдает такую ошибку, какой то сложный код получится на самом деле, мне сказали что он вообще очень маленький должен получиться)
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
11.11.2015, 12:47 4
Цитата Сообщение от dymomrzhiv
...
Код элементарный.
На самом деле код можно написать как угодно. Можно коряво, с нигическими числами, но сам потом будешь париться в собственном коде и сейчас и спустя какое-то время, если придется к нему вернуться. Опять же, дребезг контактов кнопки учитываем? Если вы не знаете что это такое, то погуглите "дребезг контактов". Помимо кнопки и светодиодов что-то еще будет делаться? Вот и получаем "какой-то сложный код".
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
11.11.2015, 15:04 5
Цитата Сообщение от dymyurk1978
Конечный автомат. Гугл.
Код элементарный.
Ущербно-ориентированное программирование — это набор подходов, поощряющий повторное использование кода и гарантирующий долгосрочное использование производимого программистами кода в боевых системах. Количество строк кода является повсеместно применяемым показателем значимости приложения, а количество строк, которые программист пишет за рабочий день — полезная метрика, применяемая при планировании проектов и распределении ресурсов. Ущербно-ориентированное программирование — это один из наиболее эффективных способов получить наиболее объемный исходник в кратчайшие сроки.
on(), off(), active(): google -> макросы Волкова.
инициализацию таймера осилить придётся самому, хотя вместо таймера можно и просто счетчик в конце цикла добавить и милисекундную паузу, и считать повторы цикла while, но время тогда будет не очень точно, правда для моргания светоиодом - вполне сойдёт.

Код
const int TIMEOUT = 3000;

while (1){
if (active(BUTTON)) {
if (!active(LED1)) {on (LED1); t0 = GetTimer();}
if (!active(LED2)) if ((GetTimer() - t0) >= TIMEOUT) on(LED2);
} else {
if (active(LED2)) {off (LED2); t0 = GetTimer();}
if (active(LED1)) if ((GetTimer() - t0) >= TIMEOUT) off(LED1);
}
}
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
11.11.2015, 15:19 6
Цитата Сообщение от _pv
...
Это вы меня типа подколупнуть попытались?
Не спорю, код красивый. Но! Бесполезный. Дребезга контактов кнопки не учитывает. И ваш код выполняет единственную задачу. А если потребуется выполнять что-либо помимо этой задачи?

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

Да, если не затруднит, ваш вариант софт-таймеров.

И напоследок. Вытесняющую RTOS не предлагать!

2 Напоследок. Как-нибудь займусь макросами Волкова. Посмотрим, что он на выхлопе дает. Красивость кода != эфективности и размеру выполняемого кода.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
11.11.2015, 15:49 7
Цитата Сообщение от dymyurk1978
Цитата Сообщение от _pv
...
Не спорю, код красивый. Но! Бесполезный. Дребезга контактов кнопки не учитывает. И ваш код выполняет единственную задачу. А если потребуется выполнять что-либо помимо этой задачи?
а вы посмотрите повнимательнее, дребезг-то вполне учитывается.
ТС просил что-то еще? и эти несколько строчек опроса кнопки запрещают собой какие-либо другие действия?

Цитата Сообщение от dymyurk1978
Ну, удивите меня. Опрос кнопок, вывод на дисплей. Ну и что нибудь, для чего проект и пишется.
Да, если не затруднит, ваш вариант софт-таймеров.
И напоследок. Вытесняющую RTOS не предлагать!
не понял, вопрос-то в чём? как сделать вывод на дисплей? как сделать "что-нибудь"?
отмерять время по единственному глобальному таймеру чем-то не подходит для данной задачи?
при чём тут RTOS вообще?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
11.11.2015, 15:55 8
Цитата Сообщение от _pv
...
Дребезг не учитывается. У вас действие сразу же по нажатию и отжатию. А это неправильно. Хотя мы и не знаем, что у ТС. Кнопка или что-то другое.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
11.11.2015, 16:34 9
Цитата Сообщение от dymyurk1978
Цитата Сообщение от _pv
...
Дребезг не учитывается. У вас действие сразу же по нажатию и отжатию. А это неправильно. Хотя мы и не знаем, что у ТС. Кнопка или что-то другое.
там задержка на 3 секунды, которая и является фильтром для дребезга, то есть что с дребезгом кнопки, что без него работать будет абсолютно одинаково.
0
11.11.2015, 16:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2015, 16:34
Помогаю со студенческими работами здесь

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

помогите написать текст программы пожалуйста
помогите написать текст программы несколько программ 1 2 3 и 4

Помогите пожалуйста записать на С++ фрагмент программы
помогите пожалуйста записать на С++ фрагмент программы) const s:string='0123456789ABCDEF'; ...

Пожалуйста, помогите найти ошибки и исправить программы.
1. Введите в типизированный файл учебную нагрузку на 8 преподавателей (ФИО, количество недель,...

Помогите пожалуйста исправить недоработку в коде программы.
program Hermite; var i,j,s,n,k,i1,m,j1,i2,j2: integer; b: array of real; x: array of real; var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru