实现8个LED流水灯汇编语言程.docx

上传人:b****2 文档编号:22809426 上传时间:2023-04-28 格式:DOCX 页数:3 大小:15.37KB
下载 相关 举报
实现8个LED流水灯汇编语言程.docx_第1页
第1页 / 共3页
实现8个LED流水灯汇编语言程.docx_第2页
第2页 / 共3页
实现8个LED流水灯汇编语言程.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实现8个LED流水灯汇编语言程.docx

《实现8个LED流水灯汇编语言程.docx》由会员分享,可在线阅读,更多相关《实现8个LED流水灯汇编语言程.docx(3页珍藏版)》请在冰豆网上搜索。

实现8个LED流水灯汇编语言程.docx

实现8个LED流水灯汇编语言程

START:

 MOV  ACC,#0FEH  ;ACC中先装入LED1亮的数据(二进制的)    MOV  P1,ACC   ;将ACC的数据送P1口    MOV  R0,#7    ;将数据再移动7次就完成一个8位流水过程LOOP:

 RL   A      ;将ACC中的数据左移一位    MOV  P1,A    ;把ACC移动过的数据送p1口显示    ACALL DELAY    ;调用延时子程序    DJNZ  R0,LOOP   ;没有移动够7次继续移动    AJMP  START    ;移动完7次后跳到开始重来,以达到循环流动效果

    ;-----延时子程序-----DELAY:

 MOV  R0,#255   ;延时一段时间D1:

  MOV  R1,#255    DJNZ  R1,$    DJNZ  R0,D1    RET         ;子程序返回

    END         ;程序终止

START:

 CLR        ;输出低电平,使LED1点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED1熄灭    CLR        ;输出低电平,使LED2点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED2熄灭    CLR        ;输出低电平,使LED3点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED3熄灭    CLR        ;输出低电平,使LED4点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED4熄灭    CLR        ;输出低电平,使LED5点亮    ACALL DELAY      ;调用延时子程序    SETB        

;输出高电平,使LED5熄灭    CLR        ;输出低电平,使LED6点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED6熄灭    CLR        ;输出低电平,使LED7点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED7熄灭    CLR        ;输出低电平,使LED8点亮    ACALL DELAY      ;调用延时子程序    SETB        ;输出高电平,使LED8熄灭    ACALL DELAY      ;调用延时子程序    AJMP  START      ;8个LED流了一遍后返回到标号START处再循环

    ;-----延时子程序-----DELAY:

 MOV  R0,#255     ;延时一段时间D1:

  MOV  R1,#255    DJNZ  R1,$    DJNZ  R0,D1    RET          ;子程序返回

    END           ;程序终止

ORG  0000H      ;上电复位,程序从0000H开始执行START:

 MOV  SP,#60H     ;堆栈初始化为60H    MOV  DPTR,#LIU_TAB  ;流水花样表首地址送DPTRLOOP:

 CLR  A    MOVC  A,@A+DPTR    CJNE  A,#0FFH,SHOW   ;检查流水结束标志    AJMP  START      ;所有花样流完,则从头开始重复流SHOW:

 MOV  P1,A       ;将数据送到P1口    ACALL DELAY    INC  DPTR    AJMP  LOOP

    ;-----延时子程序-----DELAY:

 MOV  R0,#255     ;延时一段时间D1:

  MOV  R1,#255    DJNZ  R1,$    DJNZ  R0,D1    RET          ;子程序返回

 

    ;-----下面是流水花腔数据表-----LIU_TAB:

    DB01111111B

      ;二进制表示的流水花腔数据    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DBB    DB01111111B    DB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;十六进制表示    DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH    DB7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH    DB7FH,3FH,1FH,0FH,07H,03H,01H,00H    DB0FFH        ;流水花样结束标志0FFH    END           ;程序结束

延时子程序,12M晶振延时约250毫秒DELAY:

MOVR4,#2L3:

MOVR2,#250L1:

MOVR3,#250L2:

DJNZR3,L2DJNZR2,L1DJNZR4,L3RET

 

org00h    ;程序上电从00h开始ajmp main  ;跳转到主程序org 0030h   ;主程序起始地址main:

 mova,#0feh  ;给A赋值成loop:

  mov p1,a  ;将A送到P1口,发光二极管低电平点亮 lcalldelay  ;挪用延时子程序 rla   ;累加器A循环左移一名 ajmp loop ;从头送P1显示

delay:

 movr3,#20  ;最外层循环二十次d1:

 movr4,#80  ;次外层循环八十次d2:

 movr5,#250  ;最内层循环250次 djnzr5,$  ;总共延时2us*250*80*20= djnzr4,d2 djnzr3,d1 ret end

如何精准计算延时子程序的执行时刻?

    汇编语言的一大优势确实是能够精准操纵程序的执行时刻,这在编写一些对时序要求严格的外围器件驱动时由为重要!

;延时子程序,12M晶振延时约253毫秒DELAY:

MOVR4,#2------执行1个机械周期,耗时1微秒L3:

MOVR2,#250---执行1个机械周期,耗时1微秒L1:

MOVR3,#251---执行1个机械周期,耗时1微秒L2:

DJNZR3,L2---执行2个机械周期,反复执行251次(2x251)=502微秒)DJNZR2,L1-----执行2个机械周期,反复执行250次(1+502

+2)*250=126250微秒)DJNZR4,L3-----执行2个机械周期,反复执行2次(1+1+502+126250+2)*2=253512微秒)

RET

delay加上第一条总共延时1+253512=253513微秒

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1