■アッセンブラによるプログラム例 |
|
; <LEDランプコントロール>
;PIC12F675のピン配
;
;Pin1 Vdd ;電源;5V
;Pin2 GP5 ;out
;Pin3 GP4 ;out
;Pin4 GP3 ;未使用
;Pin5 GP2 ;out
;Pin6 GP1 ;LED ON/OFF
;Pin7 GP0 ;点灯/点滅
;Pin8 Vss ;GND
list p=12f675 ; 翻訳時にリストファイルを作ります
#include <p12f675.inc> ; 12F675用定義ファイルを読み込みます
errorlevel -302 ; 翻訳時に302エラーが出ないようにします
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
ORG 000H
GOTO INIT
FLAG EQU 20H
TIMER EQU 21H
KEISAN1 EQU 22H
KEISAN2 EQU 23H
; 初期化ルーチン
INIT:
BCF STATUS,RP0 ;BANK 0
CLRF GPIO
MOVLW B'00000111' ;コンパレータは使用しません
MOVWF CMCON ;
BSF STATUS,RP0 ;BANK 1
MOVLW B'00000011' ;INPUT GP0 GP1 / OUTPUT GP2 GP4 GP5
MOVWF TRISIO ;入出力の設定
MOVLW B'10000111' ;T0CSは'0'、GP2は出力ピン
MOVWF OPTION_REG ;OPTIONレジスタに書き込みます
CLRF ANSEL ;アナログ入力不使用
BCF STATUS,RP0 ;BANK 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF FLAG ;フラグ初期化
;FLAG
LEDON EQU 0 ;ONフラグ
GOTO MAIN1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN1 ;初期設定
CLRF GPIO ;LEDを消灯します
BCF STATUS,C ;Cフラグを0にします
MOVLW B'11111111'
MOVWF TIMER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN2
BTFSC GPIO,0 ;点灯/点滅_SW
GOTO MAIN3
BTFSC GPIO,1 ;ON/OFF_SW
GOTO MAIN2_5
CLRF GPIO ;LED消灯
NOP
MOVF TIMER,W
MOVWF KEISAN1
MAIN2_1
CALL TIM
GOTO MAIN2
MAIN2_5
BSF GPIO,4 ;LED点灯
BSF GPIO,5 ;LED点灯
BCF STATUS,C ;Cフラグを0にする
MAIN2_6
CALL TIM
GOTO MAIN2
MAIN3 ;点滅動作
BTFSC FLAG,LEDON
GOTO MAIN3_ON
GOTO MAIN3_OFF ;
MAIN3_ON
BSF GPIO,4 ;LED点灯
BSF GPIO,5 ;LED点灯
CALL TIM
BCF FLAG,LEDON
GOTO MAIN2
MAIN3_OFF
BCF GPIO,4 ;LED消灯
BCF GPIO,5 ;LED消灯
CALL TIM
BSF FLAG,LEDON
GOTO MAIN2
TIM
MOVF TIMER,W
MOVWF KEISAN1
TIM1
MOVF TIMER,W
MOVWF KEISAN2
TIM2
NOP
NOP
NOP
DECFSZ KEISAN2,F
GOTO TIM2
DECFSZ KEISAN1,F
GOTO TIM1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END |
|