Подключение символьного ЖК-модуля к микроконтроллеру 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
|