Реферат: Разработка микропроцессорного устройства цифрового фильтра
--PAGE_BREAK--3 СИНТЕЗ ПРОЕКТИРУЕМОГО УСТРОЙСТВАСтруктурная схема типа реализации ЦФ приведена на рис.3.1. Параметры звеньев ЦФ следующие :
параметры звена <img width=«48» height=«21» src=«ref-1_448253336-149.coolpic» v:shapes="_x0000_i1029">: <img width=«295» height=«24» src=«ref-1_448253485-457.coolpic» v:shapes="_x0000_i1030">;
параметры звена <img width=«48» height=«21» src=«ref-1_448253942-149.coolpic» v:shapes="_x0000_i1031">: <img width=«148» height=«24» src=«ref-1_448254091-266.coolpic» v:shapes="_x0000_i1032">;
параметры звена <img width=«45» height=«21» src=«ref-1_448254357-142.coolpic» v:shapes="_x0000_i1033">: <img width=«304» height=«25» src=«ref-1_448254499-459.coolpic» v:shapes="_x0000_i1034">.
<img width=«552» height=«204» src=«ref-1_448254958-2627.coolpic» v:shapes="_x0000_s1624 _x0000_s1625 _x0000_s1626 _x0000_s1627 _x0000_s1628 _x0000_s1629 _x0000_s1630 _x0000_s1657 _x0000_s1658 _x0000_s1660 _x0000_s1661 _x0000_s1662 _x0000_s1663 _x0000_s1664 _x0000_s1665 _x0000_s1666 _x0000_s1667 _x0000_s1668 _x0000_s1671 _x0000_s1672 _x0000_s1673">
Рис. 3.1 – Структурная схема цифрового фильтра
Исходя из этой структуры, а также коэффициентов, для каждого звена составим разностные уравнения:
1) первое звено:
<img width=«255» height=«24» src=«ref-1_448257585-405.coolpic» v:shapes="_x0000_i1038">;
2) второе звено:
<img width=«135» height=«24» src=«ref-1_448257990-257.coolpic» v:shapes="_x0000_i1039">;
3) третье звено:
<img width=«399» height=«24» src=«ref-1_448258247-579.coolpic» v:shapes="_x0000_i1040">.
Результирующее разностное уравнение для цифрового фильтра будет иметь вид:
<img width=«53» height=«24» src=«ref-1_448258826-137.coolpic» v:shapes="_x0000_i1041">.
4 РАЗРАБОТКА АЛГОРИТМА ПРОГРАММЫ
ПРОЕКТИРУЕМОГО УСТРОЙСТВА
Прежде чем приступить к программированию устройства необходимо основательно изучить его внутреннюю структуру и возможности ресурсов. Простейшая блок-схема проектируемого устройства приведена на рисунке 4.1 В ней учтены конфигурация портов и АЦП, вычисление разностного уравнения фильтра, результат вычислений выдается на порт В.
<img width=«98» height=«66» src=«ref-1_448258963-609.coolpic» v:shapes="_x0000_s1083">
Начало
<img width=«12» height=«25» src=«ref-1_448259572-106.coolpic» v:shapes="_x0000_s1084">
<img width=«98» height=«66» src=«ref-1_448259678-295.coolpic» v:shapes="_x0000_s1085">
Порт А –
вход
<img width=«12» height=«24» src=«ref-1_448259973-105.coolpic» v:shapes="_x0000_s1086">
<img width=«98» height=«66» src=«ref-1_448260078-283.coolpic» v:shapes="_x0000_s1087"> Порт В –
выход
<img width=«12» height=«38» src=«ref-1_448260361-115.coolpic» v:shapes="_x0000_s1089">
<img width=«98» height=«66» src=«ref-1_448260476-328.coolpic» v:shapes="_x0000_s1088"> Запуск
<img width=«2» height=«287» src=«ref-1_448260804-104.coolpic» v:shapes="_x0000_s1097"><img width=«71» height=«12» src=«ref-1_448260908-109.coolpic» v:shapes="_x0000_s1098"> АЦП
<img width=«12» height=«62» src=«ref-1_448261017-136.coolpic» v:shapes="_x0000_s1091">
<img width=«98» height=«79» src=«ref-1_448261153-398.coolpic» v:shapes="_x0000_s1090"> Вычисление
разностного
уравнения
<img width=«12» height=«31» src=«ref-1_448261551-111.coolpic» v:shapes="_x0000_s1094">
<img width=«99» height=«69» src=«ref-1_448261662-727.coolpic» v:shapes="_x0000_s1092"> Выдача
Результата
<img width=«2» height=«21» src=«ref-1_448262389-76.coolpic» v:shapes="_x0000_s1095"> На порт В
<img width=«118» height=«2» src=«ref-1_448262465-91.coolpic» v:shapes="_x0000_s1096">
Рисунок 4.1 – блок-схема работы цифрового фильтра
Опираясь на данную блок схему, начнем более тщательное
<img width=«12» height=«13» src=«ref-1_448262556-94.coolpic» v:shapes="_x0000_s1638">рассмотрение вопроса. Конфигурация портов и АЦП задается исходя из документации предлагаемой производителем. Данная документация содержит примеры программ для настройки портов и АЦП. Оговорим некоторые аспекты этих программ применительно к нашему курсовому проекту. Контакты порта А зададим входами установкой битов в регистре TRISA. Данное условие необходимо для осуществления аналого-цифровой обработки сигнала. Контакты порта В зададим как выходные сбросом битов в регистре TRISB. Для АЦП выберем канал 0, то есть вывод микропроцессора RA0. В PIC16C711 на одно преобразование АЦП необходим минимальный интервал времени 10Тad, где Тad =1,6мкс выбирается программно. Также одной из важных частей программы запуска АЦП является организация разрешения прерываний.
После конфигурации портов и запуска АЦП необходимо приступить к выполнению программы вычисления разностного уравнения, описывающего фильтр.
Просчитаем количество переменных, входящих в уравнения. Это количество будет определять необходимое число байт памяти. В нашем случае оно составляет 17. Нетрудно заметить, что коэффициенты разностных уравнений подобраны таким образом, что умножение переменной на них будет делением на 2,4,8…, а эта операция выполняется путем сдвига регистра вправо. Для хранения промежуточных данных сдвиговых операций и операций сложения нам понадобятся дополнительные ячейки памяти в количестве 17. При начальном запуске программы или при сбросе микропроцессорной системы все ячейки памяти необходимо сбросить в нуль.
На обработку данных АЦП требуется, как указывалось ранее, время. Чтобы повысить эффективность и качество системы, необходимо во время просчета АЦП, вместо простоя и ожидания системой результата просчета, произвести вычисления без участия текущего значения отсчета. Вычисления с участием текущего значения отсчета должны производиться через время, равное 10Tad.
Результат вычисления АЦП будет обрабатывать программа прерывания.
Исходя из всех вышеприведенных соображений, составим окончательный алгоритм программы:
<img width=«50» height=«50» src=«ref-1_448262650-838.coolpic» v:shapes="_x0000_s1676"><img width=«98» height=«66» src=«ref-1_448263488-386.coolpic» v:shapes="_x0000_s1131">
Начало 1
<img width=«12» height=«39» src=«ref-1_448263874-114.coolpic» v:shapes="_x0000_s1677">
<img width=«98» height=«66» src=«ref-1_448259678-295.coolpic» v:shapes="_x0000_s1684">
Установка
порта А на COUNT-1
ввод
<img width=«100» height=«94» src=«ref-1_448264283-646.coolpic» v:shapes="_x0000_s1688 _x0000_s1689 _x0000_s1690"><img width=«12» height=«25» src=«ref-1_448264929-105.coolpic» v:shapes="_x0000_s1135">
<img width=«12» height=«26» src=«ref-1_448265034-106.coolpic» v:shapes="_x0000_s1132"><img width=«98» height=«66» src=«ref-1_448260078-283.coolpic» v:shapes="_x0000_s1136"><img width=«98» height=«66» src=«ref-1_448265423-325.coolpic» v:shapes="_x0000_s1134">
Установка да
<img width=«182» height=«2» src=«ref-1_448265748-84.coolpic» v:shapes="_x0000_s1693"><img width=«7» height=«467» src=«ref-1_448265832-286.coolpic» v:shapes="_x0000_s1194"> порта В на Z=0
<img width=«50» height=«50» src=«ref-1_448266118-630.coolpic» v:shapes="_x0000_s1898"> вывод
<img width=«98» height=«547» src=«ref-1_448266748-1863.coolpic» v:shapes="_x0000_s1713 _x0000_s1695 _x0000_s1696 _x0000_s1697 _x0000_s1698 _x0000_s1699 _x0000_s1700 _x0000_s1701 _x0000_s1702 _x0000_s1703 _x0000_s1704 _x0000_s1705 _x0000_s1706 _x0000_s1707 _x0000_s1708 _x0000_s1709 _x0000_s1710 _x0000_s1711 _x0000_s1712"> нет
<img width=«123» height=«12» src=«ref-1_448268611-122.coolpic» v:shapes="_x0000_s1904"> 6
0x17®W Сброс ADCON1
<img width=«98» height=«92» src=«ref-1_448268733-470.coolpic» v:shapes="_x0000_s1165 _x0000_s1166 _x0000_s1167"><img width=«98» height=«93» src=«ref-1_448269203-417.coolpic» v:shapes="_x0000_s1168 _x0000_s1169 _x0000_s1170"><img width=«98» height=«92» src=«ref-1_448269620-416.coolpic» v:shapes="_x0000_s1171 _x0000_s1172 _x0000_s1173"><img width=«98» height=«92» src=«ref-1_448270036-470.coolpic» v:shapes="_x0000_s1174 _x0000_s1175 _x0000_s1176"><img width=«98» height=«92» src=«ref-1_448270506-470.coolpic» v:shapes="_x0000_s1177 _x0000_s1178 _x0000_s1179"><img width=«79» height=«12» src=«ref-1_448270976-118.coolpic» v:shapes="_x0000_s1195"><img width=«98» height=«92» src=«ref-1_448271094-387.coolpic» v:shapes="_x0000_s1180 _x0000_s1181 _x0000_s1182">
W®COUNT 0xC1®W
<place w:st=«on»>W®ADCON0
xC®W
Разрешить
прерывание
<place w:st=«on»>W®FSR АЦП
Разрешить
глобальное
Сброс INDF прерывание
FSR+ 1 Пуск АЦП
<img width=«12» height=«51» src=«ref-1_448271481-122.coolpic» v:shapes="_x0000_s1714"><img width=«12» height=«51» src=«ref-1_448271481-122.coolpic» v:shapes="_x0000_s1674">
<img width=«50» height=«50» src=«ref-1_448271725-638.coolpic» v:shapes="_x0000_s1675">
<img width=«50» height=«50» src=«ref-1_448272363-624.coolpic» v:shapes="_x0000_s1715">
1 2
<img width=«50» height=«50» src=«ref-1_448272987-618.coolpic» v:shapes="_x0000_s1753"><img width=«98» height=«323» src=«ref-1_448273605-1762.coolpic» v:shapes="_x0000_s1751 _x0000_s1716 _x0000_s1719 _x0000_s1720 _x0000_s1721 _x0000_s1722 _x0000_s1723 _x0000_s1724 _x0000_s1725 _x0000_s1726 _x0000_s1727"> 2 3
<img width=«98» height=«122» src=«ref-1_448275367-478.coolpic» v:shapes="_x0000_s1754 _x0000_s1755 _x0000_s1756">
Вычисление
А11UM1с сох- Вычисление
ранением зна- A32YN2YK2=
чения =A32(YN2+YK2)
с сохранением
<img width=«98» height=«92» src=«ref-1_448275845-406.coolpic» v:shapes="_x0000_s1757 _x0000_s1758 _x0000_s1759"> значения
Вычисление
B11YN1 с сох-
ранением зна- Вычисление
чения B31YL1
<img width=«98» height=«618» src=«ref-1_448276251-1659.coolpic» v:shapes="_x0000_s1783 _x0000_s1760 _x0000_s1761 _x0000_s1762 _x0000_s1765 _x0000_s1766 _x0000_s1767 _x0000_s1768 _x0000_s1769 _x0000_s1770 _x0000_s1771 _x0000_s1772 _x0000_s1773 _x0000_s1774 _x0000_s1775 _x0000_s1776 _x0000_s1777 _x0000_s1778 _x0000_s1779">
Вычисление
В12YN2
<img width=«98» height=«126» src=«ref-1_448277910-577.coolpic» v:shapes="_x0000_s1728 _x0000_s1729 _x0000_s1730">
ВычислениеYLL
= A31YN1YK1+
Вычисление + A32YN2YK2-
YNN=А11UM1- — B31YL1 с сох-
— B11YN1- ранением зна-
— В12YN2 с сох- чения
ранением зна-
<img width=«98» height=«92» src=«ref-1_448278487-443.coolpic» v:shapes="_x0000_s1731 _x0000_s1732 _x0000_s1733">чения
Вычисление YK1 ®W
A21UM1 с сох-
ранением зна-
<img width=«98» height=«93» src=«ref-1_448278930-502.coolpic» v:shapes="_x0000_s1734 _x0000_s1735 _x0000_s1736">чения
Вычисление W®YK2
B21YK1
<img width=«98» height=«122» src=«ref-1_448279432-568.coolpic» v:shapes="_x0000_s1738 _x0000_s1739 _x0000_s1740">
Вычисление YK®W
YK=А21UM1-
— B21YK1 с сох-
ранением зна-
чения
<img width=«105» height=«122» src=«ref-1_448280000-498.coolpic» v:shapes="_x0000_s1741 _x0000_s1742 _x0000_s1743"> <place w:st=«on»>W®YK1
Вычисление
A31YN1YK1 =
=A31(YN1+YK1) Вычисление
с сохранением A10UM
значения
<img width=«12» height=«27» src=«ref-1_448280498-104.coolpic» v:shapes="_x0000_s1748"> <img width=«12» height=«15» src=«ref-1_448280602-92.coolpic» v:shapes="_x0000_s1785">
<img width=«50» height=«50» src=«ref-1_448280694-589.coolpic» v:shapes="_x0000_s1784"><img width=«50» height=«50» src=«ref-1_448280694-589.coolpic» v:shapes="_x0000_s1749">
3 4
4 6 5
<img width=«50» height=«50» src=«ref-1_448266118-630.coolpic» v:shapes="_x0000_s1893"><img width=«50» height=«50» src=«ref-1_448282502-837.coolpic» v:shapes="_x0000_s1867"><img width=«50» height=«50» src=«ref-1_448283339-838.coolpic» v:shapes="_x0000_s1853"><img width=«98» height=«146» src=«ref-1_448284177-568.coolpic» v:shapes="_x0000_s1835 _x0000_s1836 _x0000_s1837">
<img width=«12» height=«195» src=«ref-1_448284745-207.coolpic» v:shapes="_x0000_s1897"> <img width=«98» height=«92» src=«ref-1_448268733-470.coolpic» v:shapes="_x0000_s1868 _x0000_s1869 _x0000_s1870">
Вычисление
YN=A10UM+ UM®W
+YNN
<img width=«98» height=«92» src=«ref-1_448275845-406.coolpic» v:shapes="_x0000_s1871 _x0000_s1872 _x0000_s1873"> с сохранением
значения
<img width=«98» height=«122» src=«ref-1_448285828-539.coolpic» v:shapes="_x0000_s1838 _x0000_s1839 _x0000_s1840">
<place w:st=«on»>W®UM1
Вычисление
<img width=«98» height=«92» src=«ref-1_448286367-406.coolpic» v:shapes="_x0000_s1881 _x0000_s1882 _x0000_s1883">YL=A30(YN+
<img width=«146» height=«2» src=«ref-1_448286773-83.coolpic» v:shapes="_x0000_s1889">+YK)+YLL
с сохранением
значения
<img width=«98» height=«93» src=«ref-1_448269203-417.coolpic» v:shapes="_x0000_s1841 _x0000_s1842 _x0000_s1843"> ОСТАНОВ
Передача знач-
чения YLна
порт B
<img width=«98» height=«93» src=«ref-1_448269203-417.coolpic» v:shapes="_x0000_s1844 _x0000_s1845 _x0000_s1846">
YN1 ®W
<img width=«98» height=«92» src=«ref-1_448268733-470.coolpic» v:shapes="_x0000_s1847 _x0000_s1848 _x0000_s1849">
<place w:st=«on»>W®YN2
<img width=«98» height=«92» src=«ref-1_448270506-470.coolpic» v:shapes="_x0000_s1850 _x0000_s1851 _x0000_s1852">
YN®W
<img width=«98» height=«92» src=«ref-1_448271094-387.coolpic» v:shapes="_x0000_s1856 _x0000_s1857 _x0000_s1858">
<place w:st=«on»>W®YN1
<img width=«98» height=«89» src=«ref-1_448289017-420.coolpic» v:shapes="_x0000_s1859 _x0000_s1860 _x0000_s1861">
YL®W
<img width=«12» height=«25» src=«ref-1_448289437-102.coolpic» v:shapes="_x0000_s1865">
<img width=«50» height=«50» src=«ref-1_448289539-636.coolpic» v:shapes="_x0000_s1866">
5
Рисунок 4.2 — Алгоритм программы проектируемого устройства
продолжение
--PAGE_BREAK--5 РАЗРАБОТКА ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕР
Прежде чем приступить к написанию программы необходимо учесть спецификацию ПЗУ микроконтроллера. Организация ПЗУ изображена на рисунке 5.1
<img width=«404» height=«537» src=«ref-1_448290175-29550.coolpic» v:shapes="_x0000_i1042">
Рисунок 5.1– Организация ПЗУ PIC16C71
Из рисунка видно, что начало программыпользователя может быть расположено ниже адреса 0004h. Адрес 0000h– вектор сброса, 0004h– вектор прерывания. По этим адресам перед началом программирования, как правило, прописывают безусловный переход на программу пользователя и безусловный переход на программу обработки прерывания соответственно. Так как в случае нашей системы устройство, осуществляющее запрос прерывания, одно, то по адресу 0004hможно прописывать начало программы обработки прерывания.
Также при программировании обязательно нужно учесть спецификацию банков ОЗУ. Структура ОЗУ изображена на
рисунке 5. При обращении к регистрам ОЗУ каждый раз необходимо программно переключаться между банками ОЗУ, в зависимости от того в каком банке находится регистр. Ассемблер, поставляемый производителем, позволяет вначале всем регистрам присвоить вместо адреса определенное имя. Это удобно для составления программы.
<img width=«243» height=«504» src=«ref-1_448319725-27556.coolpic» v:shapes="_x0000_i1043">
Рисунок 5.2 – Организация ОЗУ PIC16C711
Сначала напишем программу обработки прерывания. Занесем программу в таблицу — 1 с адресами ПЗУ и комментариями.
Таблица 5.1
Адрес
Метка
Мнемонический код
Комментарии
Циклы
ORGx004
Директива
0004h
MOVWFW_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
MOVFADRES, 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
Адрес
Метка
Мнемонический код
Комментарии
Циклы
ORGx00E
Директива
000Eh
MOVLWxFF
Пересылка 0xFFв аккумулятор
1
000Fh
BSF STATUS, RP0
Выбор банка 1
1
0010h
MOVWFTRISA
Порт А – Вход
1
0011h
CLRF TRISB
Порт В – Выход
1
0012h
MOVLW 0x18
Организация счетчика СOUNT
1
0013h
BCF STATUS, RP0
Выбор банка 0
1
0014h
MOVWFCOUNT
Организация счетчика
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
CLRFADCON1
RA0-RA3 Входы АЦП
1
001Eh
MOVLW 0xC1
1
001Fh
BCF STATUS,RP0
Выбор банка 0
1
0020h
MOVWFADCON
АЦП включен, работает канал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
<place w:st=«on»>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
<place w:st=«on»>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=<place w:st=«on»>W+ B11YN1
1
0037h
SUBWF A11UM1, 0
W= A11UM1- W
1
0038h
MOVWF YNN
<place w:st=«on»>W®YNN
1
0039h
BCF STATUS, C
Очистка триггера переноса
1
003Ah
RRF UM1, 0
Циклический сдвигвправочерез триггер переноса
1
003Bh
MOVWF A21UM1
<place w:st=«on»>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
<place w:st=«on»>W®YK
1
0044h
MOVF YN1, 0
YN1®W
1
0045h
ADDWF YK1
W=<place w:st=«on»>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
<place w:st=«on»>W®A31YN1YK1
1
004Fh
MOVF YN2, 0
YN2®W
1
0050h
ADDWF YK2
W=<place w:st=«on»>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
<place w:st=«on»>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=<place w:st=«on»>W+ A31YN1YK1
1
005Eh
MOVWF YLL
<place w:st=«on»>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
<place w:st=«on»>W®YK2
1
0076h
MOVF YK, 0
YK ®W
1
0077h
MOVWF YK1
<place w:st=«on»>W®YK1
1
0078h
RRF UM, 0
Циклический сдвигвправочерез триггер переноса
1
0079h
ADDWF YNN
W=W+ YNN
1
007Ah
MOVWF YN
<place w:st=«on»>W®YN
1
007Bh
ADDWF YK
W=<place w:st=«on»>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
<place w:st=«on»>W®YL
1
0081h
MOVWF PORTB
<place w:st=«on»>W®PORTB
1
0082h
MOVF YN1, 0
YN1®W
1
0083h
MOVWF YN2
<place w:st=«on»>W®YN2
1
0084h
MOVF YN, 0
YN ®W
1
0085h
MOVWF YN1
<place w:st=«on»>W®YN1
1
0086h
MOVF YL, 0
YL ®W
1
0087h
MOVWF YL1
<place w:st=«on»>W®YL1
1
0088h
MOVF UM, 0
UM ®W
1
0089h
MOVWF UM1
<place w:st=«on»>W®UM1
1
008Ah
GOTO M2
Безусловный переход на метку
1
END
Всего вместе с программой обработки прерывания
283
Время выполнения программы 56 мкс.
Операции NOPпредназначены для синхронизации работы АЦП с программой. Также для этой цели было добавлено 4 команды перед операциями над текущим значением отсчета. В составленном алгоритме данные коррекции небыли предусмотрены. Время выполнения программы, реализующей цифровой фильтр, равно 49 мкс. Интервал дискретизации сигнала равен 24,6 мкс, соответственно частота дискретизации равна 41000Гц. В программе используются два перехода: один для обнуления ОЗУ, другой – для возврата программы на место запуска АЦП. При использовании более современных PICпроцессоров возможно исключение операций NOP.
продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по коммуникациям