Здравствуйте. Нужна ваша подсказка в решении проблемы:
Преподователь сказал, что в коде программы есть ошибка (не синтаксическая, для компилятора все ок). Смотрел, искал в интернете и ничего не смог найти (знания программирования у меня начального уровня). Буду благодарен за все подсказки.
Программа передает сигнал SOS (азбука Морзе) на светодиод и буззер(динамик). Скрин прибора и код прилагаю:
Преподователь сказал, что в коде программы есть ошибка (не синтаксическая, для компилятора все ок). Смотрел, искал в интернете и ничего не смог найти (знания программирования у меня начального уровня). Буду благодарен за все подсказки.
Программа передает сигнал SOS (азбука Морзе) на светодиод и буззер(динамик). Скрин прибора и код прилагаю:
C++:
#include <mega32.h> // визначення I/O регістрів для ATmega32
#include <delay.h> // функції часової затримки
// визначення ідентифікаторів (відповідно до Рис.2)
#define BELL PORTC.3 // порт керування бузером
#define DDR_BELL DDRC.3 // регістр керування портом
#define HL PORTB.0 // порт керування світлодіодом
#define DDR_HL DDRB.0 // регістр керування портом
#define ON 1 // включення (у позитивній логіці)
#define OFF 0 // виключення (у позитивній логіці)
#define dt 100 // крок часу - 100 мс
// (з використанням універсальної функції)
void Symbol(int time) // функція генерування одного символа
{
char i;
for (i=0; i<3; i++)
{
BELL = ON; // включення бузера
HL = ON; // включення світлодіода
delay_ms(time); // пауза на час time мс
BELL = OFF; // виключення бузера
HL = OFF; // виключення світлодіода
delay_ms(dt); // пауза на час dt мс
}
}
void main(void) // Головна функція програми передавання сигналу СОС
{
// налаштування портів на видачу:
DDR_BELL = 1; // порт керування бузером DDRC.3 = 1;
DDR_HL = 1; // порт керування світлодіодом DDRB.0 = 1;
while (1)
{
// (з використанням універсальної функції)
Symbol(dt); // передавання трьох крапок
Symbol(3*dt); // передавання трьох тіре
Symbol(dt); // передавання трьох крапок
delay_ms(6*dt); // пауза між повідомленнями(7-1=6 dt)
}
}