找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1672|回复: 11
收起左侧

求大神帮忙看一段程序!单片机测速度和心率的

[复制链接]
ID:213602 发表于 2017-6-22 10:07 | 显示全部楼层 |阅读模式
我这段程序是测速度和心率的,但是我现在烧进52后,在串口小程序里收不到数据,连0也没有,设置串口小程序显示16进制了,还是没有,求大神指点,是我哪里写错了,应该怎么改!谢谢



#include <reg52.h>

unsigned char flag_d = 0;        //发送标志
unsigned char time = 0;                /
unsigned int heart = 0;                //心率变量
unsigned int  num[2]  = {0,0};                //
unsigned int speed = 0;
float temp;
float count = 0;                        //间隔时间

//发送字符
void UART_SChar(unsigned char ch)
{
        SBUF = ch;                                //发送数据
        while(TI == 0);                        //等待发送完成
        TI = 0;                                        //清楚发送标志
}

void main(void)
{
        TMOD = 0x21;                                //定时器工作方式
        SCON = 0X40;                                //串口工作方式
        TH0 = (65536-45872)/256;                                           //定时器0初值
        TL0        = (65536-45872)%256;
        TH1 = 0XFD;                                        //定时器1初值
        TL1 = 0XFD;
        IT0 = 0;                                        //外部中断0低电平触发速度
        IT1 = 1;          //下降沿触发心率
        EA  = 1;                //开中断
        ES  = 1;          //开串行口中断
        EX0 = 1;                                        //开外部0中断
        EX1 = 1;          //开外部1中断
        ET0 = 1;                //开定时器0中断
        ET1 = 1;
        TR0 = 1;
        TR1 = 1;                                        //启动定时器1


        while(1)
        {
                if(flag_d != 0)                        //如果发送标志位有效
                 {
                        UART_SChar(0x00);        //发送数据
                        UART_SChar(speed);        //发送数据
                        UART_SChar(0xff);        //发送数据
                        if(flag_d == 2)                  
                         {
                                                        UART_SChar(0x00);           //发送数据
                                UART_SChar(heart);   //发送数据  
                                                        UART_SChar(0xff);    //发送数据
                          }
                   }
                      flag_d = 0;                        //清除标志                 
          }
}

//T0中断服务程序
  void T0_ISR(void) interrupt 1                  //
{
        TH0 = (65536-45872)/256;
        TL0 = (65536-45872)%256;
        speed = num[0];
        num[0] = 0 ;
        flag_d = 1 ;
                if (time == 40)
               {
                          heart = num[1];
                          num[1] = 0 ;
                          flag_d = 2 ;
                          time = 0 ;                                 
                 }
         time++;
}

  void INT0_ISR(void) interrupt 0
{
        num[0]++;        
}

//外部中断1服务程序
void INT1_ISR(void) interrupt 2                  //
{
  num[1]++;         
  }
        

评分

参与人数 1黑币 +5 收起 理由
Vivi899 + 5

查看全部评分

回复

使用道具 举报

ID:82765 发表于 2017-6-22 10:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:213602 发表于 2017-6-22 10:52 | 显示全部楼层
cjjcjj1 发表于 2017-6-22 10:49
if(flag_d != 0)       那就是发送标志位一直处于无效状态

不是啊  if(flag_d != 0)的意思不是判断flag_d 等不等于0吗?为啥是移植处于无效?
回复

使用道具 举报

ID:213602 发表于 2017-6-22 11:05 | 显示全部楼层
cjjcjj1 发表于 2017-6-22 10:49
if(flag_d != 0)       那就是发送标志位一直处于无效状态

if(flag_d != 0) 这不是判断flag_d等不等于0吗?为啥是无效呢
回复

使用道具 举报

ID:213602 发表于 2017-6-22 11:05 | 显示全部楼层
为啥是无效呢?这个不是判断标志位是不是0吗?
回复

使用道具 举报

ID:213631 发表于 2017-6-22 11:15 | 显示全部楼层
while(TI == 0);   
这个TI有定义的地方吗
回复

使用道具 举报

ID:79544 发表于 2017-6-22 15:23 | 显示全部楼层
void init() {         TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2               SCON=0x50;           //SCON=0101 0000B,串口工作方式1 1起始位8数据位1停止位             PCON=0x00;  //PCON=0000 0000B,波特率9600  晶振11.0592             TH1=0xfd;    //根据规定给定时器T1赋初值             TL1=0xfd;    //根据规定给定时器T1赋初值             TR1=1;      //启动定时器T1  }
回复

使用道具 举报

ID:82765 发表于 2017-6-22 15:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:213755 发表于 2017-6-22 16:09 来自手机 | 显示全部楼层
不清楚_(:з」∠)_
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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