正文

【026】查表方式流水灯2007-05-02 15:13:00

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

分享到:

;**************************************************************************    ; 标题: 查表方式流水灯(汇编)    ; 作者: wentao     http://blog.liuwentao.net    ;                  http://wentao.programfan.com    ; 日期: 2007.2.21    ; 软件: Keil A51 V8.00     ; 芯片: AT89X51    ; 说明: 实验板实测通过,查表方式可以任意在表中定义流动的方式    ;       采用a不变,dptr自加的方式    ; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!     ;**************************************************************************                   org   0000h               ajmp  start    start:      mov   dptr,#table ;数据表地址送入dptr                mov   30h,#8      ;30单元作为循环计数器    lop:        mov   a,#0        ;acc清零                movc  a,@a+dptr   ;查数据表中的值并送入a                mov   p1,a        ;查表结果送和P1口                lcall delay100ms  ;延时100ms                inc   dptr        ;数据指针加1                djnz  30h,lop     ;未到8次继续查表取值                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      table:      db 07eh, 0bdh, 0dbh, 0e7h, 0e7h, 0dbh, 0bdh, 07eh      end  ;**************************************************************************    ; 标题: 查表方式流水灯(汇编)    ; 作者: wentao     http://blog.liuwentao.net    ;                  http://wentao.programfan.com    ; 日期: 2007.2.21    ; 软件: Keil A51 V8.00     ; 芯片: AT89X51    ; 说明: 实验板实测通过,查表方式可以任意在表中定义流动的方式    ;       采用dptr不变,a自加的方式    ; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!     ;**************************************************************************                   org   0000h               ajmp  start    start:      mov   dptr,#table ;数据表地址送入dptr                mov   30h,#0      ;30单元作为循环计数器    lop:        mov   a,30h       ;30单元除作计数器外,还有变址作用                movc  a,@a+dptr   ;查数据表中的值并送入a                mov   p1,a        ;查表结果送和P1口                lcall delay100ms  ;延时100ms                inc   30h         ;计数器加1                mov   a,30h       ;30单元值送入a                cjne  a,#8,lop    ;未到8次继续查表取值                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      table:      db 0feh, 0fdh, 0fbh, 0f7h, 0efh, 0dfh, 0bfh, 07fh      end  /**************************************************************************   * 标题: 查表方式流水灯(C51)   * 作者: wentao     http://blog.liuwentao.net                      http://wentao.programfan.com   * 日期: 2007.2.21   * 软件: Keil C51 V8.02   * 芯片: AT89X51   * 说明: 实验板实测通过   * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    **************************************************************************/      #include <reg51.h>       #define uchar unsigned char       uchar state[8] = {0xe7, 0xdb, 0xbd, 0x7e, //状态表                      0x7e, 0xbd, 0xdb, 0xe7};       void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255       void main()    {        uchar i;   // 循环控制变量,还起变址作用                while(1)        {            for(i = 0; i < 8; i++)            {                P1 = state[i]; // 查表并将结果送入P1口                delay_ms(100); // 延时100ms            }        }    }    void delay_ms(uchar ms)    {        uchar i;        while(ms--)            for(i = 0; i < 124; i++);    }

阅读(2831) | 评论(1)


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

评论

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