您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页PIC单片机串口通讯程序

PIC单片机串口通讯程序

来源:飒榕旅游知识分享网
PIC单片机串口通讯程序

单片机串口通讯是一个常用的程序模块。PIC单片机是一款常用的单片机。在网上搜索到一个PIC单片机串口通讯程序。这个PIC单片机串口通讯程序站长没有验证,应该是正确的。假如大家有更好的PIC单片机串口通讯程序,请向我推荐。 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

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

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 ;数据发送完毕

CALL LED ;调用显示子程序,将发送的数据显示出来 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

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

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 ;程序完

PIC单片机双机同步通信

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

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

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

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

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 ;程序完

PIC单片机与PC机通过串口通信 1. PC机编程

PC采用Toubr C 进行编写。程序如下: #include

#define port 0x3f8 /*利用串口1进行通信*/

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

int ch[15]; main () {

int a; int i,j;

int b[6]={88,15,38,26,20,0}; char c; clrscr();

outportb(port+3,0x80); /*准备设置波特率*/

outportb(port,0x0C); /*波特率设置为9 600 bps*/ outportb(port+1,0x00);

outportb(port+3,0x03); /*8位数据位,奇偶检验,1位停止位*/ outportb(port+1,0x00); /*关中断*/

inportb(port+5); /*读一次线路状态寄存器,使其复位*/ {

printf(\"\\send data or receive data: (s or r?)\\n\\n\\n\"); c=getchar(); switch(c) {

case ’s’: case ’S’: {

while(!(inportb(port+5)&0x20)); /*发送保持器满则等待*/ outportb(port,0x01); /*否则发送数据01通知单片机准备接收*/ for(i=0;i<6;i++) /*共发送6个数据*/ {

a=b[i];

while(!(inportb(port+5)&0x20))

delay(100); /*发送保持器满,等待*/ outportb(port,a); /*发送a*/ printf(\"%d\\n\显示a*/

while(!(inport(port+5)&1)); /*接收单片机送回的数据*/ ch[i]=inport(port); /*保存*/ }

delay(10);

for(j=0;j<8;j++) /*显示接收的回送数据*/ printf(\"\\n%d\\n\getch(); break; }

case’r’: /*接收数据*/ case’R’: {

while(!(inportb(port+5)&0x20));

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

outportb(port,0x02); /*发送数据02通知单片机发送数据*/ for(j=0;j<9;j++) /*共接收9个数据*/ {

while(!(inportb(port+5)&1)); ch[j]=inportb(port); }

for(j=0;j<9;j++)

printf(\"\\n %d\\n\getch(); break; } } } }

2. 单片机编程

LIST P=16F876

#INCLUDE P16F876.INC CBLOCK 0X24 COUNT TEMP ENDC

ORG 0X0000 NOP

START GOTO MAIN ORG 0X020

MAIN MOVLW 0X30 ;将RAM单元初始化 MOVWF FSR

BCF STATUS,RP0 MOVLW 0X22 MOVWF COUNT

INTRAM MOVF COUNT,0 MOVWF INDF INCF COUNT,1 INCF FSR,1 BTFSS FSR,7 GOTO INTRAM

BANKSEL TXSTA ;波特率设置为9 600 bps MOVLW 0X19

MOVWF SPBRG ;异步高速方式 MOVLW 0X04 MOVWF TXSTA

BCF STATUS,RP0

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

MOVLW 0X80 ;串行口使能 MOVWF RCSTA MOVLW 0X30 MOVWF FSR

BSF RCSTA,CREN ;接收允许 BSF STATUS,RP0

BSF TXSTA,TXEN ;发送允许 BCF STATUS,RP0

WAIT BTFSS PIR1,RCIF ;接收PC机命令 GOTO WAIT

MOVF RCREG,0 MOVWF TEMP MOVWF INDF INCF FSR

DECFSZ TEMP ;接收到的数据为1,则接收 GOTO TXW ;否则发送数据 MOVLW 0X06 MOVWF TEMP

WAIT1 BTFSS PIR1,RCIF ;接收一个数据 GOTO WAIT1 MOVF RCREG,0 MOVWF COUNT MOVWF TXREG

LOOPTX BTFSS PIR1,TXIF ;将接收到的数据送回PC机 GOTO LOOPTX MOVF COUNT,0 MOVWF INDF INCF FSR DECFSZ TEMP GOTO WAIT1

GOTO OVER ;处理完毕

TXW MOVLW 0X09 ;向PC机发送9个数据 MOVWF TEMP MOVLW 0X30 MOVWF FSR

TXW0 MOVF INDF,0 MOVWF TXREG INCF FSR

TXW1 BTFSS PIR1,TXIF GOTO TXW1 DECFSZ TEMP GOTO TXW0

OVER BCF RCSTA,CREN ;通信任务完成,关接受和发送允许 BSF STATUS,RP0

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

BCF TXSTA,TXEN BCF STATUS,RP0

CALL LED ;调用显示子程序,将发送(或接收)的数据显示出来 END ;程序完

PDF 文件使用 \"pdfFactory Pro\" 试用版本创建 www.fineprint.cn

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务