Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

PIC16F883その2

$
0
0
前回と同じ回路で、スイッチを押すと1秒ごとにLEDが点滅するプログラムです。
まず、100usのルーチンを作り、それを利用して1sのルーチンを作ります。
これらのタイマールーチンは、様々な場面で活用することができます。
 
CONFIGとSETUPは同じです。
レジスタは、20hから確保します。
 
;----------------------
;レジスタ
;----------------------
     CBLOCK 020h
     CNT1s ;1sカウンタ
     CNT5ms ;5msカウンタ
     CNT100us ;100usカウンタ
     ENDC
 
MAINプログラムは、RB0に接続されたタクトスイッチを押すと1秒ごとにLEDがON・OFFします。
 
MAIN
     BTFSC PORTB,0    ;RB0=0(スイッチが押されたら)ならLED_BLINKへ
     GOTO MAIN    ;RB0=1ならMAINへ
LED_BLINK
     MOVLW 01h
     MOVWF PORTA   ;LED ON
     CALL wait1s    ;1秒待つ
     MOVLW 00h
     MOVWF PORTA   ;LED OFF
     CALL wait1s    ;1秒待つ
     GOTO MAIN
 
;==============================
; タイマールーチン
;============================== 
;--------------------
; 1s WAIT
;--------------------
wait1s
     MOVLW d'200'
     MOVWF CNT1s
wait1s_loop
     CALL wait5ms
     DECFSZ CNT1s,F
     GOTO wait1s_loop
     RETURN
;--------------------
; 5ms WAIT
;--------------------
wait5ms
     MOVLW d'50'
     MOVWF CNT5ms
 wait5ms_loop
     CALL wait100us
     DECFSZ CNT5ms,F
     GOTO wait5ms_loop
     RETURN
;--------------------
; 100us WAIT
;--------------------
 wait100us
  ;1サイクル(4クロック)0.5us
  ;100us=0.5us×200サイクル
      MOVLW d'65' ;1
      MOVWF CNT100us ;1
 wait100us_loop
      DECFSZ CNT100us,F ;1
      GOTO wait100us_loop ;2
      RETURN   ;2+1 

Viewing all articles
Browse latest Browse all 440

Trending Articles