1、实现8个LED流水灯汇编语言程START:MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的) MOV P1,ACC ;将ACC的数据送P1口 MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程 LOOP: RLA ;将ACC中的数据左移一位MOV P1,A ;把ACC移动过的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZR0,LOOP ;没有移动够7次继续移动 AJMPSTART ;移动完7次后跳到开始重来,以达到循环流动效果;- 延时子程序 -DELAY:MOV R0,#255 ;延时一段时间D1: MOV R1,#255DJNZR1,$DJ
2、NZR0,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 ;输
3、出高电平,使LED5熄灭CLR ;输出低电平,使LED6点亮ACALL DELAY;调用延时子程序SETB ;输出高电平,使LED6熄灭CLR ;输出低电平,使LED7点亮ACALL DELAY;调用延时子程序SETB ;输出高电平,使LED7熄灭CLR ;输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETB ;输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMPSTART;8个LED流了一遍后返回到标号START处再循环;- 延时子程序 -DELAY:MOV R0,#255;延时一段时间D1: MOV R1,#255DJNZR1,$DJNZR0,D1R
4、ET ;子程序返回END;程序终止ORG 0000H ;上电复位,程序从0000H开始执行START:MOV SP,#60H ;堆栈初始化为60HMOV DPTR,#LIU_TAB ;流水花样表首地址送DPTRLOOP: CLR AMOVCA,A+DPTRCJNEA,#0FFH,SHOW;检查流水结束标志AJMPSTART ;所有花样流完,则从头开始重复流SHOW: MOV P1,A;将数据送到P1口ACALL DELAYINC DPTRAJMPLOOP;- 延时子程序 -DELAY:MOV R0,#255;延时一段时间D1: MOV R1,#255DJNZR1,$DJNZR0,D1RET ;
5、子程序返回;- 下面是流水花腔数据表 -LIU_TAB: DB 01111111B ;二进制表示的流水花腔数据DB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB 01111111BDB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;十六进制表示DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB 7FH,3FH,1FH,0FH,07H,03H,01H,00HDB 0FFH ;流水花样
6、结束标志0FFHEND;程序结束延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2 DJNZ R2 ,L1DJNZ R4 ,L3 RETorg 00h;程序上电从00h开始ajmpmain;跳转到主程序org0030h;主程序起始地址main:mov a,#0feh;给A赋值成loop:movp1,a;将A送到P1口,发光二极管低电平点亮lcall delay;挪用延时子程序rl a;累加器A循环左移一名ajmploop;从头送P1显示delay:mov r3,#20;最外层循环二十
7、次d1:mov r4,#80;次外层循环八十次d2:mov r5,#250;最内层循环250次djnz r5,$;总共延时2us*250*80*20=djnz r4,d2djnz r3,d1retend如何精准计算延时子程序的执行时刻?汇编语言的一大优势确实是能够精准操纵程序的执行时刻,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,12M晶振延时约253毫秒DELAY:MOV R4,#2执行1个机械周期,耗时1微秒L3: MOV R2 ,#250执行1个机械周期,耗时1微秒L1: MOV R3 ,#251执行1个机械周期,耗时1微秒L2: DJNZ R3 ,L2执行2个机械周期,反复执行251次(2x251)502微秒)DJNZ R2 ,L1执行2个机械周期,反复执行250次(15022)*250126250微秒)DJNZ R4 ,L3执行2个机械周期,反复执行2次 (1+1+502+126250+2)*2253512微秒)RETdelay 加上第一条总共延时1+253512=253513微秒
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1