2012年10月04日
やっと10回になりましたがもう皆さん飽きたでしょ(笑)
朝の頭のスッキリしているうちにプログラム後悔じゃねえ公開です。
入力をちょっと工夫して「トランク」に荷物載ってるときは「オープンしない」ようにもなります。
まだまだ無駄な所も有るでしょうがま~エエでしょう。
ボケ防止には最高っす(爆)
--------------------------------------------------------------------
ご注意!
スペースを空けるのに「全角」使ってますので、このままコピーしてもエラーが出ます。
;-------------------------------------------------------------------------
; 初期設定
list P=pic16f84a
include "p16f84a.inc"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ORG 0 ;0番地から始めるよ~
GOTO MAIN ;MAINに飛んじまえ~
;-----------------------------------------------------------------------
; 割り込み処理
ORG 4 ;割り込みアドレス
CLRW
CLRF PORTB ;ポートBクリア(出力停止)
GOTO MAIN
;-----------------------------------------------------------------------
; メインプログラム
MAIN
BSF STATUS,RP0 ;ポートAを全て入力に設定
MOVWF TRISA
MOVLW H'01' ;ポートBは0(ゼロ)以外は出力に設定
MOVWF TRISB
MOVLW 90H ;INT割り込み許可
MOVWF INTCON
BCF STATUS,RP0 ;ポートBをクリア
CLRF PORTB
CLRW
;----------------------------------------------------------------------
; スイッチ入力チエック
LOOP
BTFSS PORTA,0 ;オープンSWがONか?
GOTO OPEN ;ONだったら OPENへ
BTFSS PORTA,1 ;クローズSWがONか?
GOTO CLOSE ;ONだったらCLOSEへ
BTFSS PORTA,2 ;ウインドウSWがONか?
GOTO WINDOW ;ONだったらWINDOWへ
GOTO LOOP
;-----------------------------------------------------------------------
; オープン動作
OPEN
MOVLW 010H ;ポートB4番に5V出力(リレーON)
MOVWF PORTB
MOVLW D'255' ;動作時間 '255'設定
MOVWF 0EH ;アドレス0EHに255を入力
CALL LOOP3 ;サブルーチンLOOP3を呼び出す
GOTO MAIN ;サブルーチンが終わったら MAIN に戻れ
;------------------------------------------------------------------------
; クローズ動作
CLOSE
MOVLW 020H ;ポートB5番に5V出力(リレーON)
MOVWF PORTB
MOVLW D'255' ;動作時間 '255'設定
MOVWF 0EH ;アドレス0EHに255を入力
CALL LOOP3 ;サブルーチンLOOP3を呼び出す
GOTO MAIN ;サブルーチンが終わったら MAIN に戻れ
;------------------------------------------------------------------------
; ウインドウ動作
WINDOW
MOVLW 040H ;ポートB6番に5V出力(リレーON
MOVWF PORTB
MOVLW D'120' ;動作時間 '120'設定
MOVWF 0EH ;アドレス0EHに120を入力
CALL LOOP3 ;サブルーチンLOOP3を呼び出す
GOTO MAIN ;サブルーチンが終わったら MAIN に戻れ
;-----------------------------------------------------------------------
; サブルーチン(タイマー)
TIMER1
MOVLW D'220'
MOVWF 0CH
LOOP1
NOP
DECFSZ 0CH,1
GOTO LOOP1
RETURN
TIMER2
MOVLW D'100' ;アドレス0DHに100を入力
MOVWF 0DH
LOOP2
NOP
CALL TIMER1 ;TIMER1を呼び出し(行く)
DECFSZ 0DH,1 ;アドレス0DH から1を引き算する
GOTO LOOP2 ;結果が"0"でなかったら LOOP2に戻ってまた引き算
RETURN ;引き算の結果が"0"になったら「CALL」した「次に(下)」へ戻る
LOOP3
NOP ;何もしない
CALL TIMER2 ;TIMER2を呼び出す(行く)
DECFSZ 0EH,1
GOTO LOOP3
RETURN
END END
Posted at 2012/10/04 07:43:01 | |
トラックバック(0) | 日記