Читайте также:
|
|
Після запуску MPSIM необхідно вибрати регістри, що контролюються в області перегляду на екрані монітора. Для цього можна користуватися наступними командами:
AD – дозволяє додати регістр в область перегляду (формат команди можна подивитись в MPSIM, набравши команду?);
DV – прибрати заданий регістр з області перегляду;
DR – дозволяє продивитись зміст всієї пам'яті;
NV – повністю очищати область перегляду;
V – заносить регістр в область перегляду.
Вибравши необхідні регістри для перегляду, можна приступати до моделювання. При цьому можна скористатись наступними командами:
SS – виконує одну команду програми;
DX – показує поточні параметри трасування;
TF – відкриває і закриває файл для запису даних, що трасуються;
ТА – трасує всі команди між двома адресами;
ТС – трасує команду за конкретною адресою;
GO – перехід за заданою адресою;
Е – запускає програму на безперервне виконання.
Дуже складно перебирати програму одиночними командами або моделювати безупинно. Тому зручно використовувати точки зупину:
В <адреса > – перервати виконання за заданою адресою;
ВС – очистити всі точки зупину;
DB – показати всі точки зупину.
Встановивши точки зупину, можна запустити програму на виконання і спостерігати роботу програми у відповідності з вхідними стимулами (див. далі "Файли, що завантажуються і створюються MPSIM").
3.7.3. Файли, що завантажуються і створюються MPSIM
Файл INI. Даний файл містить команди, що виконуються автоматично при запуску MPISM. Він необхідний, бо перед симуляцією необхідно з'ясувати, які регістри необхідно продивлятися в процесі симуляції. Якщо файл не використати, то потрібні регістри прийдеться описувати при кожному запуску симулятора.
Приклад INI-файлу:
ZP; Обнулити таблицю шляхів
ZR; Обнулити всі регістри
ZT; Обнулити таймер
RE
LO <ім'я файлу>; Завантажити файл з програмою
NV; Очистити екран перегляду.
VW, B, 8; Задати новий регістр в область перегляду
AD F1, X, 2; Додати в область перегляду регістр за
; адресою 1, формат виведення
; шістнадцятирічний, дві цифри
AD F3, B, 8
AD F5, B, 5
AD TRISA, B, 5
AD TRISB, B, 8
ST SS; Завантажити файл стимулу
RS
Наведений приклад є стандартним і може бути використаний в якості INI-файлу для Вашої програми, адреси регістрів для перегляду виберіть відповідно своєму додатку.
Файл стимулу. Файл стимулу завантажується командою ST <ім’я файлу>, розширення повинно бути STI. Файл стимулу містить вхідні події, що надходять на ніжки портів. Він повинен бути текстовим.
Приклад:
Step | RTCC | RA3 | RA2 | RA1 | RA0 |
Даний спосіб моделювання зручний при використанні команди Е. Можна задати стимули іншим способом:
SE < номер ніжки > < дія >.
Після цієї команди, якщо вивід МК встановлений на ввід, він переключиться.
Файл журналу. Даний файл створюється автоматично при виході з програми MPSIM. Команда виходу Q. Цей файл містить послідовність команд, що використовувалися під час останнього запуску MPSIM.
Команда LJ завантажує файл журналу на виконання. Але враховуйте, що після кожного виходу файл журналу оновлюється.
Програмний файл. За командою LO < ім’я файлу > Ваша програма завантажиться в симулятор.
Файл команд. Команда GE < ім’я файлу > завантажує в симулятор набір команд, що міститься в файлі з розширенням INI. Ім'я повинно бути не MPSIM.
3.7.4. Особливості використання симулятора MPSIM
При використанні симулятора MPSIM версії 5.11 потрібно враховувати те, що обробка переривання починається тільки через 4 такти, а симулятор переходить на обробку переривання через 1 такт.
Окрім цього, симулятор "вважає", що всі порти мають фіктивне навантаження на виходах ОМК PIC 16F84 (16С84).
Слід зауважити, що симулятор також "не звертає уваги" на невірну ініціалізацію портів, переривань, таймера і таке інше.
___________
Введення байта стану одного датчика
Нехай, наприклад, необхідно ввести байт стану датчика дискретних сигналів (Di), порівняти його з уставкою, що зберігається у вигляді константи Ki в пам'яті даних, і за результатами порівняння здійснити:
Введення наступного байта стану датчика, якщо Di = Ki;
Формування і виведення керуючих сигналів у випадку, якщо Di > Ki або Di < Ki (сформувати і вивести позитивний імпульс заданої тривалості).
Для вирішення даної задачі необхідно:
Вибрати лінії (розряди) портів А і В для введення сигналів від датчика і виведення імпульсних сигналів (наприклад, RB0... RB7 – на введення, а RA0 – на виведення);
Заборонити всі переривання;
Здійснити опитування стану датчика;
Проаналізувати його (порівняти отриманий байт з константою, використовуючи, наприклад, прапорець переносу позики «С» в регістрі STATUS);
Організувати процедуру передачі управління на дві підпрограми в залежності від результатів порівняння;
Сформувати сигнал заданої тривалості за допомогою тимчасового інтервалу, рівного часу затримки. Для цього можна використати:
![]() |
Рис. 5.2. Загальний алгоритм
програми
програмний лічильник, працюючий, наприклад, в декрементному режимі. При цьому в лічильник заноситься константа, лічильник декрементується. Онулення лічильника є сигналом закінчення часового інтервалу;
внутрішній таймер-лічильник (TMRO);
зовнішній (додатковий) таймер-лічильник у випадку, якщо TMRO з будь-якої причини використати неможливо;
одну або декілька холостих команд NOP;
Організувати введення наступного байта.
На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера (рис. 5.5).
На рис. 5.6 наведена БСА підпрограми порівняння двох восьми- розрядних кодів (СОМР), один з яких представляє собою байт стану датчика (Di), а другий – константу (Ki), що зберігається в одному з регістрів пам'яті даних.
На підставі блок-схем алгоритмів і розподілу пам'яті даних можна запропонувати текст програми, що наведений нижче:
; Текст програми.
LIST p = 16C84, r = HEX
Title ‘Z2’
; Секція заголовка
; Опис спеціальних регістрів
TRISA EQU 85H
TRISB EQU 86H
INTCON EQU 0BH
STATUS EQU 03H
; Опис регістрів вводу/ виводу PIC
PORTA EQU 05H; Регістр вводу/ виводу
; порту А
PORTB EQU 06H; Регістр вводу/ виводу
; порту В
; Опис комірок ОЗУ
CTD EQU 0DH; Лічильник циклу в підпрограмі
; затримки (DELAY)
CONST EQU 0EH; Регістр зберігання константи Ki
;
; Робоча секція
; Точка входу в програму після команди RESET
ORG 0
GOTO INMK
ORG 100H
; Процедура ініціалізації МК
; Заборона переривань
INMK BCF INTCON, 7; Скидання 7-го біта в регістрі
; INTCON
; Завантаження регістра
; керування портом В
MOVLW B'1111 1111’; Переслати константу в W
TRIS 6
; Завантаження регістра
; керування портом A
MOVLW B'0000 0000’; Переслати константу в W
TRIS 5
BCF PORTA, 0; Скидання 0-го біта в регістрі
; порту А
; Опитування стану датчика і процедура порівняння (COMP)
LESS MOVF PORTB, 1
SUBWF CONST, 1
ADDLW B'11111111’
; Перевірка стану прапорця
; переносу/позики С
BTFSC STATUS, 0
GOTO LESS
; Видавання імпульсу заданої тривалості (IMPULS)
BSF PORTA, 0
; Затримка (DELAY)
MOVLW B'0000 1111’; Завантаження лічильника
; затримки
MOVWF CTD
; Цикл затримки
M1 DECFSZ CTD; Декремент CTD, пропустити
; команду, якщо 0 (якщо
; регістр CTD онулився)
GOTO M1
; Припинити видавання сигналу
BCF PORTA, 0
GOTO LESS
END
![]() | |||
Рис. 5.5. Загальний алгоритм програми
5.2.2. Введення байтів стану двох незалежних датчиків
Будемо сподіватись що, наприклад, необхідно ввести водночас через порти введення/ виведення байти стану 2-х незалежних датчиків дискретних сигналів, виконати порівняння введених байтів між собою, і за результатами порівняння здійснити:
У випадку, якщо D1 <= D2 управління передається фрагменту програми з адресою А1 і встановлюється в ²1² ознака (прапорець) F0;
У випадку, якщо D1 > D2 ознака F0 встановлюється в ²0², у відповідності з варіантом завдання формуються керуючі сигнали, а управління передається на фрагмент програми з адресою А2.
Вибрати мікроконтролер, що має не менше 17-ти ліній введення/ виведення дискретних сигналів (наприклад, PIC 16C55);
Вибрати лінії (розряди) портів А, В і С для введення сигналів від датчиків і виведення імпульсних сигналів (наприклад, RB0... RB7 – для вводу сигналів від датчика D1, RC0... RC7 – для вводу сигналів від датчика D2 і RA0 – для виводу імпульсних сигналів управління заданої тривалості);
Здійснити опитування стану обох датчиків;
Порівняти отримані байти стану між собою;
Організувати процедуру передачі управління на дві підпрограми в залежності від результатів порівняння;
Сформувати сигнал заданої тривалості за допомогою часового інтервалу, рівного часу затримки.
Для цього можна використати:
одну або декілька холостих команд NOP;
програмний лічильник, працюючий, наприклад, в декрементному режимі. При цьому в лічильник заноситься константа, лічильник декрементується. Онулення лічильника є сигналом закінчення часового інтервалу;
внутрішній таймер-лічильник (TMRO);
зовнішній (додатковий) таймер-лічильник у випадку, якщо TMRO з будь-якої причини використати неможливо;
Організувати введення наступного байта.
На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера. Цей алгоритм наведений на рис. 5.7. На рис. 5.8 наведена БСА підпрограми порівняння двох байтів стану незалежних датчиків D1 і D2 між собою (СОМР1).
На підставі блок-схем алгоритмів і розподілу пам'яті даних можна запропонувати текст програми, що наведений нижче:
; Текст програми:
LIST p = 16C55, r = HEX
Title ‘Z3’
; Секція заголовка
; Опис спеціальних регістрів
TRISA EQU 85H
TRISA EQU 86H
INTCON EQU 0BH
STATUS EQU 03H
; Опис регістрів вводу/ виводу PIC
PORTA EQU 05H
PORTB EQU 06H
PORTC EQU 07H
; Опис комірок ОЗП
F0 EQU 0DH
; Робоча секція
; Точка входу в програму після RESET
ORG 0
GOTO INP
ORG 100H
; Процедура ініціалізації MK
; Заборона переривань
INMK BCF INTCON, 7; Скидання 7-го біта в регістрі
; INTCON
; Завантаження регістра
; керування портом
MOVLW B’ 1111 1111’; Переслати команду в регістр W
TRIS 6
; Завантаження регістра
; керування портом А
MOVLW B’ 0000 0000’; Переслати команду в регістр W
TRIS 5
; Завантаження регістра
; керування портом С
MOVLW B’ 1111 1111’; Переслати команду в регістр W
TRIS 7
BCF PORTA, 0; Скидання 0-го біта в регістрі
; порту А
; Опитування стану датчиків і процедура порівняння (COMP1)
LESS MOVF PORTB, 0
SUBWF PORTC, 1
; Перевірка стану прапора
; переносу/ позики C
BTFSC STATUS, 0; Якщо С = 1 (D1 <= D2), то
GOTO A1; перехід на фрагмент
; програми з адресою A1
; Настанова прапора F0 в 0
BCF F0, 0
; Видавання імпульсу заданої тривалості (IMPULS)
BSF PORTA, 0; Виставити "1" в порт А
NOP; Затримка (DELAY)
NOP
BCF PORTA, 0; Виставити 0 в порт А
GOTO A2; Перехід на фрагмент
; програми з адресою А2
; Настанова прапора F0 в 1
A1 BSF F0, 0
GOTO LESS
A2 GOTO LESS
END
___________
Дата добавления: 2014-12-18; просмотров: 220 | Поможем написать вашу работу | Нарушение авторских прав |