51单片机用定时器,怎么编程流水灯一秒闪烁一次,

51单片机用定时器,怎么编程流水灯一秒闪烁一次,,第1张

先写一个延时子函数delay,延时时间1秒。然后写LED=0;delay(1);LED=1;这样就可以做到一亮一灭,再把这段程序加入到循环中就可以,循环函数很简单不用再说了吧,如果还不懂回复我给你程序

ORG000H\x0d\LJMPMAIN\x0d\ORG000BH;定时器0中断入口\x0d\LJMPLOOP1\x0d\ORG0100H\x0d\MAIN:\x0d\MOVTMOD,#01H;设置定时器工作模式\x0d\MOVTL0,#0EFH;设置定时器初值\x0d\MOVTH0,#0D8H\x0d\SETBEA;打开总中断\x0d\SETBET0;打开定时器0中断\x0d\SETBTR0;启动定时器0\x0d\MOVP0,#0FFH\x0d\MOVR0,#200;延时参数\x0d\LOOP:\x0d\CJNER0,#0,LOOP;延时\x0d\MOVA,#0EFH\x0d\NEXT:\x0d\MOVP0,A;送值\x0d\MOVR0,#50;延时参数\x0d\EXIT:\x0d\CJNER0,#00H,EXIT;延时一会儿\x0d\RLA;A循环左移根据程序分许,该程序完成流水灯功能\x0d\LJMPNEXT\x0d\\x0d\LOOP1:;定时器0中断函数\x0d\MOVTL0,#0EFH;定时器初值\x0d\MOVTH0,#0D8H;定时器初值\x0d\DECR0;\x0d\RETI;中断返回\x0d\END\x0d\有疑问可以追问。

方法:将定时器中断时间设置为一秒一次。声明一个全局的变量temp 在初始化的时候赋初值,在中断服务函数中,添加 temp=_cror_(temp,1); 在主程序while(1){ P0 = temp;}

假设灯接P0口,低电平点亮

主程序

void main()

{

unsigned char a=0, i=0;

TMOD=0X01;

TH0=(65536-50000)/256;/定时50ms

TL0=(65536-50000)%256;

EA=1;ET0=1;

TR0=1;

P0=0XFF ;

while(1);

}

中断程序

void timer0 (void) interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

if(a==20)//1秒时间到

{a=0;i++;P0=0XEF>>(i-1);}

if{i==8)i=0;

}

你这个根本

就没有用到定时器函数。。你要想不精确延时的话

搞个比较大的数

++

或--

来延时

要用定时器

就得用定时器中断。。

至于全亮的原因

是因为

delay1s

没有起到延时1s的作用

二十极其短的延时

导致流水灯太快

给人感觉是全亮的。。

你可以改成

long

a

;

while(a<500000)

(值大小自己调试)

以上就是关于51单片机用定时器,怎么编程流水灯一秒闪烁一次,全部的内容,包括:51单片机用定时器,怎么编程流水灯一秒闪烁一次,、单片机流水灯汇编程序是怎样的、求AT89C52设计的流水灯程序。P0口控制8个led,间隔一秒,循环点亮,用到定时器的方法做 急求!在线等!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10137946.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存