В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Прменения > ЖКИ
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Подключение символьного ЖК-модуля к микроконтроллеру VERSA1

Описание:

Эта рекомендация по применению описывает интерфейс между VERSA1 и ЖК – дисплеем на базе контроллера HD44780.

Эта рекомендация по применению объяснит основы создания интерфейса ЖК – дисплея на примере программы, где для управления ЖК – дисплеем используется SPI порт VERSA1.

Обеспечение обширного разъяснения работы такого интерфейса ЖК – дисплея или глубокого объяснения физики работы ЖК - дисплея и работы контроллера HD44780 выходит за рамки данной рекомендации по применению. В интернете доступны FAQ, которые полностью разъясняют содержание этого документа. Мы рекомендуем вам получить копию описания контроллера Hitachi HD44780, доступного в интернете.

Описание контроллера ЖК - дисплея

Контроллер ЖК-дисплея обеспечивает интерфейс подобный интерфейсу процессора, который обеспечивает доступ к трем основным блокам памяти:

  • ОЗУ данных дисплея (DDRAM)
  • ПЗУ знакогенератора (CGROM)
  • ОЗУ знакогенератора (CGRAM)

Он также обеспечивает выполнение команд, делающих возможным доступ к блокам памяти и управление различными видами дисплеев.

На рисунке 1 приведена упрощенная блок-схема модуля контроллера ЖК-дисплея.

CGROM содержит предопределенный набор символов для ЖК-дисплея. Коды букв и цифр сообщаются в их ASCII кодах. Другие доступные символы связываются с распределением символов для вашего ЖК-дисплея.

Память DDRAM хранит символы, отображаемые на ЖК-дисплее. Емкость памяти DDRAM составляет 80 байт. Она приспособлена для отображения до 4 строк по 20 символов в каждом.

Размер DDRAM не зависит от размера дисплея. Для меньших дисплеев доступно пространство в 80 байт DDRAM, но только часть ячеек DDRAM используется для работы дисплея фактически. Оставшиеся ячейки могут использоваться для хранения данных общего назначения.

На рисунке 2 показана структура памяти DDRAM и ячейки DDRAM для дисплея 16х2.

Важно отметить разрыв адресов DDRAM между строками ЖК-дисплея. Следует обратить внимание на выполнение операций сдвига строк, длина которых превышает размер строки дисплея.

Заметим, что для дисплеев 40x2 строки 1-2 и 3-4 объединены.

CGRAM – это область памяти, зарезервированная для хранения специальных знаков, определенных пользователем. Она может хранить до 8 знаков в формате 5х8 или 4 знака в формате 5х10.

Доступ к памяти CGRAM и DDRAM осуществляется посредством двух промежуточных регистров, которые служат для обмена данных между основным процессором и контроллером ЖК-дисплея. Это регистр команд (IR), и регистр данных (DR).

Регистр команд (IR) служит для приема команд, подлежащих обработке в контроллере ЖК-дисплея.

Регистр данных (DR) служит буфером между ОЗУ данных дисплея (DDRAM), ОЗУ знакогенератора (CGRAM) и внешней шиной данных.

Интерфейс с модулем ЖК-дисплея

Интерфейс с ЖК-дисплеем типа HD44780 может быть сделан в 8-битном параллельном формате либо в 4-битном двухпосылочном формате на линиях D4-D7 шины данных. Этот способ позволяет оставить 4 канала ввода-вывода и упрощает разводку печатной платы. Недостатком 4-битного интерфейса является требование передачи данных в виде двух 4-битных посылок (старшая часть следует за младшей). Результатом является увеличенное время коммуникации.

Обычно стандартный интерфейс с ЖК-дисплеем сделан при помощи набора 14 выводов, список которых приведен в следующей таблице. На некоторых ЖК-дисплеях выводы D0-D3 удалены и возможен только 4-битный интерфейс. Некоторые другие ЖК-дисплеи обеспечивают функцию подсветки, которая требует 2-х добавочных выводов, обычно добавленных как выводы 15 и 16 или непосредственно в дисплее.

Pin # Name Function
1 GND Ground
2 +5V Module Supply
3 VC LCD Drive voltage. See the specific LCD datasheet about the voltage to apply to this pin.
4 R/S Register select
0 = Instruction register
1 = Data register
5 R/W Select Read or Write operations
0 = Write
1 = Read
6 E Enable (clock)
7-14 D0 to D7 Data bus
In 4 bits interface mode, Data is transferred via D4-D7. The pins D0-D3 are disabled.
15-16 Backlight Optional backlight pins Often they are placed on the side of the display.

Обычно ЖК-дисплей требует питание 5 В и потребляет от 2 мА до 5 мА питающего тока.

Вывод VC служит для подачи рабочего напряжения ЖК-дисплея. Это напряжение приложено к выводу, позволяющему настроить контраст дисплея. Напряжение, приложенное к выводу VC, может быть от –7 В до +5 В, в зависимомти от типа ЖК-дисплея.

Вход RS выбирает путь от внешней шины данных ЖК-дисплея до регистра IR либо DR.

Вход R/W определяет направление потока данных между ЖК-дисплеем и управляющим микропроцессором.

При использовании 4-битного интерфейса требуется 7 линий ввода-вывода для связи с дисплеем. Эта топология будет использована в примере программы.

Временная диаграмма ЖК-дисплея

При работе в 4-битном режиме данные, предназначенные для передачи в регистр IR передаются в ЖК-дисплей через линии Data4 – Data7 в две последовательные посылки. Первая посылка содержит старшие четыре байта и вторая посылка представляет младшие четыре байта.

ЖК-дисплеи – медленные устройства. Максимальная скорость шины составляет 1 МГц. Команды требуют от 37 мкС до 1,5 мС для завершения. Во время выполнения команды ЖК-дисплей не может принять команды.

По этой причине флаг занятости может быть прочитан, когда команда была послана в ЖК-дисплей. Это позволяет узнать, когда ЖК-дисплей готов принять следующую команду.

Чтобы проверить флаг занятости, следует установить вход R/W в логическую 1, вход RS в логический 0 и выполнить два последовательных периода сигнала E. Флаг занятости будет представлен на выводе Data 7 в первый период “высокого“ сигнала E. Оставшиеся биты представляют величину счетчика адреса.

На рисунке 3 показаны времена, требуемые для выполнения операций записи и проверки флага занятости (BF) ЖК-дисплея.

Набор команд ЖК-дисплея

Следующая таблица включает команды, поддерживаемые контроллером HD44780.

Команда RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Описание Время
выпол-
нения
Сброс
дисплея
0 0 0 0 0 0 0 0 0 1 Полная очистка
буфера дисплея,
курсор в начальную позицию
1,64мс
Курсор в
начало
0 0 0 0 0 0 0 0 1 - Устанавливает
курсор в начальную позицию, отображение с нулевого адреса. Содержимое буфера не меняется.
1,64мс
Режим
ввода
0 0 0 0 0 0 0 1 I/D S Устанавливает направление смещения курсора и разрешает сдвиг курсора или экрана 40мкс
Режим
отобра-
жения
0 0 0 0 0 0 1 D C B Управление отображением, курсором и режимом миганием 40мкс
Сдвиги 0 0 0 0 0 1 S/C R/L - - Двигает курсор
и сдвигает изображение без
изменения состояния буфера
40мкс
Функции 0 0 0 0 1 DL N F - - Определение размера шины,
число строк и тип знакогенератора
1.64мс?
Устано-
вить
адрес
0 0 0 1 C5 C4 C3 C2 C1 C0 Устанавливает
адрес ОЗУ
знакогенератора
С5-С0 - адрес знакогенератора
40мкс
Устано-
вить
адрес
0 0 1 D6 D5 D4 D3 D2 D1 D0 Устанавливает адрес ведопамяти
D6-D0 - адрес видеопамяти
40мкс
Считать
адрес
0 1 BF D6 D5 D4 D3 D2 D1 D0 Чтение флага
занятости.
D6-D0 - адрес видеопамяти или знакогенератора
40мкс
Запись
данных
1 0 D7 D6 D5 D4 D3 D2 D1 D0 Запись данных
в память
видеобуфера или
знакогенератора
D7-D0 - адрес
видеопамяти или
знакогенератора
40мкс
Чтение
данных
1 0 D7 D6 D5 D4 D3 D2 D1 D0 Чтение данных
из памяти видео-
буфера или знакогенератора
D7-D0 - адрес
видеопамяти или знакогенератора
40мкс

Условные обозначения битов

Бит Состояние Комментарий
I/D 1/0 Смещение курсора вправо/влево
S 1 Разрешает сдвиг курсора или экрана
S/C 1/0 Сдвиг курсора/перемещение дисплея
R/L 1/0 Сдвиг вправо/влево
DL 1/0 Шина 8/4 бита
N 1/0 На экране две/одна строка
F 1/0 Знакогенератор 5х10/5x7 точек
BF 1/0 Модуль не готов/готов к обмену
- - Состояние бита не имеет значения

Последовательность инициализации ЖК-дисплея.

ЖК-контроллер включает цепи автоинициализации ЖК-дисплея, если напряжение питания возрастает от 0 В до 4,5 В за время от 0,1 мС до 10 мС. Это очень медленное нарастание питающего напряжения. В большинстве применений напряжение питания нарастает за гораздо более короткий период и это необходимо для выполнения принудительной инициализации ЖК-дисплея при включении питания.

Рисунок 4 иллюстрирует последовательность операций, которая должна быть выполнена для принудительной инициализации ЖК-дисплея при использовании 4-битного интерфейса.

Запись символов в ЖК-дисплей.

Чтобы записать символы в ЖК-дисплей, вы должны сперва установить указатель адреса DDRAM в отображаемую часть памяти DDRAM.

Затем принимается команда записи по адресу DDRAM. Величина D0-D7 определяет номер отображаемого знака.

После записи знака в DDRAM (и в CGRAM), указатель адреса автоматически инкрементируется. Это очень упрощает строку записи в ЖК-дисплей.

Установка знаков пользователя

LCD содержит память CGRAM, где пользователь может определить до восьми знаков в формате 5х8 точек или до четырех 5х10 точек.

Точки этих знаков определены в виде битов в восьми последующих ячейках памяти, начиная с верхней линии точек, представляющих строку пикселей символа. Набор адресных команд CGRAM должен быть получен перед тем, как начать запись определения символа пользователя используя команду записи данных в CGRAM.

Каждый раз, когда данные записаны в память CGRAM, указатель адреса CGRAM инкрементируется.

В следующей таблице показан пример, где простой символ улыбающегося лица задается в CGRAM, для случая, когда шрифт определен в формате 5х8.

CGRAM
Address
D7 D6 D5 D4 D3 D2 D1 D0
Char x +0 - - - 0 0 0 0 0
Char x +1 - - - 1 0 1 0 1
Char x +2 - - - 0 0 1 0 0
Char x +3 - - - 0 0 1 0 0
Char x +4 - - - 0 0 1 0 0
Char x +5 - - - 1 0 1 0 1
Char x +6 - - - 0 1 1 1 0
Char x +7 - - - 0 1 0 0 0
Char (x+1) +0 Next character mapping follows up to eight 5x8 characters for a total of 64 bytes

После окончания определения знака пользователя в памяти CGRAM, в ЖК-дисплей должна быть послана команда установки адреса DDRAM.

Отображение символов пользователя

Отображение символов, определенных пользователем происходит также, как отображение символов, заданных в CGROM. Эти символы кодируются в формате 5х8 (от 00h до 07h).

Будучи оперативной памятью, CGRAM теряет данные при снятии питающего напряжения.

Организация вывода с использованием регистра сдвига и интерфейса SPI VERSA1

Соединение SPI порта с 8 битным регистром сдвига с последовательным входом и параллельным выходом – это простейший способ организации интерфейса с ЖК-дисплеем. Недорогая компактная микросхема 74HC595 может быть использована для такого регистра сдвига.

Интерфейс между VERSA1 и ЖК-дисплеем показан на рисунке 5. Использование микросхемы 74HC595 позволяет выполнять только операции записи в ЖК-дисплей с добавлением проверки флага BF. Это приемлемо для большинства приложений, использующих ЖК-дисплеи.

Резисторы между регистром сдвига и ЖК-дисплеем служат для предотвращения выводов ЖК-дисплея D7-D4 от перегрузки при проверке флага BF. Сопротивление этих резисторов должно быть не менее 4,7 кОм.

В примере программы LCDSP11.asm приведенной в конце этого документа, флаг BF проверяется с использованием SPI интерфейса.

Флаг занятости появляется на Data7. Чтобы сохранить один порт ввода-вывода при выполнении операции чтения флага BF, мы использовали вместо него вход SDI. Чтобы считать уровень на входе SDI, следует установить SPI в режим мастера с адресом CS1 и записать ложный байт в регистр SPITX. При этом автоматически выполняется операция чтения.

Значение входа SDI можно будет прочитать в каждом бите регистра SPIRX.

Для применений, требующих использования порта SDI, флаг BF может быть проверен с использованием одного из портов ввода/вывода общего назначения. Также возможно включенеие ЖК-дисплея в режиме “open-loop”и замена проверки флага BF на задержку между командами, большую, чем время выполнения команды.

В общем, такое включение в режиме “open-loop” дает хорошие результаты для нетребовательных применений. Однако, для применений, широко использующих такие функции ЖК-дисплея, как скроллирование или применения, часто обновляющие индикацию на ЖК-дисплее, лучше задействовать проверку флага занятости.

Конфигурирование SPI для управления ЖК-дисплеем.

Пример подключения 74HC595 в интерфейсе SPI VERSA1 приведен на рисунке 5. SPI должен быть сконфигурирован в режиме мастера с обратной полярностью синхроимпульсов, с использованием линии CS0 для защелкивания данных на выходах регистре сдвига.

Следующая таблица показывает байт, который должен быть записан в управляющий регистр SPI.

7 6 5 4 3 2 1 0
- - CSSB[1:0] MCLK[1:0] SPICKP SPIMA_SL
0 0 00 01 1 1

Ниже приведена таблица истинности 74HC595. Затемненная областьпоказывает неиспользуемые режимы регистра сдвига.

RCK SCK -SCLR -G Function
X X X H Qa_h are tri state
X X L L Clear Shift register
X 0->1 H L Shift register clocked
0->1 X H L Contents of shift register sent to output latches

Пример программы LCDSPI.asm

Чтобы проиллюстрировать положения, приведенные в этой рекомендации по применению, следующий пример программы покажет как:

  • инициализировать ЖК-дисплей
  • инициализировать специальные символы
  • записывать строки
  • отображать специальные символы

Вы можете использовать эту программу или ее функции как основу для разработки ваших приложений с использованием VERSA1

Исходный ассемблерный файл и откомпилированный hex-файл могут быть загружены с веб-сайта Goal Semiconductor www.goalsemi.com.

Исходный ассемблерный код

;* ИМЯ ФАЙЛА: LCDSPI2.asm *
;* *
;* ОПИСАНИЕ: ЭТОТ КОД ДЕМОНСТРИРУЕТ ИНТЕРФЕЙС*
;* СИМВОЛЬНОГО LCD НА ОСНОВЕ HD44780 С VERSA1 *
;* С ИСПОЛЬЗОВАНИЕМ SPI ИНТЕРФЕЙСА И РЕГИСТРА СДВИГА 74HC595*
;* ЭТОТ КОД ИСПОЛЬЗУЕТ ОТСЛЕЖИВАНИЕ ФЛАГА ЗАНЯТОСТИ*
;* ИСПОЛЬЗУЕТ ВХОД SDI ИНТЕРФЕЙСА SPI. ТАКЖЕ ВОЗМОЖНА *
;* ЗАМЕНА ПРОВЕРКИ ФЛАГА ЗАНЯТОСТИ ВВЕДЕНИЕМ *
;* ДОСТАТОЧНО БОЛЬШОЙ ЗАДЕРЖКИ МЕЖДУ *
;* КОМАНДАМИ LCD. *
;* *
;*ЭТОТ КОД ДОЛЖЕН ХОРОШО РАБОТАТЬ С БОЛЬШИНСТВОМ LCD. *
;* НО ДЛЯ НЕКОТОРЫХ LCD ВОЗМОЖНО ПОТРЕБУЮТСЯ НЕБОЛЬШИЕ *
;* ИЗМЕНЕНИЯ. *
;* *
;*КОНФИГУРАЦИЯ: SPI СОЕДИНЕН С РЕГИСТРОМ СДВИГА 74HC595*
;* С ПОСЛЕДОВАТЕЛЬНЫМ ВХОДОМ ПАРАЛЛЕЛЬНЫМ ВЫХОДОМ *
;* *
;* ВЫВОДЫ ПИТАНИЯ И УПРАВЛЕНИЯ 74HC595  *
;* ============================= *
;* | VCC | PIN 16 | СОЕДИНЕН С VCC *
;* | GND | PIN 7 | СОЕДИНЕН С GND *
;* | !OE | PIN 13 | СОЕДИНЕН С GND *
;* | !SRCLR | PIN 10 | СОЕДИНЕН С VCC *
;* | RCLK | PIN 12 | СОЕДИНЕН С SPI CS0- *
;* | SER | PIN 14 | СОЕДИНЕН С SPI SDO *
;* | SRCK | PIN 11 | СОЕДИНЕН С SPI SCK *
;* *
;* ВЫХОДЫ 74HC595 *
;* =================== *
;* | QA(LSB)| PIN 15 | НЕ СОЕДИНЕН*
;* | QB | PIN 1 | LCD RS *
;* | QC | PIN 2 | LCD R/!W *
;* | QD | PIN 3 | LCD E *
;* | QE | PIN 4 | LCD DATA4 *
;* | QF | PIN 5 | LCD DATA5 *
;* | QG | PIN 6 | LCD DATA6 *
;* | QH(MSB)| PIN 7 | LCD DATA7 *
;* | QH' | PIN 9 | НЕ СОЕДИНЕН *
;* *
;*ЧТОБЫ ИСПОЛЬЗОВАТЬ ПРОВЕРКУ ФЛАГА BF: (ПО УМОЛЧАНИЮ) *
;* ======================= *
;*  РАЗМЕСТИТЬ РЕЗИСТОР 4.7кОм МЕЖДУ QC, QD, QE И QF *
;* И ВЫВОДАМИ LCD DATA4 -7 *
;* СОЕДИНИТЬ DATA7  LCD СО ВХОДОМ SPI SDI *
;* *
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
;************************************************************
;* V003 ОБЪЯВЛЕНИЕ РЕГИСТРОВ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ*
;************************************************************
;**********************************
;* ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ*
;**********************************
CPTR EQU 040h ;ПЕРЕМЕННАЯ ДЛЯ СЧЕТА
LCDDATA EQU 041h ;ДАННЫЕ И КОМАНДА ДЛЯ ПЕРЕСЫЛКИ В LCD
SPITXMOT EQU 041h ;ЗНАК ДЛЯ ПЕРЕСЫЛКИ ПО SPI
LCDCAR EQU 042h ;ЗНАК ДЛЯ ПЕРЕСЫЛКИ В LCD
LCDCMD EQU 043h ; КОМАНДА ДЛЯ ПЕРЕСЫЛКИ LCD
USWAIT EQU 044h ;ЗАДЕРЖКА В мкС
CGCPTR EQU 045h ;CGRAM СЧЕТЧИК ФУНКЦИИ ИНИЦИАЛИЗАЦИИ
;***************************
;* ОПРЕДЕЛЕНИЕ РЕГИСТРОВ SPI*
;***************************
SPIINTSTAT EQU 0BCh ;РЕГИСТР ПРЕРЫВАНИЙ SPI
SPIRXOVERRUN EQU 0BDh ;SPI RX РЕГИСТР ПЕРЕПОЛНЕНИЯ
SPICTRL EQU 0B4h ;УПРАВЛЯЮЩИЙ РЕГИСТР SPI
SPIRX EQU 0B5h ;SPI RX РЕГИСТР
SPITX EQU 0B6h ;SPI TX РЕГИСТР
SPIIRQMASK EQU 0B7h ;РЕГИСТР МАСКИ ПРЕРЫВАНИЯ SPI
IOCTRL EQU 0BAh ;УПРАВЛЯЮЩИЙ РЕГИСТР ВВОДА-ВЫВОДА
;**************************
;* КОНСТАНТЫ КОМАНД LCD *
;**************************
LCD_L1C1 EQU 080h ;СТРОКА1 СТОЛБЕЦ1 LCD 
LCD_L2C1 EQU 0C0h ;СТРОКА2 СТОЛБЕЦ1 LCD
LCD_CLEAR EQU 001h ;ОЧИСТКА ДИСПЛЕЯ, ВОЗВРАТ КУРСОРА
;К НАЧАЛУ СТРОКИ
LCD_HOME EQU 002h ; ВОЗВРАТ КУРСОРА К НАЧАЛУ СТРОКИ
;*********************************
;* ТАБЛИЦА ПЕРЕХОДОВ ПО ПРЕРЫВАНИЮ*
;*********************************
ORG 0000h
LJMP INISYSTEM ;ПЕРЕХОД СБРОСА
;**************************
;*НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ *
;**************************
ORG 0100h
INISYSTEM: CLR DPS ;УСТАНОВКА DATA POINTER 0
MOV SP,#0C0H ;ОПРЕДЕЛЕНИЕ ПОЛОЖЕНИЯ УКАЗАТЕЛЯ СТЕКА
;***ИНИЦИАЛИЗАЦИЯ SPI В РЕЖИМЕ МАСТЕРА
MOV SPICTRL,#00000111B ;[5:4] CS0
;[3:2] DIVIDER 8: ТАКТОВАЯ ЧАСТОТА 1MHz
;[1] ОБРАТНАЯ ПОЛЯРНОСТЬ
;[0] РЕЖИМ МАСТЕРА
MOV SPIIRQMASK,#00h ;МАСКА IRQ SPI
LCALL INITSPILCD ;ИНИЦИАЛИЗАЦИЯ СОЕДИНЕНИЯ С LCD
;ЧЕРЕЗ 74HC595
LCALL INILCDCGRAM ;КОПИРОВАНИЕ СПЕЦ. СИМВОЛОВ
; В ПАМЯТЬ LCD CGRAM 
MESSAGELOOP: MOV LCDCMD,#LCD_CLEAR ;ОЧИСТКА LSD
LCALL SPILCDCMD
MOV A,#250 ;ПАУЗА 250мС
LCALL DELAY1MS
MOV DPTR,#LCDMSG1 ;ПОСЛАТЬ 'VERSA1 ' НА ПЕРВУЮ СТРОКУ
LCALL SPILCDSTR
MOV LCDCMD,#08AH ;УСТАНОВКА DDRAM ADRS = LINE=1, COL=10
LCALL SPILCDCMD
MOV LCDCAR,#00 ;ОТОБРАЖЕНИЕ СПЕЦ. СИМВОЛА #1 СКОПИРОВАННОГО В CGRAM
LCALL SPILCDCAR
MOV A,#250 ;ПАУЗА 250мС
LCALL DELAY1MS
MOV LCDCMD,#LCD_L2C1 ;УСТАНОВКА КУРСОРА LCD НА ВТОРУЮ СТРОКУ
LCALL SPILCDCMD
MOV DPTR,#LCDMSG2 ;ПОСЛАТЬ 'LCD INTERF ' НА ВТОРУЮ СТРОКУ
LCALL SPILCDSTR
MOV A,#250
LCALL DELAY1MS
MOV A,#250
LCALL DELAY1MS
MOV A,#250
LCALL DELAY1MS
MOV IOCTRL,#0BH
LJMP MESSAGELOOP ;БЕСКОНЕЧНЫЙ ЦИКЛ
;*********************************************************************
;********* ФУНКЦИИ ДАННОЙ ПРОГРАММЫ* ************
;*********************************************************************
;******************************************************
;********* ФУНКЦИИ SPI LCD *****************
;************************************************ ******
;************************************************************************
;* ИМЯ ФАЙЛА: INITSPILCD.asm *
;* *
;* ОПИСАНИЕ: ИНИЦИАЛИЗАЦИЯ LCD СОЕДИНЕННОГО С SPIBUS ЧЕРЕЗ *
;* РЕГИСТР СДВИГА 74HC595*
;* *
;*КОНФИГУРАЦИЯ: SPI СОЕДИНЕН С РЕГИСТРОМ СДВИГА 74HC595*
;* С ПОСЛЕДОВАТЕЛЬНЫМ ВХОДОМ ПАРАЛЛЕЛЬНЫМ ВЫХОДОМ *
;* *
;* ВЫВОДЫ ПИТАНИЯ И УПРАВЛЕНИЯ 74HC595  *
;* ============================= *
;* | VCC | PIN 16 | СОЕДИНЕН С VCC *
;* | GND | PIN 7 | СОЕДИНЕН С GND *
;* | !OE | PIN 13 | СОЕДИНЕН С GND *
;* | !SRCLR | PIN 10 | СОЕДИНЕН С VCC *
;* | RCLK | PIN 12 | СОЕДИНЕН С SPI CS0- *
;* | SER | PIN 14 | СОЕДИНЕН С SPI SDO *
;* | SRCK | PIN 11 | СОЕДИНЕН С SPI SCK *
;* *
;* ВЫХОДЫ 74HC595 *
;* =================== *
;* | QA(LSB)| PIN 15 | НЕ СОЕДИНЕН*
;* | QB | PIN 1 | LCD RS *
;* | QC | PIN 2 | LCD R/!W *
;* | QD | PIN 3 | LCD E *
;* | QE | PIN 4 | LCD DATA4 *
;* | QF | PIN 5 | LCD DATA5 *
;* | QG | PIN 6 | LCD DATA6 *
;* | QH(MSB)| PIN 7 | LCD DATA7 *
;* | QH' | PIN 9 | НЕ СОЕДИНЕН *
;* *
;* ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ: SPITXMIT: ПОСЫЛКА 8 БИТНОЙ ВЕЛИЧИНЫ ЧЕРЕЗ SPI *
;* SPILCDEPULSE: ПОСЛАТЬ 1 ИМПУЛЬС НА ВЫВОД E LCD*
;* DELAY1MS: ЗАДЕРЖКА 1 МС*
;* DELAY50US: ЗАДЕРЖКА 50МКС*
 ;* *
;********************************************************************* ***
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394-0661 *
;* Web: www.goalsemi.com *
;* *
;********************************************************* ***************
INITSPILCD: MOV A,#20 ;ЗАДЕРЖКА 20MС
LCALL DELAY1MS
MOV LCDDATA,#00110000B ; ПОСЛЕДОВАТЕЛЬНОСТЬ ИНИЦИАЛИЗАЦИИ ПО ;УМОЛЧАНИЮ
;LCD В 8 БИТНОМ РЕЖИМЕ
;D7 D6 D5 D4 E R/W RS NC
;| | | | | | | |
;0 0 1 1 0 0 0 0
;(ЭТА ПОСЛЕДОВАТЕЛЬНОСТЬ SEQ UENCE БУДЕТ ПОСЛАНА 3 РАЗА)
LCALL SPITXMIT
LCALL SPILCDEPULSE ;E= L ->H THEN H->L
;ЗАЩЕЛКНУТЬ ДАННЫЕ / КОММАНДУ LCD
MOV A,#6 ;DELAY 4.1MS + (5mS USED)
LCALL DELAY1MS
LCALL SPILCDEPULSE ;SECOND TIME. E= L ->H THEN H->L
; ЗАЩЕЛКНУТЬ ДАННЫЕ / КОММАНДУ LCD
MOV A,#2 ;DELAY 100uS+ (1mS USED)
LCALL DELAY1MS
LCALL SPILCDEPULSE ;THIRD TIME. E= L ->H THEN H->L
; ЗАЩЕЛКНУТЬ ДАННЫЕ / КОММАНДУ LCD
 MOV A,#6 ;DELAY 4.1mS+ (5mS USED )
LCALL DELAY1MS
MOV LCDDATA,#00100000b ;SET 4BITS OPERATION
LCALL SPITXMIT ;D7 D6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
;0 0 1 0 0 0 0 0
MOV A,#80
LCALL DELAYUS ;DELAY 40uS+
;** ЗДЕСЬ МЫ МОЖЕМ ПРОВЕРИТЬ ФЛАГ BUSY 
;** НО МЫ СОХРАНЯЕМ ЗАДЕРЖКУ
;** НАБОР ФУНКЦИЙ: 4БИТНЫЙ РЕЖИМ, 2 СТРОКИ, ШРИФТ 5X8 .
MOV LCDDATA,#00100000b ;УСТАНОВКА 4 БИТНЫЙ РЕЖИМА СКВАЖНОСТЬ 1/16
LCALL SPITXMIT ;D7 D6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
;0 0 1 0 0 0 0 0
MOV LCDDATA,#10000000b ;D7 D6 D5 D4 E R/W RS NC
LCALL SPITXMIT ;| | | | | | | |
LCALL SPILCDEPULSE ;N F 0 0 0 0 0 0
;N=0 -> 1 LINE, N=1 -> 2 LINES
;F=0 -> 5x8 FONT, F=1 -> 5x10 FONT
MOV A,#200
LCALL DELAYUS ;ЗАДЕРЖКА  40МКС
;** ДИСПЛЕЙ ВКЛЮЧЕН, КУРСОР ОТКЛЮЧЕН, МИГАНИЯ НЕТ
MOV LCDDATA,#00000000b ; ДИСПЛЕЙ ОТКЛЮЧЕН, КУРСОРА НЕТ, МИГАНИЯ НЕТ
LCALL SPITXMIT ;D7 D 6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
;0 0 0 0 0 0 0 0
MOV LCDDATA,#11000000B ;D7 D6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
LCALL SPITXMIT ;1 D C B 0 0 0 0
LCALL SPILCDEPULSE ;D=1 -> ДИСПЛЕЙ ВКЛ, D=0 -> ДИСПЛЕЙ ВЫКЛ
MOV A,#80 ;C=1 -> КУРСОР ВКЛ, C=0 -> КУРСОР ВЫКЛ
LCALL DELAYUS ;B=1 -> МИГАНИЕ ВКЛ, B=0 -> МИГАНИЕ ВЫКЛ
;** ;ENTRY MODE SET INCREMENT, NO SHIFT
MOV LCDDATA,#00000000b ;ENTRY MODE SET INCREMENT, NO SHIFT
LCALL SPITXMIT ;D7 D6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
;0 0 0 1 0 0 0 0
MOV LCDDATA,#01000000B ;D7 D6 D5 D4 E R/W RS NC
LCALL SPILCDEPULSE ;| | | | | | | |
LCALL SPITXMIT ;S R x x 0 0 0 0
LCALL SPILCDEPULSE ;S=1 -> СКРОЛЛИНГ
;S=0 -> ДВИГАТЬ КУРСОР
MOV A,#80 ;R=1 -> НАПРАВО
;R=0 -> НАЛЕВО
LCALL DELAYUS
RET
;************************************************************************
;* ИМЯ ФАЙЛА: INITSPILCD.asm *
;* *
;* ОПИСАНИЕ: ИНИЦИАЛИЗАЦИЯ 8 ЗНАКОВ ПОЛЬЗОВАТЕЛЯ НА ВХОДЕ LCD*
;* ПАМЯТЬ CGRAM LCD СОЕДИНЕНА С SPI *
;* *
;* НАБОР ШРИФТОВ LCD *
;* В ФОРМАТЕ 5X8. *
;* *
;* ПОСЛЕ ЗАПИСИ В ПАМЯТЬ CGRAM ЭТИ СИМВОЛЫ *
;* ДОЛЖНЫ НАХОДИТСЯ В ПЕРВЫХ 8 АДРЕСАХ *
;* CGROM ГДЕ ОНИ МОГУТ БЫТЬ ВЫЗВАНЫ КАК ОБЫЧНЫЕ*
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goal semi.com *
;* *
;************************************************************************
INILCDCGRAM: MOV LCDCMD,#040H ; ИНИЦИАЛИЗАЦИЯ CGRAM В 0000H
LCALL SPILCDCMD
MOV DPTR,#LCDCHAR1
MOV CGCPTR,#64
CHARCOPY: MOV A,#00 ; КОПИРОВАНИЕ ЗНАКОВ ПОЛЬЗОВАТЕЛЯ
;В CGRAM LCD
MOVC A,@A+DPTR
MOV LCDCAR,A
ACALL SPILCDCAR
INC DPTR
DJNZ CGCPTR,CHARCOPY
MOV LCDCMD,#080h ;СБРОС УКАЗАТЕЛЯ В ПОЗИЦИЮ 00H DDRAM 
LCALL SPILCDCMD
RET
;*** ОПРЕДЕЛЕНИЕ 8 СИМВОЛОВ ПОЛЬЗОВАТЕЛЯ 
;*** ИЗМЕНИТЕ ИХ ПОД ВАШИ НУЖДЫ
LCDCHAR1: DB 00000000b ;MAPPING OF THE USER LCD
DB 00010101b ;СИМВОЛ #1
DB 00000100b ;ДЛЯ КОПИРОВАНИЯ В LCD CGRAM
DB 00000100b
DB 00000100b
DB 00010001b
DB 00001110b
DB 00000000b
LCDCHAR2: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ; СИМВОЛ #2
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM 
DB 00011111b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
LCDCHAR3: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #3
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM 
DB 00000000b
DB 00011110b
DB 00000000b
DB 00000000b
DB 00000000b
LCDCHAR4: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #4
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM
DB 00001100b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
LCDCHAR5: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #5
DB 00011111b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM 
DB 00001110b
DB 00000100b
DB 00001110b
DB 00011111b
DB 00000000b
LCDCHAR6: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #6
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM 
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
LCDCHAR7: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #7
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
LCDCHAR8: DB 00000000b ;MAPPING OF THE USER LCD
DB 00000000b ;СИМВОЛ #8
DB 00000000b ; ДЛЯ КОПИРОВАНИЯ В LCD CGRAM
 DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
MOV 1,1 ;ARTEFACT FOR ASSEMBLER
;************************************************************************
;* ИЯМ ФАЙЛА: SPILCDCAR.asm *
;* *
;*ОПИСАНИЕ: ПЕРЕСЫЛКА ОДНОГО ЗНАКА В LCD С ИСПОЛЬЗОВАНИЕМ SPI *
;* И РЕГИСТРА СДВИГА *
;* *
;* ВХОДНОЙ ПАРАМЕТР: ЗНАК ДЛЯ ОТОБРАЖЕНИЯ *
;* *
;*ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ: SPITXMIT: ПЕРЕДАЧА ДАННЫХ/КОМАНД В LCD *
;* SPILCDEPULSE: ПОСЛАТЬ ОДИН ИМПУЛЬС НА ВЫВОД Е LCD*
;* SPILCDBUSY: ЖДАТЬ ОКОНЧАНИЯ ВЫПОЛНЕНИЯ КОМАНДЫ LCD*
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394-0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************ ************
SPILCDCAR: MOV A,LCDCAR ;GET MSQ OF CARACT VALUE TO SEND
ANL A,#0F0H ;ISOLATE MSQ
SETB ACC.1 ;SET LCD RS BIT
MOV LCDDATA,A ;SEN D TO LCD
LCALL SPITXMIT
LCALL SPILCDEPULSE
MOV A,LCDCAR ;GET LSQ OF CARACT TO SEND
SWAP A ;PUT LSQ IN MSQ POSITION
ANL A,#0F0H ;ISOLATE LSQ TO SEND
SETB ACC.1 ;SET LCD RS BIT
MOV LCDDATA,A ;SEND TO LCD
LCALL SPITXMIT
LCALL SPILCDEPULSE
LCALL SPILCDBUSY
RET
;**********************
;* FONCTION SPILCDCMD *
;************************************************************************
;* ИМЯ ФАЙЛА: SPILCDCMD.asm *
;* *
;* ОПИСАНИЕ: ПОСЫЛАЕТ LCD С ИСПОЛЬЗОВАНИЕМ SPI *
;* И РЕГИСТРА СДВИГА *
;* *
;* ВХОДНЫЕ ПАРАМЕТРЫ: КОМАНДА ДЛЯ ПЕРЕДАЧИ – СМОТРИ КОНСТАНТЫ* ;*КОМАНД *
;* *
;* ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ: SPITXMIT: ПЕРЕДАЧА ДАННЫХ/КОМАНД В LCD *
;* SPILCDEPULSE: ПОСЛАТЬ ОДИН ИМПУЛЬС НА ВЫВОД Е LCD*
;* SPILCDBUSY: ЖДАТЬ ОКОНЧАНИЯ ВЫПОЛНЕНИЯ КОМАНДЫ LCD*
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
SPILCDCMD: MOV A,LCDCMD ;
ANL A,#0F0H
MOV LCDDATA,A ;ПОСЛАТЬ MSQ КОМАНДЫ LCD 
LCALL SPITXMIT
LCALL SPILCDEPULSE
MOV A,LCDCMD
SWAP A
ANL A,#0F0H
MOV LCDDATA,A ;ПОСЛАТЬ LSQ КОМАНДЫ LCD
ACALL SPITXMIT
ACALL SPILCDEPULSE
ACALL SPILCDBUSY
RET
;*************************************************** *********************
;* ИМЯ ФАЙЛА: SPILCDSTR.asm *
;* *
;*ОПИСАНИЕ: ПОСЫЛАЕТ СТРОКУ СИМВОЛОВ НА LCD С СОЕДИНЕНИЕМ *
;* С SPI С ИСПОЛЬЗОВАНИЕМ РЕГИСТРА СДВИГА. *
;* СТРОКА НАЧИНАЕТСЯ СО ЗНАЧЕНИЯ, УКАЗАННОГО DPTR. *
;* НУЛЕВОЙ СИМВОЛ ПОКАЗЫВАЕТ КОНЕЦ СТРОКИ *
;* *
;* ВХОДНОЙ ПАРАМЕТР: РАСПОЛОЖЕНИЕ НАЧАЛА СТРОКИ РАЗМЕЩЕННЫЙ В DPTR *
;* ВЫЗОВ ФУНКЦИИ. *
;* *
;* ИСПОЛЬЗУЕМЫЕ ФУЕКЦИИ: SPILCDCAR : ПЕРЕДАЧА СИМВОЛОВ В LCD *
;* *
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H 3B-1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
SPILCDSTR: MOV A,#0 ;ПОДГОТОВКА К ПОЛУЧЕНИЮ ЗНАКА
MOVC A,@A+DPTR ;ИЗ РАСПОЛОЖЕНИЯ УКАЗАННОГО DPTR
JZ FINSPILCDSTR ;ЕСЛИ СИМВОЛ == NULL (0)
; -> КОНЕЦ СТРОКИ
MOV LCDCAR,A ;СИМВОЛ != NULL -> ПОСЛАТЬ НА LCD
LCALL SPILCDCAR
INC DPTR ;УКАЗАТЕЛЬ НА СЛЕДУЮЩИЙ СИМВОЛ
AJMP SPILCDSTR ;ЦИКЛ ДО ПЕРЕСЫЛКИ ВСЕХ СИМВОЛОВ
;СТРОКИ В LCD
FINSPILCDSTR: RET
;************************************************************************
;* ИМЯ ФАЙЛА: SPILCDEPULSE.asm *
;* *
;* ОПИСАНИЕ: ПОСЫЛАЕТ ИМПУЛЬС НА ВХОД Е LCD ЧЕРЕЗ  SPI БЕЗ *
;* ИСПОЛЬЗОВАНИЯ ДРУГИХ ЛИНИЙ. *
;* *
;* ВХОДНОЙ ПАРАМЕТР: ВЕЛИЧИНА СОХРАНЕННАЯ В LCDDATA *
;* *
;* ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ: SPITXMIT :ПЕРЕДАЧА ПОСЛЕДОВАТЕЛЬНОСТИ* ;*ДАННЫХ В LCD *
;* *
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
SPILCDEPULSE: MOV A,LCDDATA
ORL A,#00001000B ;УСТАНОВИТЬ E В 1
MOV LCDDATA,A ;СОХРАНИТЬ НОВОЕ ЗНАЧЕНИЕ LCDDATA 
LCALL SPITXMIT ;ПОСЛАТЬ В LCD
NOP ;ЗАДЕРЖКА НЕ МЕНЕЕ 1 МКС
NOP
NOP
NOP
NOP
MOV A,LCDDATA ;ЗАБРАТЬ LCDDATA
ANL A,#11110111B ;УСТАНОВИТЬ E = 0
MOV LCDDATA,A
LCALL SPITXMIT ;ПОСЛАТЬ В LCD
NOP
NOP
NOP
NOP
NOP
RET
;************************************************************************
;* ИМЯ ФАЙЛА: SPIBUSY.asm *
;* *
;* ОПИСАНИЕ: ПРОВЕРКА ФЛАГА ЗАНЯТОСТИ LCD *
;* *
;* *
;************************************************************************
;* DATE: DECEMBER, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871-2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
SPILCDBUSY: MOV SPITX,#00000100B ;ПОСЛАТЬ D7 -D4= 1. E=0, RW=1, RS=0
NOP
NOP
NOP
NOP
NOP
NOP
NOTRDY: MOV SPITX,#00001100B ; E= 0 ->1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV SPICTRL,#00000111B ;ВЫБОР ИНТЕРФЕЙСА SPI ДЛЯ CS1
;ОБЕСПЕЧЕНИЕ ЧТЕНИЯ ФЛАГА BUSY НА SDI
;[5:4] CS1
;[3:2] ДЕЛИТЕЛЬ 8: ТАКТОВАЯ ЧАСТОТА 1MHz
;[1] ОБРАТНАЯ ПОЛЯРНОСТЬ
;[0] РЕЖИМ МАСТЕРА
MOV SPIIRQMASK,#00000010B ;ДОСТУПНО ИСПОЛЬЗОВАНИЕ ДАННЫХ IRQ
NOP
NOP
NOP
MOV A,SPIRX ;ФИКТИВНОЕ ЧТЕНИЕ ДЛЯ ОЧИСТКИ НЕЗАВЕРШЕНЫХ INTERRUPTS
MOV SPITX,#00H ;ПОСЫЛКА ФИКТИВНОГО БАЙТА ДЛЯ ЧТЕНИЯ
NOP
NOP
WAITREADBU: MOV A,SPIINTSTAT ;ПРОВЕРКА ПРИЕМА
ANL A,#00000010B ;ПРОВЕРКА ФЛАГА RXDATAAVAILL 
JZ WAITREADBU
MOV SPICTRL,#00000111B ;ВЫБОР ИНТЕРФЕЙСА SPI ДЛЯ CS0
;[5:4] CS1
;[3:2] ДЕЛИТЕЛЬ 8: ТАКТОВАЯ ЧАСТОТА 1МГц
;[1] ОБРАТНАЯ ПОЛЯРНОСТЬ
;[0] РЕЖИМ МАСТЕРА
MOV SPITX,#00000100B ;ПОСЛАТЬ D7-D4=1, E=0, RW=1, RS=0
NOP
NOP
NOP
NOP
NOP
NOP
MOV SPITX,#00001100B ;ПОСЛАТЬ D7 -D4=1, E=1 RW=1, RS=0
NOP
NOP
NOP
NOP
NOP
MOV SPITX,#00000100B ;ПОСЛАТЬ D7 -D4=1, E=0, RW=1, RS=0
NOP
NOP
MOV A,SPIRX ;ВЗЯТЬ ВЕЛИЧИНУ RX
JNZ NOTRDY ;ЕСЛИ BUSY = 1 ПОВТОРИТЬ ОБРАБОТКУ ФЛАГА BUSY.
NOP
NOP
RET
;********************************************************
;************* ФУНКЦИИ ИНТЕРФЕЙСА SPI *********** *******
;********************************************************
;************************************************************************
;* ИМЯ ФАЙЛА: SPITXMIT.asm *
;* *
;* ОПИСАНИЕ: ПОСЫЛАЕТ ОДИН СИМВОЛ В SPI ДЛЯ ПЕРЕДАЧИ *
;* И ЖДЕТ ЕЕ ОКОНЧАНИЯ*
;* *
;* ВХОДНОЙ ПАРАМЕТР: SPITXMOT (STD RAM ADDRESS) *
;* *
;************************************************************************
;* DATE: July, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon / Gilles Rust *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebec *
;* Canada, H3B-1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
SPITXMIT: MOV A,SPIINTSTAT
JNB ACC.0,SPITXMIT ;ЖДЕТ ОКОНЧАНИЯ ПОСЛЕДНЕЙ ПЕРЕДАЧИ
MOV SPITX,SPITXMOT ;ПОМЕЩАЕТ СИМВОЛ В БУФЕР TX SPI
WAITTXENDSPI: MOV A,SPIINTSTAT ;ЖДЕТ ОКОНЧАНИЯ ПЕРЕДАЧИ
JNB ACC.0,WAITTXENDSPI
RET
;************************************************************************
;* ИМЯ ФАЙЛА: DELAY1MS.asm *
;* *
;* ОПИСАНИЕ:МНОЖЕСТВЕННАЯ ЗАДЕРЖКА ОКОЛО 1МС. *
;* ПАРАМЕТР СОДЕРЖИТ ЧИСЛО МИЛЛИСЕКУНД*
;* ДЛЯ ОЖИДАНИЯ*
;* *
;* ВХОДНОЙ ПАРАМЕТР: ACC = ЧИСЛО МИЛЛИСЕКУНД ДЛЯ ОЖИДАНИЯ*
;* *
;************************************************ ************************
;* DATE: July 6, 2001 *
;* VERSION: 2.0 *
;* *
;* AUTHOR(s): Francois Turgeon *
;* Goal Semiconductor inc. *
;* Montreal Quebec *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;* REVISIONS: 2.0 Adjusted for 16.257MHz Oscillator *
;* *
;************************************************************************
DELAY1MS: MOV CPTR,A ;СОХРАНИТЬ ACC = МНОЖЕСТВЕННАЯ ЗАДЕРЖКА В 1МС
MOV A,TMOD
ANL A,#0F0H ;ОЧИСТИТЬ БИТ TIMER0
ORL A,#01H ;TIMER0 = MODE 1, СИСТЕМНЫЕ СИНХРОИМПУЛЬСЫ
CONTROL BY TR0
MOV TMOD,A ;УСТАНОВКА НОВОЙ КОНФИГУРАЦИИ РЕГИСТРА TMOD
LOOPT01MS: CLR TR0 ;ОСТАНОВКА TIMER0
MOV TH0,#0FDH ;ИНИЦИАЛИЗАЦИЯ TIMER0
MOV TL0,#5EH ;= 1МС ПРИ 16.257МГц - 12 ПЕРИОДОВ
;ДЛЯ ЦИКЛА = 674 ПЕРИОДОВ ТАЙМЕРА
;ЗНАЧЕНИЕ ТАЙМЕРА = 65536 - 674
;= 63515 ПЕРИОДОВ (FD5Eh)
CLR TF0 ;ОЧИСТКА T0 ПО ПЕРЕПОЛНЕНИЮ
SETB TR0 ;ЗАПУСК ТАЙМЕРА
ACKWTOVRT0: JNB TF0,ACKWTOVRT0 ;ЖДАТЬ БИТА ПЕРЕПОЛНЕНИЯ
DJNZ CPTR,LOOPT01MS ;ЦИКЛ ПОКА ЧИСЛО ПЕРИОДОВ НЕ ИСЧЕРПАНО
RET
;************************************************************************
;* ИМЯ ФАЙЛА: DELAY1MS.asm *
;* *
;* ОПИСАНИЕ: МНОЖЕСТВЕННАЯ ЗАДЕРЖКА В 1МКС *
;* ЗАГРУЖАЕТ ВЕЛИЧИНУ ЗАГРУЗКИ В РЕГИСТР US *
;* US = (DELAY / 2) - 2 *
;* ЭТА ФУНКЦИЯ ОТКАЛИБРОВАНА ДЛЯ 16МГЦ *
;* *
;* ВХОДНОЙ ПАРАМЕТР: A = ЗАДЕРЖКА В МКС*
;* *
;******************************************* *****************************
;* DATE: August, 2001 *
;* VERSION: 1.0 *
;* *
;* AUTHOR(s): Francois Turgeon / Gilles Rust *
;* Goal Semiconductor inc. *
;* 1134 Ste-Catherine West Suite 900 *
;* Montreal Quebe c *
;* Canada, H3B -1H4 *
;* *
;* Tel: (514) 871 -2447 *
;* Fax: (514) 394 -0661 *
;* Web: www.goalsemi.com *
;* *
;************************************************************************
DELAYUS: MOV USWAIT,A
DELAYUS1: DJNZ USWAIT,DELAYUS1
RET
;***********************************************
;* LCD STRING DEFINITION FOR 20X2 CARACTER LCD *
;***********************************************
ORG 1000H
LCDMSG1: DB 'VERSA1',0
LCDMSG2: DB 'LCD INTERFACE. ',0
END