正文

【004】流水灯实验 [51]2006-04-06 22:06:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/12029.html

分享到:

实验目的:点亮二极管。实验参考:笨笨工作室 实验二、基本I/O口试验二:跑马灯。(查看原文)实验板: FB51A(查看)。 正如学一门编程语言时第一个程序"Hello World!"一样, "流水灯"(也叫跑马灯)算是学习单片机的第一个程序吧!电路如下: 汇编:       org   0000h       mov   a,#0fehloop:  mov   p0,a       lcall delay       rl    a       ajmp  loopdelay: mov   r6,#2h    ; djnz为二周期指令,机器周期为振荡周期的12倍.所以延时时间为:temp:  mov   r5,#0ffh  ; 2×255×2×12×(1/12) =1ms,人眼分辨不出       djnz  r5,$       djnz  r6,temp       retend★ 下载到实验板上并未看到预想的结果,八个LED都呈半亮状态。这是由于延时为1ms,人眼分辨不出闪烁的间隔,将延时时间增长如下:       org    0000h       mov   a,#0fehloop:  mov   p0,a       lcall delay       rl    a       ajmp  loopdelay: mov   r7,#100       ;djnz为二周期指令,机器周期为振荡周期的12倍.所以延时时间为:temp1: mov   r6,#02h       ;100×2×255×2×12×(1/12) =100ms,temp2: mov   r5,#0ffh       djnz  r5,$       djnz  r6,temp2       djnz  r7,temp1       retend★ 下载到实验板,这次可以看到最终结果,即LED从右(D0)到左(D7)循环点亮。 C51实现: 参考了AS综合系统的例程,才开始研究C51,还未从0写起,学习ing……#include <reg51.h>#include <intrins.h>void delayms(unsigned char ms)         // 延时子程序{                            unsigned char i;        while(ms--)    {        for(i = 0; i < 120; i++);    }} main(){    unsigned char LED;    LED = 0xfe;    P0 = LED;        while(1)    {        delayms(250);                    LED = _crol_(LED,1);        //循环右移1位,点亮下一个LED        P0 = LED;    }} 用Proteus仿真见: 【008】Proteus 第一次亲密接触  

阅读(6091) | 评论(9)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册