Меню English Ukrainian російська Головна

Безкоштовна технічна бібліотека для любителів та професіоналів Безкоштовна технічна бібліотека


Початківцям програмістам мікроконтролерів PIC. Енциклопедія радіоелектроніки та електротехніки

Безкоштовна технічна бібліотека

Енциклопедія радіоелектроніки та електротехніки / Початківцю радіоаматору

Коментарі до статті Коментарі до статті

[an error occurred while processing this directive]

З власного досвіду початку вивчення програмування мікроконтролерів постараюся дати кілька практичних порад зі складання програм на асемблері. Всі, наведені нижче, приклади програмування дано стосовно Pic контролерів середнього сімейства Microchip, як найбільш прийнятних для початку освоєння, зважаючи на просту їх архітектуру і нескладну систему команд асемблера.

Запропоновані програми цілком можна застосовувати у вигляді готових макросів (закінчених підпрограм).

1. Застосування переривань від переповнення таймера TMR0 (RTCC)

Приймемо тактову частоту - Fтакт. = 4,096 МГц (стандартний кварц). Тоді час циклу складе tc = 1/Fтакт. * 4 = 0,97656 мкс

INI_TMR; ініціалізація режиму переривань від RTCC
bsf STATUS,RP0; вибираємо банк 1
movlw b'00000100'
movwf OPTION; розподільник для RTCC 1 : 32
bcf STATUS,RP0; банк 0
movlw b'10100000'
movwf INTCON; дозволено переривання від RTCC
movlw .96; завантажуємо в RTCC попереднє число 96
movwf TMR0

Отримаємо час переривань:
ti = tc * 32 * (256 - 96 = 160)
ti = 0,97656 * 32 * 160 = 5 мкс = 000 мс

Тепер, якщо у Вашу будь-яку програму ввести нескінченний цикл (так званий цикл очікування переривання), і закінчення програми перекладати на цей цикл, отримаємо тимчасову прив'язку до 5 мс. ).Для чого це можна використовувати - дивись далі.

Отже:

;
організація 0
START; початок виконання програми після
; включення живлення
org 04h; а це адреса вектора переривання, за яким
main; буде виконуватись основна програма
;
START; тут зазвичай відбувається обов'язкова іні-
INI_TMR; циалізація портів, режимів, регістрів тощо.
INI_PORTS
петля
goto loop; а це і є нескінченний цикл
;------------------------------------------------- -

основний
; далі йде тіло основної програми,
; в якій обов'язково треба створити програму обслуговування переривань від RTCC,
; викликана командою CALL:

ServTMR
btfsc INTCON,RTIF; перевіряємо прапор спрацьовування переривань від RTCC та
call SET_TMR; якщо "так", то знову ініціалізуємо TMR0
return; якщо "ні" - повернення в місце виклику ServTMR
; основна програма main
;
SET_TMR movlw .96
movwf TMR0; знову завантажуємо число 96
bcf INTCON,RTIF; скидаємо прапор спрацьовування
retfie; повернення з дозволом переривань у ServTMR, а
; потім в основну програму main

Приклад використання переривання від RTCC для отримання секундного імпульсу на одному з виходів, скажімо, порту В - RB0 : Використовуємо регістр Rsec, який повинен бути раніше оголошений в адресному полі робочих регістрів.

Таким чином на виході RB0 порту Кожної секунди рівень сигналу буде змінюватися то '0' то '1'.

У регістрах контролера інформація перебуває зазвичай у двійковому вигляді, ( в бінарному коді). Але часто необхідно отримати інформацію в двійково-десятковому вигляді (BCD-код), скажімо, для управління порозрядно семисегментним індикатором.

Розглянемо приклади перетворень двійкового коду b2 двоично - десятковий BCD і навпаки.

У 8-bit регістрі можна записати в двійковому коді число від 0 до 255 (від b'00000000' до b'11111111'). Перетворимо двійкове число в три розряди двійково - десяткового коду - "сотні", "десятки" та "одиниці". Для цього будемо використовувати наступні регістри, які повинні бути заздалегідь оголошені в адресному полі робочих регістрів:

Rbin - регістр зберігання числа у двійковому коді b2
Rhan - регістр "сотні" коду BCD
Rdec - регістр "десятки" коду BCD
Rsim - регістр "одиниці" коду BCD

Перетворення проводимо використовуючи операції віднімання чисел 100, а потім 10 з підрахунком кількості позитивних віднімань.

FORM_1S; у кожному циклі, а він по перериванню RTCC триває
incf Rsec, w; 5 Мс, збільшуємо регістр Rsec на 1 до числа 200
xorlw .200; (5 мс * 200 = 1 сек)
btfsc STATUS,z
goto OUT_PORT; при Rsec = 200 прапор z = '1' і перехід на керування
; виведенням RB0 порту В
return; повернення в основну програму main
;
OUT_PORT btfss PORTB,0; перевіряємо стан виведення RB0
goto OUT_ON; якщо RB0 = '0', то встановлюємо в '1'
bcf PORTB,0; в іншому випадку - встановлюємо в '0'
goto main; повернення до основної програми
;
OUT_ON bsf PORTB,0; встановлюємо RB0 = '1'
goto main

CON_100 movlw .100; віднімаємо 100 з Rbin з перевіркою, що
subwf Rbin, w; результат не негативний. Прапор 'c' = 1 при
btfss STATUS, c; результаті > або = 0, і 'c' = 0 при < 0
goto CON_10
incf Rhan,f; підрахунок кількості "сотень"
movwf Rbin; результат віднімання спочатку зберігаємо в регістрі
goto CON_100 ;акумулятор і тільки потім повертаємо в Rbin
; щоб не втратити залишок при негативному
; результаті віднімання.
CON_10 movlw .10; аналогічно визначаємо "десятки"
subwf Rbin,w
btfss STATUS,c
goto end_con
incf Rdec,f
movwf Rbin
goto CON_10;
end_con
movf Rbin,w
movwf Rsim; після віднімань заносимо залишок у "одиниці"
;продовження виконання програми

Зворотне перетворення BCD - коду b2. Використовуємо ті ж регістри Rhan, Rdec, Rsim де знаходиться число в BCD - коді, регістри RbinH - старший розряд і RbinL - молодший розряд для чисел (> 255) в коді b2 і допоміжні регістри RM1 - "множина", RM2- "множник" .Для перетворення BCD в b2 потрібно помножити "сотні" на 100, "десятки" на 10 і скласти всі разом з "одиницями" і з урахуванням перенесення в старший розряд при необхідності. Для множення використовуємо операцію додавання.

B2X_100 movlw .99; перетворення "сотень"
movwf RM2; множник = кіль - до додавань (100) мінус один
movf Rhan,w
movwf RM1; множинне = "сотні"
loopX100 addwf RM1, w btfsc STASTUS, c; перевіряємо перенесення до старшого розряду
incf RbinH,f; якщо є перенесення
decfsz RM2,f; контролюємо кількість додавань
goto loopX100
movwf RbinL; результат додавання заносимо в регістр мл. розряду
;
B2X_10 movlw .9; перетворення "десятків"
movwf RM2; множник = кіль - до додавань (10) мінус один
movf Rdec,w
movwf RM1; множинне = "десятки"
loopX10 addwf RM1,w; тут перенесення можна перевіряти, т.к. результат
decfsz RM2,f; завжди < 255
goto loopX10
addwf RbinL,f; додаємо результат перетворення "десятків"
btfsc STATUS, c; враховуючи можливе перенесення в розрядах
інк
RbinH,f
movf Rsim,w
addwf Rbin,f; додаємо "одиниці" з урахуванням можливого перенесення
btfsc STATUS,c
incf RbinH,f

Кінець перетворенням та подальше виконання програми. У регістрах RbinL і RbinH отримали 16 - bit число коді b2.

Для виконання арифметичної операції поділу за аналогією з множенням, розглянутим вище, застосовується операція віднімання. Допустимо нам потрібно зробити розподіл числа, що знаходиться в регістрах RHsum (старші розряди) і RLsum (молодші розряди) - на дільник (приймемо дільник не > 255), що знаходиться в регістрі Rdel.

Результат будемо заносити в регістри RHrez та RLrez (старші та молодші розряди відповідно):

OP_DEL
movf Rdel,w
subwf Rlsum,w
btfss STATUS, c; перевіряємо чи негативний результат?
goto DEF_carry; якщо "так", то проводимо позику зі ст. розряду
incf RLrez, f; підраховуємо кількість віднімань з урахуванням
btfsc STATUS, c; можливого перенесення до старшого розряду
incf RHrez,f
movwf RLsum; відновлюємо залишок, щоб не втратити
goto OP_DEL; при негативному результаті віднімання
;
DEF_carry
movlw 0h
xorwf RHsum, w; чи всі зайняли зі старшого розряду до молодшого?
btfsc STATUS,z; якщо "так", тобто. RHdel = 0 і в OP_DEL відри-
goto OUT_ DEL; цат. результат - кінець поділу та вихід
decf RHsum,f; якщо "ні" - позика зі старшого розряду та про-
incf RLrez, f; продовжуємо далі
btfsc STATUS, c; перевірка необхідності перенесення до ст.розряду
incf RHrez,f
goto OP_DEL

Автор: Володимир Д., degvv@mail.ru; Публікація: cxem.net

Дивіться інші статті розділу Початківцю радіоаматору.

Читайте та пишіть корисні коментарі до цієї статті.

<< Назад

Останні новини науки та техніки, новинки електроніки:

Шум транспорту затримує зростання пташенят 06.05.2024

Звуки, що оточують нас у сучасних містах, стають дедалі пронизливішими. Однак мало хто замислюється про те, як цей шум впливає на тваринний світ, особливо на таких ніжних створінь, як пташенята, які ще не вилупилися з яєць. Недавні дослідження проливають світло на цю проблему, вказуючи на серйозні наслідки для їхнього розвитку та виживання. Вчені виявили, що вплив транспортного шуму на пташенят зебрового діамантника може призвести до серйозних порушень у розвитку. Експерименти показали, що шумова забрудненість може суттєво затримувати їх вилуплення, а ті пташенята, які все ж таки з'являються на світ, стикаються з низкою здоровотворних проблем. Дослідники також виявили, що негативні наслідки шумового забруднення сягають і дорослого віку птахів. Зменшення шансів на розмноження та зниження плодючості говорять про довгострокові наслідки, які транспортний шум чинить на тваринний світ. Результати дослідження наголошують на необхідності ...>>

Бездротова колонка Samsung Music Frame HW-LS60D 06.05.2024

У світі сучасної технології звуку виробники прагнуть не тільки бездоганної якості звучання, але й поєднання функціональності з естетикою. Одним із останніх інноваційних кроків у цьому напрямку є нова бездротова акустична система Samsung Music Frame HW-LS60D, представлена ​​на заході 2024 World of Samsung. Samsung HW-LS60D – це не просто акустична система, це мистецтво звуку у стилі рамки. Поєднання 6-динамічної системи з підтримкою Dolby Atmos та стильного дизайну у формі фоторамки робить цей продукт ідеальним доповненням до будь-якого інтер'єру. Нова колонка Samsung Music Frame оснащена сучасними технологіями, включаючи функцію адаптивного звуку, яка забезпечує чіткий діалог на будь-якому рівні гучності, а також автоматичну оптимізацію приміщення для насиченого звукового відтворення. За допомогою з'єднань Spotify, Tidal Hi-Fi і Bluetooth 5.2, а також інтеграцією з розумними помічниками, ця колонка готова задовольнити ...>>

Новий спосіб управління та маніпулювання оптичними сигналами 05.05.2024

Сучасний світ науки та технологій стрімко розвивається, і з кожним днем ​​з'являються нові методи та технології, які відкривають перед нами нові перспективи у різних галузях. Однією з таких інновацій є розробка німецькими вченими нового способу керування оптичними сигналами, що може призвести до значного прогресу фотоніки. Нещодавні дослідження дозволили німецьким ученим створити регульовану хвильову пластину всередині хвилеводу із плавленого кремнезему. Цей метод, заснований на використанні рідкокристалічного шару, дозволяє ефективно змінювати поляризацію світла через хвилевід. Цей технологічний прорив відкриває нові перспективи розробки компактних і ефективних фотонних пристроїв, здатних обробляти великі обсяги даних. Електрооптичний контроль поляризації, що надається новим методом, може стати основою створення нового класу інтегрованих фотонних пристроїв. Це відкриває широкі можливості для застосування. ...>>

Випадкова новина з Архіву

Протимікробна плівка для побутових поверхонь 08.11.2020

Компанія Veraco запускає лінійку продуктів для зменшення кількості мікробів на поверхнях, до яких люди торкаються найчастіше.

Британський виробник розробив та виготовив ряд протимікробних адгезивних прокладок та обгорток для використання їх на дверних ручках, візках для покупок, поручнях та інших "мікробних" місцях.

У матеріалах використано технологію "іонів срібла", яка руйнує біологічний склад мікроорганізмів, щоб зупинити поширення та розмноження небезпечних патогенів. Продукти вбивають до 99,99% звичайних бактерій, а також ефективні проти COVID-19. Приблизний термін придатності обгорток – до двох років після встановлення на поверхнях.

Технологія антимікробного срібла не нова і використовувалася у фарбах та покриттях для лікарень, проте досі ніхто не виробляв універсального продукту для широкого застосування.

Veraco вже уклала контракти з такими торговими марками, як Toyota та COS. Також компанія співпрацює з Лондонським Університетом Метрополітен (London Metropolitan University) та Національною службою охорони здоров'я Великобританії.

Інші цікаві новини:

▪ Батьки курять – діти хворіють

▪ Мозок перетворює слова на картинки

▪ Швидкісний робопес

▪ Розблокування за малюнком вен

▪ Наноалмази для світлодіодів та напівпровідників

Стрічка новин науки та техніки, новинок електроніки

 

Цікаві матеріали Безкоштовної технічної бібліотеки:

▪ розділ сайту Охорона праці. Добірка статей

▪ стаття Розетка в патроні. Поради домашньому майстру

▪ стаття Яка війна зробила Рим союзником Карфагена? Детальна відповідь

▪ стаття Інженер із захисту інформації. Посадова інструкція

▪ стаття Електронний Барабан. Енциклопедія радіоелектроніки та електротехніки

▪ стаття Пристрій захисту трифазного електродвигуна від неповнофазного режиму при обриві ланцюга силового запобіжника. Енциклопедія радіоелектроніки та електротехніки

Залишіть свій коментар до цієї статті:

ім'я:


E-mail (не обов'язково):


коментар:





All languages ​​of this page

Головна сторінка | Бібліотека | Статті | Карта сайту | Відгуки про сайт

www.diagram.com.ua

www.diagram.com.ua
2000-2024