




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、9.1.1 明确工作任务 用任务3制作的8位LED跑马灯电路,通过编写程序控制与P0口相连的8个LED灯循环点亮,每个灯点亮的时间为0.5秒。任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 9.1.2 跟我想 1 编写跑马灯程序思路 该任务要求通过编写程序,使连接P0口的8个LED灯循环点亮(跑马灯),每个灯点亮的时间为0.5秒。怎样来编写程序呢?我们用一个寄存器R1存储用于点亮P0口的LED灯的数据,R1首先存储点亮与P0.0相连的LED灯D0(数据为:0000001H),可以通过指令MOV P0,R1将与P0.0相连的LED0点亮,然后调用延时0.5秒
2、的程序,延时时间到后,可以带进位位左移指令RR A,将R1中的数据左移一位(数据为:00000010),再送给P0口,点亮与P0.1相连的LED灯D1,依次类推;用寄存器R2存储LED灯从D0移动到D7的移动次数为8次,每移一次减1,R2的值为0时,表示第1次循环结束,接下来又从点亮D0开始下一个循环,就这样反复循环点亮,达到跑马灯的效果。 在编写程序之前,让我们学一学相关指令的功能和用法。任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 9.1.3 跟我学跟我学1)减)减1不为零循环转移指令不为零循环转移指令DJNZ DJNZ Rn,rel ;PCPC+2
3、,Rn(Rn)-1,若(Rn)0,则PCPC+rel DJNZ direct,rel ;PCPC+2, direct(direct)-1,若(direct)0,则 PCPC+rel; 每执行一次循环转移指令,第一操作数(Rn或direct中的数)减1,并保存,若减1后结果不为零,则转移至目的地(标号处);若减1后结果为零,则程序按顺序执行下一条指令。 任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 2)移位指令)移位指令 移位指令的功能是对累加器A的内容进行循环移位,除了带进位标志位CY的移位指令会影响CY外,其它指令都不影响CY、AC、OV等标志位。 R
4、L A ;循环左移指令; RLC A ;带进位位循环左移指令;图6-1 RL A指令示意图图6-2 RLC A 指令示意图任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 RR A ;循环右移指令; RRC A ;带进位位循环右移指令; 任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 3)堆栈操作指令)堆栈操作指令(1)堆栈的概念 堆栈就是按照堆放货物(先堆下面,先搬上面,即后进先出)的思路,设计一种按后进先出原则组成的存储区,称为堆栈区。在51单片机中,片内RAM都可用做堆栈区。 在使用堆栈前,应设置一个栈底,告诉CP
5、U从那个地址单元开始堆放数据,如栈底为40H单元,第1个数(设:#30H)存放在栈底的上一个单元41H中,则第2个数存放42H单元中,如果有多个数要堆放在堆栈区中,以此类推,当用户取数时,则先从最顶部开始,即最后存的数先取出。在51单片机中有一个专门的堆栈指针寄存器SP,用于存放栈顶单元的地址。任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 (2)堆栈的作用堆栈的作用是在子程序调用与中断时,用于保存断点地址及片内数据单元的内容。(3)堆栈的使用方法 需要用到堆栈时,首先通过MOV SP,#data指令设置栈底,如:MOV SP,#60H. 注意:注意:51
6、单片机复位后,默认的栈底为07H,即SP的默认值为07H。因07H地址在RAM的工作寄存器区,所以用07H作为栈底,不是很合适,使用时必须另设栈底。在子程序调用或响应中断后,CPU会直接将断点地址压入堆栈区,但是要将某个数据保存在堆栈区就必须用压栈指令PUSH和出栈指令POP。任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 压栈指令格式为:PUSH direct ;SPSP+1 ;(SP)(direct) 执行时堆栈指针SP先加1,然后将直接地址direct中的数据压至SP所指定的地址单元。如:MOV SP ,#50H ;设置栈底为50H单元 MOV 30
7、H,#25H ;将立即数25H送30H单元 PUSH 30H ;将30H中的数据25H压入堆栈区51H单元出栈指令格式为:POP direct ;(direct)(SP) ;SPSP-1 该指令执行时先将SP所指单元数据弹出至direct所指的地址单元,然后SP减1指向新的栈顶单元地址。 4)子程序调用指令)子程序调用指令 子程序调用指令的功能调用子程序,执行时先将断点地址(调用指令的下一条指令的首地址)压入堆栈区,然后将子程序的首地址送PC,执行子程序。 (1)长调用指令LCALL addr16 ;PCPC+3 ;SPSP+1 ;(SP)PC7-0 ;SPSP+1 ;(SP)PC15-8 ;
8、 PCaddr16 这条指令调用地址为addr16(在写程序时都用子程序标号)处的子程序。执行时,先将PC+3(因为该指令是3字节指令)以获得下一条指令的首地址(断点地址),并把它压入SP所指定的堆栈区,然后将子程序标号所在的16位地址送PC指针,使CPU转去执行子程序。LCALL 中的addr16取值范围为16位地址,所以子程序可位于程序存储器64KB空间的任何一处。(2)短调用指令ACALL addr11 ;PCPC+2 ;SPSP+1 ;(SP)PC7-0 ;SPSP+1 ;(SP)PC15-8 ; PC10-0addr10-0 执行该指令时,先将PC+2得到下一条指令的16位首地址,并
9、将其压入堆栈,最后子程序标号所在的子程序入口地址送给PC,CPU转入子程序执行。由于短调用指令中的PC高5位地址不变,所以其转移的范围为2KB。任务任务9 用自制的跑马灯电路实现用自制的跑马灯电路实现8只只LED循环点亮循环点亮 ORG 0000H AJMP START ;转移至标号START ORG 0030H ;以下程序下载到单片机的ROM时,从ROM的0030地址开始存储 START: MOV R1, #00000001B ;将立即数01H送R1 MOV R2, #08 ;将立即数8送R2,循环8次(8个灯)LOOP: MOV A, R1 ;将R1中的数送A MOV P0, A ;将A中的数送P0口,点亮LED灯 CALL DEL1S ;调用延时子程序,控制亮灯时间 RL A ;A中的数据左移一位,为下一次亮灯作准备 MOV R1, A ;左移后的数据存放在R1 DJNZ R2, LOOP ;循环了8次吗?没有则继续 AJMP START ;完成8次循环,转移至START重新开始 ;*1秒钟延时子程序* DEL1S: MOV R3,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- VB语言应用软件试题及答案解析
- 风险管理在公司风险承受能力中的作用试题及答案
- 小学线上教学工作总结模版
- 公司反担保协议书
- 赔偿转让协议书
- 医院代持股协议书
- 快速了解VB考试试题与答案
- 计件合同范本
- 软件外包协议书
- 视频会餐协议书
- 《大客户销售培训》课件
- 多学科协作危重孕产妇管理制度
- GB 4793-2024测量、控制和实验室用电气设备安全技术规范
- 24秋国家开放大学《教育心理学》终结性考核论文大作业参考答案
- DB35T 2032-2021 耕地质量监测与评价技术规程
- 《证券投资学》全套教学课件
- 2024年秋新北师大版七年级上册数学教学课件 第五章 一元一次方程 第4节 问题解决策略:直观分析
- DLT5196-2016 火力发电厂石灰石-石膏湿法烟气脱硫系统设计规程
- DL∕ T 802.3-2007 电力电缆用导管技术条件 第3部分:氯化聚氯乙烯及硬聚氯乙烯塑料电缆导管
- CJT 511-2017 铸铁检查井盖
- 活动执行实施合同范本
评论
0/150
提交评论