Разработка управляющей программы
При разработке программы использовался программный продукт MPLAB v.3.22 производства фирмы Microchip. Он представляет собой интегрированную среду, включающую в себя программный эмулятор, внутрисхемный эмулятор и встроенный текстовый редактор и распространяется свободно этой фирмой. Этот пакет поддерживает серии микроконтроллеров, начиная с PIC 16C5X и заканчивая PIC 17CXX. При разработке и отладке использовался програмный эмулятор этого пакета. Рассмотрим структуру управляющей программы, которая включает в себя несколько модулей. transmit.asm - модуль, содержащий подпрограмму генерации адресной части; reciver.asm - модуль, в состав которого входит подпрограмма приема адресной части, поступившей на абонентское устройство; int.asm - подпрограмма обработки прерывания; delay.asm - подпрограмма, реализующая задержку; canal.asm -- процедура проверки состояния канала; System.asm - головная программа. Scan.asm - модуль, включающий в себя подпрограммы сканирования клавиатуры и чтения собственного адреса. Все подпрограммы, которые используются в головной программе, оформлены в виде модулей и подключаются к ней командой #include <filename>, где filename - полное имя подключаемого модуля, который должен находится в каталоге MPLAB. Для вызова процедуры генерации адреса необходимо включить в теле головной программы команду transmitcod. Предварительно необходимо занести в ячейку памяти по адресу 12 код, подлежащий передаче в канал связи (код клавиши заносится в старшую тетраду ячейки 12, собственный адрес заносится в младшую тетраду этой ячейки). Прием и декодирование адресной части осуществляется командой recivecod. Принятый адрес заносится в ячейку 0D. Для вызова процедуры задержки нужно включить команду delay [timedelay], где timedelay - целое число, определяющее длительность задержки (значение timedelay, равное 1 соответствует задержке одного командного цикла, 2 - задержка на 4-е командных цикла, 3-на 6 командных циклов и т. д.). Процедура scankeyb модуля scan.asm производит сканирование клавиатуры и при нажатии клавиши определяет ее код и помещает в ячейку памяти 0d. Процедура этого же модуля scanadres определяет собственный адрес и заносит его в ячейку памяти 0E. Для работы программы резервируются следующие ячейки памяти. 0С - код клавиатуры; 0D - декодированный адрес; 0E - уникальный код абонентского устройства (собственный адрес абонентского устройства); 0F - счетчик циклов; 10 - длительность задержки; 12 - адресная часть, передаваемое по каналу; Программой используются линии порта В для связи с клавиатурой и каналом связи (линии RB4 - RB7 подключаются к клавиатуре, линия RB0 - к линии связи через ключевой каскад на транзисторе) ввиду того, что обработка данных осуществляется по прерыванию (вызов прерывающей программы осуществляется по изменению состояния линии RB0). Линии RB1 - RB2 являются управляющими и служат для переключения режимов работы абонентского устройства (RB1 - «прием», RB2 - «передача»). Линии RA4, RA0 используются для управления клавиатурой и индикаторами. Для совместимости с последующими моделями PIC 16F8X в программе не использовались команды TRIS и OPTION, поскольку они могут не поддерживаться в более новых моделях PIC контроллеров. Далее приведен исходный текст головной программы и подключаемых модулей.
;System.asm list p=16f84,f=inhx8m;основная программа #INCLUDE P16f84.INC #INCLUDE scan.asm #INCLUDE canal.asm #INCLUDE int.asm #INCLUDE transmit.asm org 0 goto begin org 4 int;процедура обработки прерывания begin bsf status,rp0 ;настройка портов bsf trisb,rb0;RB0 на ввод bcf trisb,rb3;RB3 на вывод bsf trisa,ra4;настройка на ввод RA4 bcf trisa,ra0;настройка на вывод RA0 bcf status,rp0 bcf portb,1;отключение аналоговой части от линии bcf portb,2 bcf porta,0;отключение подсветки scanadres;чтение собственого адреса bsf intcon,gie;разрешение прерываний по RB0 bsf intcon,inte scankeyb;сканирование клавиатуры и определение кода нажатой клавиши ;проверка канала на наличие сигналов movlw 5;загрузка счетчика цикла movw 0f; decfsz 0f,1 canal;процедура проверки канала bcf portb,rb0;генерация старт-бита delay 12;задержка на 25 мкс bsf portb,rb0 movf 0c,0;формирование адресной части movfw 12;пересылка кода клавиши transmitcod;выдача адреса получателя в канал swapf 0e,0 movf 0e,0;пересылка кода абонентского устройства movfw 12 transmitcod;выдача адреса отправителя в канал bsf portb,rb2;включить режим "передача" bcf porta,ra0;отключение подсветки bcf status,rp0;настройка RB0 на вывод bsf trisb,rb0; bcf status,rp0 inver1 btfss porta,ra4;проверка отпуска клавиши goto inver;переход на процедуру инверсии линии rb3 c задержкой bcf portb,rb2;выключение режима "передача" goto begin ;инверсия входа несущей ШИМ c задержкой inver comf portb,1; delay 12;задержка 25 мкс goto inver1 end
;reciver.asm list p=16f84,f=inhx8m;подпрограмма приема адреса #INCLUDE P16f84.INC; #INCLUDE delay.asm recivcod macro movlw 8;загрузка счетчика циклов movf 0f clrf 0d;сброс ячейки памяти 0d loop delay 12;задержка на 25 мкс btfsc portb,rb0;проверка содержимого линии RB0 bsf 0d,0;установка 0-го бита 0d rlf 0d,1;сдвиг влево на один бит decfsz 0f,1 goto loop endm end
;transmit.asm ; подпрограмма генерации кода адреса в линию list p=16f84,f=inhx8m;код выдается старшими битами вперед #INCLUDE P16f84.INC #INCLUDE delay.asm COD equ 12 transmitcod macro movlw d'4';загрузка счетчика циклов movf 0f bsf status,rp0;настройка линии порта rb0 на вывод bcf trisb,0 bcf status,rp0 m1 delay 12;задержка на 25 мкс btfss cod,7;инверсия RB0 если бит "0" comf portb,rb0 rlf cod,1;сдвиг переменной cod на один бит влево decfzc 0f goto m1 endm end ;int.asm
list p=16f84,f=inhx8m;подпрограмма обработки прерывания #INCLUDE P16f84.INC #INCLUDE reciver.asm int macro bcf intcon,inte;запрет прерываний по линии RB0 recivcod;прием адресной части сообщения bcf status,z;сброс бита нулевого результата movf 0d,0; andwf 0e,1;логическое "и" принятого и собственного адреса btfss status,z; goto wait movf 0d,0;подсветка индикатора movwf portb bsf porta,ra0 bcf portb,rb1;включение режима "прием" canal;ожидание окончания сообщения bcf porta,ra0;отключить подсветку bsf portb,rb1;отключение режима "прием" bsf intcon,inte;разрешение прерываний goto ret wait canal;ожидание окончания сообщений ret retfie;возврат из прерывания endm end ;canal.asm list p=16f84,f=inhx8m;подпрограмма проверки канала #INCLUDE P16f84.INC canal macro bsf status,rp0;настройка RB0 на ввод bsf trisb,0 bcf status,rp0 m2 molw 10;загрузка счетчика циклов movwf 0f movwf 11 m1 btfss portb,rb0;проверка линии RB0 decf 11;если в канале "0", то декремент 11 decfsz 0f,1 goto m1 movf 0f,0 subwf 11,0;если 10 периодов ШИМ "пустые" то канал свободен btfss status,z goto m2 bsf status,rp0;настройка RB0 на вывод bсf trisb,0 bcf status,rp0 endm end
list p=16f84,f=inhx8m;модуль сканирования #INCLUDE P16f84.INC scankeyb macro;подпрограмма сканирования клавиатуры bcf status,rp0 movlw 0 movwf portb m incf portb,1;сканирование клавиатуры btfss porta,4;проверка нажатия клавиши goto m1 goto m m1 movf portb,0 bsf porta,ra0;включить подсветку movwf 0с;сохранение кода нажатой клавиши в 0С endm scanadres macro;подпрограмма чтения собственого адреса bcf status,rp0 movlw 0 movwf portb m incf portb,1;сканирование клавиатуры btfss porta,4; goto m1 goto m m1 movf portb,0;чтение собственного адреса movwf 0e;сохранение кода адреса в 0e endm end
;delay.asm list p=16f84,f=inhx8m;подпрогармма задержки #INCLUDE P16f84.INC timedelay equ 10 delay macro timedelay n decfsz 10,1 goto n endm end
Популярное: Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (189)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |