Skip to content

Instantly share code, notes, and snippets.

@ha2zakura

ha2zakura/main.asm

Created Mar 12, 2018
Embed
What would you like to do?
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