list p=
16F876a
#include ‹p16F876a.inc›
__CONFIG 0x3732
;********************************************
; Определение переменных *
;********************************************
RBASE equ 20h
cblock RBASE
Bait
NumH
NumL
Temp2
Temp1
Temp
Ones
Tens
Hund
Ct1
WaitMS
endc
;********************************************
; Определение имен констант *
;********************************************
#DEFINE DC PORTB, 0 ;выход "режим" на ЖКИ "0" команды,"1" данные
#DEFINE DIN PORTB, 1 ;выход "данных" на ЖКИ
#DEFINE RST PORTB, 2 ;выход "сброс" на ЖКИ активн. "0"
#DEFINE CLK PORTB, 4 ;выход "синхронизация" на ЖКИ
#DEFINE Bank1 bsf STATUS,RP0
#DEFINE Bank0 bcf STATUS,RP0
;********************************************
; Определение макросов *
;********************************************
mov MACRO DEST1,SOURCE1 ; пересылка регистр-регистр
movf SOURCE1,W
movwf DEST1
endm
mvi MACRO DEST2,CONST2 ; пересылка константы в регистр
movlw CONST2
movwf DEST2
endm
ORG 0x0000
goto Start
ORG 0x0004 ; для будущих прерываний
retfie
D1 ; Пример вывода на LCD буквы D
;FE FE O6 O6 O6 0C 1C 38 F0 A0
FE
mvi Bait, 0xFE
call LCD
mvi Bait, 0xFE
call LCD
mvi Bait, 0x06
call LCD
mvi Bait, 0x06
call LCD
mvi Bait, 0x06
call LCD
mvi Bait, 0x0C
call LCD
mvi Bait, 0x1C
call LCD
mvi Bait, 0x38
call LCD
mvi Bait, 0xF0
call LCD
mvi Bait, 0xC0
call LCD
return
;************************************************* *********
; Передача байта в LCD
;************************************************* *********
LCD
mvi Temp,.8
L1
btfss Bait, .7
bcf DIN
btfsc Bait, .7
bsf DIN
call W1mS ; Для 4 МГц как бы не нужно делать задержку, но начинал с 20 МГц и пытался регулировать. Сейчас стоит 400 uSec
bsf CLK
call W1mS
bcf CLK
nop
nop
rlf Bait, f
decfsz Temp
goto L1
return
Start
; Инициализация портов
clrf PORTA
clrf PORTB
clrf PORTC
Bank1
mvi TRISA, h'FF' ;ПортA - вход
clrf TRISB ;ПортВ - выход
mvi TRISC, h'F1' ;mvi - макрос пересылки в TRISC 0xF1
; Инициализация ШИМ
mvi PR2, h'7F' ; Период ШИМ
Bank0
mvi CCP1CON, h'0F' ; Режим ШИМ
mvi T2CON, h'04' ; Управление TMR2 (включен, предделитель=1)
clrf CCPR1H
mvi CCPR1L, h'10' ; Длительность импульса
bcf RST ; Сброс LCD
call W1mS ; Регулируемая задержка
bsf RST ;
call W1mS ;
mvi Bait, 0x21 ; Инициализация LCD
bcf DC ;
call LCD ;
mvi Bait, 0x13 ;
call LCD
mvi Bait, 0x04 ;
call LCD
mvi Bait, 0xB8 ;
call LCD
mvi Bait, 0x20 ;
call LCD
mvi Bait, 0x0C ;
call LCD
bsf DC ;
Io
mvi Temp2, .2 ; Очистка экрана
I1 mvi Temp1,.255 ;
I2 clrf Bait
call LCD
decfsz Temp1
goto I2
decfsz Temp2
goto I1
bcf DC
mvi Bait, 0x87 ; Установка курсора
call LCD
mvi Bait, 0x40
call LCD ;
bsf DC
call D1 ; Вывод буквы "D"
bcf DC
mvi Bait, 0x87 ; Установка курсора
call LCD
mvi Bait, 0x41
call LCD
bsf DC
call D2
bcf DC
mvi Bait, 0x95
call CD
mvi Bait, 0x41
call LCD
bsf DC
call MM
call GG
call AND
call ZZ
call GG
bcf DC
mvi Bait, 0x95
call LCD
mvi Bait, 0x43
call LCD
bsf DC
call LL
call oo
call aa
call dd
call ii
call nn
call gg
call точка
call точка
call точка
bcf DC
mvi Bait, 0x9D
call LCD
mvi Bait, 0x45
call LCD
bsf DC
call vv
call ee
call rr
bcf DC
mvi Bait, 0xB2
call LCD
mvi Bait, 0x45
call LCD
bsf DC
call C11
call точка
call C22
s1
nop
goto s1
end