单片机 双机同步通讯
1. 单片机 PIC1编程(主控发送)
LIST P=16F876
#INCLUDE P16F876.INC
CBLOCK 0X24 ;保存三个字节作为显现用
COUNT ;作计数器或暂存器用
ENDC
ORG 0X0000 ;程序复位进口
NOP
START GOTO MAIN
ORG 0X0100
MAIN MOVLW 0X30
MOVWF FSR ;以下将从30H单元开端的RAM内容初始化
MOVLW 0X30 ;将值30H赋给单元30H
MOVWF COUNT
INTRAM MOVF COUNT,0 ;将30H~7FH赋给单元30H~7FH
MOVWF INDF
INCF COUNT,1
INCF FSR,1
BTFSS COUNT,7
GOTO INTRAM
BSF STATUS,RP0 ;将SCI部件初始化
MOVLW 0X19 ;将传输的波特率设为约9600 bps
MOVWF SPBRG
MOVLW 0X94 ;挑选同步高速方法传输8位数据
MOVWF TXSTA
BCF STATUS,RP0
MOVLW 0X80 ;答应同步串行口作业
MOVWF RCSTA
BSF STATUS,RP0
BSF TRISC,7 ;将RC6、RC7设置为输入方法,隔绝与外接电路的衔接
BSF TRISC,6
BSF STATUS,RP0
MOVLW 0X30 ;将从30H单元开端的内容传送到PIC2
MOVWF FSR
MOVF INDF,0
MOVWF TXREG ;将待发送的数据写入发送缓冲器TXREG
BSF STATUS,RP0
BSF TXSTA,TXEN ;发送答应
BCF STATUS,RP0
TX1 BTFSS PIR1,TXIF ;等候上一个数据写完
GOTO TX1
INCF FSR ;预备发送下一个数据
MOVF INDF,0
MOVWF TXREG ;将新的数据写入TXREG
BTFSS FSR,7 ;判别一切30H~7FH单元的内容是否发送结束?
GOTO TX1 ;没有,则持续发送其它字节
TX2 BTFSS PIR1,TXIF ;等一切要求发送的数据现已发送完,再额定
GOTO TX2 ;写一个字节到TXREG,使最终一个数据可以顺畅发送
MOVWF TXREG
NOP ;延时几个微秒后,关发送答应
NOP
NOP
NOP
NOP
BSF STATUS,RP0
BCF TXSTA,TXEN
BCF STATUS,RP0
CALL LED ;调用显现子程序,将发送的数据显现出来
END ;程序完
2. 单片机 PIC2编程(从动接纳)
LIST P=16F876
#INCLUDE P16F876.INC
CBLOCK 0X24
COUNT
ENDC
ORG 0X0000
NOP
START GOTO MAIN
ORG 0X0100
MAIN BSF STATUS,RP0
MOVLW 0X10 ;挑选同步从动方法
MOVWF TXSTA
BCF STATUS,RP0
MOVLW 0X80 ;串行口使能
MOVWF RCSTA
BSF STATUS,RP0
BSF TRISC,7 ;关断与外部电路的联络
BSF TRISC,6
BCF STATUS,RP0
MOVLW 0X30 ;从30H单元开端寄存接纳的数据
MOVWF FSR
BSF RCSTA,CREN ;接纳答应
WAIT BTFSS PIR1,RCIF ;等候接纳
GOTO WAIT
MOVF RCREG,0 ;读取接纳到的数据
MOVWF INDF ;将接纳到的数据存入PIC2的RAM
INCF FSR
BTFSS FSR,7 ;一切的数据是否已接纳完?
GOTO WAIT ;没有,持续接纳其它字节
NOP ;延时数微秒后,清接纳答应位
NOP
NOP
NOP
BCF RCSTA,RCEN
CALL LED ;调用显现子程序,将接受到的数据显现出来
END ;程序完