用的是STC89C52RC的单片机,写的通信程序只能跑一遍..

2019-07-16 08:43发布

用的是STC89C52RC的单片机,程序想实现的功能大概是通过计时器0计时学习板上的两个按键开关分别闭合的时间间隔t,得到t以后和一些常数运算得到v,然后再将v传输到另一个单片机上去,波特率由计时器1设置。

但是我把程序下载好了以后,用串口监视器查看传输的数据却发现,只有打开单片机后的第一次运行能得到可以正确反映开关闭合时间差异的数据,后面得到的都是00。
在下单片机新手,苦寻半天也未能发现原因,恳请各位前辈高人不吝赐教

#include <reg52.h>

unsigned int time,t,v;

const s=3000;

void Delay(unsigned int xms);
void Init();
void Transmit();

void main()
{
  Init();
  while(1)
  {
    if(k1==0)
        {
          Delay(10);  //开关消抖
          if(k1==0)
          {
                time=0;
                TH0=0x4c;
                TL0=0x00;
                TR0=1;
                while(k2==1);
                TR0=0;
                Transmit();
          }
        }
  }
}

void Delay(unsigned int xms)
{
    unsigned int i,j;
        for(i=xms;i>0;i--)
          for(j=112;j>10;j--);
}

void Init()
{
  TMOD=0x21;                //计数器0计时用,计数器1波特率
  TH0=0x4c;                        //计数器0初值,一次循环为50ms
  TL0=0x00;
  TH1=0xfd;                        //设置计数器1的初值,决定波特率
  TL1=0xfd;               
  PCON=0x00;      // 波特率不倍增
  SCON=0x50;                //设置工作方式1 开启接受允许
  EA=1;
  ES=1;
  ET0=1;
  TR1=1;
}

void count() interrupt 1
{
  TH0=0x4c;
  TL0=0x00;
  time++;
}

void Transmit()
{
  t=50*time;
  v=s/t;
  SBUF=time;
  while(!TI);
  TI=0;
}
.k1和k2是开关,电路图如下
1.jpg

2.jpg

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
andy1989
1楼-- · 2019-07-16 11:50
 精彩回答 2  元偷偷看……
marrychen
2楼-- · 2019-07-16 12:13

我也是啊  用gsm模块  接受短信 控制灯的开关  明明写在大循环里  只能执行一次 开关 然后就失效了

用P3.0 和P3.1口的通信

更悲剧的是  单片机写进这个程序以后 重新写程序写不进去了  之前写的程序一直在里面运行  

是不是之前的程序覆盖了下载程序的信号啊

希望有前辈能不吝赐教   小弟先行谢过了
陶醉了的猫
3楼-- · 2019-07-16 14:53
andy1989 发表于 2015-10-12 16:08
SBUF是个8位的,以ASCII码传输,这样直接把一个16位的unsigned int扔进去恐怕不行吧,LZ。

啊!谢谢帮忙!
我忽略了这点...这样直接把一个16位的数据输入是不是会丢失高八位啊?
不过我修改之后还是不能运行...程序问题应该不是出在这里
凌晨3点睡
4楼-- · 2019-07-16 17:52
开串口中断却没有 中断服务程序,串口发送数据时先关串口中断,发送完再开中断
ruizhichuangxin
5楼-- · 2019-07-16 23:50
键盘电路没有上拉电阻,在这种情况下,K2的状态是不稳定的,单片机复位时,P3均为高电平,当松开K2后,P35的电位就不确定,所以程序运行到此处while(k2==1);会出现不可预料的结果
改变下电路硬件试试。
ruizhichuangxin
6楼-- · 2019-07-17 03:27
 精彩回答 2  元偷偷看……

一周热门 更多>