PIC单片机通讯例程.docx

上传人:b****6 文档编号:4522477 上传时间:2022-12-01 格式:DOCX 页数:12 大小:16.77KB
下载 相关 举报
PIC单片机通讯例程.docx_第1页
第1页 / 共12页
PIC单片机通讯例程.docx_第2页
第2页 / 共12页
PIC单片机通讯例程.docx_第3页
第3页 / 共12页
PIC单片机通讯例程.docx_第4页
第4页 / 共12页
PIC单片机通讯例程.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

PIC单片机通讯例程.docx

《PIC单片机通讯例程.docx》由会员分享,可在线阅读,更多相关《PIC单片机通讯例程.docx(12页珍藏版)》请在冰豆网上搜索。

PIC单片机通讯例程.docx

PIC单片机通讯例程

1.单片机PIC1编程(发送部分)

LISTP=16F877

#INCLUDEP16F876.INCCBLOCK0X24;保留三个字节作为显示用

COUNT;作计数器或暂存器用

ENDC

ORG0X0000;程序复位入口

NOP

START

GOTOMAIN

ORG0X20

MAIN

MOVLW0X30;以下将RAM内容初始化

MOVWFFSR;从30H单元开始

MOVLW0X30;将值30H赋给单元30H

MOVWFCOUNT

INTRAM

MOVFCOUNT,0;将30H~7FH赋给单元30H~7FH

MOVWFINDF

INCFCOUNT,1

INCFFSR,1

BTFSSCOUNT,7

GOTOINTRAM

BSFSTATUS,RP0;将SCI部件初始化

MOVLW0X19;将传输的波特率设为约9600bps

MOVWFSPBRG

MOVLW0X04;选择异步高速方式传输8位数据

MOVWFTXSTA

BCFSTATUS,RP0

MOVLW0X80;允许同步串行口工作

MOVWFRCSTA

BSFSTATUS,RP0

BSFTRISC,7;将RC6、RC7设置为输入方式,断绝与外接电路的连接

BSFTRISC,6

BCFSTATUS,RP0

MOVLW0X30;30H作为同步字符发送

MOVWFFSR

MOVFINDF,0

MOVWFTXREG;将待发送的数据写入发送缓冲器

TXREG

BSFSTATUS,RP0

BSFTXSTA,TXEN;发送允许

BCFSTATUS,RP0

BSFRCSTA,CREN;接收数据允许

LOOPTX

BTFSSPIR1,RCIF;等待PIC2的响应字节

GOTOLOOPTX

MOVFRCREG,0;读响应字节,清RCIF

LOOPTX1

BTFSSPIR1,TXIF;发送下一字节

GOTOLOOPTX1

INCFFSR

MOVFINDF,0

MOVWFTXREG

BTFSSFSR,7;30H~7FH单元的内容是否发送完?

GOTOLOOPTX;没有,继续下一字节的发送

BSFSTATUS,RP0;如果是,则停止发送

BCFTXSTA,TXEN

BCFSTATUS,RP0;数据发送完毕

CALLLED;调用显示子程序,将发送的数据显示出来

END;程序完

2.单片机PIC2编程(接收部分)

LISTP=16F876

#INCLUDEP16F876.INCCBLOCK0X24

COUNT

ENDC

ORG0X0000

NOP

START

GOTOMAIN

MAIN

BSFSTATUS,RP0;初始化程序同发送子程序

MOVLW0X19;波特率设置与PIC1相同

MOVWFSPBRG

MOVLW0X04;异步高速传输

MOVWFTXSTA

BCFSTATUS,RP0

MOVLW0X80;串行口工作使能

MOVWFRCSTA

BSFSTATUS,RP0

BSFTRISC,7;与外接电路隔离

BSFTRISC,6

BCFSTATUS,RP0

MOVLW0X30;从30H单元开始存放发送来的数据

MOVWFFSR

BSFRCSTA,CREN;接收允许

BSFSTATUS,RP0

BSFTXSTA,TXEN;发送允许

BCFSTATUS,RP0

WAIT

BTFSSPIR1,RCIF;等待接收数据

GOTOWAIT

MOVFRCREG,0;读取数据

MOVWFINDF;将接收到的响应字节存入PIC2的RAM

INCFFSR

MOVWFTXREG;发送响应字节

LOOPTX

BTFSSPIR1,TXIF;等待写入完成

GOTOLOOPTX

BTFSSFSR,7;全部数据接收否?

GOTOWAIT1;没有,继续接收其它数据

BCFRCSTA,RCEN;接收完,则关断接收和发送数据允许

BSFSTATUS,RP0

BCFPIE1,TXEN

BCFSTATUS,RP0

CALLLED;调用显示子程序,将接受到的数据显示出来

END;程序完

单片机双机同步通信

1.单片机PIC1编程(主控发送)

LISTP=16F876

#INCLUDEP16F876.INCCBLOCK0X24;保留三个字节作为显示用

COUNT;作计数器或暂存器用

ENDC

ORG0X0000;程序复位入口

NOP

START

GOTOMAIN

ORG0X0100

MAIN

MOVLW0X30

MOVWFFSR;以下将从30H单元开始的RAM内容初始化

MOVLW0X30;将值30H赋给单元30H

MOVWFCOUNT

INTRAM

MOVFCOUNT,0;将30H~7FH赋给单元30H~7FH

MOVWFINDF

INCFCOUNT,1

INCFFSR,1

BTFSSCOUNT,7

GOTOINTRAM

BSFSTATUS,RP0;将SCI部件初始化

MOVLW0X19;将传输的波特率设为约9600bps

MOVWFSPBRG

MOVLW0X94;选择同步高速方式传输8位数据

MOVWFTXSTA

BCFSTATUS,RP0

MOVLW0X80;允许同步串行口工作

MOVWFRCSTA

BSFSTATUS,RP0

BSFTRISC,7;将RC6、RC7设置为输入方式,断绝与外接电路的连接

BSFTRISC,6

BSFSTATUS,RP0

MOVLW0X30;将从30H单元开始的内容传送到PIC2

MOVWFFSR

MOVFINDF,0

MOVWFTXREG;将待发送的数据写入发送缓冲器

TXREG

BSFSTATUS,RP0

BSFTXSTA,TXEN;发送允许

BCFSTATUS,RP0

TX1

BTFSSPIR1,TXIF;等待上一个数据写完

GOTOTX1

INCFFSR;准备发送下一个数据

MOVFINDF,0

MOVWFTXREG;将新的数据写入TXREG

BTFSSFSR,7;判断所有30H~7FH单元的内容是否发送完毕?

GOTOTX1;没有,则继续发送其它字节

TX2

BTFSSPIR1,TXIF;等所有要求发送的数据已经发送完,再额外

GOTOTX2;写一个字节到TXREG,使最后一个数据能够顺利发送

MOVWFTXREG

NOP;延时几个微秒后,关发送允许

NOP

NOP

NOP

NOP

BSFSTATUS,RP0

BCFTXSTA,TXEN

BCFSTATUS,RP0

CALLLED;调用显示子程序,将发送的数据显示出来

END;程序完

2.单片机PIC2编程(从动接收)

LISTP=16F876

#INCLUDEP16F876.INCCBLOCK0X24

COUNT

ENDC

ORG0X0000

NOP

START

GOTOMAIN

ORG0X0100

MAIN

BSFSTATUS,RP0

MOVLW0X10;选择同步从动方式

MOVWFTXSTA

BCFSTATUS,RP0

MOVLW0X80;串行口使能

MOVWFRCSTA

BSFSTATUS,RP0

BSFTRISC,7;关断与外部电路的联系

BSFTRISC,6

BCFSTATUS,RP0

MOVLW0X30;从30H单元开始存放接收的数据

MOVWFFSR

BSFRCSTA,CREN;接收允许

WAIT

BTFSSPIR1,RCIF;等待接收

GOTOWAIT

MOVFRCREG,0;读取接收到的数据

MOVWFINDF;将接收到的数据存入PIC2的RAM

INCFFSR

BTFSSFSR,7;所有的数据是否已接收完?

GOTOWAIT;没有,继续接收其它字节

NOP;延时数微秒后,清接收允许位

NOP

NOP

NOP

BCFRCSTA,RCEN

CALLLED;调用显示子程序,将接受到的数据显示出来

END;程序完

单片机与PC机通信

1.PC机编程PC采用ToubrC进行编写。

程序如下:

#include

#defineport0x3f8/*利用串口1进行通信*/

intch[15];

main()

{

inta;inti,j;intb[6]={88,15,38,26,20,0};

charc;

clrscr();

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

outportb(port,0x0C);/*波特率设置为9600bps*/

outportb(port+1,0x00);

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

outportb(port+1,0x00);/*关中断*/

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

{

printf("\t\tsenddataorreceivedata:

(sorr?

)\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);/*显示a*/

while(!

(inport(port+5)&1));/*接收单片机送回的数据*/

ch[i]=inport(port);/*保存*/

}

delay(10);

for(j=0;j<8;j++)/*显示接收的回送数据*/

printf("\n%d\n",ch[j]);

getch();break;

}

case’r’:

/*接收数据*/

case’R’:

{

while(!

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

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",ch[j]);getch();break;

}

}

}

}

2.单片机编程

LISTP=16F876

#INCLUDEP16F876.INCCBLOCK0X24

COUNTTEMP

ENDC

ORG0X0000

NOP

START

GOTOMAIN

ORG0X020

MAIN

MOVLW0X30;将RAM单元初始化

MOVWFFSR

BCFSTATUS,RP0

MOVLW0X22

MOVWFCOUNT

INTRAM

MOVFCOUNT,0

MOVWFINDF

INCFCOUNT,1

INCFFSR,1

BTFSSFSR,7

GOTOINTRAM

BANKSELTXSTA;波特率设置为9600bps

MOVLW0X19

MOVWFSPBRG;异步高速方式

MOVLW0X04

MOVWFTXSTA

BCFSTATUS,RP0

MOVLW0X80;串行口使能

MOVWFRCSTA

MOVLW0X30

MOVWFFSR

BSFRCSTA,CREN;接收允许

BSFSTATUS,RP0

BSFTXSTA,TXEN;发送允许

BCFSTATUS,RP0

WAIT

BTFSSPIR1,RCIF;接收PC机命令

GOTOWAIT

MOVFRCREG,0

MOVWFTEMP

MOVWFINDF

INCFFSR

DECFSZTEMP;接收到的数据为1,则接收

GOTOTXW;否则发送数据

MOVLW0X06

MOVWFTEMP

WAIT1

BTFSSPIR1,RCIF;接收一个数据

GOTOWAIT1

MOVFRCREG,0

MOVWFCOUNT

MOVWFTXREG

LOOPTX

BTFSSPIR1,TXIF;将接收到的数据送回PC机

GOTOLOOPTX

MOVFCOUNT,0

MOVWFINDF

INCFFSR

DECFSZTEMP

GOTOWAIT1

GOTOOVER;处理完毕

TXW

MOVLW0X09;向PC机发送9个数据

MOVWFTEMP

MOVLW0X30

MOVWFFSR

TXW0

MOVFINDF,0

MOVWFTXREG

INCFFSR

TXW1

BTFSSPIR1,TXIF

GOTOTXW1

DECFSZTEMP

GOTOTXW0

OVER

BCFRCSTA,CREN;通信任务完成,关接受和发送允许

BSFSTATUS,RP0

BCFTXSTA,TXEN

BCFSTATUS,RP0

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

END;程序完

.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1