トップページへ戻る       ものに関わってのメニューへ戻る


ココナッツバージョン1最終版

ここのところは新しいココナッツばかりを取り扱っているわけだけれど、昨年度まで使っていたココナッツも製品がいくつか手元にあるので、プログラムを最終的に自分が一番実用的なものに差し替えた。


まずは、調整。これはランドはがれで1つ点灯しなかったので、ジャンパーで修理した。


今回作ったのは、スイッチにより2つに切り替えられるうちの1つは1分タイマー×8。
計測しては調整を繰り返して正確に1分間で1つずつランプが消えていくようにした。
8分間で全部消える。

もう一つは、就寝用。一番下の子どもはまだ一緒に寝ているが、真っ暗だと寝ることができない。
そこで、本を読んでやる1時間分は全部が点灯し、その後1つだけランプをつけることにして、1時間ごとに時計回りにずれていくようにした。
これで、自分が夜中に見ても寝てから何時間経過したかわかるというわけ。最大8時間だが、さすがにこの頃はそこまで寝ることはない。

最終的なプログラム(ソース)は以下の通り。

;**********************************************************************
; ファイルの名前は名簿番号+アルファベットとし .asmを拡張子につける *
; Filename: 2000.asm *
; Date: 2009.3.2 *
; *
; 制作者氏名: 教科担任 *
; *
;**********************************************************************
; picに16f648Aを使用して、内部クロックで
; <プログラムの動作>
; スイッチ1
; 全部点灯、1時間で0番のみ点灯。その後1時間に1つずつLEDがシフトし、8時間後に消える
; スイッチ2
; 1分おきに上から下へ光が流れて数が減り、8分経つと消える
;   (一周回ってからスタートする)
;**********************************************************************
; ;から行の終わりまではラベルとして無視されるので説明書きを書くことができる。
;★★ここからは初期設定の宣言部分なので、変更しないこと

list p=PIC16F648A ; マイコンの種類
#include P16F648A.inc ; マイコン専用の言葉置き換えファイルを指定

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF
; Code Protect Watch Dog 電源投入直後リセット 発信回路外部セラミック

ORG 0x000 ; 電源投入時スタートアドレス
goto main ; 電源投入時開始命令

BITC EQU 20H ;ビットカウンタ
CNT1 EQU 21H ;タイマー用カウンタ1
CNT2 EQU 22H ;タイマー用カウンタ2
CNT3 EQU 23H ;タイマー用カウンタ3
CNT4 EQU 24H ;タイマー用カウンタ4
CNT5 EQU 25H ;タイマー用カウンタ5

main
BCF STATUS,RP0 ;バンク0に設定
BCF STATUS,RP1
movlw 07h ;Aポートのアナログ機能を禁止
movwf CMCON

BSF STATUS,RP0 ;バンク1に設定
BCF STATUS,RP1
clrf TRISB ;
movlw 0Ch ;Aポートの2と3を
movwf TRISA ;      入力に変更
bcf STATUS,RP0 ;バンク0に設定
clrf PORTA ;ポートAを初期化
clrf PORTB ;ポートBを初期化

;★★ここまで初期設定の宣言部分(変更しない)************************

;ここよりライトの点灯制御(プログラムを変更できる部分)

left ;左側にスイッチを倒したときの動作
BTFSC PORTA,2 ;スイッチの位置判断
goto right ;右側スイッチの記述へジャンプ
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
bsf PORTB,5
bsf PORTB,6
bsf PORTB,7
call T1HOURN
clrf PORTB
bsf PORTB,0
call T1HOURN
clrf PORTB
bsf PORTB,1
call T1HOURN
clrf PORTB
bsf PORTB,2
call T1HOURN
clrf PORTB
bsf PORTB,3
call T1HOURN
clrf PORTB
bsf PORTB,4
call T1HOURN
clrf PORTB
bsf PORTB,5
call T1HOURN
clrf PORTB
bsf PORTB,6
call T1HOURN
clrf PORTB
bsf PORTB,7
call T1HOURN
clrf PORTB
call flashfast
call flashfast
clrf PORTB
goto owari ;左側スイッチの終了

right ;右側にスイッチを倒したときの動作
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
bsf PORTB,5
bsf PORTB,6
bsf PORTB,7
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
bsf PORTB,5
bsf PORTB,6
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
bsf PORTB,5
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
bsf PORTB,4
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
bsf PORTB,2
call T1MINN
call flashfast
bsf PORTB,0
bsf PORTB,1
call T1MINN
call flashfast
bsf PORTB,0
call T1MINN
call flashfast
call flashfast
call flashfast
clrf PORTB
goto owari ;右側スイッチの終了



;ここからサブルーチン
;タイマーの準備0.4msec Timer Subroutine
TIM04
movlw 089h
movlw CNT1
TIMLP1
NOP
DECFSZ CNT1,F
GOTO TIMLP1
RETURN

;タイマーの準備 100msec Timer Subroutine
TIM100
MOVLW 089H
MOVWF CNT2
TIMLP2
CALL TIM04 ;
DECFSZ CNT2,F ;
GOTO TIMLP2
RETURN ;

;基本1 タイマー 時間経過1秒
T1SEC
MOVLW 0AH ;10回
MOVWF CNT3 ;100msec * 10
T1LP
CALL TIM100
DECFSZ CNT3,F ;このループは100msec
GOTO T1LP
RETURN


;基本2 タイマー 時間経過1分

T1MIN
movlw 3ch
movwf CNT4
T1MLP
call T1SEC
DECFSZ CNT4,F
goto T1MLP
return

;基本3 タイマー 時間経過1時間
T1HOUR
movlw 3ch
movwf CNT5
T1HLP
call T1MIN
DECFSZ CNT5,F
goto T1HLP
return





;基本4 上から下へ流れる(1秒)
flashfast
call TIM100
call TIM100
bsf PORTB,0
call TIM100
bcf PORTB,0
bsf PORTB,1
call TIM100
bcf PORTB,1
bsf PORTB,2
call TIM100
bcf PORTB,2
bsf PORTB,3
call TIM100
bcf PORTB,3
bsf PORTB,4
call TIM100
bcf PORTB,4
bsf PORTB,5
call TIM100
bcf PORTB,5
bsf PORTB,6
call TIM100
bcf PORTB,6
bsf PORTB,7
call TIM100
bcf PORTB,7
return

;基本5 上から下へ流れる(10秒)
flash
bsf PORTB,0
call TIM100
call T1SEC
bcf PORTB,0
bsf PORTB,1
call TIM100
call T1SEC
bcf PORTB,1
bsf PORTB,2
call TIM100
call T1SEC
bcf PORTB,2
bsf PORTB,3
call TIM100
call T1SEC
bcf PORTB,3
bsf PORTB,4
call TIM100
call T1SEC
bcf PORTB,4
bsf PORTB,5
call TIM100
call T1SEC
bcf PORTB,5
bsf PORTB,6
call TIM100
call TIM100
call T1SEC
bcf PORTB,6
bsf PORTB,7
call TIM100
call TIM100
call T1SEC
bcf PORTB,7
return
;自分で作ったサブルーチン
;   補正時間   programed by 有賀大
T1MINN
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
call T1SEC
return
T1HOURN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
call T1MIN
return
;友達が作ったサブルーチン
;   ○○○   programed by 2839駒ヶ岳花子


;おわり
owari
sleep
END ; プログラム終了宣言





トップページへ戻る       ものに関わってのメニューへ戻る