小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 6084|回复: 6

改的一个接收上位机数据的程序,有点小问题,帮看下

[复制链接]
发表于 2012-11-28 14:48:25 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit Cntl0 = P1^0;
uchar Buffer[1] = {0};      //从串口接收的数据
uint i,j,f;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{

EA = 0;
if(RI == 1)   //当硬件接收到一个数据时,RI会置位
{
  Buffer[0] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是该字符的ASCII码
  RI = 0;  
  
}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;   
     TH1 = 0xFd;    //设置波特率 9600
     TL1 = 0xFd;
     TR1 = 1;  //启动定时器1
     ES = 1;  //开串口中断
     EA = 1;  //开总中断  
}
/********************************************************************
* 名称 : Relay00()
* 功能 : 控制P1^0管脚电平,实现点奇数次为高,偶数次为低
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Relay00()
{  
  f=0;
  f++;
  Cntl0=f%2; //f用于记调用本Relay()函数的次数,将次数除以2的余数赋给对应管脚
   Delay_1ms(100);
}

void main()
{
    Delay_1ms(100);
    Com_Init();//串口初始化
   
  while(1)
  {
   switch(Buffer[0])
      {
         case 0:  Relay00(); break;
         default:break;  
      }  
  }
}
想实现的功能就是接收到数据0时,调用Relay()函数,控制管脚电平,当接收到奇数次为高,偶数次为低。
现在问题是,一对单片机上电,P1^0管脚就是高电平,再用上位机发送0过来都不能改变P1^0的电平,是什么问题呢?

回复

使用道具 举报

发表于 2012-11-28 17:13:22 | 显示全部楼层
谢谢,我犯了个低级错误,已经解决
回复 支持 反对

使用道具 举报

发表于 2012-11-28 18:15:55 | 显示全部楼层
但是没有彻底解决
想实现:控制P1^0管脚电平,实现点奇数次为高,偶数次为低,大大们给点建议
回复 支持 反对

使用道具 举报

发表于 2013-2-7 20:45:31 | 显示全部楼层
这程序够简单,问题解决了吗? 有没有像这样简单的下位机和上位机程序给我参考一下啊,小白求助啊
回复 支持 反对

使用道具 举报

发表于 2013-2-15 11:55:26 | 显示全部楼层
tyler88 发表于 2013-2-7 20:45
这程序够简单,问题解决了吗? 有没有像这样简单的下位机和上位机程序给我参考一下啊,小白求助啊

论坛里有的,这是单字节指令控制的下位机,论坛里也有对应的上位机
回复 支持 反对

使用道具 举报

发表于 2013-2-15 17:54:25 来自手机 | 显示全部楼层
取反不就行了?
void Relay00()

{Cntl0=~Cntl0}
回复 支持 反对

使用道具 举报

发表于 2013-2-20 20:48:19 | 显示全部楼层
botao258 发表于 2013-2-15 11:55
论坛里有的,这是单字节指令控制的下位机,论坛里也有对应的上位机

下位机能看明白,但上位机不是用VB的,看不懂啊。能否编个最简单的,例如用上位机控制单片机的一个LED灯亮那样子吗,只求最简单,才能让自己起步,在以后继续探索。现在只求知道用VB是怎样跟单片机通讯的,求最简单能看懂的源码。刚出生的菜鸟起步艰难啊。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-5-19 18:50 , Processed in 1.103404 second(s), 19 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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