いずれ消え行く無駄な情報を、密やかに発信する装置。つまり日記。
PIC16F886とシフトレジスタ74HC595を使ってバイナリカウンタを作ってみました。シフトレジスタを使うことでマイコンから3本の信号線だけで無限にIOを拡張できるというのはかなり強力な武器になります。もっともシフトレジスタは数十ナノ秒単位でしか動かないので限界はありますが・・・。8PINなどのPICを使う際には重宝しそうです。
ただ、ひとつ問題があるとすれば値段が高いことです。下手をしなくてもPICの方が安かったりします。どこかで安く売ってないかなぁ。
LIST P=PIC16F886 INCLUDE P16F886.INC __CONFIG _CONFIG1, _CP_OFF & _CPD_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _INTOSCIO DELAY1_COUNT EQU 20H SHIFT_COUNT EQU 21H LED_DATA EQU 22H COUNT EQU 23H org 000h goto INITIALIZE INITIALIZE banksel OSCCON movlw B'01101100' movwf OSCCON banksel PORTA clrf PORTA banksel ANSEL clrf ANSEL banksel TRISA movlw 0h movwf TRISA banksel OPTION_REG bcf OPTION_REG,T0CS bcf OPTION_REG,PSA banksel PORTA call DELAY1 call LED_CLEAR clrf LED_DATA0 clrf COUNT MAIN_LOOP bcf STATUS,Z incf COUNT,0 btfsc STATUS,Z movlw 0h movwf COUNT movwf LED_DATA0 movlw D'8' ;8回繰り返すようにシフト数のカウント値をセット movwf SHIFT_COUNT COUNT_8 bcf PORTA, 0 ;LED_DATA0の0ビット目の値が1ならば、PORTA,0を1にする btfsc LED_DATA0, 0 ;0ならば、PORTA,0を0にする bsf PORTA, 0 bcf STATUS,C rrf LED_DATA0, 1 ;右シフト bcf PORTA,2 ;シフトレジスタを1クロック進める bsf PORTA,2 bcf PORTA,2 decfsz SHIFT_COUNT, 1 goto COUNT_8 bsf PORTA,1 ;ラッチレジスタを1クロック進める bcf PORTA,1 bsf PORTA,1 call DELAY1 goto MAIN_LOOP DELAY1 movlw 0007h movwf DELAY1_COUNT REP2 movlw 0000h bcf INTCON,T0IF movwf TMR0 REP1 btfss INTCON,T0IF goto REP1 decfsz DELAY1_COUNT,F goto REP2 return LED_CLEAR movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA movlw B'0000100' movwf PORTA movlw B'0000000' movwf PORTA return END