Bascom avr - конфігуруємо порти мк

BASCOM AVR - конфігуруємо порти МК. Підключаємо кнопку.

Для початку коротко і спрощено розглянемо внутрішню структуру мікроконтролера. Порт має три частини.

DDR перемикає режими роботи порту - режим INPUT (вхід) або OUTPUT (вихід). Він здійснює комутацію елементів всередині мікроконтролера.

PORT вдає із себе набір з 8 вихідних ключів, які можуть витримувати навантаження в 50мА. Наприклад можна управляти світлодіодом і іншими зовнішніми елементами з невеликим навантаженням.

PIN є набором з 8 вхідних логічних елементів, які можуть бути встановлені як 1 або 0. Коли встановлений логічний рівень "0", то на ніжці МК встановлено напруга від 0 до приблизно 0.1 вольт, якщо встановлений логічний рівень 1, то напруга на ніжці МК від 2,5 вольт до VCC (напруга живлення мікроконтролера, в даному випадку, що розглядається це 5В).

Коли ви виконуєте цю рядок.

Тому що PORTB.2 Ти не будеш поєднаний електрично всередині МК зі схемою входу, він може працювати тільки в режимі «вихід».

Якщо ви хочете вважати стан виведення порту, то це треба робити з PINB .2, так як саме через нього здійснюється зчитування даних в МК.

Не дивлячись на те, що при CONFIG PORTB .2 = INPUT не читається PORTB .2, другий висновок все одно конфигурируется на вхід і прочитати його можна через PIND .2.

Тепер розглянемо все вищесказане на прикладі обробки стану кнопки.

Отже, ми маємо кнопку і світлодіод (на експериментальному модулі для MRC 40 все це господарство є в наявності). Кнопка підключена на ніжку 2 порту С (PORTC .2), а світлодіод на ніжку 0 порту В (PORTB .0). Нам необхідно зробити так, що б при натисканні на кнопку спалахував світлодіод.

'Зчитуємо стан порту (підключаємо кнопку)
'Robozone.su

$ Regfile = "m32def.dat" 'використовуваний мікроконтролер ATmega32 (MRC40 з універсальним модулем)
$ Crystal = 16000000 'частота встановленого кварцу 16 mHz

Config Portb.0 = Output 'конфігуруємо висновок 2 порту B на ВИХІД - підключаємо до нього світлодіод
Config Pinc.2 = Input 'конфігуруємо висновок 2 порту С на ВХІД - підключаємо до нього кнопку

Do 'початок циклу програми

If Pinc.2 = 0 Then 'УМОВА - якщо на 2-й ніжці порту С низький логічний рівень то.
Portb.0 = 1 'встановлюємо на ніжці 0 порту В високий логічний рівень (світлодіод горить)
Else 'в противному випадку.
Portb.0 = 0 'встановлюємо на ніжці 0 порту В низький логічний рівень (світлодіод не горить)
End If'конец умови
Loop
End

На майбутнє при написанні програм для МК дуже зручно користуватися командою присвоєння імен - ALIAS. За допомогою неї різним змінним можна привласнити унікальні імена.

Перепишемо програму з використанням команди ALIAS.

'Зчитуємо стан порту (підключаємо кнопку)
'RoboZone.SU

$ Regfile = "m32def.dat" 'використовуваний мікроконтролер ATmega32 (MRC40 з універсальним модулем)
$ Crystal = 16000000 'частота встановленого кварцу 16 mHz

Config Portb.0 = Output 'конфігуруємо висновок 2 порту B на ВИХІД - підключаємо до нього світлодіод
Config Pinc.2 = Input 'конфігуруємо висновок 2 порту С на ВХІД - підключаємо до нього кнопку

Led Alias ​​Portb.0 'присвоюємо ім'я LED висновку 0 порту B
Button Alias ​​Pinc.2 'присвоюємо ім'я Button висновку 2 порту С

Do 'початок циклу програми

If Button = 0 Then 'УМОВА - якщо на 2-й ніжці порту С низький логічний рівень то.
Led = 1 'встановлюємо на ніжці 0 порту В високий логічний рівень (світлодіод горить)
Else 'в противному випадку.
Led = 0 'встановлюємо на ніжці 0 порту В низький логічний рівень (світлодіод не горить)
End If 'кінець умови

Як бачите, наочність коду програми підвищилася, це істотно допомагає при написанні програм з великою кількістю різних змінних.

О! ... ми забули про DDR ...

Прийшов час розібратися і з цим звіром =)

За допомогою DDR ми маємо можливість налаштувати весь порт одним рядком коду. Як ми писали вище, функцією DDR є перемикання режимів роботи порту. Всередині мікроконтролера висновки портів пронумеровані в наступному порядку - 76543210. Таким чином, ми можемо одним бінарним числом встановити стану PORT / PIN порту.

Подивимося на приклад нижче ...