首页 实现8个LED流水灯汇编语言程(10)

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

举报
开通vip

实现8个LED流水灯汇编语言程(10)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...

实现8个LED流水灯汇编语言程(10)
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,#255DJNZ R1,$DJNZ R0,D1RET     ;子程序返回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,#255DJNZ R1,$DJNZ R0,D1RET      ;子程序返回END      ;程序结束ORG 0000H   ;上电复位,程序从0000H开始执行START: MOV SP,#60H   ;堆栈初始化为60HMOV DPTR,#LIU_TAB ;流水花样表首地址送DPTRLOOP: CLR AMOVC A,@ADPTRCJNE A,#0FFH,SHOW  ;检查流水结束标志AJMP START   ;所有花样流完,则从头开始重复流SHOW: MOV P1,A    ;将数据送到P1口ACALL DELAYINC DPTRAJMP LOOP;-----延时子程序-----DELAY: MOV R0,#255   ;延时一段时间D1: MOV R1,#255DJNZ R1,$DJNZ R0,D1RET      ;子程序返回;-----下面是流水花样数据表-----LIU_TAB:DB01111111B   ;二进制表示的流水花样数据DBBDBBDBBDBBDBBDBBDBBDBBDBBDBBDBBDBBDBBDBBDB01111111BDB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;十六进制表示DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB7FH,3FH,1FH,0FH,07H,03H,01H,00HDB0FFH    ;流水花样结束标志0FFHEND      ;程序结束延时子程序,12M晶振延时约250毫秒DELAY:MOVR4,#2L3:MOVR2,#250L1:MOVR3,#250L2:DJNZR3,L2DJNZR2,L1DJNZR4,L3RETorg00h  ;程序上电从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,d2djnzr3,d1retend如何精确计算延时子程序的执行时间?汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,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次(115021262502)*2=253512微秒)RETdelay加上第一条总共延时1253512=253513微秒
本文档为【实现8个LED流水灯汇编语言程(10)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_654168
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:10
分类:
上传时间:2022-08-18
浏览量:3