BSF TRISC,7 ;与外接电路隔离
BSF TRISC,6
BCF STATUS,RP0
MOVLW 0X30 ;从30H单元开始存放发送来的数据
MOVWF FSR
BSF RCSTA,CREN ;接收允许
BSF STATUS,RP0
BSF TXSTA,TXEN ;发送允许
BCF STATUS,RP0
WAIT BTFSS PIR1,RCIF ;等待接收数据
GOTO WAIT
MOVF RCREG,0 ;读取数据
MOVWF INDF ;将接收到的响应字节存入PIC2的RAM
INCF FSR
MOVWF TXREG ;发送响应字节
LOOPTX BTFSS PIR1,TXIF ;等待写入完成
GOTO LOOPTX
BTFSS FSR,7 ;全部数据接收否?
GOTO WAIT1 ;没有,继续接收其它数据
BCF RCSTA,RCEN ;接收完,则关断接收和发送数据允许
BSF STATUS,RP0
BCF PIE1,TXEN
BCF STATUS,RP0
CALL LED ;调用显示子程序,将接受到的数据显示出来
END ;程序完
单片机双机同步通信
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 ;程序完