51单片机,keil 2编译都没问题:
正常运行的:
#include
#define uchar unsigned char
#define uint unsigned int
***it led1=P1^0;
***it spk=P2^3;
uchar num;
void main()
{
num=0;
TMOD=0x01; // 工作方式是1
TH0=(65536-45872)/256; //计算初值
TL0=(65536-45872)%256; //计算初值
EA=1; //开总中断
ET0=1; //定时器T0 中断允许
TR0=1; //启动定时器定时的功能
while(1);
}
void T0_time()interrupt 1 //定时器0的中断服务程序
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num++;
if(num==10)
{
num=0; //重新赋值num进入下一次循环
spk=~spk; //蜂鸣器哒哒声
led1=~led1; //定时1s后,改变发光二极管的状态
}
}
把中断函数的语句放在main函数中,单片机不能正常运行。
不能正常运行的程序:
#include
#define uchar unsigned char
#define uint unsigned int
***it led1=P1^0;
***it spk=P2^3;
uchar num;
void main()
{
num=0;
TMOD=0x01; // 工作方式是1
TH0=(65536-45872)/256; //计算初值
TL0=(65536-45872)%256; //计算初值
EA=1; //开总中断
ET0=1; //定时器T0 中断允许
TR0=1; //启动定时器定时的功能
while(1)
{
if(num==10)
{
num=0; //重新赋值num进入下一次循环
spk=~spk; //蜂鸣器哒哒声
led1=~led1; //定时1s后,改变发光二极管的状态
}
}
}
void T0_time()interrupt 1 //定时器0的中断服务程序
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num++;
}
期待在大家的帮助下,解开这个谜团。
|