; ; プログラム名 : メッセージ操作パネル ; ファイル名 : carpanel_ope.asm ; 作成日 : H19.11.23 ; .include "m88def.inc" ;***************************** ; 汎用レジスタ定義 ;***************************** .def R_TEMP0 = R2 .def STACK = R16 .def R_TEMP1 = R17 .def R_TEMP2 = R18 .def R_TEMP4 = R19 .def R_TEMP3 = R20 .def R_TEMP5 = R21 ; 7セグLED表示値 .def R_FLAG1 = R22 ; 割込状態他 .def R_TMR0 = R23 ; タイマ0カウント領域(10mS単位) ;---------------------------------------- ; EQU定義 ;---------------------------------------- ;---- R_FLAG1 ----(割込状態他) .EQU B_IOVF0 = 0 ;タイマ0オーバーフロー ;---- 定数 ---------------------- .EQU HYOJI_0 = 0b01000000 ;表示値0 .EQU HYOJI_1 = 0b01111001 ;表示値1 .EQU HYOJI_2 = 0b00100100 ;表示値2 .EQU HYOJI_3 = 0b00110000 ;表示値3 .EQU HYOJI_4 = 0b00011001 ;表示値4 .EQU HYOJI_5 = 0b00010010 ;表示値5 .EQU HYOJI_6 = 0b00000010 ;表示値6 .EQU HYOJI_7 = 0b01011000 ;表示値7 .EQU HYOJI_8 = 0b00000000 ;表示値8 .EQU HYOJI_9 = 0b00010000 ;表示値9 ;---------------------------------------- ; 割り込みベクタ定義 ;---------------------------------------- .CSEG ;コードセグメント RJMP MAIN ;リセット .ORG $0010 RJMP IOVF0 ;タイマ0 ;******************************************************************************* ; 割込みルーチン ;******************************************************************************* ;*************************************** ; タイマ0 割り込みルーチン(10mS単位) ;*************************************** IOVF0: IN STACK,SREG ;PUSH SREG LDI R_TEMP1, 0x00 ; 内部クロックストップ OUT TCCR0B, R_TEMP1 DEC R_TMR0 BRNE IOVF0_1 SBR R_FLAG1,(1<<B_IOVF0) LDS R_TEMP1,TIMSK0 CBR R_TEMP1,(1<<TOIE0) STS TIMSK0,R_TEMP1 IOVF0_1: LDI R_TEMP1, 0x64 ;割込時間10mSを再セット OUT TCNT0, R_TEMP1 LDI R_TEMP1, 0x03 ; 内部クロックスタート(1/64を指定) OUT TCCR0B, R_TEMP1 IOVF0_9: OUT SREG,STACK ;POP SREG RETI ;******************************************************************************* ; サブルーチン ;******************************************************************************* ;***************************** ; タイマ0 ;***************************** STMR0: CBR R_FLAG1,(1<<B_IOVF0) LDS R_TEMP1,TIMSK0 ;タイマ割込許可 SBR R_TEMP1,(1<<TOIE0) STS TIMSK0,R_TEMP1 RET ;***************************** ; メッセージ表示 実行 ;***************************** HYOJI: ;---- メッセージ選択スイッチ読込結果 ---------- CPI R_TEMP3,0x0F ;メッセージ番号0 BREQ HYOJI10 CPI R_TEMP3,0x0E ;メッセージ番号1 BREQ HYOJI20 CPI R_TEMP3,0x0D ;メッセージ番号2 BREQ HYOJI30 CPI R_TEMP3,0x0C ;メッセージ番号3 BREQ HYOJI40 CPI R_TEMP3,0x0B ;メッセージ番号4 BREQ HYOJI50 CPI R_TEMP3,0x0A ;メッセージ番号5 BREQ HYOJI60 CPI R_TEMP3,0x09 ;メッセージ番号6 BREQ HYOJI70 CPI R_TEMP3,0x08 ;メッセージ番号7 BREQ HYOJI80 CPI R_TEMP3,0x07 ;メッセージ番号8 BREQ HYOJI90 CPI R_TEMP3,0x06 ;メッセージ番号9 BREQ HYOJIA0 ;---- メッセージを7セグLEDへ ------------ HYOJI01: OUT PORTD,R_TEMP5 RET ;******** メッセージ番号0 ******** HYOJI10: LDI R_TEMP5,HYOJI_0 RJMP HYOJI01 ;******** メッセージ番号1 ******** HYOJI20: LDI R_TEMP5,HYOJI_1 RJMP HYOJI01 ;******** メッセージ番号2 ******** HYOJI30: LDI R_TEMP5,HYOJI_2 RJMP HYOJI01 ;******** メッセージ番号3 ******** HYOJI40: LDI R_TEMP5,HYOJI_3 RJMP HYOJI01 ;******** メッセージ番号4 ******** HYOJI50: LDI R_TEMP5,HYOJI_4 RJMP HYOJI01 ;******** メッセージ番号5 ******** HYOJI60: LDI R_TEMP5,HYOJI_5 RJMP HYOJI01 ;******** メッセージ番号6 ******** HYOJI70: LDI R_TEMP5,HYOJI_6 RJMP HYOJI01 ;******** メッセージ番号7 ******** HYOJI80: LDI R_TEMP5,HYOJI_7 RJMP HYOJI01 ;******** メッセージ番号8 ******** HYOJI90: LDI R_TEMP5,HYOJI_8 RJMP HYOJI01 ;******** メッセージ番号9 ******** HYOJIA0: LDI R_TEMP5,HYOJI_9 RJMP HYOJI01 ;***************************** ; メインルーチン(MAIN) ;***************************** MAIN: ;■■■■ 初期化ルーチン ■■■■ CLI ;割込み禁止 ;---- PORT 設定 ---- LDI R_TEMP1,0b11111111 LDI R_TEMP2,0b10000000 OUT DDRB,R_TEMP1 OUT PORTB,R_TEMP2 LDI R_TEMP1,0b11110000 LDI R_TEMP2,0b01001111 OUT DDRC,R_TEMP1 OUT PORTC,R_TEMP2 LDI R_TEMP1,0b11111111 LDI R_TEMP2,0b01111111 OUT DDRD,R_TEMP1 OUT PORTD,R_TEMP2 ;---- タイマ0=10ms(8bit timer) 設定 ---- ; 内部クロック 1/64を指定 LDI R_TEMP1, 0x03 OUT TCCR0B, R_TEMP1 ;---- フラグ 初期化 -------------------- LDI R_TEMP4, 0x00 ;---- レジスタ 初期化 ------------------ LDI R_FLAG1, 0x00 SEI ;割込み許可 MAIN01: ;---- メッセージ選択スイッチ読込み ---------- IN R_TEMP3,PINC ANDI R_TEMP3,0x0F ;不要ビットマスキング CP R_TEMP3,R_TEMP4 ;入力値変化 BREQ MAIN01 ;変化なし ;---- タイマー(0.1S)セット ---- LDI R_TEMP1, 0x64 ;割込時間10mS OUT TCNT0, R_TEMP1 LDI R_TMR0,0x0A ;0.1Sでフラグセット RCALL STMR0 MAIN02: ;---- タイムアウト判定 ---- SBRS R_FLAG1,B_IOVF0 ;タイマ0カウント完了判定 RJMP MAIN02 ;カウント中 ;---- メッセージ選択スイッチ再読込み -------- IN R_TEMP3,PINC ANDI R_TEMP3,0x0F ;不要ビットマスキング CP R_TEMP3,R_TEMP4 ;入力値変化 BREQ MAIN01 ;変化なし MOV R_TEMP4,R_TEMP3 ;---- 表示処理 実行 ------------------------ RCALL HYOJI RJMP MAIN01