帮我解释下单片机c语言程序

如题所述

/********
//p1.0波形为:
//1、10ms为周期的方波或持续的高、低电平(与flag、p1.0初始值有关),持续2秒。
//2、持续的高、低电平或10ms为周期的方波(与flag、p1.0初始值有关),持续2秒。
//3、重复1、2步骤。
*********/
#include

unsigned
int
t02s;
unsigned
char
t05ms;
bit
flag;
void
main(void)
{
tmod=0x01;
//初始化定时器。
//可以对照单片机pdf相应章节,按位对比。
//此处设置定时器0工作于“16
位定时器/
计数器,tl0、th0
全用”模式。
th0=(65536-500)/256;
//初始化定时/计数器高字节。
tl0=(65536-500)%256;
//初始化。。。。。。低字节。
tr0=1;
//启动定时器0。
//以下两句开启定时器中断,缺一不可。
et0=1;
//允许定时器0中断。
ea=1;
//开启全局中断。
while(1);
//循环,整个程序交由定时中断控制。
}
//此处为定时器中断子程序,每次定时器溢出,进入此段程序。
//根据参数定义,每5ms中断一次。
//定时器中断后,计数不停止,但是需要重新初始化定时/计数器。
void
t0(void)
interrupt
1
using
0
{
//重新“初始化定时/计数器”高、低字节。
th0=(65536-500)/256;
tl0=(65536-500)%256;
//每次中断,t02s

1。
t02s++;
//增加400次后(5ms
×
400
=
2s),flag标志取反。
if(t02s==400)
{
t02s=0;
flag=~flag;
}
//若中断时flag标志为0,p1.0口取反。
if(flag==0)
{
p1_0=~p1_0;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-03
LED0
(P0^0)
作为程序运行指示灯,运行程序先点亮。
用time()中断函数来进行P2口的定时操作,用uiTount做计数值,每次中断该值加一,计数范围0-2000.
其中0-1000时P2口输出0x06,也就是P2.1
,P2.2两个管脚置高电平。
1000-2000时P2口全部清0
要知道程序作用,看看P2.1
和P2.2两个管脚接了什么东西?
第2个回答  2020-01-10
#include"reg51.h"
//reg51.h头文件
sbit
LED0=P0^0;
//定义一个寄存器空间,地址是P0^0,名字是LED0
void
set_start()
//led启动类
{
TMOD=0X01;
TL0=0X65;
TH0=0XFC;
TR0=1;
ET0=1;
EA=1;
}
void
Time()
interrupt
1
//led根据时间执行中断类
{
static
unsigned
int
uiTount=0;
TL0=0X65;
TH0=0XFC;
uiTount++;
if(uiTount<1000)P2=0X06;
else
if(uiTount>=1000&&uiTount<2000)P2=0;
else
uiTount=0;
}
main()
//主函数执行
{
set_start();
P0=0;
LED0=1;
while(1)
{
;
}
}