第1页共6页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共6页21.2.3单片机与PC机通信模块的的程序设计sbitRE_DE=P1^0;unsignedchard_rightframe;//正确数据帧标志unsignedcharP_RS485;//RS485中断接收数据帧的位置unsignedcharidatad_addresscode;//数据帧的地址信息unsignedcharidatad_commandcode[2];//数据帧命令码unsignedcharidatad_databuff[i];//数据帧数据序列unsignedcharidatad_checkdata;//数据帧累加和校验码unsignedcharidatad_end;//数据帧结束符unsignedcharidatad_syscheck;//中断接收程序计算所得到的累加和校验码sys_initial(){TMOD=0x21;//定时器1定义为方式2,定时器0定义为工作方式1PCON=0x00;//数据传输速率选择SCON=0x88;//串行口为方式2ES=1;//允许串行口中断PS=1;//设置串口中断优先级TL1=0xE6;TH1=0xE6;//置初值,对应于2400bit/s的波特率TR1=1;EA=1;//打开单片机中断允许}receive_isp(void)interrupt4using3{if(RI)//处理接收中断{RI=0;//清除中断标志if(P_RS485==0)//串口接收中断处于接收帧起始字节阶段{if(SBUF!==0x02)//是否为有效的帧起始字节{P_RS485=0;}else{P_RS485==1;//串口接收状态标志更新}}第2页共6页第1页共6页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共6页elseif(P_RS485==1){d_addresscode=SBUF;//保存接收的单片机地址信息P_RS485=2;d_syscheck=0x00;//准备进行数据和校验}elseif(P_RS485==2){for(i=0;i<2;i++){d_commandcode=SBUF;//保存命令码信息d_syscheck+=d_commandcode;//更新累加和校验信息}P_RS485=3;}elseif(P_RS485==3){for(i=0;i