2014/11/14

16F88 アセンブリ言語開発例 - LED点滅回路

概要

PIC16F88とMPASM (アセンブリ言語)を使用した開発例として,LED点滅回路のプログラムを紹介します. 開発環境は下記のとおりです.

PIC PIC16F88-I/P
MPLAB X IDE MPLAB X IDE v2.15
MPASM MPASMWIN v5.57
PICkit 2 MPLAB X IDEを使用して書込み
回路
回路図

電源はPICkit 2から5.0Vを供給しています. 内蔵クロック 8MHzで動作させています. RB0には,電流制限用抵抗 330Ωを経由してLEDが接続されています.


回路図
回路部品

下表は使用部品表です.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F88-I/P 1 200円
LED1 LED 各社 各色 1 10円
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
R2 炭素皮膜抵抗 各社 1/4W 330Ω 1 1円
その他 リード線など 適量
プログラム
main.asm

下記はソースファイル「main.asm」です.参考になれば幸いです.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
        LIST        P=PIC16F88
        #INCLUDE    "P16F88.INC"
 
; CONFIG1
; __config 0xEF70
 __CONFIG _CONFIG1, _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB3 & _CP_OFF
; CONFIG2
; __config 0xFFFC
 __CONFIG _CONFIG2, _FCMEN_OFF & _IESO_OFF
 
CNT1    EQU         20H
CNT2    EQU         21H
CNT3    EQU         22H
 
        ORG         0
INIT
        BSF         STATUS,RP0  ; Bank1に切替え
        MOVLW       70H         ; 内蔵クロックの周波数を8MHzに設定
        MOVWF       OSCCON
        BCF         STATUS,RP0  ; Bank0に切替え
 
        CLRF        PORTA       ; PORTAを初期化
        CLRF        PORTB       ; PORTBを初期化
 
        BSF         STATUS,RP0  ; Bank1に切替え
        CLRF        TRISA       ; PORTAの入出力設定
        CLRF        TRISB       ; PORTBの入出力設定
 
        CLRF        ANSEL       ; A/D変換を無効化
        CLRF        ADCON1
        BCF         STATUS,RP0  ; Bank0に切替え
        CLRF        ADCON0
 
MAIN
        MOVLW       01H
        XORWF       PORTB,F     ; RB0をビット反転
        CALL        TIMER3      ; 500ミリ秒タイマサブルーチンの呼出し
        GOTO        MAIN        ; 無限ループ
 
TIMER1                          ; 0.5ミリ秒タイマサブルーチン
        MOVLW       D'250'
        MOVWF       CNT1
LOOP1
        NOP
        DECFSZ      CNT1,F
        GOTO        LOOP1
        RETURN
 
TIMER2                          ; 100ミリ秒タイマサブルーチン
        MOVLW       D'200'
        MOVWF       CNT2
LOOP2
        CALL        TIMER1
        DECFSZ      CNT2,F
        GOTO        LOOP2
        RETURN
 
TIMER3                          ; 500ミリ秒タイマサブルーチン
        MOVLW       D'5'
        MOVWF       CNT3
LOOP3
        CALL        TIMER2
        DECFSZ      CNT3,F
        GOTO        LOOP3
        RETURN
 
        END
更新履歴
2014/11/15 プログラムを修正(動作にほぼ影響なし)
  • サブルーチンTIMER2内のNOP命令を削除
  • サブルーチンTIMER3内のNOP命令を削除
2014/11/14 公開開始

0 件のコメント:

コメントを投稿