Основная программа организующая работу микроконтроллера. Подпрограмма обслуживания прерывания от таймера, страница 4

MOV R0, 03h     

MOV R1, 09h                      ; загрузка старшего байта в R5

START:  MOVX A, @R1                  ;

MOV R5, A                         ;

DEC R1                               ; загрузка младшего байта в А

MOVX A, @R1                  ;

MOV R4, A                         ;

DEC R1                               

SETB P1.5.                           ;Готовность передавать данные

MOV SCON, #52h              ; установка УАПП(режим 1, V=4800 бит/сек)

CLR ES                                 ;

MOV TO,#40h                      ;установка таймера в режим 1

MOV TH1, #FAh                 ; загрузка таймера 1

CLR ET1                                запрещение прерываний от таймер 1

SETB TR1                           ;запуск таймера.

SETB P1.5                           ;

SPOUT1:      JNB TI, SPOUT                  ; ожидание флага передачи

CLR TI                                 ;

MOV A, R5                         

MOV SBUF, A                    ; пересылка младшего байта среднего

SPOUT2:     JNB TI, SPOUT                   ;

CLR TI                                 ;

MOV A, R4                        

MOV SBUF, A                    ; пересылка старшего байта среднего

DJNZ R0 START

CLR RS0                              ; включение 0 банка регистров

RETI                                    ;

Подпрограмма вывода управляющих сигналов VD,E,R/W,RS, байта данных DB0...DB7 в порты РC,РA.

(VD – PC3, E – PC2, R/W - PC1, RS – PC0, DB0.. DB7 – PA)

WRT:     SETB P1.4            ; активизация PIO

CLR P1.3             ; 

MOV   A,R6   ;вывод в РC

MOVX  PC,A   ;управляющих сигналов

MOV   A,R7   ;вывод в РC                                                      

MOVX  PA,A   ;байта данных

MOV   A,R6   ;

ANL   A,#0BH ;сброс строба Е

MOVX  PC,A   ;

RET          ;

Подпрограмма вывода VD,E,R/W,RS, в порт РC, и чтения DB0...DB7 из РA

READ:  SETB P1.4            ; активизация PIO

CLR P1.3             ; 

MOV   A,R6   ;вывод в РC

MOVX  PC,A   ;управляющих сигналов

MOVD  A,PA   ;ввод из РA в R4

MOV   R4,A   ;байта данных

MOV   A,R6   ;

ANL   A,#0BH ;сброс строба Е

MOVX  PC,A   ;

RET          ;

Подпрограмма задержки на 5мс.

DELAY5:

MOV R3,#10h

C2:MOV R2,#FFh;

C1:DJNZ R2,C1;

DJNZ R3,C2;

RET;

Подпрограмма  ожидания готовности контроллера дисплея

(чтение и анализ флага BF)

BUSY: 

MOV   R6,#04H;У.с. «Чтение флага BF»

ACALL READ    ;(R/S=0,R/W=1,E=1)        

MOV A,R5     ;

JB3   BUSY   ;BF=0?

MOV A,R6     ;

ORL A,#02H   ;сброс

MOV R6,A     ;сигнала R/W в 0

RET          ;

Подпрограмма инициализации ЖКИ

INIT: 

MOV   R6,#06H;режим

MOV   R7,#30H;«Инструкция» (RS=0)

ACALL  WRT    ;трехкратная запись

ACALL  DELAY5   ;управляющего

ACALL  WRT    ;слова

ACALL  DELAY5   ;инициализации

ACALL  WRT    ;ЖКИ

MOV   R7,#38H;установка режима: 2-строчный

ACALL  WRT    ;режим,8 бит данных,

ACALL  BUSY   ;знакоместо 5х7 пикселей

MOV   R7,#08H;отключение дисплея

ACALL  WRT    ;

ACALL  BUSY   ;

MOV   R7,#01H;очистка всего дисплея

ACALL  WRT    ;и возвращение на

ACALL  BUSY   ;исходную позицию

MOV   R7,#06H;установка режима:

ACALL  WRT    ;автоинкремент адреса,

ACALL  BUSY   ;запрет сдвига экранного ОЗУ

MOV   R7,#0FH;включение дисплея

ACALL  WRT    ;

ACALL  BUSY   ;

MOV   R7,#06H;включение мигающего

ACALL  WRT    ;курсора

ACALL  BUSY   ;

RET          ;

Подпрограмма очистки экрана ЖКИ

CLEAR:

MOV   R6,#06H;режим «Инструкция» (RS=0)

MOV   R7,#01H;У.с. «Очистка дисплея»

ACALL  WRT    ;

ACALL  BUSY   ;

RET          ;

Подпрограмма гашения курсора

EMPTY:

MOV   R6,#06H;режим «Инструкция» (RS=0)

MOV   R7,#0CH;У.с. «Включение/

ACALL  WRT    ;отключение дисплея

ACALL  BUSY   ;и управление

RET          ;режимами курсора»