打印
[STC单片机]

STC小程序出现问题,请帮助

[复制链接]
1119|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a584702302|  楼主 | 2017-9-2 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"
#include "intrins.h"
typedef unsigned int uint16;

sfr P3M1 = 0x93;
sfr P3M0 = 0x94;
sfr AUXR = 0x8e;

sbit MCU_ONKEY_L=P3^4;
sbit MCU_RUN_LED=P3^3;
sbit RESET=P3^5;
sbit TK1_TEST=P3^2;
uint16 flag=0;
uint16 low_power=0;

//ƵÂÊ11.0592MHz
void Delay10ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 108;
        j = 144;
        do
        {
                while (--j);
        } while (--i);
}
void Timer0Init(void)                //10ms@11.0592MHz
{
        AUXR &= 0x7F;                //?????12T??
        TMOD &= 0xF0;                //???????
        TL0 = 0x00;                //??????
        TH0 = 0xDC;                //??????
        TF0 = 0;                //??TF0??
//        TR0 = 1;                //???0????
        flag++;
        if(flag==200)
        {
                flag=0;
        }
}

void exint0() interrupt 0       //中断路口
{
                TR0 = 1;                //ʹÄܶ¨Ê±Æ÷
          low_power++;
}
void init()
{
          P3M0 = 0x00;//³õʼ»¯IO¿Ú
    P3M1 = 0x00;
          MCU_ONKEY_L=0;
    MCU_RUN_LED=1;
    RESET=0;
       
          INT0 = 1;
    IT0 = 0;                    //ÉèÖÃÖжÏÀàÐÍ
    EX0 = 1;                    //ʹÄÜÖжÏ
    EA = 1;                     

}

void main(void)
{
        Delay10ms();
        Timer0Init();
        init();       
        MCU_ONKEY_L=1;//Éϵç¸ø10msµÄ¸ß
        Delay10ms();
        MCU_ONKEY_L=0;
  while(1)
  {       
                if(low_power==2)//检测2个低电平
                  {
                        TR0 = 0;
                        low_power=1;
                        if(flag<100)
                        {
                        MCU_RUN_LED=0;//³ÌÐòÕý³£
                        flag=0;
                        RESET=0;
                        }
                  if(flag>100)
                  {
                        MCU_RUN_LED=1;
                        RESET=1;//重启
                  }
          }       
        }       
}

相关帖子

沙发
a584702302|  楼主 | 2017-9-2 15:49 | 只看该作者
我的程序是希望在上电后检测下降沿要是2个下降沿间隔在1S类就没问题,要是在1s以上就重新启动。但是现在无法重新启动,能帮我看看嘛?

使用特权

评论回复
板凳
lvlv99| | 2017-9-2 18:36 | 只看该作者
flag应该在 if(flag > 100)中清0,不然在100-200间一直执行RESET=1;//重启

使用特权

评论回复
地板
海布里| | 2017-9-3 22:16 | 只看该作者
怎么只有定时器初始化的函数而没有定时器0的中断函数呢。初始化只有一次的。你那个flag就没变化,当然不会重启。你把对flag的判断放到定时器0的中断里边

使用特权

评论回复
5
ningling_21| | 2017-9-4 08:52 | 只看该作者
楼上正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

18

帖子

1

粉丝