55智能网
新记
51单片机c语言编写流水灯程序?
1 设4个灯模块,红 黄 绿单色灯和一个红黄绿+混合彩灯,并依次点亮
2 4个模块点亮时间为4s,16s为一个周期,之后依次循环
3 在混合彩灯亮时蜂鸣器响
注:请教下单片机内定时器的使用及语言编写
举报该文章
相关建议 2012-10-24
51单片机的定时器估计是所有MCU里面最简单的定时器了,所涉及到的寄存器不多,就那么几个,如TMOD(模式寄存器),TCON(控制寄存器),具体内容你可以去查看51的DATA SHEET。
在使用的时候,先设置定时器模式,再设置控制寄存器,这些设置都是按照自己的需要来定。
例如你这个功能,4S的定时,你可以这么设置。
/**********************************************************
定时器初始化函数,50mS定时,为什么是50mS不是4S?因为定时器为16位定时模式,最大定时时间为65.535mS,以50mS方便计算
***********************************************************/
void Timer_Init( void )
{
TMOD = 0x01;//定时器0 ,工作方式1,十六位定时模式
TH0 = ( 65536 - 50000 ) / 256; //高八位数据
TL0 = ( 65536 - 50000 ) % 256;//低八位数据 定时时间大概为50mS,具体视晶振频率而定
EA = 1;//因为你要用到中断,所以打开总中断
ET0 = 1;//运行定时器0的中断
TR0 = 1;//定时器0开始计数,当你需要让它停止计数的时候让它等于0就可以了
}
void main()
{
Timer_Init();//调用定时器初始化函数
while(1)
{
//你的程序
}
}
//再写个中断服务函数
void Timer0( void ) interrupt 1
{
static unsigned char count = 0;//该变量用来计50mS的个数,当count = 8时,为4S
TH0 = ( 65536 - 50000 ) / 256; //再给定时器赋初值,否则将改变为复位值
TL0 = ( 65536 - 50000 ) % 256;//
count++;
if( count == 8 )
{
count = 0;
//4S到了,该干嘛干嘛去
}
}
温馨提示:内容为网友见解,仅供参考
当前网址:
https://55.aolonic.com/aa/cg44gieg8.html
其他看法
第1个回答 2012-10-29
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: CLR P1.5
MOV A,#0FEH
LOP: MOV P0,A
LCALL DELAY
RL A
SJMP LOP
DELAY: MOV R7,#198
DEL1: MOV R6,#50
DEL2: MOV R5,#23
DJNZ R5,$
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
第2个回答 2012-10-24
这个有点多,定时器倒是可以写写
TMOD=0xXX;设置工作方式
TH0=0xXX;
TL0=0xXX; 装入计数初值
EA=1;开总中断
TR0=1;开定时器中断
相似回答
大家正在搜
相关问题
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500M...
51单片机流水灯用C语言编写的设计程序???
51单片机流水灯程序
51单片机C语言对流水灯编程,用定时中断做
用C51单片机控制12个LED流水灯的C语言程序怎么写?
用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点...
用C语言编写C52单片机的流水灯程序
很简的51单片机C语言流水灯程序