1. 单片机 PIC1编程(发送部分)
LIST P=16F877
#INCLUDE P16F876.INC
CBLOCK 0X24 ;保存三个字节作为显现用
COUNT ;作计数器或暂存器用
ENDC
ORG 0X0000 ;程序复位进口
NOP
START GOTO MAIN
ORG 0X20
MAIN MOVLW 0X30 ;以下将RAM内容初始化
MOVWF FSR ;从30H单元开端
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 0X04 ;挑选异步高速方法传输8位数据
MOVWF TXSTA
BCF STATUS,RP0
MOVLW 0X80 ;答应同步串行口作业
MOVWF RCSTA
BSF STATUS,RP0
BSF TRISC,7 ;将RC6、RC7设置为输入方法,隔绝与外接电路的衔接
BSF TRISC,6
BCF STATUS,RP0
MOVLW 0X30 ;30H作为同步字符发送
MOVWF FSR
MOVF INDF,0
MOVWF TXREG ;将待发送的数据写入发送缓冲器TXREG
BSF STATUS,RP0
BSF TXSTA,TXEN ;发送答应
BCF STATUS,RP0
BSF RCSTA,CREN ;接纳数据答应
LOOPTX BTFSS PIR1,RCIF ;等候PIC2的呼应字节
GOTO LOOPTX
MOVF RCREG,0 ;读呼应字节,清RCIF
LOOPTX1 BTFSS PIR1,TXIF ;发送下一字节
GOTO LOOPTX1
INCF FSR
MOVF INDF,0
MOVWF TXREG
BTFSS FSR,7 ;30H~7FH单元的内容是否发送完?
GOTO LOOPTX ;没有,持续下一字节的发送
BSF STATUS,RP0 ;如果是,则中止发送
BCF TXSTA,TXEN
BCF STATUS,RP0 ;数据发送结束
CALLLED;调用显现子程序,将发送的数据显现出来
END ;程序完
2. 单片机 PIC2编程(接纳部分)
LIST P=16F876
#INCLUDE P16F876.INC
CBLOCK 0X24
COUNT
ENDC
ORG 0X0000
NOP
START GOTO MAIN
MAIN BSF STATUS,RP0 ;初始化程序同发送子程序
MOVLW 0X19 ;波特率设置与PIC1相同
MOVWF SPBRG
MOVLW 0X04 ;异步高速传输
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 ;接纳答应
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 ;程序完