51单片机C语言对流水灯编程,用定时中断做

2024年12月04日 12:50
有5个网友回答
网友(1):

#include
#define uchar unsigned char 
uchar m=0,i=0;   
void main()
{
 TMOD|=0x01;    //定时器0工作方式为1
 TH0=(65536-50000)/256;  //装初值  
 TL0=(65536-50000)%256;
 EA=1;   //开总中断
 ET0=1;   //开定时器中断
 TR0=1;   //开启定时器

 while(1); //等待中断

}
void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 m++ ;
 if(m==5) //12M晶振   定时5*50MS=250MS
 {
  m=0;
  P1=~(0X01<  if(++i==8)
  i=0;
 }
}

[补充]

延时函数是一种粗略计算延时时间的函数
是通过让单片机执行空指令,达到等待延时的目的。
经常被应用在对延时时间要求不太严格的场合。
而定时器中断,则是通过对晶振时钟进行计数
由于晶振的频率一般是很稳定的,所以晶振的脉冲频率基本稳定
从而通过对脉冲进行计数即可得到准确的延时目的。
中断延时函数和定时器中断延时没有明确的对应关系。
主要是根据你的应用场合来确定使用哪种函数。

网友(2):

// 写了个测试程序,希望对你有帮助
#include
#define uchar unsigned char
uchar m=0,i=0;
void main()
{
TMOD|=0x01; //定时器0工作方式为1
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //开启定时器

while(1); //等待中断

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++ ;
if(m==5) //12M晶振 定时5*50MS=250MS
{
m=0;
P1=~(0X01< if(++i==8)
i=0;
}
}

网友(3):

#include
#define uchar unsigned char
uchar m=0,i=0;
void main()
{
TMOD|=0x01; //定时器0工作方式为1
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //开启定时器

while(1); //等待中断

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++ ;
if(m==5) //12M晶振 定时5*50MS=250MS
{
m=0;
P1=~(0X01< if(++i==8)
i=0;
}
}

网友(4):

#include

sbit D1 =P1^0;
sbit D2 =P1^1;
sbit D3 =P1^2;
sbit D4 =P1^3;
sbit D5 =P1^4;
sbit D6 =P1^5;
sbit D7 =P1^6;
sbit D8 =P1^7;

void main()
{

unsigned char i =0;
unsigned char y =0;

D1 =1;
D2 =1;
D3 =1;
D4 =1;
D5 =1;
D6 =1;
D7 =1;
D8 =1;

TMOD = 0x01;
TH0 = 0xb8;
TL0 = 0x00;
TR0 = 1;

while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xb8;
TL0=0x00;
i++;
}
if(i>=50)
{
i=0;
y++;

}
switch(y)
{
case 1:D1=~D1;break;
case 2:D2=~D2;break;
case 3:D3=~D3;break;
case 4:D4=~D4;break;
case 5:D5=~D5;break;
case 6:D6=~D6;break;
case 7:D7=~D7; break;
case 8:D8=~D8;break;
default: y=0; break;

}

}

网友(5):

把具体要求说清楚后,我才好把按照要求写的程序贴出来