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.

Таблица 5.2

Адрес Метка Мнемонический код Комментарии Циклы
ORG 0x00E Директива
000Eh MOVLW 0xFF Пересылка 0xFF в аккумулятор 1
000Fh BSF STATUS, RP0 Выбор банка 1 1
0010h MOVWF TRISA Порт А – Вход 1
0011h CLRF TRISB Порт В – Выход 1
0012h MOVLW 0x18 Организация счетчика СOUNT 1
0013h BCF STATUS, RP0 Выбор банка 0 1
0014h MOVWF COUNT Организация счетчика 1
0015h MOVLW 0x0C Адрес начальной ячейки в ОЗУ 1
0016h MOVWF FSR Пересылка адреса начальной ячейки в FSR 1
0017h M1: CLRF INDF Обнуление текущей ячейки памяти 1
0018h INCF FSR, 1 Адрес + 1 1
0019h DECF COUNT Счетчик – 1 1
001Ah BTFSS STATUS, Z Условный переход по 1 значению флага нулевого результата 1(2)
001Bh GOTO M1 2
001Ch M2: BSF STATUS,RP0 Выбор банка 1 1
001Dh CLRF ADCON1 RA0-RA3 Входы АЦП 1
001Eh MOVLW 0xC1 1
001Fh BCF STATUS,RP0 Выбор банка 0 1
0020h MOVWF ADCON0 АЦП включен, работает канал0 (RA0), частота 32Tosc. 1
0021h BSF INTCON ADIE Разрешить прерывание АЦП 1
0022h BSF INTCON GIE Разрешить глобальное прерывание 1
0023h BSF ADCON0, GO Запустить АЦП 1
0024h BCF STATUS, C Очистка триггера переноса 1
0025h RRF UM1, 0 Циклический сдвиг вправо через триггер переноса 1
0026h BCF STATUS, C Очистка триггера переноса 1
0027h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0028h MOVWF A11UM1 W® A11UM1 1
0029h BCF STATUS, C Очистка триггера переноса 1
002Ah RRF YN1, 0 Циклический сдвиг вправо через триггер переноса 1
002Bh BCF STATUS, C Очистка триггера переноса 1
002Ch RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
002Dh BCF STATUS, C Очистка триггера переноса 1
002Eh RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
Продолжение таблицы 5.2
002Fh BCF STATUS, C 1
0030h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0031h MOVWF B11YN1 W® B11YN1 1
0032h BCF STATUS, C Очистка триггера переноса 1
0033h RRF YN1, 0 Циклический сдвиг вправо через триггер переноса
0034h ADDWF W, 0 W=W+W 1
0035h ADDWF W, 0 W=W+W 1
0036h ADDWF B11YN1 W=W+ B11YN1 1
0037h SUBWF A11UM1, 0 W= A11UM1- W 1
0038h MOVWF YNN W® YNN 1
0039h BCF STATUS, C Очистка триггера переноса 1
003Ah RRF UM1, 0 Циклический сдвиг вправо через триггер переноса 1
003Bh MOVWF A21UM1 W® A21UM1 1
003Ch BCF STATUS, C Очистка триггера переноса 1
003Dh RRF YK1, 0 Циклический сдвиг вправо через триггер переноса 1
003Eh BCF STATUS, C Очистка триггера переноса 1
003Fh RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0040h BCF STATUS, C Очистка триггера переноса 1
0041h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0042h SUBWF A21UM1, 0 W= A21UM1- W 1
0043h MOVWF YK W® YK 1
0044h MOVF YN1, 0 YN1®W 1
0045h ADDWF YK1 W=W+ YK1 1
0046h BCF STATUS, C Очистка триггера переноса 1
0047h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0048h BCF STATUS, C Очистка триггера переноса 1
0049h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
004Ah BCF STATUS, C Очистка триггера переноса 1
004Bh RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
004Ch BCF STATUS, C Очистка триггера переноса 1
004Dh RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
004Eh MOVWF A31YN1YK1 W® A31YN1YK1 1
004Fh MOVF YN2, 0 YN2®W 1
0050h ADDWF YK2 W=W+ YK2 1
0051h BCF STATUS, C Очистка триггера переноса 1
0052h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0053h BCF STATUS, C Очистка триггера переноса 1
0054h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0055h BCF STATUS, C Очистка триггера переноса 1
0056h RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
0057h MOVWF A32YN2YK2 W® A32YN2YK2 1
0058h BCF STATUS, C Очистка триггера переноса 1
0059h RRF YL1, 0 Циклический сдвиг вправо через триггер переноса 1
Продолжение таблицы 5.2
005Ah ADDWF W, 0 W=W+W 1
005Bh ADDWF W, 0 W=W+W 1
005Ch SUBWF A32YN2YK2, 0 W= A32YN2YK2- W 1
005Dh ADDWF A31YN1YK1 W=W+ A31YN1YK1 1
005Eh MOVWF YLL W® YLL 1
005Fh BCF STATUS, C Очистка триггера переноса 1
0060h NOP Ничего не выполнять 1
0061h NOP 1
0062h NOP 1
0063h NOP 1
0064h NOP 1
0065h NOP 1
0066h NOP 1
0067h NOP 1
0068h NOP 1
0069h NOP 1
006Ah NOP 1
006Bh NOP 1
006Ch NOP 1
006Dh NOP 1
006Eh NOP 1
006Fh NOP 1
0070h NOP 1
0071h NOP 1
0072h NOP 1
0073h NOP 1
0074h MOVF YK1, 0 YK1®W 1
0075h MOVWF YK2 W® YK2 1
0076h MOVF YK, 0 YK ®W 1
0077h MOVWF YK1 W® YK1 1
0078h RRF UM, 0 Циклический сдвиг вправо через триггер переноса 1
0079h ADDWF YNN W=W+ YNN 1
007Ah MOVWF YN W® YN 1
007Bh ADDWF YK W=W+ YK 1
007Ch BCF STATUS, C Очистка триггера переноса 1
007Dh RRF W, 0 Циклический сдвиг вправо через триггер переноса 1
007Eh ADDWF W, 0 W=W+W 1
007Fh ADDWF YLL W=W+ YLL 1
0080h MOVWF YL W® YL 1
0081h MOVWF PORTB W® PORTB 1
0082h MOVF YN1, 0 YN1®W 1
0083h MOVWF YN2 W® YN2 1
0084h MOVF YN, 0 YN ®W 1
0085h MOVWF YN1 W® YN1 1
0086h MOVF YL, 0 YL ®W 1
0087h MOVWF YL1 W® YL1 1
0088h MOVF UM, 0 UM ®W 1
0089h MOVWF UM1 W® UM1 1
008Ah GOTO M2 Безусловный переход на метку 1
END
Всего вместе с программой обработки прерывания 283

Время выполнения программы 56 мкс.

Операции NOP предназначены для синхронизации работы АЦП с программой. Также для этой цели было добавлено 4 команды перед операциями над текущим значением отсчета. В составленном алгоритме данные коррекции небыли предусмотрены. Время выполнения программы, реализующей цифровой фильтр, равно 49 мкс. Интервал дискретизации сигнала равен 24,6 мкс, соответственно частота дискретизации равна 41000Гц. В программе используются два перехода: один для обнуления ОЗУ, другой – для возврата программы на место запуска АЦП. При использовании более современных PIC процессоров возможно исключение операций NOP.


Информация о работе «Разработка микропроцессорного устройства цифрового фильтра»
Раздел: Радиоэлектроника
Количество знаков с пробелами: 39407
Количество таблиц: 3
Количество изображений: 0

Похожие работы

Скачать
22666
1
2

... 8-канальный АЦП и аналоговый компаратор; - последовательные интерфейсы UART0, UART0, TWI и SPI; -  блоки прерывания и управления (включая сторожевой таймер). Архитектура ядра. Ядро микроконтроллера выполнено по усовершенствованной RISC-архитектуре. Арифметико-логическое устройство, выполняющее все вычисления, подключено непосредственно к 32 регистрам общего назначения. Благодаря этому АЛУ ...

Скачать
20682
3
7

... данных в режиме простого обмена данными; q  таймер (РУ55) останавливается; q  содержимое ячеек ОЗУ и буферных регистров портов (РУ55) сохраняется. 3. Разработка общего алгоритма функционирования фильтра Общий алгоритм функционирования фильтра строится на основе выводов и определений, сделанных при анализе задачи, и включает в себя все функции устройства, реализуемые аппаратно и реализуемые ...

Скачать
20489
1
3

... , b2i , a2i определяют характеристики фильтра. При значениях коэффициентов фильтр имеет АЧХ фильтра верхних частот b 20 = 1;b 21 = 0;b 22 = 1.1; a 21 = 0.999;a 22 = 0.000 Разностное уравнение задает во временной области порядок получения выходной последовательности отсчетов из входной. В z-плоскости свойства цифрового фильтра описывает передаточная функция H(z), которая при двухкаскадной ...

Скачать
25073
5
6

... ; MOV X1, X ; MOV Y1, Y ; RETI ;возврат из подпрограммы обслуживания прерывания по входу END Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (нижних частот)". Разностное уравнение имеет вид: Представим уравнение в виде:  , где  , 1)Реализуемый коэффициент масштабирования (число без знака) при 8-разрядном формате беззнаковых коэффициентов:  ;, ...

0 комментариев


Наверх