Установка да
порта В на Z=0 вывод нет 60x17®W Сброс ADCON1
W®COUNT 0xC1®W
W®ADCON0
0x0C®W
Разрешить
прерывание
W®FSR АЦП
Разрешить
глобальное
Сброс INDF прерывание
FSR + 1 Пуск АЦП
1 2
2 3Вычисление
А11UM1с сох- Вычисление
ранением зна- A32YN2YK2=
чения =A32(YN2+YK2)
с сохранением
значенияВычисление
B11YN1 с сох-
ранением зна- Вычисление
чения B31YL1
Вычисление
В12YN2
ВычислениеYLL
= A31YN1YK1+
Вычисление + A32YN2YK2-
YNN=А11UM1- - B31YL1 с сох-
- B11YN1- ранением зна-
- В12YN2 с сох- чения
ранением зна-
ченияВычисление YK1 ® W
A21UM1 с сох-
ранением зна-
ченияВычисление W ® YK2
B21YK1
Вычисление YK ® W
YK=А21UM1-
- B21YK1 с сох-
ранением зна-
чения
W ® YK1Вычисление
A31YN1YK1 =
=A31(YN1+YK1) Вычисление
с сохранением A10UM
значения
3 4
4 6 5
Вычисление
YN =A10UM+ UM ® W
+YNN
с сохранениемзначения
W ® UM1
Вычисление
YL=A30(YN+ +YK)+YLLс сохранением
значения
ОСТАНОВПередача знач-
чения YL на
порт B
YN1 ® W
W ® YN2
YN ® W
W ® YN1
YL ® W
5
Рисунок 4.2 - Алгоритм программы проектируемого устройства
5 РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕР
Прежде чем приступить к написанию программы необходимо учесть спецификацию ПЗУ микроконтроллера. Организация ПЗУ изображена на рисунке 5.1
Рисунок 5.1 – Организация ПЗУ PIC16C71
Из рисунка видно, что начало программы пользователя может быть расположено ниже адреса 0004h. Адрес 0000h – вектор сброса, 0004h – вектор прерывания. По этим адресам перед началом программирования, как правило, прописывают безусловный переход на программу пользователя и безусловный переход на программу обработки прерывания соответственно. Так как в случае нашей системы устройство, осуществляющее запрос прерывания, одно, то по адресу 0004h можно прописывать начало программы обработки прерывания.
Также при программировании обязательно нужно учесть спецификацию банков ОЗУ. Структура ОЗУ изображена на
рисунке 5. При обращении к регистрам ОЗУ каждый раз необходимо программно переключаться между банками ОЗУ, в зависимости от того в каком банке находится регистр. Ассемблер, поставляемый производителем, позволяет вначале всем регистрам присвоить вместо адреса определенное имя. Это удобно для составления программы.
Рисунок 5.2 – Организация ОЗУ PIC16C711
Сначала напишем программу обработки прерывания. Занесем программу в таблицу - 1 с адресами ПЗУ и комментариями.
Таблица 5.1
Адрес | Метка | Мнемонический код | Комментарии | Циклы |
ORG 0x004 | Директива | |||
0004h | MOVWF W_TEMP | Сохранение содержимого W в W_TEMP | 1 | |
0005h | MOVF STATUS, 0 | Пересылка содержимого STATUS в W | 1 | |
0006h | MOVWF STATUS_TEMP | Сохранение W в STATUS _TEMP | 1 | |
Продолжение таблицы 5.1 | ||||
0007h | BCF STATUS, RP0 | Выбор банка 0 | 1 | |
0008h | MOVF ADRES, 0 | Пересылка результата АЦП в W | 1 | |
0009h | MOVWF UM | Пересылка W в UM | ||
000Ah | MOVF STATUS_TEMP, 0 | Пересылка STATUS_TEMP в W | 1 | |
000Bh | MOVWF STATUS | Пересылка W в STATUS | 1 | |
000Ch | MOVF W_TEMP, 0 | Пересылка W_TEMP в W | 1 | |
000Dh | RETFIE | Возврат прерывания | 2 |
Программу, реализующую математическую модель фильтра начнем с адреса 000Eh и разместим в таблицу 5, 2.