16F84A+SD1602H
; キャラクタLCD | |
; ha2zakura | |
list p=16F84A ; 使用するPICの種類の定義 | |
#include <p16F84A.inc> ; 設定ファイルの指定 | |
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC | |
; _CP_OFF プログラムコードプロテクト無効 | |
; _WDT_OFF ウォッチドドック・タイマ無効 | |
; _PWRTE_ON パワーアップタイム有効 | |
; _HS_OSC 外部クロック(4MHz-20MHz) | |
;***** 定数の定義 ** | |
TIM1 EQU 0x0C ; タイマー用 | |
TIM2 EQU 0x0D ; タイマー用 | |
ADR EQU 0x0E ; アドレスデータ | |
DAT EQU 0x0F ; 書き込みデータ | |
NP EQU 0x10 | |
;********************************************************************** | |
ORG 0x000 ; リセット | |
BSF STATUS, RP0 | |
CLRF TRISA ; 0 : 出力, 1 : 入力 | |
CLRF TRISB ; bit0 -> RA0(RB0) | |
BCF STATUS, RP0 | |
call TIMTIM ; SD1602Hが起動するまで待つ | |
call TIMTIM | |
call TIMTIM | |
goto MAIN ; MAINへ移動 | |
;********************************************************************** | |
; メイン | |
MAIN call STARTUP ; 初期設定 | |
movlw 02H+80H ; Set DDRAM address | |
movwf DAT ; (カーソル位置) | |
call SUB1 | |
call TIM | |
movlw 'H' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'e' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'l' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'l' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'o' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw ',' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'w' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'o' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'r' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'l' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'd' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw '!' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 01H+40H+80H | |
movwf DAT | |
call SUB1 | |
call TIM | |
movlw 'w' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'i' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 't' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'h' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw ' ' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'P' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'I' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'C' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw '1' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw '6' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'F' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw '8' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw '4' | |
movwf DAT | |
call SUB2 | |
call TIM | |
movlw 'A' | |
movwf DAT | |
call SUB2 | |
call TIM | |
LOOP goto LOOP | |
STARTUP movlw B'00111000' ; Function set | |
movwf DAT ; [2](0)5x7dot [3](1)2行 | |
call SUB1 | |
call TIM | |
movlw B'00111000' ; Function set | |
movwf DAT ; [2](0)5x7dot [3](1)2行 | |
call SUB1 | |
call TIM | |
movlw B'00111000' ; Function set | |
movwf DAT ; [2](0)5x7dot [3](1)2行 | |
call SUB1 | |
call TIMTIM | |
movlw B'00111000' ; Function set | |
movwf DAT ; [2](0)5x7dot [3](1)2行 | |
call SUB1 | |
call TIM | |
movlw B'00001100' ; Display ON/OFF | |
movwf DAT ; [0]ブリンク [1]ブロックカーソル | |
call SUB1 ; [2]ディスプレイ | |
call TIM | |
movlw B'00000001' ; Display clear | |
movwf DAT | |
call SUB1 | |
call TIMTIM | |
movlw B'00000110' ; Entry mode | |
movwf DAT ; [0]表示シフト [1](1)右 | |
call SUB1 | |
call TIMTIM | |
return | |
; 書き込み ; E RW RS Data | |
SUB1 movlw B'00000100' ; 1 0 0 | |
movwf PORTA | |
movf DAT, W ; 1 0 0 Data | |
movwf PORTB | |
movlw B'00000000' ; 0 0 0 Data | |
movwf PORTA ; Dataを書き込む | |
return | |
; RAM書き込み ; E RW RS Data | |
SUB2 movlw B'00000101' ; 1 0 1 | |
movwf PORTA | |
movf DAT, W ; 1 0 1 Data | |
movwf PORTB | |
movlw B'00000001' ; 0 0 1 Data | |
movwf PORTA ; Dataを書き込む | |
return | |
; タイマー | |
TIM movlw 0x0FF | |
movwf TIM1 | |
TIMLP nop | |
decfsz TIM1, F | |
goto TIMLP | |
return | |
TIMTIM movlw 0x066 | |
movwf TIM2 | |
TIMLP2 call TIM | |
decfsz TIM2, F | |
goto TIMLP2 | |
return | |
END | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment