//任务,用定时器2控制LED2闪烁,间隔1秒钟
//第一步,生成头文件,包含进来,stc15
#include <stc15.h>
//接口sbit LED=P1^0;
//宏定义
#define LED 4
#define ULN 5
#define COM 6
#define ABC 7
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000) //1T模式
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
//全局变量
u8 LEDbuf=0xFF;
u8 ULNbuf=0x00;
u32 cnttms=0;//开机,设置一个定时器,1ms就加一次,大概几十天后溢出
u16 cnt1s=0;
u8 flag1s=0;
//函数声明
void sel(u8 x);
void sys0();//关闭所有外部设备
//主函数
void main()
{
//局部变量
//外设初始化
sys0();
//内部资源初始化
//定时器2,1ms定时
AUXR |= 0x04; //定时器2为1T模式
T2L = T1MS; //初始化计时值
T2H = T1MS >> 8;
IE2 |= 0x04; //开定时器2中断
EA = 1;
AUXR |= 0x10; //定时器2开始计时
//大循环
while(1)
{
if(1==flag1s)
{
sel(LED);
LEDbuf=LEDbuf ^0x02;//0000 0010
P0=LEDbuf;
sel(0);
flag1s=0;//注意标记清0
}
}
}
//函数定义
//-----------------------------------------------
//中断服务程序
void t2int() interrupt 12 //中断入口
{
cnt1s++;
if(cnt1s%1000==0)
{
cnt1s=0;
flag1s =1;
}
}
void sel(u8 x)
{
switch(x)
{
case 0:P2=P2&0x1F;break;
case LED:P2=P2&0x1F |0x80;break;
case ULN:P2=P2&0x1F |0xA0;break;
case COM:P2=P2&0x1F |0xC0;break;
case ABC:P2=P2&0x1F |0xE0;break;
}
}
void sys0()//关闭所有外部设备
{
sel(LED);
LEDbuf=0xFF;
P0=LEDbuf;
sel(0);
sel(ULN);
ULNbuf=0x00;
P0=ULNbuf;
sel(0);
sel(COM);
P0=0x00;
sel(0);
sel(ABC);
P0=0xFF;
sel(0);
}
手打代码05定时器2,一秒,LED2闪烁
最新推荐文章于 2024-10-14 10:39:00 发布