5篇485通信的应用有PIC源程序与协议说明.docx
- 文档编号:12673151
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:33
- 大小:146.68KB
5篇485通信的应用有PIC源程序与协议说明.docx
《5篇485通信的应用有PIC源程序与协议说明.docx》由会员分享,可在线阅读,更多相关《5篇485通信的应用有PIC源程序与协议说明.docx(33页珍藏版)》请在冰豆网上搜索。
5篇485通信的应用有PIC源程序与协议说明
总共有5篇文章,都是个人精心积累的,希望互相学习
1、PIC单片机485通信发送--——源代码
2、PIC单片机485通信接收——源代码
3、串行口RS485通讯协议
4、利用MAX485实现PC机与单片机之间的串行通讯
5、同步和异步的区别集锦
#include
#defineucharunsignedchar
#defineuintunsignedint
__CONFIG(WDTDIS&LVPDIS&HS&PWRTDIS&BORDIS);//设置配置位
//WDTDIS:
disablewatchdogtimer
//LVPDIS:
lowvoltageprogrammingdisabled
//HS:
highspeedcrystal/resonator
//PWRTDIS:
disablepoweruptimer
//BORDIS:
disablebrownoutreset
#defineRERC3//接收允许控制位
#defineDERC2//发送允许控制位
//----------------定义全局变量
constuchardisp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳数码管段码表
ucharrece_data;
uintcounter;
ucharsec;
/**************************函数声明******************************************/
voidUSART_Init(void);
voidDelayUS(uchardelay);
voidDelayMS(uintdelay);
voidDisplay(ucharchosebit,uchardata);
voidinit();
//-----------------------------------------------------------------
voidDelayUS(uchardelay)
{
while(--delay);
}
//-------------------------
voidDelayMS(uintdelay)
{
uinti;
for(;delay>0;delay--)
for(i=0;i<453;i++)
;
}
//--------------------------------
voidUSART_Init(void)
{
SPBRG=77;//高速波特率960012MHzSPBRG=0x4D
//SPBRG=129;//高速波特率960020MHz
TXSTA=0x04;
//TXSTA:
CSRCTX9TXENSYNC--BRGHTRMTTX9D
//0000100
RCSTA=0x80;
//RCSTA:
SPENRX9SRENCRENADDENFERROERRRX9D
//10000000
RCIE=1;//开接收中断
TXEN=1;
CREN=1;//接收使能
TRISC6=1;//设置为输入状态
TRISC7=1;
//TXIE=1;//开发送中断
TRISC3=0;//设置为输出状态
TRISC2=0;
RE=0;
DE=0;
//PEIE=1;//开外设中断
//GIE=1;//开总中断
}
//-------------------------------------------
voidinit()
{
TRISD=0x00;//RD口为输出模式;
PORTD=0xFF;//灯全灭
//OPTION寄存器:
RBPUINTEDGT0CST0SEPSAPS2PS1PS0
//前两位定时器0未用,T0CS为定时器工作方式选择位,1为计数方式从T0CK1取脉冲,
//0为定时方式,选择内部时钟;T0SE为计数方式时边沿触发方式选择位;PSA为分频器
//分频选择位;0:
分频器分配给T0,1:
分配给看门狗WDT;PS2PS1PS0为分频比选择位;
//OPTION=0x08;//定时器0为定时方式,分频器分频给看门狗,而不分配给定时器0,
OPTION=0x01;//定时器0为定时方式,公频器分频给定时器0;分频为1:
4
TMR0=106;//定时器赋初值,定时200us12M且分频比为1:
4
INTCON=0xE0;//采用中断方式;开总中断及定时器0的中断,同时清T0IF;
//INTCON寄存器:
GIEPEIET0IEINTERBIET0IFINTFRBIF
//GIE总中断;1开全局总中断,0为关闭;PEIE外围中断位;1为允许;T0IE:
T0溢出中断
//允许位;1为允许溢出中断。
0为禁止;INTE:
外部中断允许位;1为上升沿触发中断,0为下降沿触发中断;
//RBIE:
RB7--RB4电平变化中断允许位;1为允许PORTB电平变化中断;0为禁止;
//T0IF:
T0溢出中断标志位;INTF:
外部中断标志位;RBIF:
RB7--RB4电平发生变化标志位;
}
//------------------------------------------
voidinterruptSer(void)
{
if(T0IF)
{
T0IF=0;
TMR0=106;
counter++;
if(counter==5000)
{
counter=0;
sec++;
if(sec>99)
sec=0;
RE=1;//SN75176关闭接收
DE=1;//SN75176开启发送
TXREG=sec;
while(!
TRMT);
RE=0;//SN75176开启接收
DE=0;//SN75176关闭发送
}
}
if(RCIF==1)//有数据接收
rece_data=RCREG;//读取数据
}
//---------------------------------------
//-------------------------------------
voidDisplay(ucharchosebit,uchardata)
{
ADCON1=0x8E;//设置PORTA0为模拟输入,其他为IO口
TRISA&=0xE1;//设置PORTA1~PORTA4为输出模式
TRISD=0x00;//数据线配置为输出
PORTA=0xFF;
PORTA&=~(0x02< PORTD=data;//送字型 DelayUS(50);//延时 PORTD=0xFF;//关显示 } //============================================================== voidmain(void) { USART_Init(); init(); while (1) { Display(0,disp[rece_data/10]); Display(1,disp[rece_data%10]); Display(2,disp[sec/10]); Display(3,disp[sec%10]); } } 2、PIC单片机485通信接收——源代码 #include #include #include"stdio.h" #defineucharunsignedchar #defineuintunsignedint __CONFIG(WDTDIS&HS&PWRTDIS&BORDIS);//设置配置位 //WDTDIS: disablewatchdogtimer //LVPDIS: lowvoltageprogrammingdisabled //HS: highspeedcrystal/resonator //PWRTDIS: disablepoweruptimer //BORDIS: disablebrownoutreset #definePORTAIT(adr,bit)((unsigned)(&adr)*8+(bit))//绝对位操作指令; staticbitDI@(PORTAIT(PORTB,0); staticbitCK@(PORTAIT(PORTB,1); staticbitLA@(PORTAIT(PORTB,2); staticbitOE@(PORTAIT(PORTB,3); #defineRERC2//接收允许控制位 #defineDERC3//发送允许控制位 ucharredata; //--------------------------------------------------- voidUSART_Init(void); voidSEND_Byte(uchardat); voidSEND_DM114_DA(ucharDAT); voiddelay50us(ucharz); //------------------------------------------------- voiddelay50us(ucharz) { uchari,j; for(j=0;j for(i=0;i<6;i++) ; } //-------------------------------- voidSEND_Byte(uchardat) { if(dat==0) //DI=0; RB0=0; else DI=1; //RB0=1; } voidSEND_DM114_DA(ucharDAT) { uchari; OE=1; //RB3=1; LA=0; //RB2=0; for(i=0;i<8;i++) { SEND_Byte(DAT&0x80); DAT<<=1; CK=0; CK=1; //RB1=0; //RB1=1; } LA=1; OE=0; //RB2=1; //RB3=0; } //--------------------------------------------------------- //---------------------------------------------------------- voidUSART_Init(void) { SPBRG=77;//高速波特率960012MHzSPBRG=0x4D //SPBRG=129;//高速波特率960020MHz TXSTA=0x04; //TXSTA: CSRCTX9TXENSYNC--BRGHTRMTTX9D //0000100 RCSTA=0x80; //RCSTA: SPENRX9SRENCRENADDENFERROERRRX9D //10000000 RCIE=1;//开接收中断 TXEN=1; CREN=1;//接收使能 TRISC6=1;//设置为输入状态 TRISC7=1; //TXIE=1;//开发送中断 TRISC3=0;//设置为输出状态 TRISC2=0; RE=0;//SN75176开启接收 DE=0;//SN75176关闭发送 PEIE=1;//开外设中断 GIE=1;//开总中断 TRISB=0x00;//B口为输出 } //----------------------------------------------- voidinterruptcom(void) { if(RCIE&&RCIF) { redata=RCREG; RE=1;//SN75176关闭接收 DE=1;//SN75176开启发送 TXREG=redata; while(! TRMT); RE=0;//SN75176开启接收 DE=0;//SN75176关闭发送 SEND_DM114_DA(redata); } } //------------------------------------------------ voidmain(void) { uchari,j; USART_Init(); while (1) { //for(i=0;i<100;i++) //delay50us(60); //j++; //if(j>250) //j=0; //SEND_DM114_DA(j); } } 3、串行口RS485通讯协议 9.1通讯概述 本公司系列变频器向用户提供工业控制中通用的RS485通讯接口。 通讯协议采用MODBUS标准通讯协议,该变频器可以作为从机与具有相同通讯接口并采用相同通讯协议的上位机(如PLC控制器、PC机)通讯,实现对变频器的集中监控,另外用户也可以使用一台变频器作为主机,通过RS485接口连接数台本公司的变频器作为从机。 以实现变频器的多机联动。 通过该通讯口也可以接远控键盘。 实现用户对变频器的远程操作。 本变频器的MODBUS通讯协议支持两种传送方式: RTU方式和ASCII方式,用户可以根据情况选择其中的一种方式通讯。 下文是该变频器通讯协议的详细说明。 9.2通讯协议说明 9.2.1通讯组网方式 (1)变频器作为从机组网方式: 图9-1从机组网方式示意图 (2)多机联动组网方式: 主机HD1000 RS485 从机HD1000 从机HD1000 从机HD1000 从机HD1000 图9-2多机联动组网示意图 9.2.2通信协议方式 该变频器在RS485网络中既可以作为主机使用,也可以作为从机使用,作为主机使用时,可以控制其它本公司变频器,实现多级联动,作为从机时,PC机或PLC可以作为主机控制变频器工作。 具体通讯方式如下: (1)变频器为从机,主从式点对点通信。 主机使用广播地址发送命令时,从机不应答。 (2)变频器作为主机,使用广播地址发送命令到从机,从机不应答。 (3)用户可以通过用键盘或串行通信方式设置变频器的本机地址、波特率、数据格式。 (4)从机在最近一次对主机轮询的应答帧中上报当前故障信息。 9.2.3通讯接口方式 通讯为RS485接口,异步串行,半双工传输。 默认通讯协议方式采用ASCII方式。 默认数据格式为: 1位起始位,7位数据位,2位停止位。 默认速率为9600bps,通讯参数设置参见P3.09~P3.12功能码。 9.3ASCII通讯协议 字符结构: 10位字符框(ForASCII) (1-7-2格式,无校验) (1-7-1格式,奇校验) (1-7-1格式,偶校验) 11位字符框(ForRTU) (1-8-2格式,无校验) (1-8-1格式,奇校验) (1-8-1格式,偶校验) 通讯资料结构: ASCII模式 桢头 起始字符=“: ”(3AH) AddressHi 通讯地址: 8位地址由2个ASCII码组合 AddressLo FunctionHi 功能码: 8位地址由2个ASCII码组合 FunctionLo DATA(n-1) 资料内容: n*8位资料内容由2*n个ASCII码组合,高位在前,低位在后,n<=4,最大8个ASCII码 …………… DATA0 LRCCHKHi LRC校验码: 8位校验码由2个ASCII码组合。 LRCCHKLo ENDHi 结束字符: ENDHi=CR(0DH),ENDLo=CR(0AH) ENDLo RTU模式: START 保持无输入信号大于等于10ms Address 通讯地址: 8-bit二进制地址 Function 功能码: 8-bit二进制地址 DATA(n-1) 资料内容: N*8-bit资料,N<=8,最大8个字节 …………… DATA0 CRCCHKLow CRC校验码 CRCCHKHigh 16-bitCRC校验码由2个8-bit二进制组合 END 保持无出入信号大于等于10ms 通讯地址: 00H: 所有变频器广播(broadcast) 01H: 对01地址变频器通讯。 0FH: 对15地址变频器通讯。 10H: 对16地址变频器通讯。 以此类推……….,最大可到254(FEH)。 功能码(Function)与资料内容(DATA): 03H: 读出寄存器内容。 06H: 写入一笔资料到寄存器。 08H: 回路侦测。 功能码03H: 读出一个寄存器内容: 例如: 读出寄存器地址2104H内容(输出电流): ASCII模式: 询问信息字符串格式 回应信息字符串格式 桢头 “: ”----3AH 桢头 “: ”----3AH 地址 “0”----30H 地址 “0”----30H “1”----31H “1”----31H 功能码 “0”----30H 功能码 “0”----30H “3”----33H “3”----33H 内容 “2”----32H 内容 “2”----32H “1”----31H “1”----31H “0”----30H “0”----30H “4”----34H “4”----34H 2104H地址内容 “0”----30H “0”----30H “0”----30H “0”----30H LRCCHECK “D”----44H LRCCHECK “D”----44H “7”----37H “7”----37H END CR----0DH END CR----0DH LF----0AH LF----0AH RTU模式: 询问信息格式 回应信息格式 地址 01H 地址 01H 功能码 03H 功能码 03H 内容 21H 内容 21H 04H 04H 00H 00H CRCCHECKLow E8H CRCCHECKLow 0EH CRCCHECKHigh 4BH CRCCHECKHigh 37H 功能码06H: 写入一笔资料到寄存器。 例如: 对变频器地址01H,写P0.02=50.00HZ功能码。 ASCII模式: 询问信息字符串格式 回应信息字符串格式 桢头 “: ”----3AH 桢头 “: ”----3AH 地址 “0”----30H 地址 “0”----30H “1”----31H “1”----31H 功能码 “0”----30H 功能码 “0”----30H “6”----36H “6”----36H 内容 “0”----30H 内容 “0”----30H “0”----30H “0”----30H “0”----30H “0”----30H “2”----32H “2”----32H “1”----31H 2104H地址内容 “1”----31H “3”----33H “3”----33H “8”----38H “8”----38H “8”----38H “8”----38H LRCCHECK “5”----35H LRCCHECK “5”----35H “C”----43H “C”----43H END CR----0DH END CR----0DH LF----0AH LF----0AH RTU模式: 询问信息格式 回应信息格式 地址 00H 地址 01H 功能码 06H 功能码 06H 内容 00H 内容 00H 02H 02H 13H 13H 88H 88H CRCCHECKLow 25H CRCCHECKLow 25H CRCCHECKHigh 5CH CRCCHECKHigh 5CH 命令码: 08H通讯回路测试 此命令用来测试主控设备与变频器之间通讯是否正常。 变频器将收到的资料原封不动送给主控设备。 询问信息字符串格式 回应信息字符串格式 桢头 “: ”----3AH 桢头 “: ”----3AH 地址 “0”----30H 地址 “0”----30H “1”----31H “1”----31H 功能码 “0”----30H 功能码 “0”----30H “8”----38H “8”----38H 内容 “0”----30H 内容 “0”----30H “1”----31H “1”----31H “0”----30H “0”----30H “2”----32H “2”----32H “0”----30H 2104H地址内容 “0”----30H “3”----33H “3”----33H “0”----30H “0”----30H “4”----34H “4”----34H LRCCHECK “E”----45H LRCCHECK “E”----45H “D”----44H “D”----44H END CR----0DH END CR----0DH LF----0AH LF----0AH RTU模式: 询问信息格式 回应信息格式 地址 01H 地址 01H 功能码 08H 功能码 08H 内容 01H 内容 01H 02H 02H 03H 03H 04H 04H CRCCHECKLow 41H CRCCHECKLow 41H CRCCHECKHigh 04H CRCCHECKHigh 04H 校验码: ASCII模式:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 485 通信 应用 PIC 源程序 协议 说明