急需知道以下单片机程序的详细解释,望帮忙解答。谢谢!

实验目的:八个发光二极管从右到左每隔一秒点亮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;
}
}
}
展开
 我来答
baiyue_123
2012-06-12
知道答主
回答量:46
采纳率:100%
帮助的人:13.8万
展开全部
#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;
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式