中断问题--新概念51单片机书上的一道编程
时间:10-02
整理:3721RD
点击:
使用发光管1秒亮灭
#include<reg52.h>
#define uchar unsigned char
#define uint unsignef int
sbit L1=P1^0;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TH0=(65536-45872)%256;
TF0=0;
L1=0;
ET0=1;
TR0=1;
EA=1;
while(1);
}
void to_time() interrupt 1
{
TH0=(65536-45872)/256;
TH0=(65536-45872)%256;
num++;
if(num==20) //此处应该是20,可才是280ms,只有是71时才是1s变化一次
{
num=0;
L1=~L1;
}
}
希望能告诉我原因
#include<reg52.h>
#define uchar unsigned char
#define uint unsignef int
sbit L1=P1^0;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TH0=(65536-45872)%256;
TF0=0;
L1=0;
ET0=1;
TR0=1;
EA=1;
while(1);
}
void to_time() interrupt 1
{
TH0=(65536-45872)/256;
TH0=(65536-45872)%256;
num++;
if(num==20) //此处应该是20,可才是280ms,只有是71时才是1s变化一次
{
num=0;
L1=~L1;
}
}
希望能告诉我原因
你是怎么知道才280ms的呢?晶振频率是多少呢?
对啊 晶振频率多少啊?
你给TH0赋值了两次哦,会以第二次赋值为准
太粗心了,谢谢
这个我以前也写过。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1 =P1^1;
uchar num;
void main()
{
num=0;
TMOD = 0x01;
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器
while(1)
{
if(num==20)
{
num=0;
led1=~led1;
}
}
}
void T0_time() interrupt 1
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
num++;
}