大きな面積の基板に実験ボードを作っとけばよかったが、小さ目にしてしまったために拡張性が悪い!
違う基板で、7sgLEDでポートBの信号を表示させようと
で、配線本数の少ないシリアル通信をやってみようと 送信側から受信側への一方通行です。
送信側 3本線なら楽でしょうが、あえて2本線にしてみました。受信プログラムが出来るかっ?ってなもんです。先行き不安
ポートBのデータを送ります。
ポートAの0bit目:クロック 1bit目:データ 2bit目:デバック用にトリガ信号
短いプログラムで出来ちゃいました
FFを送信したところ データ(上)の細く”0”に落ちてるのは不要です。デバック用です。8ビット目も一端”0”に落としてますがそれも不要でしょう
同様に違うデータで
送信は出来てるぽいです 笑
アセンブラ
;LBA.ASM
;なんちゃってシリアル送信
list p=16F84
INCLUDE "p16F84A.inc"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ORG 00h
;******
T1 EQU 0Ch
T2 EQU T1+1
T3 EQU T2+1
T4 EQU T3+1
TF EQU T4+1
M1 EQU TF+1
M2 EQU M1+1
M3 EQU M2+1
POP EQU M3+1
;******
BSF STATUS, RP0
; CLRF TRISA
MOVLW B'00000000'
MOVWF TRISA
; CLRF TRISB
MOVLW B'11111111'
MOVWF TRISB
BCF OPTION_REG,NOT_RBPU
BCF STATUS, RP0
;メイン
START
BSF PORTA,0
BSF PORTA,2 デバック用のトリガ信号
BCF PORTA,2 デバック用のトリガ信号
MOVF PORTB,W
MOVWF M1
MOVLW H'8'
MOVWF M2
START_DATA
CALL TIM2
START_BIT
BCF PORTA,1 無理くり一旦”0” 命令数が少し減る
BTFSC M1,0
BSF PORTA,1
BCF PORTA,0
CALL TIM2
BSF PORTA,0
CALL TIM1
BCF PORTA,0
RRF M1,1
DECFSZ M2,F
GOTO START_BIT
CALL TIM2
BCF PORTA,1 デバック用 不要
GOTO START
;********************
;同期クロック
TIM1
MOVLW D'10'
MOVWF T1
TIMLOOP1
DECFSZ T1,F
GOTO TIMLOOP1
RETURN
;********************
;スタートタイマ
TIM2
MOVLW D'2'
MOVWF T2
TIMLOOP2
CALL TIM1
DECFSZ T2,F
GOTO TIMLOOP2
RETURN
;********************
END
なお、ポートBの出力信号を別基板の7sgLEDに表示したいだけなので、通信速度なんて適当で良いし、取りこぼしがLEDのちらつきにならなければいいやってものです。
そのため、通信品位なんて適当です。