STC90C52 晶振22118400HZ
精确定时1秒钟闪烁LED
/////////////////第一段///////////////////////////
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一个52标准内核的头文件
sbit P10 = P1^0; //要控制的LED灯
//精确定时1秒钟闪烁LED
void main(void) // 主程序
{
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断
while(1) //程序循环
{ ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
}
}
//定时器2中断
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==30) //T2的预置值0x1000,溢出30次就是1秒钟,晶振22118400HZ
{
t=0;
P10=~P10; //反转LED灯的亮灭
}
}
////////////////////////////////////第两段
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一个52标准内核的头文件
sbit P10 = P1^0; //要控制的LED灯
bit m00=0;
int t;
//精确定时1秒钟闪烁LED
void main(void) // 主程序
{
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断
while(1) //程序循环
{ ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作
if(m00==1) //反转LED灯的亮灭
t++;
if(t==30) //T2的预置值0x1000,溢出30次就是1秒钟,晶振22118400HZ
{
t=0;
P10=~P10;
}
}
}
//定时器2中断
timer2() interrupt 5
{
TF2=0;
m00=~m00;
}
}
为什么程序用第一段就可以,用第二段显示就不正常?谢谢! |