Рефераты. Разработка микропроцессорного устройства цифрового фильтра










  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.

Таблица 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

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.