下载此文档

51单片机流水灯.docx


文档分类:通信/电子 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
51单片机流水灯
D
1
1
开始
程序流程图

定时器初始化化
50毫秒定时溢出?
N
Y
i++
i=10?
N

1
Y
P1端口赋值
a循环移位
程序代码及注解
非中断定时器控制
#include<>
#include<>//包含了_crol_函数的头文件
#define uchar unsigned char
#define uint unsigned int
uint i=0;
uchar a=0xfe;
void main()
{
TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值
2
TH0=(65536-46080)/256;//50毫秒定时赋初值
TL0=(65536-46080)%256;
TR0=1;//启动定时器0
while(1)
{
If(TF==1)//读溢出标志位
{
TH0=(65536-46080)/256;//重新赋初值
TL0=(65536-46080)%256;
i++;
if(i==10)//500毫秒定时
{
i=0;
P1=a;//P1端口赋值
a=_crol_(a,1);//循环左移
}
3
TF=0;//清除定时器溢出标志
}
}
}
程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。,所以计时一个数的时间为12/=,故定时50毫秒的计数为50000/=46080。
中断定时器控制
#include<>
#include<>//包含了_crol_函数的头文件
#define uart unsigned char
#define uint unsigned int
uint i=0;
4
uchar a=0xfe;
void Timer0_init();
void main()
{
Timer0_init();//定时器中断初始化
while(1);
}
Timer0_init()
{
TMOD=0x01;//设置定时器方式为定时器0,16位手动重装初值
TH0=(65536-46080)/256;//50毫秒定时赋初值
TL0=(65536-46080)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//开启定时器0
}
5

51单片机流水灯 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人lu2yuwb
  • 文件大小418 KB
  • 时间2021-08-21