单片机程序设计_第1页
单片机程序设计_第2页
单片机程序设计_第3页
单片机程序设计_第4页
单片机程序设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

单片机程序设计1.将0~9这十个数循环送P1口七段LED上显示。2.硬件电路与工作原理让学生根据任务分析硬件要求,画出具体电路,并在实验开发板上接线3.程序设计(给出控制程序)

8051

START:ORG

0100H

MAIN:MOV

R0,#00H

MOV

DPTR,#TABLE

DISP:MOV

A,R0

MOVC

A,@A+ADPTR

MOV

P1,A

ACALL

DELAY

INC

R0

CJNE

R0,#0AH,DISP

AJMP

MAIN

DELAY:MOV

R1,#0FFH

LOOP0:MOV

R2,#0FFH

LOOP1:DJNZ

R2,LOOP1

DJNZ

R1,LOOP0

RET

TABLE:DB

0C0H,0F9H,

DB

0A4H,0B0H

DB

99H,

92H

DB

82H,

0F8H

DB

80H,

90H

END

LED显示电路控制程序单片机汇编语言程序设计的基本步骤如下:(1)题意分析。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。(2)画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。(3)分配内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。§3-1程序设计简介(4)编制汇编源程序。(5)仿真、调试程序。(6)固化程序。程序编写做到:占用存储空间少;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构等构成。

语句3语句2顺序结构

入口语句1出口分支结构入口条件满足否?分支1出口YN分支2循环结构入口处理修改条件条件满足否?Y出口N

简单程序也就是顺序程序,它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节通过实例介绍简单程序的设计方法。例3.14字节(双字)加法。将内部RAM30H开始的4个单元中存放的4字节十六进制数和内部RAM40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。§3-2简单顺序程序的设计(1)题意分析。

题目的要求如图3.1所示。图3.1例3.1题意分析示意图

ORG0000HLJMPMAINMAIN:ORG0080H MOV A,30H ADD A,40H MOV 40H,A ;最低字节加法并送结果

MOV A,31H ADDC A,41H MOV 41H,A ;第二字节加法并送结果(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:

MOV A,32H ADDCA,42H MOV 42H,A ;第三字节加法并送结果

MOV A,33H ADDC A,43H MOV 43H,A ;第四字节加法并送结果,进位

SJMP$;位在CY中

END例3.2、设在外RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。

分析:####¥¥¥¥0000####0000¥¥¥¥ORG0000HLJMPMAINORG0030HMAIN:MOVR0,#30HMOVR1,#40HMOVR7,#08HLOOP:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR7,LOOPSJMP$解:核心指令ANLORG1000HMODE:MOVR0,#60HMOVXA,@R0MOVB,AANLA,#0F0HSWAPAMOVX@R0,AMOVA,BANLA,#0FHINCR0MOVX@R0,ASJMP$END一、分支结构与分支程序设计结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。如:判(A)=Z或NZ,转移判(CY)=1或0,转移判(bit)=1或0,转移

CJNE比较不相等转移

§3-3分支程序的设计

例3.3、设a存放在累加器A中,b存放在寄存器B中,要求按下式计算Y值,并将结果Y存于累加器A 中,试编写程序。

a-b(a≥0)Y=a+b(a<0)

解:本题关键是判a是正数,还是负数;由ACC.7便知。

ORG1000HBR:JBACC.7,MINUSCLRCSUBBA,BSJMPDONEMINUS:ADDA,BDONE:SJMP$END

分支程序实例1.两分支程序设计例3.4两个无符号数比较(两分支)。内部RAM的20H单元和30H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果显示在实验板上:若(20H)≥(30H),则P1.0管脚连接的LED发光;若(20H)<(30H),则P1.1管脚连接的LED发光。如何让LED发光?给该引脚送低电平即可。(1)题意分析。

本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),程序可以选择两个流向之中的某一个,分别点亮相应的LED。

比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则X≥Y;若CY=1,有借位,则X<Y。程序的流程图如图3.2所示。

图3.2两数比较流程图(2)汇编语言源程序。

XDATA20H;数据地址赋值伪指令DATAYDATA30HORG 0080HMOV A,X ;(X)→ACLR C ;CY=0

SUBB A,Y ;带借位减法,A-(Y)-CY→A

JCL1 ;CY=1,转移到

L1

CLR P1.0 ;CY=0,(20H)≥(30H),点亮P1.0连接的LEDSJMP FINISH;直接跳转到结束等待

L1:CLRP1.1 ;(20H)<(30H),点亮P1.1连接的LEDFINISH:SJMP$例3.5:内部RAM30H和31H中分别存有2个8位无符号数,编程找出其中的大数存入内部32H单元中。

ORG 0040HMOV A,30H CLR C SUBB A,31H JCL1;CY=1,转移到

L1ADDA,31H MOV32H,ASJMP FINISH;直接跳转到结束等待

L1:MOVA,31HMOV32H,A FINISH:SJMP$ (3)执行结果。执行该程序之前,利用单片机开发系统先往内部RAM的20H和30H单元存放两个无符号数(可以任意设定),执行后观察点亮的LED是否和存放的数据大小相一致。可以通过伟福仿真软件看到程序执行的结果。必须注意:要有初始值。循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:1、初始化部分(循环计数器、地址指针初始化)2、循环处理部分(主体,需要重复执行的部分)3、循环控制部分(修改地址指针、修改变量、检测循环结束条件)4、循环结束部分(对结果分析、处理,存放结果)§3-4循环程序的设计先处理,后判断:

开始初始化部分处理部分修改变量循环结束?结束部分结束YN先判断,后处理:

开始初始化部分修改变量循环结束?Y结束部分结束N处理部分循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数未知,按问题条件控制循环是否结束。

1、单循环程序(1)循环次数是已知的程序例3.6、已知片内RAM的40H单元开始依次存放10个8位无符号二进制数,要求找出其中的最大数存入3FH单元中,试编程。解:先将第一个数和第二个数比较,大者送入累加器A中,然后拿累加器中A的数与第三个数比较,依次比较下去。最后累加器A中剩下的是最大数。比较大小用减法指令,注意恢复累加器A中的原来的大数。

START:MOVR2,#09H;循环计数初值(循环次数已知)

MOVR0,#40H;地址指针初值

MOVA,@R0;取数

LOOP:INCR0;调整地址指针CLRCSUBBA,@R0JCNEXT1;CY=1(后者大)转NEXT1ADDA,@R0;恢复A中的原来大数SJMPNEXT2NEXT1:MOVA,@R0;大数送给ANEXT2:DJNZR2,LOOP;控制循环次数MOV3FH,ASJMP$P101页延时程序例子延时50毫秒的子程序。DEL:MOVR7,#200DEL1:MOVR6,#123NOPDEL2:DJNZR6,DEL2;200×123×2us49.2msDJNZR7,DEL1RETDEALY:MOVR7,#20DEL3:MOVR6,#123DEL2:MOVR5,#200NOPDEL1:DJNZR5,DEL1DJNZR6,DEL2DJNZR7,DEL3RET约为延时1秒子程序START: MOV R2,#08H ;设置循环次数

MOV A,#0FEH ;从P1.0→P1.7使LED逐 ;个亮过去NEXT:MOV P1,A ;点亮LED LCALLDEALY RL A

DJNZ R2,NEXT ;次数减1,不为零,继续 ;点亮下一个LED SJMP STARTDEALY:MOVR7,#20H……

P1口循环点亮发光二极管程序§3-5常用子程序介绍步骤:1、确定子程序名称,即入口标号。2、确定子程序的输入/输出参数。3、确定所用的寄存器和存储单元,以便现场保护。断点保护由指令自动完成。4、确定子程序的算法,编写源程序。例3.7:

温馨提示

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

评论

0/150

提交评论