急需知道以下单片机程序的详细解释,望帮忙解答。谢谢!
实验目的:八个发光二极管从右到左每隔一秒点亮1位#include"reg51.h"voidtimer0();intcounter=0;unsignedcharw,x=1;...
实验目的:八个发光二极管从右到左每隔一秒点亮1位
#include "reg51.h"
void timer0();
int counter=0;
unsigned char w,x=1;
void main()
{
TMOD =0x01;
P0=0xFF;
TH0 =-(10000/256);
TL0 =-(10000%256);
EA =1;
ET0 =1;
TR0 =1;
while(1);
}
//产生1秒的定时(每次中断产生0.01秒,中断了100次产生1秒)
void timer0(void)interrupt 1
{
counter++;
TH0 =-(10000/256);
TL0 =-(10000%256);
if(counter==100)
{
counter=0;
w=~x;
P0=w;
x=x<<1;
if(x==0)
{
x=1;
}
}
} 展开
#include "reg51.h"
void timer0();
int counter=0;
unsigned char w,x=1;
void main()
{
TMOD =0x01;
P0=0xFF;
TH0 =-(10000/256);
TL0 =-(10000%256);
EA =1;
ET0 =1;
TR0 =1;
while(1);
}
//产生1秒的定时(每次中断产生0.01秒,中断了100次产生1秒)
void timer0(void)interrupt 1
{
counter++;
TH0 =-(10000/256);
TL0 =-(10000%256);
if(counter==100)
{
counter=0;
w=~x;
P0=w;
x=x<<1;
if(x==0)
{
x=1;
}
}
} 展开
1个回答
展开全部
#include "reg51.h" //打开头文件
void timer0(); //中断服务程序说明
int counter=0; //定义整数 counter初值为0
unsigned char w,x=1; //定义无符号字符型 WX x初值为1
void main()
{
TMOD =0x01; //定时器0工作方式1
P0=0xFF; //P0口 初始为111111111
TH0 =-(10000/256); //设置定时初始值 (TH0 =(65536-10000)/256;
TL0 =-(10000%256); //TL0 =(65536-10000)%256;你的初始值设定错误了
EA =1; //开启定时器总开关
ET0 =1; //开启定时器0
TR0 =1; //开始定时
while(1);
}
//产生1秒的定时(每次中断产生0.01秒,中断了100次产生1秒)
void timer0(void)interrupt 1 //定时器中断服务程序 中断号1
{
counter++; //每次中断加1
TH0 =-(10000/256); //定时器初始值重设
TL0 =-(10000%256);
if(counter==100) //当中断100次时 秒加1
{
counter=0; //重新记中断次数
w=~x; // w=x取反
P0=w;//貌似这句有错误
x=x<<1;//x值左移
if(x==0)
{
x=1;
}
}
}
void timer0(); //中断服务程序说明
int counter=0; //定义整数 counter初值为0
unsigned char w,x=1; //定义无符号字符型 WX x初值为1
void main()
{
TMOD =0x01; //定时器0工作方式1
P0=0xFF; //P0口 初始为111111111
TH0 =-(10000/256); //设置定时初始值 (TH0 =(65536-10000)/256;
TL0 =-(10000%256); //TL0 =(65536-10000)%256;你的初始值设定错误了
EA =1; //开启定时器总开关
ET0 =1; //开启定时器0
TR0 =1; //开始定时
while(1);
}
//产生1秒的定时(每次中断产生0.01秒,中断了100次产生1秒)
void timer0(void)interrupt 1 //定时器中断服务程序 中断号1
{
counter++; //每次中断加1
TH0 =-(10000/256); //定时器初始值重设
TL0 =-(10000%256);
if(counter==100) //当中断100次时 秒加1
{
counter=0; //重新记中断次数
w=~x; // w=x取反
P0=w;//貌似这句有错误
x=x<<1;//x值左移
if(x==0)
{
x=1;
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询