Страница: 5/8
В блоке “Выдача на дисплей начального приглашения” выдаем на дисплей следующее сообщение «Кнопка1-режим ввода, кнопка2 – режим вывода, кнопки 3 - 7 – номера ячеек памяти, кнопка 8 - очистка памяти».
Блок опроса флагов: происходит постоянный опрос флагов, если какой-либо флаг установлен, то переходим на соответствующую подпрограмму обработки, которая после окончания своей работы возвращается в то место, откуда была вызвана и сбрасывает соответствующий флаг.
Программа опроса клавиатуры: постоянно опрашивает клавиатуру, и записывает ее состояние в заданный регистр1, как только в этом регистре1 появляется указанное число, она устанавливает Flagklav=1.
Подпрограмма обработки сканкода активизируется, когда Flagklav=1. Сначала проверяем, если действительно в регистре1 число (т.е. устраняем дребезг контактов), анализируем содержание регистра1 и в зависимости от того какое число там записано переходим на ту или иную подпрограмму обработки. В конце подпрограммы сбрасываем Flagklav.
Подпрограмма выдачи на дисплей результата измерения активизируется когда установлен флаг Flagvyvod=1. В зависимости от содержания регистра1, выводим данные из той или иной ячейки памяти.
Подпрограмма записи данных активизируется когда установлен флаг Flagszap=1, и в зависимости от содержания регистра1, записываем данные в ту или иную ячейку памяти.
Подпрограмма приема данных активизируется когда установлен флаг USR,RxC, его устанавливает компьютор приславший данные, выполняем прием даных и конце подпрограммы сбрасываем флаг USR,RxC.
Подпрограмма выдачи данных на компьютер начинает выполнятся когда Flagdan=1 и flagpr=1, далее выполняется выдача данных на компьютер и сброс флагов происходит в том случае, если буфер с данными пуст.
2.2 РАЗРАБОТКА АЛГОРИТМА ОДНОГО ИЗ СОСТАВНЫХ ЧАСТЕЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Алгоритм инициализации ЖКИ представлен на рис.7.
|
Рис.7.
Программа инициализации ЖКИ составленная по данному алгоритму и написанная на языке Ассемблер будет выглядеть так:
initlcd:
rcall del
ldi r25,30h
rcall icom
rcall del
ldi r25,30h
rcall icom
rcall del
ldi r25,30h
rcall icom
ldi r25,38h ; устанавливаем разрядность шины данных=8,
количество строк =2, шрифт 5х7 точек
rcall icom
ldi r25,08h ; включить дисплей, зажечь курсор
rcall icom
ldi r25,01h ; очистить дисплей и установить курсор в нулевую позицию
rcall icom
ldi r25,06h; устанавливаем направление сдвига курсор в право, запретить
сдвиг дисплея вместе со сдвигом курсора
rcall icom
ret
del:
ldi r17,150 ;задержка ~15 ms при кварце 4 МГц
l: ldi r18,200 ;
l1: dec r18 ;
brne l1 ;
dec r17 ;
brne l ;
ret
icom:
in r0,portA
sbi r0,2 ; установит RS в 1
out portA,r0
in r0,portA
сbi r0,1 ; установит W/R в 0
out portA,r0
in r0,portA
sbi r0,0 ; установит Е в 1
out portC,r0
out portB,r25 ;записать в ЖКИ команду из регистра r25
in r0,portA
cbi r0,0 ;сбросить Е в 0
out portA,r0
in r0,portA
sbi r0,1 ; установит W/R в 1
out portA,r0
ret
2.3 НАПИСАНИЕ ПРОГРАММЫ
Текст программы составленный по структурной схеме на рис.6 приведен ниже
.include "Atmega103.inc"
.def flag=r1
.def flagszap =0
.def flagklav =1
.def flagsbr =2
.def flagvyvod =3
.def flagdan =4
.def flagpr =5
.def tmp=r20
.cseg
.org 0H
rjmp main
main:
rcall init ; инициализация контроллера
rcall initlcd ; инициализация ЖКИ
rcall priglashenie ;программа выдачи начального приглашения
Реферат опубликован: 4/04/2010