OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5296|回复: 1

串口问题,上位机发一个字节,单片机收一个字节+1在发出去。我现在想改成收一组数组,将这组数组发送上位机。总是收不着。

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2012-11-30
在线时间
3 小时
发表于 2012-11-30 15:58:32 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
sbit com_p=P1^7;
unsigned char ser_flag=0;
sbit B_CS5045=P0^0;
unsigned char a;
volatile unsigned char data ModbusBuffer[2] _at_ 0x0010;
volatile unsigned char data   receCount=0;  //接收数据长度
void communication();
//---------------------------------------------------------------
//函数功能:看门狗
//---------------------------------------------------------------
void RstWDT()
{
B_CS5045=1;
_nop_();
_nop_();
B_CS5045=0;
_nop_();
_nop_();
B_CS5045=1;
}
void main()
{

  T2CON=0X80;
TH2=(65536-48675)/256;
TL2=(65536-48675)%256; 
RCAP2H=(65536-48675)/256;  
RCAP2L=(65536-48675)%256;  
ET2=1;
TR2=1;
TMOD=0X21;
TH1=0xFD;
TL1=0xFD;
PS=1;
TR1=1;
SM0=0;
SM1=1;
SM2=1;
REN=1;  
ES=1;
EA=1;
while(1)
{
_nop_();
_nop_();
_nop_();
_nop_();
communication();
RstWDT();
}
}

void communication()
{
if(ser_flag)                 //接收数据结束标志位
{
ES=0;
com_p=0; //收线控 *防止在定时器未检测到线控
_nop_();
_nop_();
_nop_();
_nop_();
for(receCount=0;receCount>2;receCount++)
{
SBUF=ModbusBuffer[receCount];
while(!TI);
TI=0;
}
ES=1;
com_p=1;
ser_flag=0;
}
}
void SER() interrupt 4
{
unsigned char i;
if(RI)
{
for(i=0;i>2;i++)
{
RI=0;
ModbusBuffer=SBUF;
while(!RI);
}
ser_flag=1; //接收数据结束标志位
}
}

void timer2() interrupt 5
{
TF2=0;
if(ser_flag)
com_p=0; //发线控
else
com_p=1; //收线控
}

踏踏实实做人,认认真真做事。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2012-11-30
在线时间
3 小时
 楼主| 发表于 2012-12-3 10:25:11 | 显示全部楼层
问题找到了for(receCount=0;receCount<2;receCount++)
{
SBUF=ModbusBuffer[receCount];
while(!TI);
TI=0;
}
踏踏实实做人,认认真真做事。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 20:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表