正文

【028】正反流水灯2007-05-02 16:18:00

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

分享到:

;**************************************************************************    ; 标题: 正反流水灯(汇编)    ; 作者: wentao     http://blog.liuwentao.net    ;                  http://wentao.programfan.com    ; 日期: 2007.2.21    ; 软件: Keil A51 V8.00     ; 芯片: AT89X51    ; 说明: 实验板实测通过    ; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!     ;**************************************************************************                   org   0000h               ajmp  start    start:      mov   a,#0xfe    ;初值11111110送入a                mov   30h,#7     ;30单元作计数器,初始为左移次数    left:       mov   p1,a       ;a送入P1口(初始点亮P1.0)                lcall delay100ms ;延时100ms                rl    a          ;循环左移                djnz  30h,left   ;未够7次继续左移                mov   30h,#7     ;重置计数器,为右移次数    right:      mov   p1,a       ;a送入P10口                lcall delay100ms ;延时100ms                rr    a          ;循环右移                djnz  30h,right  ;未够7次继续右移                ajmp  start       delay100ms: mov   r5,#195    ;1+(1+2*255)*195+2*195=100.036ms@12M    temp:       mov   r6,#255    ;1+2*255                djnz  r6,$                djnz  r5,temp                ret   end  /**************************************************************************   * 标题: 正反流水灯(C51)   * 作者: wentao     http://blog.liuwentao.net                      http://wentao.programfan.com   * 日期: 2007.2.21   * 软件: Keil C51 V8.02   * 芯片: AT89X51   * 说明: 实验板实测通过,移动用库函数_crol_和_cror_   * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    **************************************************************************/      #include <reg51.h>    #include <intrins.h>       #define uchar unsigned char       void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255       void main()    {        uchar led;   // 为P1口赋值的变量        uchar i;     // 循环控制变量                while(1)        {            led = 0xfe;               // 初值为11111110            for(i = 0; i < 7; i++)            {              P1 = led;             // led值送入P1口                delay_ms(100);        // 延时100ms                led = _crol_(led, 1); // led值循环左移1位            }            for(i = 0; i < 7; i++)            {              P1 = led;             // led值送入P1口                delay_ms(100);        // 延时100ms                led = _cror_(led, 1); // led值循环左移1位            }        }    }    void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255    {        uchar i;        while(ms--)            for(i = 0; i < 124; i++);    }    /**************************************************************************   * 标题: 正反流水灯(C51)   * 作者: wentao     http://blog.liuwentao.net                      http://wentao.programfan.com   * 日期: 2007.2.21   * 软件: Keil C51 V8.02   * 芯片: AT89X51   * 说明: 实验板实测通过,用>>和<<实现   * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    **************************************************************************/      #include <reg51.h>    #include <intrins.h>       #define uchar unsigned char       void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255       void main()    {        uchar led;   // 为P1口赋值的变量        uchar i;     // 循环控制变量                while(1)        {            led = 0x01;               // 初值为00000001            for(i = 0; i < 7; i++)            {              P1 = ~led;            // led值取反送入P1口                delay_ms(100);        // 延时100ms                led = led << 1;       // led值左移1位            }            for(i = 0; i < 7; i++)            {              P1 = ~led;            // led值取反送入P1口                delay_ms(100);        // 延时100ms                led = led >> 1;       // led值左移1位            }        }    }    void delay_ms(uchar ms)    {        uchar i;        while(ms--)            for(i = 0; i < 124; i++);    }

阅读(9693) | 评论(1)


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

评论

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