微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC12LE2052AD延时问题

STC12LE2052AD延时问题

时间:10-02 整理:3721RD 点击:
请教各位大虾,为啥我增加变量n,延时时间有时增加,有时减小,延时时间始终不会超过一分钟。用的内部4M左右的晶振。请指导一下。

#include "STC12C2052AD.h"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED=P3^4;
uchar count=0,n=0;
/***********************************定时器0初始化*******************************/
void timer0()
{
   EA=1;
   ET0=1;
   TMOD=0x1;
   TH0=0x15;
   TL0=0xA0;
   TR0=1;
}                                                                                                                                                                 
/************************************main函数*************************************/
void main()
{  
  LED=0;
  timer0();          
  P3M0=0x00;                 //P3.4设置为强推免模式
  P3M1=0x10;  
   n=5500;
   while(1);
}
/**********************************定时器0中断***************************/
void tm0()  interrupt 1 using 0
{
    TH0=0x15;
    TL0=0xA0;
    count++;       
        if(count<5000)
           {LED=1;}
         if(count>=n)
         {LED=0;}       
}

你的n和count的变量类型弄错了。uchar范围是0-255,你要改成uint范围0-2^16。

前些日子我做stm32的时候也遇到过这个问题,精确的延时是不能用语句延时的,延时 的时间取决于晶振,而且你用的还是内部晶振,不稳定,是一个原因,另外还跟程序所处的存储区有关系,像32就有4字节和8字节的的区别,就会导致,程序存储在不同的位置,导致一条语句执行的时间不同

把if(count=n)改成if(count==n),=和==是两个不同的运算符,前者是赋值运算符,后者是逻辑运算符,我以前也吃过这样的亏,浪费了好几个小时……

而且你的程序里只有LED=0,没有LED=1,是看不出效果的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top