No.5690 作者:huhu_long 邮件:longxiao19851016@126.com ID:104473 登陆:1次 文章数:1篇 最后登陆IP: 最后登陆:2008/5/9 16:06:59 注册:2008/5/9 16:06:59 财富:100 发帖时间:2008/5/9 16:11:25 发贴者IP:222.247.53.29 标题:huhu_long:下位机程序求助~~~ 摘要:No.5690下位机程序求助~~~ 上位机程序自发自收都没问题,但和单片机通信时却没反应,希望大家帮小弟看看,不胜感激!!!!! P.S: 大家可以不管具体的发送接收内容,帮忙看下这样子是否能正确地进行接收和发送 程序如下: //****************************************************************** #include <reg51.h> #include <stdio.h> unsigned char Fun01_Len = 5; unsigned char Fun05_Len = 6; unsigned char *P1Addr; unsigned char SendBuf[5]; unsigned char RcvBuf[16]; void UART_Init() { SCON = 0x50; //选择工作方式一,并允许接收 //PCON = 0x80; //SMOD为1 REN = 1; RI = 0; TI = 0; } void timer_Init() { TMOD |= 0x20; //选择定时器一,方式二工作 TH1 = 0xfa; //24MHz 9600波特率 TH1 = 256 - 24M/(32*12*9600); TL1 = 0xfa; TR1 = 1; //开始计时 } void system_Init() { UART_Init(); timer_Init(); } void UART_Rcv() { unsigned char i = 0; while(!RI); //允许接收位为0,等待 RcvBuf[i++] = SBUF; //此时接收到的是设备地址 RI = 0; //硬件自动置1,所以要把它清0 if(RcvBuf[0] == 0x01) //如果从机地址吻合,则继续执行,否则什么也不干 { while(!RI); RcvBuf[i++] = SBUF; //此时接收到的是功能代码,包括(01、03、05、16) RI = 0; if(RcvBuf[1] == 0x01) //当前为读线圈命令,即读取P1口状态的命令 { while(i < Fun01_Len) { while(!RI); RcvBuf[i++] = SBUF; RI = 0; } //此时,RcvBuf里面装的是01功能的一个数据帧,接下来应该对这些数据进行分析 } else if(RcvBuf[1] == 0x05) //当前为更新P1口状态命令 { while(i < Fun05_Len) { while(!RI); RcvBuf[i++ ......
>>返回讨论的主题
|