实现8个LED流水灯汇编语言程复习课程_第1页
实现8个LED流水灯汇编语言程复习课程_第2页
实现8个LED流水灯汇编语言程复习课程_第3页
实现8个LED流水灯汇编语言程复习课程_第4页
实现8个LED流水灯汇编语言程复习课程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实 现 8 个 L ED 流 水 灯 汇编语言程 精品文档 START: MOV ACC,#0FEH ;ACC 中先装入 LED1 亮的数据(二进制的 11111110 ) 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 次后跳到开始重来,以达到循环流动效果 延时子程序 DE

2、LAY: MOV R0,#255 ; 延时一段时间 D1: MOV R1,#255 DJNZ R1,$ DJNZ R0,D1 RET ;子程序返回 END ; 程序结束 收集于网络,如有侵权请联系管理员删除 精品文档 START 处再循环 START: CLR P1.0 ACALL DELAY SETB P1.0 CLR P1.1 ACALL DELAY SETB P1.1 CLR P1.2 ACALL DELAY SETB P1.2 CLR P1.3 ACALL DELAY SETB P1.3 CLR P1.4 ACALL DELAY SETB P1.4 CLR P1.5 ACALL DEL

3、AY SETB P1.5 CLR P1.6 ACALL DELAY SETB P1.6 CLR P1.7 ACALL DELAY SETB P1.7 ACALL DELAY AJMP START ; 延时子程序 DELAY: MOV R0,#255 D1: MOV R1,#255 DJNZ R1,$ DJNZ RET END R0,D1 ;P1.0 输出低电平 , 使 LED1 点亮 ;调用延时子程序 ;P1.0 输出高电平 , 使 LED1 熄灭 ;P1.1 输出低电平 ,使 LED2 点亮 ;调用延时子程序 ;P1.1 输出高电平 , 使 LED2 熄灭 ;P1.2 输出低电平 ,使 LE

4、D3 点亮 ;调用延时子程序 ;P1.2 输出高电平 , 使 LED3 熄灭 ;P1.3 输出低电平 ,使 LED4 点亮 ;调用延时子程序 ;P1.3 输出高电平 , 使 LED4 熄灭 ;P1.4 输出低电平 ,使 LED5 点亮 ;调用延时子程序 ;P1.4 输出高电平 , 使 LED5 熄灭 ;P1.5 输出低电平 ,使 LED6 点亮 ;调用延时子程序 ;P1.5 输出高电平 , 使 LED6 熄灭 ;P1.6 输出低电平 ,使 LED7 点亮 ;调用延时子程序 ;P1.6 输出高电平 , 使 LED7 熄灭 ;P1.7 输出低电平 ,使 LED8 点亮 ;调用延时子程序 ;P1.7

5、 输出高电平 , 使 LED8 熄灭 ;调用延时子程序 ;8 个 LED 流了一遍后返回到标号 ;延时一段时间 ;子程序返回 ;程序结束 收集于网络,如有侵权请联系管理员删除 精品文档 ORG 0000H START: MOV SP,#60H ;上电复位,程序从 MOV DPTR,#LIU_TAB LOOP: CLR A MOVC A,A+DPTR CJNE A,#0FFH,SHOW AJMP START SHOW: MOV P1,A ACALL DELAY INC DPTR AJMP LOOP 0000H 开始执行 ;堆栈初始化为 60H ; 流水花样表首地址送 DPTR ;检查流水结束标志

6、 ;所有花样流完 ,则从头开始重复流 ;将数据送到 P1 口 DELAY: MOV R0,#255 D1: MOV R1,#255 DJNZ R1,$ DJNZ R0,D1 RET 延时子程序 ;延时一段时间 ;子程序返回 ; 下面是流水花样数据表 ;二进制表示的流水花样数据 LIU_TAB: DB 01111111B DB 10111111B DB 11011111B DB 11101111B DB 11110111B DB 11111011B DB 11111101B DB 11111110B DB 11111110B DB 11111101B DB 11111011B DB 111101

7、11B DB 11101111B DB 11011111B DB 10111111B DB 01111111B DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ; 十六进制表示 DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H DB 0FFH; 流水花样结束标志 0FFH END ;程序结束 收集于网络,如有侵权请联系管理员删除 精品文档 延时子程序, 12M 晶振延时约 2

8、50 毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET org 00h ;程序上电从 00h 开始 ajmp main ;跳转到主程序 org 0030h ;主程序起始地址 main: mov a,#0feh ;给 A 赋值成 11111110 loop: mov p1,a ;将 A 送到 P1 口 ,发光二极管低电平点亮 lcall delay ; 调用延时子程序 rl a ; 累加器 A 循环左移一位 ajmp loop ; 重新送 P1 显示

9、delay: mov r3,#20 ;最外层循环二十次 d1: mov r4,#80 ;次外层循环八十次 d2: mov r5,#250 ;最内层循环 250 次 djnz r5,$ ;总共延时 2us*250*80*20=0.8S djnz r4,d2 收集于网络,如有侵权请联系管理员删除 精品文档 djnz r3,d1 ret end 如何精确计算延时子程序的执行时间? 汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写 一些对时序要求严格的外围器件驱动时由为重要! ;延时子程序, 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个机器周

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论