标题:
单片机定时器实验程序
[打印本页]
作者:
lx80072
时间:
2019-7-3 22:20
标题:
单片机定时器实验程序
定时器计数器综合实验
P1接8个LED灯,P3.7接1个LED灯,点动开关接P3.2 (INT0),负跳变产生中断,P3.3 (INT1)用低电平触发中断。系统时钟6M。
编写程序实现如下功能:
① 主程序9只LED灯上电全灭。
② INT0中断程序实现:按一次启动定时器T0,再按一次停止。停止后恢复到上电状态。
③ INT1中断程序实现:按一次启动定时器T1,再按一次停止。停止后恢复到上电状态。
④ 定时器T0实现:P3.7所接1个LED灯亮灭闪烁,亮灭时间各为1S。
⑤ 计数器T1实现:记录由T1口所输入脉冲个数,以二进制形式在P1口连接的8只LED灯上显示出来。
(提示:低电平触发及时恢复高电平,以免中断重入)
程序如下:
#include<reg51.h>
#include<intrins.h>
sbit p3_7=P3^7;
char t;
char k=0;
void main()
{
TMOD=0x51;
EA=1;
EX0=1;
EX1=1;
ET0=1;
ET1=1;
IT0=1;
IT1=1;
TR0=0;
TR1=0;
TL0=(65536-15536)%256;
TH0=(65536-15536)/256;
TL1=0;
TH1=0;
p3_7=0;
P1=0;
while(1);
}
void key0()interrupt 0
{
TR0=!TR0;
if(TR0==0)
{
TR1=0;
k=0;
P1=0;
p3_7=0;
}
}
void time0()interrupt 1
{
TL0=(65536-15536)%256;
TH0=(65536-15536)/256;
t++;
if(t==10)
{
p3_7=!p3_7;
t=0;
}
}
void key1()interrupt 2
{
TR1=!TR1;
TH1=0xff;
TL1=0xff;
if(TR1==0)
{
TR0=0;
k=0;
P1=0;
p3_7=0;
}
}
void time1()interrupt 3
{
TH1=0xff;
TL1=0xff;
k++;
P1=k;
}
复制代码
作者:
admin
时间:
2019-7-4 23:10
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1