Мегаобучалка Главная | О нас | Обратная связь


Разработка управляющей программы



2020-02-03 189 Обсуждений (0)
Разработка управляющей программы 0.00 из 5.00 0 оценок




При разработке программы использовался программный продукт 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




2020-02-03 189 Обсуждений (0)
Разработка управляющей программы 0.00 из 5.00 0 оценок









Обсуждение в статье: Разработка управляющей программы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (189)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)