Статья №1

 

  Что  же  такое  Bаscom  - это  не  интерпритатор, а  мощный  компилятор, который  переводит  программу  с    Basic  на  язык, понятный  микроконтроллеру, симулирует  скомпилированный  код  и  позволяет  программировать  микроконтроллер  с  помощью  внешних  утилит  или  непосредственно  из  среды  разработки.

      Bascom -  средство  для   быстрой  разработки  проектов, в  нём  встроена поддержка  многих  встроенных  функций  AVR:
           -счётчики-таймеры
            -UART
            -АЦП
            -ШИМ

            - Поддержка  шины   i2c`
           - в  придачу  кучу  вешних  устройств:
              Кнопки;
              Графические  индикаторы;
              Буквенно- цифровые  индикаторы;
              3х4  или  4х4  клавиатуры;
              PS/2  клавиатура;
              ИК  дистанционное  управление.
          Установка  компилятора  проводится  обычным  путём,   но предварительно  Вы  должны  распаковать  предложенный  Вам  пакет  на  диске С.
     Рассмотрим  настройки  установленного  Bascom  на  примере  программы  для  мигающего  светодиода  “LED”, блок – схема  которой  представлена  на  Рис.2.

 


    Рис.2 - Блок-схема LED

       Cконфигурируем  порт D, как  выход. Затем  в  цикле  Do-Loop  подадим  на  него  значение  255 (при  этом  все  его  биты  примут  значение 1), а  после  задержки  100 мс  на  порту D установим  значение 0 (при  этом  все  его  биты  примут  значение 0). Через  100 мс  цикл  повторится, и светодиод, подключенный  к  одному  из  выводов  порта D  будет  часто  мигать.

     На  Рис.3  изображена  схема  устройства  для  отработки  программы  «LED». Здесь  видно, что  светодиод  HL1  через  резистор  430 Ом  (330-560 Ом)  подключен  к  выводу  PD6. Контакты Reset, VCC, SCK, MISO, MOSI  и  GND  необходимы  для  разъёма  внутрисхемного  программирования. Следует  отметить, что  микроконтроллер  работает  от  внутреннего  тактового  генератора, поэтому  в  программе  программатора  необходимо  запрограммировать  соответствующим  образом  Fuse-files.

  Рис.3 - Схема к программе "LED"   

Запустите  Bascom  и  создайте  с  помощью  File->New  новый  проект. Затем  нажмите  Options->Compiler->Chip  и  установите  тип  микроконтроллера – ATtiny2313  (см. Рис.4).

 

  Далее  в  окне  Output  установите  флажки  согласно  Рис.5.

 

  Рис.5

  Потом  в  окне  Communication  установите  скорость  обмена  с  внешними  устройствами – 9600 бит/с  и  тактовую  частоту  генератора  микроконтроллера – 4000000 Гц  (см. Рис.6).

 

  Рис.6

  Затем  вернитесь  к  окну  Chip  и  нажмите  кнопки  “Add to Code “  и  “Ok”, и  все  установленные  настройки  поместятся  непосредственно  в  исходный  код  программы  (см. Рис.7).

 


Рис.7   

Под  настройками  пишется  сама  программа, которая  имеет  следующий  вид:


Config Portd = Output                        'конфигурирование портаD,  как         выход       

Do                                                         'начало цикла
  Portd = 255                                        'присвоение портуD значения 255
  Waitms 100                                       'задержка 100мс
  Portd = 0                                             'присвоение портуD значения 0
  Waitms 100
Loop                                                      'конец цикла

End                                                        'end program
      Отметим, что  основным  отличием  Bascom  от   Basic  является  то, что  он  не  позволяет  производить  более одной  математической  операции  на  строке.
      После  сохранения  проекта  (желательно  в  отдельную  папку)  ,  необходимо   перейти  к  компиляции   Program->Compile(F7). Bascom  проверит  синтаксис  и, если  не  найдёт  ошибок,  скомпилирует  программу  и  укажет, сколько  памяти  она  займёт  в  микроконтроллере.
     При  установленных  настройках  Bascom  автоматически  переводит  программу  в  симулятор. Здесь  необходимо  нажать  кнопки  “LCD”, “Refresh var.”  и  запустить  процесс  симулирования  (см. Рис.8).

 


 

Программа  “LED”  находится  в  папке  приложение 1.

     Следующая  программа, которая  представлена  здесь,  является  более  сложной, чем  предыдущая  и  позволяет  проиллюстрировать  работу  микроконтроллера  с  кнопкой  и индикатором  LCD 16x2.  Схема  представлена  на  Рис.9.

  Рис.9 - Схема к программе "INT0"  

Допустим, что  ваша  программа  должна  проверять   в  цикле    нажатие  кнопки  и  в  тоже  время  выполнять  ещё  какое-нибудь  действие. Тогда  возникает  вероятность  пропуска  нажатия  данной  кнопки. Фиксировать  всегда  нажатие  кнопки  позволяют  внешние  прерывания  Int0  или  Int1. На  Рис.10  представлена  блок – схема  программы  “Int0”, на  которой  показано, что  основная  программа  состоит  из  цикла  включения  и  отключения  светодиода  через  некоторые  промежутки  времени, пока  кнопка  не  нажата. При  нажатии  кнопки  включается  подпрограмма  обработки  прерывания  INT0, при  выполнении  которой  на  дисплей  выводится  какое – либо  слово  (например, Stop).

 

 

Программа  имеет  следующий  вид:
$Regfile = "attiny2313.dat"                      ‘настройки  программы
$Crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32

config Portd.6 = output                                     'PD6-выход
config portd.6 = 0                                          'исходное состояние PD6=0
config PORTD.2 = input                                      'PD2-вход
config portd.2 = 1                                          'исходное состояние PD2=1 (подтяжка)
config INT0 = FALLING                                      'прерывание INT0 по спаду импульса
dim Wtime as Byte                                           'объявление переменной типа Byte
on Int0 Displey                                        'определение подпрограммы прерывания

cls                                                         'очистка дисплея

Wtime = 255                                                 'величина задержки
Enable INTERRUPTS                                           'включение всех прерываний
Enable INT0                                                 'вкючение прерывания INT0

do                                                          'начало цикла
cls
set Portd.6                                                 'установка PD6=1
waitms Wtime                                                'задержка=255 тактов
reset PortD.6                                               'установка PD6=0
waitms Wtime
loop                                                        'конец цикла

Displey:                                                    'подпрограмма обработки прерывания
Lcd "stop"                                                  'вывод на дисплей слова Stop
return                                                      'оператор возврата из подпрограммы

end                                                         'end program
    Программа  “INT0”  находится  в  папке  приложение 2.

     Pind.2  настроен  на  вход  и  имеет  подтягивающий  резистор. Config Int0=Falling   осуществляет  прерывания  по  спаду  сигнала. Когда  происходит  прерывание  Int0, программа  переходит  на  метку  Displey. Нужно  включить  все прерывания  в  целом  Enable  Interrups  и  конкретно  Enable Int0. В цикле  Do-Loop  осуществляется  мигание  светодиода. Подпрограмма  Displey   выводит  “Stop”  на  ЖК  индикатор,  и  затем продолжается  работа  основной  программы  с  того  места, где  она  была  прервана. Cls – очищает  ЖК  индикатор. Процесс  симулирования  представлен  на  Рис.11 . 

 

      Рис. 11
  Следует  отметить, что  внешние  прерывания   Int0, Int1  бывают  трёх  видов:
            Config  Intx = Low Lewel
            Config  Intx = Fallig
            Config  Intx = Rising
Т.е.  по  низкому  уровню  сигнала, по  спаду  импульса  и  по  фронту  импульса. RETURN – возврат  из  подпрограммы  прерывания. Не  должно  быть  одного  прерывания  внутри  другого  прерывания, чтобы  подпрограммы  обработки  не  прерывали  друг  друга. Это  требование  определяется  архитектурой  микроконтроллеров   AVR.
     Прерывания  можно  выключать,  как  все  вместе (Disable  Interrups), так  и в  индивидуальном  порядке, и  включать  вновь  в  процессе  выполнения  программы, что  необходимо  в  случае, если  в  коде  присутствует  фрагмент, выполнение  которого  нельзя  прерывать  (например, запись  EEPROM).
    
     Командой  Dim Wtime  As  Byte  описывается  переменная  Wtime, но  о  переменных  и  многом  другом  я  расскажу  в  следующей  статье.