Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка (1) / ЦИМПУ(atmega 128).doc
Скачиваний:
102
Добавлен:
16.04.2015
Размер:
4.2 Mб
Скачать

10.2.9 Методы компенсации смещения

Усилительный каскад имеет встроенную схему компенсации смещения, которая стремится максимально приблизить к нулю смещение дифференциального измерения. Оставшееся смещение можно измерить, если в качестве дифференциальных входов АЦП выбрать один и тот же вывод микроконтроллера. Измеренное таким образом остаточное смещение можно программно вычесть из результата преобразования. Использование программного алгоритма коррекции смещения позволяет уменьшить смещение ниже одного мл. разр.

10.2.10 Описание получения результата преобразования

Как уже было сказано, AREF - на этот вывод, на который мы должны подать напряжение, соответствующее максимуму требуемого диапазон измеряемого напряжения. Бинарный код такого или большего напряжения будет равен 1023 или 1111111111. Это напряжение может находиться в диапазоне от AGND до AVCC. 

Примечание: НО! Использовать AREF менее двух вольт не рекомендуется!

Итак, если мы подадим на вывод AREF  X В - то можем измерять напряжения от 0 до 5 В с шагом преобразования m:

m = X /1024 В, (1)

с точностью: ±(X * 2 / 1024) 

НО! Напряжения Х В и выше будут преобразовываться в код 1023.

Приведем примеры:  

  1. Мы подали на вход АЦП напряжение 2,832 В - какой результат мы получим, если на выводе AREF у нас 4 В? (питание микроконтроллера - 5 В).

Вначале определим шаг преобразования по формуле (1):

m = 4/1024=3,90625 мВ

Теперь можно определить какой двоичный код мы получим: 

2,832/3,90625 · 10-3 = 725

Учтем точность АЦП в ±2 десятичных единицы:  Итак, в результате АЦ преобразования мы получим число от 723 до 727.

  1. А если подать 4.23 В или 4.47 В или 4.876 В или 5 В? Результат будет одинаков: 1023. 

  2. А если подать 4 В ровно? т.е. соединить вход АЦП с AREF ? Результат, с учетом ошибки будет: 1021, 1022 или 1023. 

Теперь мы знаем, что должно получить в результате АЦ преобразования в двух регистрах ввода/вывода ADCH:ADCL. Регистр ADCL хранит младший байт результата, а девятый и десятый биты результата становятся, соответственно нулевым и первым битами регистра ADCH. 

Запишем варианты содержимого этих регистров для приведенного выше примера расчетов результата преобразования с учетом точности АЦП в таблицу 10.7

Таблица 10.7 Варианты преобразования поданного значения напряжения

Результат

ADCH

ADCL

723

---- --10

1101 0011

724

---- --10

1101 0100

725

---- --10

1101 0101

726

---- --10

1101 0110

727

---- --10

1101 0111

На самом деле АЦП вполне нормальный и если проводить серию измерений одного и того же напряжения, в одних и тех же условиях, мы будем получать один и тот же результат.

10.2.5 Параметры ацп

Основные параметры АЦП приведены в таблице 10.8 Все значения указа­ны для диапазона температур окружающей среды -40...+80°С.

Таблица 10.8 Параметры АЦП

Обозначение

Параметр

Условия

min

typ

max

Ед. изм.

1

2

3

4

5

6

7

Разрешение

10

бит

VREF = 4B

fADC = 200 кГц

1

2

M3P

Абсолютная

VREF = 4B

fADC = 1 МГЦ

4

M3P

VREF = 4B

fADC = 2 МГЦ

16

M3P

INL

Интегральная

нелинейность

VREF >2B

AVCC =3.3...6.0B

0.5

M3P

DNL

Дифференциальная

нелинейность

VREF >2B

AVCC =3.3...6.0B

0.5

M3P

Ошибка смещения

AVCC =3.3...6.0B

1

M3P

1

2

3

4

5

6

7

Время

преобразования

65

260

МКС

fADC

Тактовая частота

50

200

кГц

AVCC

Напряжение питания

VCC- 0.3

VCC + 0.3

В

VREF

Опорное напряжение

AGND

AVcc

RREF

Входное сопротивление

канала опорного напряжения

6

10

13

кОм

RAIN

Входное сопротивление

аналогового входа

100

МОм

10.2.6 ЖКИ – модуль на основе контроллера НD44780

В пакете программ VMLAB 3.12 используется ЖКИ-модуль на основе контроллера НD44780. Приведем краткий обзор данного ЖКИ-модуля и принцип его работы. Контроллер НD44780 фирмы Hitachi фактически является промышленным стандартом и широко применяется при производстве алфавитно-цифровых ЖКИ-модулей. Данный ЖКИ-модуль представляет собой недорогое и удобное устройство, позволяющее сэкономить время и ресурсы при разработке новых изделий. Для соединения ЖКИ-модуля с микроконтроллером используется синхронная шина, насчитывающая 8 или 4 (выбирается программно) линий данных DB0…DB7, линию выбора операции R/W (запись/чтение), линию выбора регистра RS (данные/команда) и линию стробирования/синхронизации Е. Питающее напряжение составляет 5 В. Перед началом рассмотрения принципов управления ЖКИ-модулем, обратимся к внутренней структуре контроллера НD44780, чтобы понять основные принципы построения ЖКИ-модулей на его основе. Упрощенная структурная схема контроллера приведена на рис. 10.7. Можно сразу выделить основные элементы, с которыми приходится взаимодействовать при программном управлении: регистр данных (DR), регистр команд (IR), видеопамять (DDRAM), ОЗУ знакогенератора (CGRAM), счетчик адреса памяти (АС).

Рис. 10.7 Упрощенная структурная схема контроллера НD44780

Другие элементы не являются объектом прямого взаимодействия с управляющей программой – они участвуют в процессе регенерации на ЖКИ: знакогенератор, формирователь курсора, сдвиговые регистры и драйверы.

Управление контроллером ведется посредством интерфейса управляющей системы. Основными объектами взаимодействия являются регистры DR и IR. Выбор адресуемого регистра производится линией RS, если RS=0 - адресуется регистр команд (IR), если RS=1 – регистр данных (DR). Данные через регистр DR, в зависимости от текущего режима, могут помещаться (или прочитываться) в видеопамять (DDRAM) или в ОЗУ знакогенератора (CGRAM) по текущему адресу, указываемому счетчиком адреса (АС). Информация, попадающая в регистр IR, интерпретируется устройством выполнения команд как управляющая последовательность. Прочтение регистра IR возвращает в 7-ми младших разрядах текущее значение счетчика АС, а в старшем разряде флаг занятости (BF). Видеопамять, имеющая общий объем 80 байтов, предназначена для хранения кодов символов, отображаемых на ЖКИ. У контроллера HD44780 существует набор внутренних флагов, определяющих режимы работы различных элементов контроллера:

I/D: режим смещения счетчика адреса АС, 0-уменьшение, 1-увеличение.

S: флаг режима сдвига содержимого экрана. 0 - сдвиг экрана не производится , 1 - после записи в DDRAM очередного кода экран сдвигается в направлении, определяемом флагом I/D: 0 - вправо, 1 - влево.

S/C: определяет объект смещения: 0 - сдвигается курсор, 1 - сдвигается экран.

R/L: уточняет направление сдвига: 0 - влево, 1 – вправо.

D/L: флаг, определяющий ширину шины данных: 0 - 4 разряда, 1 - 8 разрядов.

N: режим развертки изображения на ЖКИ: 0 - одна строка, 1 - две строки.

F: размер матрицы символов: 0 - 5х7 точек, 1 - 5х9 точек.

D: наличие изображения: 0 - выключено, 1 – включено.

С: курсор в виде подчерка: 0 - выключен, 1 - включен.

В: курсор в виде мерцающего знакоместа: 0 - выключен, 1 - включен.

Список управляющих комбинаций битов регистра IR и выполняемые ими команды приведены в таблице 10.9 Вот пример последовательности команд для инициализации ЖКИ-модуля: $30 - установка режима одной строки с матрицей 5х7 точек и работа с 8-ми разрядной шиной данных; $0С - включение отображения на экране ЖКИ-модуля, без отображения курсоров; $06 - режим автоматического перемещения курсора слева-направо после вывода каждого символа.

Таблица 10.9 Управляющие комбинации битов регистра IR

Обозначение выводов

Комментарий

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

0

0

0

0

1

Очистка экрана, АС=0

0

0

0

0

0

0

1

-

AC=0, адресация на DDRAM, сброшены сдвиги, начало строки адресуется в начале DDRAM

0

0

0

0

0

1

I/D

S

Выбирается направление сдвига курсора или экрана

0

0

0

0

1

D

C

B

Выбирается режим отображения

0

0

0

1

S/C

R/L

-

-

Команда сдвига курсора/экрана

0

0

1

DL

N

F

-

-

Определение параметров развертки и ширины шины данных

0

1

AG

AG

AG

AG

AG

AG

Присвоение счетчику АС адреса в области CGRAM

1

AD

AD

AD

AD

AD

AD

AD

Присвоение счетчику АС адреса в области DDRAM

Рекомендуется выполнить следующую последовательность действий для инициализации ЖКИ-модуля. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины - $30. Как было сказано ранее, контроллер HD44780 имеет 80 ячеек памяти, называемых видеопамятью. При помощи соответствующих команд, можно в любую из этих ячеек занести любое 8-ми битное число (т. е. число от 0 до 0FFH). Каждому из этих чисел взаимно однозначно соответствует при отображении определенный символ: например, числу 32Н соответствует цифра 2, числу 47Н — заглавная латинская буква G, и т. д. Таблица кодов символов контроллера HD44780 представлена на рис. 10.8. Программа инициализации ЖКИ-модуля и вывода символов представлена ниже.

Рис. 10.8 – Таблица кодов символов контроллера HD44780

Программа №10 (обработка аналоговых сигналов).

Для начала необходимо пояснить что нам необходим сигнал который будет обработан, и его мы подаем в листинге программы, а именно синусоидальный сигнал с тактовой частотой в 10кГц, так же необходимо при создание проекта выбрать микро контроллер ATmega128_64K.

Далее в начале основной программы (рис. 10.11) описан включаемый файл m128def.inc, содержащий информацию о микроконтроллере ATmega128_64K. Далее описаны переменные, то есть значению адресам регистров присвоены символические имена. В программе обращение к переменным производится по присвоенным именам.   Основная часть программы начинается с таблицы переходов системы сброса и прерываний. По вектору прерывания по завершению преобразования АЦП указан переход к обработке этого прерывания.

Собственно программа начинается с адреса $02d обнулением используемых регистров и загрузкой в указатель стека исходного адреса, для SPH принимаем значение верхнего бита константы ramend(High(RAMEND)), а для SPL принимаем значение low(RAMEND) . АЦП на включение, выбор однократного преобразования, определение коэффициента деления предделителя АЦП. Затем занесением значения $01 в регистр ADMUX выбирается канал приема аналогового сигнала на мультиплексор. После чего происходит запуск преобразования АЦП. Далее программа зацикливается до появления вектора прерывания по завершению преобразования АЦП, а также происходит проверка переменной per на нулевое значение.

После завершения преобразования АЦП, программа выполняет вызов процедуры прерывания по завершению преобразования АЦП (рис. 10.12), где из регистра данных АЦП происходит пересылка оцифрованного значения напряжения (двоичного кода) в РОН. Далее совершается обработка полученного значения, т.е. десятичная коррекция (преобразование в двоично-десятичный код). Таким образом, мы вычисляем количество тысяч, сотен, десятков и единиц оцифрованного значения напряжения, для вывода на ЖКИ. Затем конфигурируем порт D и каналы порта В РВ0, РВ1 и РВ2 на выход (обеспечивая подключение ЖКИ к микроконтроллеру). По каналам порта В РВ0, РВ1 и РВ2 передаются управляющие сигналы на ЖКИ R/W (R/W =“1” - чтение, R/W = “0” - запись), RS (RS=“1” – данные, RS=“0” – команда), E (строб-сигнал, по перепаду которого из 1 в 0 осуществляется запись данных в индикатор или чтение из него) соответственно через порт D – передача команд и данных. Вызывается подпрограмма конфигурации ЖКИ (рис. 10.14), в которой происходит временная задержка на 16 мс (ожидание включения ЖКИ); подача команды определение параметров развертки и ширины шины данных (DL=1 – 8-разрядная шина данных, N=0 - режим развертки одной строки, F=0 – символы с матрицей 5х7 точек); подача строб-сигнала (рис. 10.19); команда управлением включения дисплея (D=1 - отображение включено, C=0 – курсор в виде подчерка выключен, B=0 - курсор в виде мерцающего знакоместа выключен); подача строб-сигнала; команда автоинкремента (I/D=1 – увеличение счетчика адреса знакоместа на 1,S=0 – без сдвига изображения); подача строб-сигнала. Далее вызывается подпрограмма вывода данных (рис. 10.15): команда сброс дисплея; подача строб-сигнала; указание на выдачу данных; проверка цифры тысяч: если “1”, то вывод на ЖКИ; если “0”, то переход на выдачу цифры сотен; вывод цифры сотен; вывод цифры десятков; вывод цифры единиц. После чего, программа зацикливается на одной строке (конец программы).

Подпрограмма временной задержки на 1 мс (рис. 10.13) организована при помощи вычитания значение из переменной temp1 и temp. Машинный цикл микроконтроллера при тактовой частоте 4 МГц составляет 0,25 мкс, следовательно, необходимо 4000 машинных циклов, для организации задержки 1 мс. Заносим значение 5 в переменную temp1, обнуляем temp. Производим декремент temp – это происходит 256 раз (8-разрядные РОН, 28 = 256), затем уменьшаем temp1 на 1 и снова производим декремент temp. То есть повтор операции 5 раз. С учетом выполнения команд rcall, ret длительность составляет 1 мс.

Подпрограмма временной задержки 4 мс организована вызовом 4 раза подпрограммы задержки 1 мс. Аналогично выполняется подпрограмма задержки 16 мс (4 раза вызов подпрограммы задержки 4 мс).

Подпрограмма определения количества единиц происходит делением кода оцифрованного значения напряжения, полученного в регистре данных АЦП, на 10 (остаток – цифра единиц). Аналогично выполняется определение цифры десятков, сотен и тысяч. Это необходимо для того, чтобы знать какие цифры выводить на ЖКИ.

Подпрограмма выдачи строб-сигнала (рис. 10.9) организована следующим образом: установка бита 3 в регистре данных порта В (РВ2=“1”), задержка 1 мкс, сброс бита 3 в регистре данных порта В (РВ2=“0”). Вызов подпрограммы задержки 1 мс.

Подпрограмм DIV10 представляет собой программу деление целых 8-разрядных беззнаковых чисел, разобранную в л.р. №4. Отличие подпрограммы DIV10Т от DIV10 заключается в том, что первые два разряда переменной ostat перед процедурой деления целых 8-разрядных беззнаковых чисел заполняются в соответствии со значением регистра данных АЦП ADCH. Таким образом, происходит деление 10-разрядного числа на число десять. Поэтому, алгоритм данных подпрограмм приводиться не будет.

Данная программа представляет работу АПЦ микроконтроллера AtMega128 на прием аналогового сигнала, обработку этого сигнала в двоично-десятичный код и выдачу полученного кода на ЖКИ-модуль.

Рис. 10.9 Алгоритм подпрограммы выдачи строб-сигнала

Рис. 10.10 Алгоритм подпрограммы выдачи строб-сигнала

с последующей задержкой

Рис. 10.11 Алгоритм программы обработки аналогового сигнала

Рис. 10.12 Алгоритм процедуры прерывания по завершению

преобразования АЦП

Рис. 10.13 Алгоритм подпрограммы временной задержки 1 мс

Рис. 10.14 Алгоритм подпрограммы конфигурирования ЖКИ

Рис. 10.15 Алгоритм подпрограммы выдачи данных

Листинг программы №10 (инициализации АЦП и вывод результата на ЖКИ)

; ******************************************************

; BASIC .ASM template file for AVR

; ******************************************************

.include "C:\VMLAB\include\m128def.inc"

; Define here the variables

;Описание переменных

.def edin =r3 ; количество единиц

.def des =r4 ; количество десятков

.def sot =r5 ; количество сотен

.def tsch =r6 ; количество тысяч

.def temp =r16

.def temp1 =r17

.def temp2 =r18

.def per =r17

.def per1 =r18

.def dcnt =r19 ; счетчик

.def ostat =r20 ; остаток

.def delit =r21 ; делитель

;Основная программа

;Определение таблицы переходов

.ORG $0 ;Начало таблицы переходов

reset:

rjmp Start ;Переход на метку Start основной программы

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03 Вектора прерываний МК ATmega128.

reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.

reti ; Addr $05 Полностью вектора прерываний представлены

reti ; Addr $06 в приложении с назначением прерываний

reti ; Addr $07 (внешних и внутренних).

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B

reti ; Addr $0C

reti ; Addr $0D

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

.ORG $02a ;вектор завершения преобразования АЦП

rjmp Peres

.ORG $02d ;Начальный адрес основной пpогpаммы

Start: clr tеmp ;очистка регистра

clr per ;очистка регистра

clr per1 ;очистка регистра

ldi r16,High(RAMEND)

out SPH,r16

ldi r16, low(RAMEND)

out SPL,r16

ldi temp,$8D ; включение АЦП ADEN = 1, разрешение

out ADCSR, temp ; прерывания ADIE = 1, задание коэффициента

; деления предделителя АЦП = fck/32

sei ;Разрешить все пpеpывания

ldi temp,$01 ; загрузка регистра

out ADMUX, temp ; Выбираем вход АЦП, напряжение

;на котором будет

;оцифровываться: канал PC1

sbi ADCSR,6 ; Запустили преобразование

; записав '1' в бит_6 в регистре ADCSR 

m1: tst per ; проверка per на нулевое значение

brne Dalee ; переход, если не нуль

rjmp m1: ; возврат на метку m1

Dalee:

swap per1 ; обмен тетрад

lsl per1 ; логический сдвиг влево через перенос

lsl per1 ; логический сдвиг влево через перенос

rcall DIV10T ; вызов процедуры DIV10T

mov edin,ostat ; сохранение количества единиц в edin

rcall DIV10 ; вызов процедуры DIV10

mov des,ostat ; сохранение количества десятков в des

rcall DIV10 ; вызов процедуры DIV10

mov sot,ostat ; сохранение количества сотен в sot

mov tsch,per1 ; сохранение количества тысяч в tsch

ldi temp,$07 ;настройка каналов PB0,PB1,PB2 на выход

out DDRB,temp

ldi temp,$FF ;настройка порта D на выход

out DDRD,temp

rcall SetupLCD ;вызов подпрограммы конфигурирования ЖКИ

rcall Output ;вызов подпрограммы вывода данных

s1: rjmp s1 ; конец программы (пустой цикл)

; ** Процедура прерывания по завершению преобразования АЦП *****

Peres:

in per,ADCL ; пересылка оцифрованного значения

in per1,ADCH ; напряжения в переменные per и per1

ret ; возврат из процедуры

; ** Подпрограмма определения количества единиц *****

DIV10T:

ldi delit,$A ; загрузка числа 10

ldi dcnt,$9 ; загрузка счетчика циклов

sub ostat,ostat ; обнуление остатка и переноса

rol per1 ; сдвиг влево делителя/результата

rol ostat ; сдвиг влево остатка

rol per1 ; сдвиг влево делителя/результата

rol ostat ; сдвиг влево остатка

mov per1,per ; пересылка значения per в per1

d8u_1: rol per1 ; сдвиг влево делителя/результата

dec dcnt ; декремент счетчика

brne d8u_2 ; переход, если не ноль

rjmp m3 ;переход на метку m3

d8u_2: rol ostat ; остаток сдвинуть влево

sub ostat,delit ; остаток = остаток - делитель

brcc d8u_3 ; если результат < 0

add ostat,delit ; восстановить остаток

clc ; сбросить перенос для формирования результата

rjmp d8u_1 ;иначе

d8u_3: sec ;установить перенос для формирования результата

rjmp d8u_1 ; переход назад

m3: ret ; выход из подпрограммы

; ** Подпрограмма деления на десять *****

DIV10:

ldi delit,$A ; загрузка числа 10

ldi dcnt,$9 ; загрузка счетчика циклов

sub ostat,ostat ; обнуление остатка и переноса

d8u1: rol per1 ; сдвиг влево делителя/результата

dec dcnt ; декремент счетчика

brne d8u2 ; переход, если не ноль

rjmp m4 ;переход на метку m4

d8u2: rol ostat ; остаток сдвинуть влево

sub ostat,delit ; остаток = остаток - делитель

brcc d8u3 ; если результат < 0

add ostat,delit ; восстановить остаток

clc ; сбросить перенос для формирования результата

rjmp d8u1 ;иначе

d8u3: sec ;установить перенос для формирования результата

rjmp d8u1 ;переход назад

m4: ret ; выход из подпрограммы

; ** Подпрограмма конфигурирования ЖКИ *****

SetupLCD:

;Команда установки функций с DL=1,N=0,F=0

rcall Del16mc ; вызов подпрограммы задержки 16 мс

ldi temp,0b000 ; выставление управляющих сигналов ldi temp,0b00110000 ; команда: 8-разрядная шина данных, одна ;строка,

out PORTD,temp ; символы с матрицей 5х7 точек

rcall Impuls ;вызов подпрограммы выдачи строба с задержкой

;Команда управления включением дисплея с D=1,C=0,B=0

ldi temp,0b000 ; выставление управляющих сигналов ldi temp,0b00001100 ;команда: отображение включено, курсор – ;выкл.,

out PORTD,temp ; мерцание знакоместа выключено

rcall Impuls ;вызов подпрограммы выдачи строба с задержкой

;Команда автоинкремента с I/D=1,S=0

ldi temp,0b000 ; выставление управляющих сигналов

out PORTB,temp ; на запись команды

ldi temp,0b00000110 ;команда: режим увеличения счетчика на 1,

out PORTD,temp ; без сдвига изображения

rcall Impuls ;вызов подпрограммы выдачи строба с

;задержкой

ret ; выход из подпрограммы

; **Подпрограмма выдачи строб-сигнала с последующей задержкой**

Impuls: rcall ImpulsE ;вызов подпрограммы выдачи строба Е

rcall Del1mc ;вызов подпрограммы задержки в 1мс

ret ; выход из подпрограммы

; **Подпрограмма выдачи строб-сигнала**

ImpulsE: sbi PORTB,PB2 ; выдача “1” в канал порта В РВ2

nop ; пустая операция

nop ; пустая операция

nop ; пустая операция

nop ; пустая операция

cbi PORTB,PB2 ; выдача “0” в канал порта В РВ2

ret ; выход из подпрограммы

; **Подпрограмма задержки 16мс**

Del16mc:

rcall Del4mc ; вызов подпрограммы задержки 4мс

rcall Del4mc ; вызов подпрограммы задержки 4мс

rcall Del4mc ; вызов подпрограммы задержки 4мс

rcall Del4mc ; вызов подпрограммы задержки 4мс

ret ; выход из подпрограммы

; **Подпрограмма задержки 4мс**

Del4mc:

rcall Del1mc ; вызов подпрограммы задержки 1мс

rcall Del1mc ; вызов подпрограммы задержки 1мс

rcall Del1mc ; вызов подпрограммы задержки 1мс

rcall Del1mc ; вызов подпрограммы задержки 1мс

ret ; выход из подпрограммы

; **Подпрограмма задержки 1мс**

Del1mc:

clr temp ; очистка регистра

ldi temp1,$5 ; загрузка в регистр значения 5

m5: dec temp ; декремент регистра

brne m5 ; переход если не нуль

dec temp1 ; декремент регистра

brne m5 ; переход если не нуль

ret ; выход из подпрограммы

; **Подпрограмма выдачи данных**

Output: ldi temp,0b000 ; выставление управляющих сигналов out PORTB,temp ; на запись команды

ldi temp,0b00000001 ; команда: сбросить дисплей

out PORTD,temp

rcall Impuls ;вызов подпрограммы выдачи строба с задержкой

rcall Del1mc ; вызов подпрограммы задержки на 1 мс

ldi temp,0b010 ; выставление управляющих сигналов

out PORTB,temp ; на запись данных

sez ;установка флага Z=1, выдача цифры тысяч на ЖКИ

tst tsch ; проверка на нулевое значение

breq a1 ; переход, если нуль

mov temp,tsch ; пересылка данных из tsch в temp

ori temp,$30 ; перевод в код пересылки на ЖКИ

out PORTD,temp ; выдача данных в порт D

rcall Impuls ; подача стробирующего сигнала

a1: mov temp,sot ; выдача цифры сотен на ЖКИ

ori temp,$30

out PORTD,temp

rcall Impuls

mov temp,des ; выдача цифры десятков на ЖКИ

ori temp,$30

out PORTD,temp

rcall Impuls

mov temp,edin ; выдача цифры единиц на ЖКИ

ori temp,$30

out PORTD,temp

rcall Impuls

ret ; выход из подпрограммы

Рис. 10.16 Визуальная модель проектного файла

Листинг проектного файла №10

; ************************************************************

; PROJECT:

; AUTHOR:

; ************************************************************

; Micro + software running

; ------------------------------------------------------------

.MICRO "ATmega128_64K"

.PROGRAM "10.asm"

.TARGET "10.hex"

.TRACE ; Activate micro trace

; Following lines are optional; if not included

; exactly these values are taken by default

; ------------------------------------------------------------

.POWER VDD=5 VSS=0 ; Power nodes

.CLOCK 4meg ; Micro clock

.STORE 250m ; Trace (micro+signals) storage time

R3 VDD AREF 1 ; подключение резистора 1 Ом между VDD и AREF

Vsin PF1 VSS sin(2.5 2.5 10K);Подача синусоидального сигнала с частотой 10к Гц

; Выводы ЖКИ RS R/W E DB7 DB6 DB5 DB4DB3DB2 DB1 DB0

Xdisp LCD(16 1 250K) PB1 PB0 PB2 PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0

; Подключение ЖКИ к порту D и каналам порта В РВ1, РВ0, РВ2.

; Параметры: 1 строка, 16 символов, частота 250 кГц

.PLOT v(pF1) ; Вывод на осциллограф сигнала с канала порта F РF1

Соседние файлы в папке Новая папка (1)