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;}
}
#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,是看不出效果的。