Приветствую. Недавно начал изучать МК. Пока научился только мигать светодиодами. Использую CodeVisionAVR. Есть такой вопрос: Как помигать диодом 800раз? Неужели для этого нужно 800 раз прописывать delay_ms? Или нужно использовать цикл? Если не трудно приведите пример кода.
Попробовал я как-то раз почитать курс. Значение каждого второго слова мне неизвестно . Толку то читать.
Какие КОНКРЕТНО слова вам не известны
http://avr123.nm.ru/05.htm 6) while(){}; условный цикл ( цикл с условием ) - используйте если вам нужно выполнять какой то код программы пока выполняется (существует, справедливо, не ноль) некоторое условие-выражение ...
А там:
http://avr123.nm.ru/05.htm Книга - Язык программирования Си Брайан В. Керниган, Деннис М. Ритчи
всё правильно, но желательно для установки бита в значение 1 использовать конструкцию: PORTB|=(1<<i); где i номер включаемого бита А для обнуления бита конутрукцию: PORTB&=~(1<<i); это связано с тем, что на язык Си есть строгий стандарт, а запись REGISTER.BIT нестандартная, которую понимает только CodeVision. Тоесть если ты попробуешь скормить свой код другому компилятору он у тебя на первой же записи PORTB.0 выдаст ошибку. А если ты будешь использовать конструкции что я написал - то такой ошибки не будет
Не совсем. У тебя значение i не дойдет до 800, только до 255. Вместо char i пиши int i. Почитай про типы переменных и тебе станет ясно. А еще в микроконтроллерах лучше использовать целочисленные типы unsigned ...
Всем спасибо за ответы! С программой всё ясно. Начал читать краткий курс. Дошёл до седьмой страницы. avr123.nm.ru, есть вопросы по прерываниям: Что может вызвать прерывание? Где их использовать?
Читать внимательнее надо, regenerator. 1 и 2. Что может вызвать прерывание и где их использовать. Ответ: стр.3;выдержка:
В МК AVR и других, прерывания могут возникать по многим событиям:
- изменение уровня на некоторых ножках МК - "1" или "0" на некоторых ножках МК - переполнение таймеров - насчитывание таймером определенного значения - завершение АЦП преобразования - изменение уровня на выходе компаратора - события в USART - еще от кучи всего...
В общем снова читайте ДатаШит ...
Для ATmega16 прерывания перечислены в таблице 18 "Reset ana Interrupt Vectors" .... Я сделал для вас проект демонстрирующий механизм прерываний в AVR(далее следует описание) ... Практическое применение прерываний будет рассмотрено в задачах - упражнениях курса(далее ссылка).
А воопще avr123 создал прекрасную книгу для начинающих. Первое ощущение - кричащие цвета, однако, уже начиная со 2-ой страницы, "цветастость" помогает заострить внимание на важных вещах. Так что за мануал спасибо товарищу avr123. P.S. Я извиняюсь, но мне кажется, что "ни кто" пишеться слитно.
Всем спасибо за ответы! По программе и по прерываниям понятно. Курс дочитал. Теперь задания выполнять буду. Ещё такой вопрос: Допустим мне надо инвертировать все биты регистра PORTB. Это будет так:
regenerator писал(а):Всем спасибо за ответы! По программе и по прерываниям понятно. Курс дочитал. Теперь задания выполнять буду. Ещё такой вопрос: Допустим мне надо инвертировать все биты регистра PORTB. Это будет так:
1) ~PORTB;
2) !PORTB;
Внимательно читай стр. 5 "Си для МК" ВНАЧАЛЕ !
1) Нужен еще оператор присваивания =
2) читай логические операции.
regenerator писал(а):USART это интерфейс RC232 ?
Нет ! Они могут работать совместно. Подробно - соединение UART - rs232 - COM порт ПК - http://avr123.nm.ru/z4.htm и /z5.htm