Регистры eecon1 и eecon2
ПАМЯТЬ
В микроконтроллере PIC16F84A существует два блока памяти -память программ и память данных. Каждый блок имеет собственную шину, таким образом, доступ к блокам может происходить одновременно.
Память данных, в свою очередь, разделена на специальные регистры и регистры общего применения (ОЗУ пользователя). Специальные регистры применяются для хранения битов состояния, определяющих работу портов ввода/вывода, таймеров и других периферийных модулей контроллера. Подробно каждый специальный регистр описан при рассмотрении соответствующего модуля. Кроме специальных регистров и ОЗУ, пространство памяти данных содержит ячейки ЕЕРКОМ. Эта область памяти не может быть адресована непосредственно, и доступ к ней получают через специальный регистр косвенной адресации ЕЕАЕЖ, в который записывают порядковый номер ячейки. 64 байта ЕЕРКОМ имеют номера с ООН по ЗРН. Обычно ЕЕРКОМ используется для хранения констант, значения которых не должны пропадать при отключении питания, например кодов управления, индивидуальных номеров и т.п. Важным достоинством ЕЕРКОМ является то, что данные в ней могут быть изменены даже после занесения программы в однократно программируемый кристалл.
Память программ:
Микроконтроллер PIC16F84A имеют 13-битный программный счетчик, позволяющий адресовать до 8Кx14 памяти программ. В PIC16F84A доступны первые 1024 (0000h-03FFh) ячеек
памяти. Обращение к старшим адресам, лежащим за пределами указанного диапазона физически равносильно обращению к соответствующим адресам внутри диапазона, например, для PIC16F84A адреса 30h, 430h, 830h, C30h, 1030h, 1430h, 1830h и 1C30h равносильны и адресуют одну и ту же команду. Старт по сбросу происходит с адреса 0000h, вектор прерывания один и расположен по адресу 0004h. Обычно по адресу 0004h располагают подпрограмма распознавания и обработки прерываний, а по адресу 000h команду перехода на метку, расположенную за подпрограммой обработки прерывания. Память данных: В микроконтроллере PIC16F84A память данных разбита на две части - специальные регистры и регистры общего назначения (ОЗУ). Кроме этого, память данных разделена на два банка. Организация памяти данных графически показана ниже: Таблица №3
| ||||||||||||||||||||||||||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||||||||||||||||||||||||||||||||||||
9 | ||||||||||||||||||||||||||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
Переключение банков происходит при помощи задания 5-го бита в регистре STATUS Если бит установлен в 0, адресуется нулевой банк, если в 1, соответственно, первый. Некоторые специальные регистры адресуются независимо от включенного банка. Например, обращение по адресу 03h при включенном банке 0 или по адресу 83h при включенном банке 1 равнозначно дает доступ к специальному регистру STATUS. Регистры общего применения представляют собой статическое ОЗУ и могут быть адресованы непосредственно или косвенно, с применением регистра косвенной адресации FSR. 1.3 РЕГИСТР STATUS Регистр STATUS хранит арифметические флаги АЛУ, информацию о сбросе и бит выбора банка памяти данных. Как и любой другой регистр, STATUS может являться регистром назначения для любой операции. В данном проекте используется только флаг PR0. RP1, RPO - биты выбора страницы памяти данных при прямой адресации. Страница памяти выбирается в соответствии с таблицей. Таблица №4
На каждой странице расположено 128 байт. Однако в кристалле PIC16F84A используется только RPO, поэтому RP1 может использоваться, как бит общего назначения чтения/записи. СТЕК Микроконтроллер PIC16F84A имеет 8-уровневый 13-битный аппаратный стек. Стек не является частью памяти данных или программ и указатель стека не доступен для чтения или записи. Содержимое 13-битного программного счетчика загружается в стек при выполнении команды CALL или переходе в подпрограмму прерывания. При выполнении команд RETURN, RETLW и RETFIE содержимое программного счетчика восстанавливается. | ||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||||||||||||
10 | ||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
Стек организован как циклический буфер. Это означает, что после того, как в стек записано восьмое значение, вновь поступившее девятое значение будет записано на место первого, десятое на место второго и т.д. И наоборот, если происходило восстановление программного счетчика восемь раз, то в девятый раз в него будет выгружено первое значение Стек не имеет флаг-бита, показывающего переполнение или избыточную выгрузку, поэтому пользователь должен самостоятельно следить, чтобы уровень вложения подпрограмм в любой ситуации не превышал восьми. 1.5 ПРОГРАММНЫЙ СЧЁТЧИК
Программный счетчик микроконтроллера (PC) содержит 13 разрядов. Младший байт счетчика является полностью доступным для чтения и записи регистром PCL (адрес 02h,82h). Старшие пять байтов счетчика непосредственно не доступны для чтения и записи. Обращение к ним происходит через регистр PCLATCH (адрес 0Ah, 0Ah) являющийся буфером-защелкой для старших битов счетчика. Содержимое PCLATCH переносится в старшие биты РС, когда происходит запись нового значения в программный счетчик. Это случается, когда выполняются команды CALL, GOTO или регистр PCL является регистром назначения для результата арифметической операции. Таблица №5 Возможность выполнять арифметические операции непосредственно над программным счетчиком позволяет очень просто и эффективно, всего двумя командами, выполнять табличную перекодировку значений. Следует только контролировать исходное значение, чтобы программный счетчик не вышел за пределы таблицы, если в ней применено менее 256 записей, PIC16F84A имеют 1К программной памяти. Команды CALL и GOTO используют 11 бит для указания адреса, что позволяет использовать 2К адресного пространства. Для предстоящего расширения программной памяти PIC16F84A понадобятся еще два бита, определяющие ее страницы. | |||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | ||||||||||||||||
11 | |||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
1.6 УПРАВЛЯЮЩИЕ РЕГИСТРЫ ДЛЯ EEPROM Таблица №6
РЕГИСТРЫ EECON1 И EECON2 Регистр EECON1 (адрес 88h) — это управляющий регистр шириной пять бит. Младшие пять бит физически существуют, а старшие три бита читаются всегда как '0'. Регистр EECON1 Адрес 88h Сброс при вкл. - 0000X000 Таблица №7
Управляющие биты RD и WR запускают соответственно чтение и запись. Они могут быть установлены только программно. Сбрасываются — аппаратно по завершении операций чтения/записи. Запрет программного сброса бита WR предотвращает преждевременное окончание записи. RD - бит чтения. RD =1: запускает чтение памяти данных EEPROM. Чтение занимает один цикл. Устанавливается программно. Обнуляется аппаратно. WR - бит записи. WR = 1: запускает запись в память данных EEPROM. Устанавливается программно. Обнуляется аппаратно. WREN - бит разрешения записи в память данных EEPROM. WREN = 1: разрешена запись. WREN = 0: запрещена запись. После включения питания WREN обнуляется. Флаг ошибки WRERR устанавливается, когда процесс записи прерывается сигналом сброса MCLR или сигналом сброса от WDT-таймера. | ||||||||||||||||||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||||||||||||||||||||||||||||
12 | ||||||||||||||||||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
WRERR - флаг ошибки записи. WRERR = 1: флаг устанавливается, когда операция записи преждевременно прерывается сигналом сброса /MCLR (во время обычного режима или режима SLEEP) или сигналом сброса WDT во время обычного режима. Флаг EEIF устанавливается, когда встроенный автомат завершает запись в память данных. Он должен быть сброшен программно. EEIF - флаг завершения записи. EEIF = 1: флаг устанавливается, когда завершена запись Соответствующий бит разрешения прерывания — EEIE в регистре INTCON. Регистр EECON2 не реализован физически и не допускает чтения. Возможна запись в регистр кодов 0х055/0х0АА для контроля правильности выполнения операции записи. Регистр используется только в обязательной последовательности при записи в память. Регистры EEADR и EEDATA необходимы для формирования и ввода адреса и данных в EEPROM. К ним применимы команды обычных регистров. 1.8 НАЗНАЧЕНИЕ РАЗРЯДОВ РЕГИСТРА ПРЕРЫВАНИЙ И ФЛАГОВ INTCON Таблица №8
Назначение: 1NTF — флаг внешнего прерывания с входа RB0/1NT (подлежит программной очистке) 0 - внешнее прерывание не происходило 1 - произошло внешнее прерывание | |||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | ||||||||||||||||||||
13 | |||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
RBIF — флаг прерывания по изменению входного сигнала PORTB (подлежит программной очистке) 1- сигнал на входах RB4—RB7 не изменялся 0- изменился сигнал на одном из входов RB4—RB7 1.9 СЛОВО КОНФИГУРАЦИИ Таблица №9
ПОРТЫ ВВОДА/ВЫВОДА. Контроллер PIC16F84A имеет два порта ввода-вывода, PORT A и PORT B. Каждый вывод порта может быть запрограммирован на ввод или на вывод установкой соответствующего бита в регистрах TRISA и TRISB. Выводимые значения фиксируются в регистрах-защелках PORTA и PORTB. Направление ввода-вывода может быть изменено в произвольный момент времени. Кроме этого, некоторым выводам присвоены дополнительные функции. PORTА: Регистр PORTA представляет собой 5-битную защелку. Линия RA4 имеет триггер Шмитта на входе в режиме ввода и открытый сток в режиме вывода. Остальные линии порта А по входу работают со стандартными уровнями TTL. Линия RA4 используется также как вход внешних тактовых импульсов для таймера TMR0. Направление передачи данных для каждой линии программируется отдельно, установкой или сбросом битов bit0…bit4 регистра TRISA. Установка бита в 1 настраивает соответствующую линию на ввод. Выходной драйвер при этом переходит в высокоимпедансное состояние. Установка бита в 0 настраивает линию порта на вывод и выводит на нее содержимое соответствующего бита защелки PORTA. По умолчанию при включении питания все линии настроены на ввод. При чтении порта А всегда считываются действительные логические уровни на выводах, независимо от того, запрограммированы отдельные разряды как входы или как выходы. Все операции записи в порт внутренне исполняются как чтение-модификация-запись. | ||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||
14 | ||||||||||
Изм | Лист | № докум. | Подпись | Дата |
PORTB: Порт В представляет собой 8-битный двунаправленный порт. Выходные значения записываются в регистр-защелку PORTB. Направление ввода-вывода определяется установкой или сбросом битов регистра TRISB. Установка бита в 1 настраивает соответствующую линию на ввод, переводя выходной драйвер в высокоимпедансное состояние на вывод. При включении питания все линии по умолчанию настроены на ввод. Как и для порта А, чтение порта В всегда возвращает действительные значения на выводах, независимо от направления передачи данных для каждого вывода. Все выводы порта В имеют встроенную отключаемую нагрузку в виде резисторов, подключенных к шине питания. Нагрузка включается и отключается одновременно для всех выводов при помощи бита 7 RBPU регистра OPTION_REG. При включении питания RBPU=1 и нагрузка отключена. Программное обнуление бита RBPU подключает нагрузку, но для линий, настроенных на вывод нагрузка автоматически отключается. Линии RB4…RB7 могут использоваться как входы прерывания по изменению уровня. В этом качестве используются только линии, настроенные на ввод. В каждом командном цикле происходит сравнение текущих значений на выводах с предыдущими, зафиксированными в специальной защелке. Если хотя бы на одном из этих выводов произошло изменение уровня, формируется прерывание. Длительность импульса, который распознается как изменение уровня, должна быть не менее 4-х периодов тактовой частоты. Программно распознать, по какой из линий RB4…RB7 произошло прерывание, невозможно. 1.11 РЕГИСТР TMR0 И МОДУЛЬ TIMER0. TIME0 является программируемым модулем таймера/счетчика. Он имеет в своем составе: -8-битный таймер/счетчик TMR0, доступный для чтения и записи как регистр. -программируемый предварительный делитель (предделитель) мультиплексор входного сигнала. Режим таймера задается сбросом бита T0CS регистра OPTION_REG. Если не подключен предделитель, инкрементирование происходит каждый командный цикл. Если производилась запись в регистр TMR0, его инкрементирование начнется спустя два командных цикла, поэтому записываемая переменная должна быть соответственно скорректирована. Режим счетчика задается установкой в 1 бита T0CS. В этом случае инкрементирование TMR0 происходит от внешнего источника, подключенного к выводу RA4/T0CK. Активный фронт входных импульсов можно задавать программно. Если бит T0SE регистра OPTION_REG сброшен, активным является нарастание сигнала. | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
15 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
1.12 КОМАНДЫ МИКРОКОНТРОЛЛЕРА Таблица №10
Каждая команда PIC16F84 — это 14-битовое слово, которое разделено по смыслу на следующие части: — 1 поле операции, -2 поле для одного и более операндов, которые могут участвовать или нет в этой команде. Система команд PICI6F84 включает в себя байт-ориентированные команды, бит-ориентированные, операции с константами и команды передачи управления. Для байт-ориентированных команд f обозначает собой регистр, с которым производится действие; "w" — бит определяет, куда положить результат. Если "w" = 0, то результат будет помещен в W-регистр, при "w" = I результат будет помещен в f, упомянутым в команде. Для бит-ориентированных команд "b" обозначает номер бита, участвующего в команде, а f это регистр, в котором этот бит расположен. Для команд передачи управления и операций с константами, "к" обозначает восьми или одиннадцатибитную константу. | ||||||||||||||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||||||||||||||||||||||||
16 | ||||||||||||||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
Все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла: 1. - проверка условия и переход 2. - изменение программного счетчика как результат выполнения команды. При выборе МК для решения задачи следует учитывать следующие параметры: 1. Производительность МК. Помимо разрядности и архитектуры МК, здесь важную роль играет тактовая частота, объемы памяти данных и команд на кристалле. 2. Состав периферийных устройств на кристалле МК. Помимо традиционных для МК таймер-счетчиков и параллельных портов ввода-вывода, это могут быть АЦП, последовательные порты ввода-вывода, ШИМ, процессоры событий и т.д. 3. Система прерываний. Во многих приложениях использование системы прерываний необходимо для работы в реальном времени. | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
17 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
2.ФУНКЦИОНАЛЬНАЯ СХЕМА УСТРОЙСТВА Блок питания предполагает разъем для подключения источника питания на 12В. Блок управления – сам микроконтроллер PIC16F84A, который прошит программой «Индикаторная мигалка» и, собственно управляет его работой. Блок индикации – 8 светодиодов (можно использовать разного цвета для лучшего эффекта), так же присутствуют 8 одинаковый резисторов R6-13, которые подбираются по току (в данном случае 5 mA, т.к. все 8 диодов имеют такой рабочий ток). Блок синхронизации – включает в себя кварцевый резонатор на 10МГц, и 2 конденсатора (C1, C2) по 33 pf. С их помощью происходит стабилизация частоты мигания светодиодов в определенные промежутки времени. | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
18 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
3. ПРИНЦИПИАЛЬНАЯ СХЕМА УСТРОЙСТВА Принципиальная схема устройства и перечень элементов приведены в приложении А. 4. АЛГОРИТМ ПРОГРАММЫ ФУНКЦИОНИРОВАНИЯ УСТРОЙСТВА Алгоритм программы функционирования устройства приведен в приложение Б. | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
19 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
5. ПРОГРАММА НА ЯЗЫКЕ АССЕМБЛЕРА ;******************************************************** ; ; Обработка управления светодиодной мигалкой ; ; Автор : Seiichi Inoue ;******************************************************** list p=pic16f84a include p16f84a.inc __config _hs_osc & _wdt_off & _pwrte_on & _cp_off errorlevel -302 ; ;**************** Определение метки ******************** ra0 equ 00 ;RA0 бит ra1 equ 01 ;RA1 бит ra2 equ 02 ;RA2 бит ra3 equ 03 ;RA3 бит ra4 equ 04 ;RA4 бит cnt500u equ 0c ;500 мс счетчик адрес cnt1m equ 0d ;1 мс счетчик адрес cnt100m equ 0e ;100 мс счетчик адрес cnt500m equ 0f ;500 мс счетчик адрес cnt1s equ 10 ;1 сек счетчик адрес ;************* Определение данных образцов **************** ; '1':выкл '0':вкл ;****** Образец 0 ****** p00 equ b'11111110' p01 equ b'11111101' p02 equ b'11111011' p03 equ b'11110111' p04 equ b'11101111' p05 equ b'11011111' p06 equ b'10111111' p07 equ b'01111111' ;****** Образец 1 ****** p10 equ b'01111111' p11 equ b'10111111' p12 equ b'11011111' p13 equ b'11101111' p14 equ b'11110111' p15 equ b'11111011' p16 equ b'11111101' p17 equ b'11111110' ;****** Образец 2 ****** p20 equ b'01111110' p21 equ b'10111101' p22 equ b'11011011' p23 equ b'11100111' p24 equ b'11011011' p25 equ b'10111101' p26 equ b'01111110' ;****** Образец 3 ****** p30 equ b'11111110' p31 equ b'11111101' p32 equ b'11111010' p33 equ b'11110101' p34 equ b'11101010' p35 equ b'11010101' p36 equ b'10101010' p37 equ b'01010101' p38 equ b'10101011' p39 equ b'01010111' p3a equ b'10101111' p3b equ b'01011111' p3c equ b'10111111' p3d equ b'01111111' ;****** Образец 4 ****** p40 equ b'00000000' p41 equ b'11111111' p42 equ b'00000000' p43 equ b'11111111' p44 equ b'00000000' p45 equ b'11111111' p46 equ b'00000000' p47 equ b'11111111' p48 equ b'00000000' | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
20 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
;**************** Начало программы ********************** org 0 ;Вектор сброса goto init org 4 ;Вектор прерывания goto init ;**************** Процесс инициализации ********************* org 5 init bsf status,rp0 ;Выбор первого банка ОЗУ movlw h'ff' ;Установка режима ввода данных movwf trisa ;Установка порта А в режим ввода clrf trisb ;Установка порта B в режим вывода bcf status,rp0 ;Выбор 0 банка ОЗУ movlw h'ff' ;Установка данных светодиодов movwf portb ;Выходные данные ;**************** Процесс проверки переключателей ******************** keyscan btfss porta,ra0 ;RA0 включен? call ptn0 ;Да. Вызов подпрограммы 0 btfss porta,ra1 ;RA1 включен? call ptn1 ;Да. Вызов подпрограммы 1 btfss porta,ra2 ;RA2 включен? call ptn2 ;Да. Вызов подпрограммы 2 btfss porta,ra3 ;RA3 включен? call ptn3 ;Да. Вызов подпрограммы 3 btfss porta,ra4 ;RA4 включен? call ptn4 ;Да. Вызов подпрограммы 4 goto keyscan ;Повтор ;*********** Подпрограмма образца 0 *************** ptn0 movlw p00 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p01 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p02 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p03 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p04 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p05 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p06 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p07 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw h'ff' ; Установка данных светодиодов movwf portb ; Выходные данные call t100m ; Ожидание 100 мс return ; Возврат из подпрограммы ;*********** Подпрограмма образца 1 *************** ptn1 movlw p10 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p11 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p12 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p13 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p14 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p15 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p16 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p17 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw h'ff' ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс return ; Возврат из подпрограммы | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
21 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
;*********** Подпрограмма образца 2 *************** ptn2 movlw p20 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p21 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p22 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p23 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p24 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p25 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p26 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw h'ff' ; Установка данных светодиодов movwf portb ; Выходные данные call t100m ; Ожидание 100 мс return ; Возврат из подпрограммы ;*********** Подпрограмма образца 3 *************** ptn3 movlw p30 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p31 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p32 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p33 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p34 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p35 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p36 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p37 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p38 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p39 ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p3a ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p3b ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p3c ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw p3d ; Установка данных подпрограммы movwf portb ; Выходные данные call t100m ; Ожидание 100 мс movlw h'ff' ; Установка данных светодиодов movwf portb ; Выходные данные call t100m ; Ожидание 100 мс return ; Возврат из подпрограммы | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
22 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
;*********** Подпрограмма образца 4 *************** ptn4 movlw p40 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ;Ожидание 1 сек movlw p41 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p42 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p43 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p44 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p45 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p46 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p47 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw p48 ; Установка данных подпрограммы movwf portb ; Выходные данные call t1s ; Ожидание 1 сек movlw h'ff' ; Установка данных светодиодов movwf portb ; Выходные данные call t1s ; Ожидание 1 сек return ;******************************************************** ; Подпрограмма таймера синхронизации на 10 МГц ;******************************************************** ;************* Подпрограмма таймера 1 мс ***************** t1m movlw d'2' ;(1) Установка цикла cnt1 movwf cnt1m ;(1) Сохранение цикла cnt1 tm1lp1 movlw d'249' ;(1)*2 Установка цикла cnt2 movwf cnt500u ;(1)*2 Сохранение цикла cnt2 tm1lp2 nop ;(1)*249*2 nop ;(1)*249*2 decfsz cnt500u,f ;(1)*249*2 cnt500u-1=0 ? goto tm1lp2 ;(2)*248*2 Нет, продолжить decfsz cnt1m,f ;(1)*2 cnt1m-1=0 ? goto tm1lp1 ;(2) Нет. Продолжить return ;(2) Да. Конец сnt ;Общее 2501*0.4usec=1msec ;************* Подрограмма таймера 100 мс *************** t100m movlw d'100' ;Установка цикла в счетчик movwf cnt100m ;Сохранение цикла в счетчике tm2lp call t1m ;Подпрограмма 1 мс decfsz cnt100m,f ;cnt100m - 1 = 0 ? goto tm2lp ;Нет. Продолжить return ;Да. Конец счета ;************* Подпрограмма таймера 500 мс *************** t500m movlw d'5' ;Установка цикла в счетчик movwf cnt500m ;Сохранение цикла в счетчике tm3lp call t100m ;Подпрограмма 500 мс decfsz cnt500m,f ;cnt500m - 1 = 0 ? goto tm3lp ;Нет. Продолжить return ;Да. Конец счета ;************** Подпрограмма таймера 1 сек ***************** t1s movlw d'2' ;Установка цикла в счетчик movwf cnt1s ;Сохранение цикла в счетчике tm4lp call t500m ;Подпрограмма 500 мс decfsz cnt1s,f ;cnt1s - 1 = 0 ? goto tm4lp ;Нет. Продолжить return ;Да. Конец счета ;******************************************************** ; Конец обработки управления светодиодной мигалкой ;******************************************************** End. | ||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||
23 | ||||||
Изм | Лист | № докум. | Подпись | Дата |
6. ПРОВЕРКА ПРАВИЛЬНОСТИ ФУНКЦИОНИРОВАНИЯ ПРОГРАММЫ
| ||||||||||||||||||||||||
МПиМПС.230101.02.ВМ10.08 | Лист | |||||||||||||||||||||||
24 | ||||||||||||||||||||||||
Изм | Лист | № докум. | Подпись | Дата |
7. ОЦЕНКА БЫСТРОДЕЙСТВИЯ Для оценки быстродействия программы проводился замер количества программных циклов, затраченных на выполнение каждого режима работы. Затем было высчитано время, за которое выполнялся один программный цикл. Период высчитывается по формуле , что для генератора с частотой 10 МГц составляет Один программный цикл выполняется за 4 такта, т.е. за время равное 1 мс. Умножая время одного программного цикла на их количество (128), получим время, затрачиваемое для выполнения программы. Время на выполнение программы 128 мс. Наши рекомендации
|