南山国家公园试点范围:定时器/计数器编程问题
来源:百度文库 编辑:神马品牌网 时间:2024/04/28 11:46:52
//1.3定时亮灭的小灯
#include<reg52.h>
#include<absacc.h>
#define unit unsigned int
#define uchar unsigned char
sbit L0=P2^0;
sbit L1=P2^1;
sbit L2=P2^2;
sbit L3=P2^3;
uchar data BUFFER[1]={0}; //定时器记数变量
void main(void)
{
P2=0x0f; //初始化端口
EA=1;IT1=1;ET0=1; //初始化外中断标志位
TMOD=0x01; //T0方式1记时0.01秒
TH0=-5000/256;
TL0=-5000%256;
TR0=1; //开中断,启动定时器
for(;;);
}
//定时计数器0的中断服务子程序
void timer0(void) interrupt 1 using 1
{
TH0=-5000/256; //定时器T0的高4位赋值
TL0=-5000%256; //定时器T0的低4位赋值
BUFFER[0]=BUFFER[0]+1;
if(BUFFER[0]==100) //百分秒进位
{
L3=!L3;
L2=!L2;
L1=!L1;
L0=!L0;
}
}
请问,书上说是没过1秒灯就改变状态,可是怎么到0。6秒就改变了,还有,为什么一开始灯就是亮的?
#include<reg52.h>
#include<absacc.h>
#define unit unsigned int
#define uchar unsigned char
sbit L0=P2^0;
sbit L1=P2^1;
sbit L2=P2^2;
sbit L3=P2^3;
uchar data BUFFER[1]={0}; //定时器记数变量
void main(void)
{
P2=0x0f; //初始化端口
EA=1;IT1=1;ET0=1; //初始化外中断标志位
TMOD=0x01; //T0方式1记时0.01秒
TH0=-5000/256;
TL0=-5000%256;
TR0=1; //开中断,启动定时器
for(;;);
}
//定时计数器0的中断服务子程序
void timer0(void) interrupt 1 using 1
{
TH0=-5000/256; //定时器T0的高4位赋值
TL0=-5000%256; //定时器T0的低4位赋值
BUFFER[0]=BUFFER[0]+1;
if(BUFFER[0]==100) //百分秒进位
{
L3=!L3;
L2=!L2;
L1=!L1;
L0=!L0;
}
}
请问,书上说是没过1秒灯就改变状态,可是怎么到0。6秒就改变了,还有,为什么一开始灯就是亮的?
你的芯片比书上的那个
频率高
乱猜的