;; TWI接続の16x2液晶表示パネルに文字を表示させる ;; ;; ;*************************************************************** ;*  デバイスの定義ファイルのインクルード * ;*************************************************************** ; .include "m88def.inc" ; ;*************************************************************** ;*  シンボルをレジスターにシンボル名を定義 * ;*************************************************************** ; .def temp =r16 ;テンポラリ .def cnt1 =r17 ;ディレイルーチンで使用する変数 .def cnt2 =r18 .def cnt3 =r19 .def CTRL_data =r20 .def TWI_data =r21 ; .equ SLA =0b01111100 ;LCD I2C address $7C .equ SLA_W =SLA .equ SLA_R =0b01111101 ;SLA | 0b00000001 .equ Inst_ctrl = 0b00000000 .equ Data_ctrl = 0b01000000 ; ; ;*************************************************************** ;* ベクトルエリア * ;*************************************************************** .cseg rjmp reset ; reset vector reti ; INT0 vector reti ; INT1 vector reti ; PCINT0 reti ; PCINT1 reti ; PCINT2 reti ; WDT reti ; Timer2 COMPA reti ; Timer2 COMPB reti ; Timer2 overflow reti ; Timer1 capture reti ; Timer1 COMPA reti ; Timer1 COMPB reti ; Timer1 overflow reti ; Timer0 COMPA reti ; Timer0 COMPB reti ; Timer0 overflow reti ; SPI STC reti ; USART/Rx complete reti ; USART/ Data register empty reti ; USART/Tx complete reti ; ADC reti ; EEPROM EE_RDY reti ; Analog comparator reti ; TWI reti ; SPM_RDY ; ; ;*************************************************************** ;* リセットルーチン             * ;*************************************************************** reset: ldi temp,high(RAMEND) out SPH,temp ; set stuck pointer ldi temp,low(RAMEND) out SPL,temp ; set stuck pointer ; ldi temp, 0b11111111 out DDRB, temp out PORTB, temp ;***************************************** ;TWI 初期化 ; まず,40ms 待つ ; ldi cnt1, 40 ; 40ms delay rcall delay ; ; SCL周波数 100kHz ; ldi temp, 32 ;8000000/(16+2*1*32) sts TWBR, temp ldi temp, 0 sts TWSR, temp ldi temp, (1<