单片机应用技术第4章

合集下载

单片机原理及应用第四章课后题答案

单片机原理及应用第四章课后题答案

第四章作业答案16.MCS-51单片机系统中,片外程序存储器和片外数据存储器共用16位地址线和8位数据线,为何不会产生冲突?解:数据存储器的读和写由RD和WR信号控制,而程序存储器由读选通信号PSEN控制,这些信号在逻辑上时序上不会产生冲突;程序存储器访问指令为MOVC,数据存储器访问指令为MOVX。

程序存储器和数据存储器虽然共用16位地址线和8位数据线,但由于二者访问指令不同,控制信号不同,所以两者虽然共处于同一地址空间,不会发生总线冲突。

18.某单片机应用系统,需扩展2片8KB的EPROM和2片8KB的RAM,采用地址译码法,画出硬件连接图,并指出各芯片的地址范围。

解:硬件连接电路图如图4.18所示。

各芯片的地址范围为:2764(1#):0000H~1FFFH 2764(2#):2000H~3FFFH6264(1#):4000H~5FFFH 6264(2#):6000H~7FFFH图4.18 4.18题硬件连接电路图21.8255A的端口地址为7F00H~7F03H,试编程对8255A初始化,使A口按方式0输入,B口按方式1输出。

解:程序如下:ORG 0000HLJMP STARTORG 0030HSTART:MOV SP, #60HMOV DPTR,#7F03HMOV A,#10010100BMOVX @DPTR,ASJMP $END25.使用8255A或者8155的B端口驱动红色和绿色发光二极管各4只,且红、绿发光二极管轮流发光各1s,不断循环,试画出包括地址译码器、8255A或8155与发光管部分的接口电路图,并编写控制程序。

解:使用8255A,电路连接图如图4.25所示。

图4.25 4.25题硬件连接电路图其中,PB0~PB3接红色发光二极管,PB4~PB7接绿色发光二极管。

设MCS-51单片机主频为12MHz。

程序如下:ORG 0000HLJMP STARTORG 0030HSTART:MOV SP, #60HMOV DPTR, #7FFFH ; 数据指针指向8255A控制口MOV A, #80HMOVX @DPTR, A ; 工作方式字送8255A控制口MOV DPTR, #7FFDH ; 数据指针指向8255A 的B口MOV A, #0FH ; 置红色发光二极管亮LP1:MOVX @DPTR, A ; 置红色发光二极管亮LCALL DELAY ; 调用1S延时子程序CPL A ; 置发光二极管亮反色SJMP LP1 ; 循环执行DELAY:MOV R7,#10 ; 1s延时子程序D1:MOV R6,#200D2:MOV R5,#248D3:NOPDJNZ R5,D3DJNZ R6,D2DJNZ R7,D1RETEND采用定时器T0方式1中断实现1s定时。

单片机原理与应用第四章作业答案

单片机原理与应用第四章作业答案

4-9 试计算片内RAM区40H~47H单元中8个数据的平均值,结果存放在4Ah中;说明:先对8个数求和,结果放在30h,31h;然后用右移3次求平均。

ORG 0000HSJMP MAINORG 0030HMIAN: MOV R0,#40HMOV R1,#30HMOV 30H,#00HMOV 31H,#00HMOV R2,#8CLR CL1: MOV A,@R1ADDC A,@R0MOV @R1,AINC R0INC R1MOV A,@R1ADDC A,#00HMOV @R1,ADEC R1DJNZ R2,L1INC R1L2: MOV R2,#03HMOV A,@R1RRC AMOV @R1,AINC R1MOV A,@R1RRC AMOV @R1,ADEC R1DJNZ R2,L2DEC R1MOV 4AH,@R1SJMP $4-10 在起始地址为2100H,长度为64H的数表中查找ASCII码’F’,如果有,将其值送到1000H单元,如果没有,将0FFH送1000H单元.ORG 0000HSJMP MAINORG 0030HMAIN: MOV R2,#64MOV DPTR,#2100HL2: MOVX A,@DPTRCJNE A,#’F’,L1MOV DPTR,#1000HMOV A,#00HMOVX @DPTR,ASJMP LASTL1: INC DPTRDJNZ R2,L2MOV A,#0FFHMOVX @DPTR,ALAST: SJMP $4-11 试编写将片内40H~60H 单元中的内容传送到外部RAM以2000h为首地址的存放区域中,并将原数据全部清零。

ORG 0000HSJMP MAINORG 0030HMIAN: MOV R0,#40HMOV DPTR,#2000HMOV R1,#20HL1: MOV A,@R0MOVX @DPTR,AMOV @R0,#00HINC R0INC DPTRDJNZ R1,L1SJMP $4-12 编写,内部RAM50H‐59H 10个单元内容的平均值,并存放在5AH单元。

单片机原理及应用(C51版)第4章单片机C语言程序设计精品PPT课件

单片机原理及应用(C51版)第4章单片机C语言程序设计精品PPT课件
第9章 单片机C语言程序设计
4.1 Keil C简介与环境设置 4.2 C51 4.3 C51基础知识及表达式 4.4 C51控制语句 4.5 数组 4.6 指针 4.7 函数 4.8 C51开发工具使用 4.9 Keil C调试方法
一般情况下单片机常用的程序设计语言有两种:
4.2 Cx51简介
4.2.1 Cx51的扩展
Cx51编译器兼容ANSI C标准,又扩展支持了8051微处 理
器,其扩展内容如下: ① 存储区; ② 存储区类型; ③ 存储模型; ④ 存储类型说明符; ⑤ 变量数据类型说明符; ⑥ 位变量和位可寻址数据; ⑦ SFR; ⑧ 指针; ⑨ 函数属性。
部RAM地址为0x80-0xFF的128字节存储单元,这些 存储器一般用作计时器、计数器、串口、并口和外围 使用。
4. sfr16类型 sfr16类型用于声明两个连续地址的特殊功能寄
存器(地址范围为0~65 535)。 5.其它类型 C51程序中常用的数据类型还有: char(字符型) unsigned char(无符号字符型) int(整型) unsigned int(无符号整型)等类型。
4.2.2 存储区
8051单片机支持程序存储器和数据存储器的分离,存 储器根据读写情况可以分为:程序存储区(ROM)、快速 读写存储器(内部RAM)、随机读写存储器(外部RAM)。
1. 程序存储器(code)
在中程序存储器是只读存储器,其空间为64K ,在 C51中用code关键字来声明访问程序存储区中的 变量。 。
● 汇编语言:
汇编语言具有执行速度快、占存储空间少、对硬件可直 接编程等特点,因而特别适合在对实时性能要求比较高的 情况下使用。
● C语言:
C语言克服了汇编语言的不足之处,同时又增加了代码 的可读性,C语言大多数代码被翻译成目标代码后,其效 率和汇编语言相当。特别是C语言的内嵌汇编功能,使C语 言对硬件操作更加方便。

单片机原理及应用教程(C语言版)-第4章 单片机C语言及程序设计

单片机原理及应用教程(C语言版)-第4章 单片机C语言及程序设计

4.3.2 C51变量的存储类型
三、外部存储
外部(存储)变量:用extern声明的变量为外 部变量,是在其它文件定义过的全局变量。 用 extern声明后,便可以在所声明的文件中使用。
需要注意的是:在定义变量时,即便是全局变 量,也不能使用extern修饰。
4.3.2 C51变量的存储类型
四、寄存器存储
动态(存储)变量:用auto定义的为动态变量, 也叫自动变量。
作用范围:在定义它的函数内或复合语句内部 当定义它的函数或复合语句执行时,C51才为 变量分配存储空间,结束时所占用的存储空间释放。 定义变量时,auto可以省略,或者说如果省略 了存储类型项,则认为是动态变量。动态变量一般 分配使用寄存器或堆栈。
“C51”概念:为了与ANSI C区别,把“单片 机C语言”称为“C51”,也称为“Keil C”。
4.1.1 C语言编程的优势
在编程方面,使用C51较汇编语言有诸多优势: 1)编程容易 2)容易实现复杂的数值计算 3)容易阅读与交流 4)容易调试与维护 5)容易实现模块化开发 6)程序可移植性好
本 无符号整型 unsigned int 2字节 0~65535 有符号整型 signed int 2字节 -32768~32767
类 无符号长整型 unsigned long 4字节 0~4294967295
型 有符号长整型 signed long 4字节 -2147483648~2147483647
MCS-51单片机有四个存储空间,分成三类, 它们是片内数据存储空间、片外数据存储空间和 程序存储空间。
MCS-51单片机有更多的存储区域:由于片内 数据存储器和片外数据存储器又分成不同的区域, 所以单片机的变量有更多的存储区域。

单片机应用技术第4章.

单片机应用技术第4章.

ALOP: MOV A,P1
ADD A,R2
MOV R2,A
CLR A
ADDC A,R3
MOV R3,A
LCALL DY10ms
DJNZ R4,ALOP
MOV A,R3
MOV B,R2
MOV R0,30H
MOV R6,#0
MOV R5,#100
LCALL SUM
CJNE A,#50,NEXT
NEXT: JC GRET
当用PC作基址寄存器时,由于PC本身是一个程序计数器,与 指令的存放地址有关,所以查表时其操作有所不同。也可分为三 步:
① 变址值(表中要查的项与表格首地址之间的间隔字节数)→A;
② 偏移量(查表指令下一条指令的首地址到表格首地址之间的间隔字 节数)+A→A;
③ 执行MOVC A,@A+PC指令。
(双字节)存放在R3R4中,(设S<65536)。
解:程序如下:
SXN: MOV R2,#N
;置数据长度(循环次数)
MOV R3,#00H
;和单元(高8位)清0
MOV R4,#00H
;和单元(低8位)清0
MOV R0,#50H
;求和数据区首址
LOOP:MOV A,R4
;读前次低8位和
ADD A,@R0
等值伪指令 EQU(Equate)
格式:字符名称 EQU 数据或汇编符号 功能:将一个数据或特定的汇编符号赋予规定的字符名称。
ABC EQU 30H ;ABC=30H, #ABC=#30H
数据地址赋值伪指令 DATA
格式:字符名称 DATA 表达式 功能:将数据地址或代码地址赋予规定的字符名称。
例4-19
用查表程序求0~40之间整数的立方。已知该整 数存在内RAM 30H中,查得立方数存内RAM 30H (高8位)31H。

中职教育-单片机技术应用课件:第4章 汇编语言与仿真系统(1).ppt

中职教育-单片机技术应用课件:第4章  汇编语言与仿真系统(1).ppt

第1章单片机基础知识
4.2 汇编语言程序设计
程序设计是学习单片机的重要内容,因为单片机系统都 是在软件的控制下完成规定的动作或功能,所以软件是硬件 的灵魂。程序设计也是单片机教与学的难点,有些同学因为 不会程序设计而最终无法跨入单片机应用的大门。要学好程 序设计,除了应熟悉、掌握常用的指令外,还必须多看(对 程序设计来说,模仿往往是学习的起步,不但要看程序,更 要看流程图)、多练(练习是基本知识的消化、巩固过程和 编程技巧的领悟途径)、多总结(如循环程序等很有规律, 总结出规律后,几乎可以一劳永逸地采用)。当然程序也并 非都由自己亲手编制,现在的网络资源非常丰富,利用网络 可以整合众人的智慧,互相“借用”别人的“劳动成果” (比如现成的子程序)也是一种方法或途径。
第1章单片机基础知识
【例4-1】
ORG
0050H
MOV MOV
SP,#60H R0,#2FH
……
上述ORG伪指令说明其后面程序的目标代码在存储器中存放 的起始地址是0050H,即: 存储器地址 目标程序
0050H
75 81 60
0053H
78 2F
……
第1章单片机基础知识
(2)等值指令 EQU 指令格式:字符名称 EQU 数字或汇编符号 功能:使指令中的字符名称等价于给定的数字或汇编符号。 使用等值指令可给程序的编制、调试、修改带来方便,如果 在程序中要多次使用某一地址,那么由EQU指令将其赋值给 一个字符名称,一旦需要对其进行变动,就只要改变EQU命 令后面的数字即可,而不需要对程序中涉及该地址的所有指 令逐句进行修改(人工逐句进行修改往往还会漏掉该修改的 地方,从而引起程序单元使用混乱,产生严重后果)。但要 注意,由EQU等值的字符名称必须先赋值后使用,且在同一 个源程序中,同一个标号只能赋值一次。

单片机原理与应用(陈桂友)第4章_指令系统


单片机原理及应用
4.3
寻址方式
8/79
操作数是指令的重要组成部分,它指定了参与运算的数或数所在 单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方 式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能 有重大影响。8051单片机共有7种寻址方式,描述如下:
1.立即寻址
指令中的源操作数是立即数,叫做立即寻址。立即数的类型可以 是:二进制(B)、十进制、十六进制(H)、整数、序数或者字符。立即 数的字长可以是8位或16位。 例如: MOV A,#61H 这条指令是把61H这个数据送入到累加器A中。 例如: MOV DPTR,#2050H 这条指令是把2050H这个数据送入到数据指针DPTR中。
程序存储器 PC 11100101 操作码 60H 01100000 直接地址
RAM 89H 89H ACC 0E0H
4:59:21
版权所有。
单片机原理及应用
10/79
3.寄存器寻址
指定某一可寻址的寄存器的内容为操作数,对寄存器ACC,B, DPTR和CY(进位标志,也是布尔处理机的累加器),其寻址时具体的 寄存器已隐含在其操作码中。而对选定的8个工作寄存器R7~R0,则用 指令操作码的低3位指明所用的寄存器。在应用中,可以先通过PSW中 的RS1、RS0两位来选择寄存器组,再用操作码中低3位来确定是组内哪 一个寄存器,达到寻址的目的。 例如:INC R5 ;把寄存器R3的内容加1后再送回R5
8位带符号偏移量。 当前工作区(0~3区)的工作寄存器(n=0,1,„,7) 可作地址寄存器的工作寄存器R0和R1(i=0,1) X寄存器内容 由X寄存器寻址的存储单元的内容 表示数据的传送方向 表示位操作数取反 表示逻辑与操作 表示逻辑或操作 表示逻辑异或操作

单片机原理及应用教案-第4章

第4课教学内容:2.4.2数据传送指令及要点分析2.4.3算术运算类指令及要点分析2.4.4逻辑操作与移位指令及要点分析2.4.5控制转移指令及其偏移量的计算2.4.6位操作指令2.4.7对指令的进一步说明教学目标:了解:单片机指令的分类与格式。

掌握:单片机指令的寻址方式,内部数据传送指令特点与应用,算术运算类指令及要点,逻辑操作与移位指令及要点,程序转移指令的相对偏移量计算,位操作指令的特点,PSW标志位的作用。

课时安排:3 课时教学重点:各类指令特点与应用教学提示:一、重点内容与要点分析1.数据传送类指令的共性:1)操作:把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数修改为源操作数。

2)若要求在进行数据传送时,不丢失目的操作数,则可以用交换型的传送指令。

3)数据传送指令不影响标志C、AC和OV,不包括奇偶标志P。

对于P一般不加说明。

POP PSW 或 MOV PSW,#(x)可能使某些标志位发生变化。

助记符有:MOV,MOVX,MOVC,XCH,XCHD,SWAP,POP,PUSH 8种。

源操作数可为:寄存器、寄存器间接、直接、立即、寄存器基址加变址 5种寻址方法;目的操作数可为:寄存器、寄存器间接、直接 3种寻址方法。

例1:设内部RAM的(30H)=40H,(40H)=10H ,(10H)=00H ,端口P1上的内容为11001010B(后缀B表示二进制数),分析下面7条指令分别属于上述16条指令中的哪一条,操作数采用的寻址方法,以及指令执行后各单元及寄存器、端口的内容。

MOV R0,#30H ;属于第8条(寄存器寻址、立即数寻址)(R0)=#30HMOV A,@R0 ;3条(寄存器寻址、寄存器间接寻址)(A)=#40HMOV R1, A ;2条(寄存器寻址、寄存器寻址)(R1)=#40HMOV B, @R1 ;13条(直接寻址、寄存器间接寻址)(B)=#10HMOV @R1, P1 ;14条(寄存器间接寻址,直接寻址)(40H)=#11001010B MOV P2, P1 ;15条(直接寻址、直接寻址)(P2)=#11001010B MOV 10H, #20H ;10条(直接寻址、立即寻址)(10H)=#20H指令执行以后,P1口的内容均为11001010B,其它内容如上。

精品课件-单片机原理及应用系统设计-第4章


;
PUSH
DPL
;
保护现场, 将主程序中
; DPTR的低八位放入堆
MOV
DPTR, #TABLE
; 在子程
第四章 单片机程序设计语言
恢复现场,
MOVC A, @A+DPTR
POP
DPL
将主程序中DPTR
; ;
;的低八位从堆栈中弹出
POP 场, 将主程序中DPTR
DPH
; 恢复现
;的高八位从堆栈中弹出
图 4-8 循环程序的典型形式
第四章 单片机程序设计语言
【例 4-4】 冒泡程序。假设有N个数, 它们依次存放 于LIST地址开始的存储区域中, 将N个数比较大小后, 使它 们按照由小到大的顺序排列,
编写该程序的方法: 依次将相邻两个单元的内容作比较, 即第一个数和第二个数比较,第二个数和第三个数比 较, ……, 如果符合从小到大的顺序则不改变它们在内存 中的位置,否则交换它们之间的位置。如此反复比较, 直到 数列排序完成为止。
LJMP MAIN
;
MAIN: MOV A, X
XRL A, Y
; (X)与(Y)进行异或操作
JB ACC.7, NEXT1
; 累加器A的第7位
为1, 两个数
;符号不同, 转移到
第四章 单片机程序设计语言
MOV
CJNE
转移到NEQUAL
CLR
P1.0置0
S
MOV DXCE1COUNTER, #00H
; 将DXCE1COUNTER赋值为0
而如下的注释则给出了额外有用的信息:
JNZ PC Comm_Err
;
第四章 单片机程序设计语言
(2) 注释应与其描述的代码相近, 对单条语句的注释应 放在其上方或右方相邻位置, 不可放在下面, 如放于上方

单片机原理及应用 第4章 MCS-51单片机系统的扩展技术


2.数据存储器典型扩展电路
6264的地址范围为:0000H~1FFFH。
[例题] 在上页图的数据存储器扩展电路中,将片内RAM 以50H单 元开始的16个数据,传送片外数据存储器0000H开始的单元中。
程序如下:
ORG 1000H MOV R0, #50H MOV R7, #16 MOV DPTR, #0000H AGAIN: MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R7, AGAIN RET END ; 数据指针指向片内50H单元 ; 待传送数据个数送计数寄存器 ; 数据指针指向数据存储器6264的0000H单元 ; 片内待输出的数据送累加器A ; 数据输出至数据存储器6264 ; 修改数据指针 ; 判断数据是否传送完成
4.2.1
程序存储器扩展
单片机内部没有ROM,或虽有ROM但容量太小时,必须扩 展外部程序存储器方能工作。最常用的ROM器件是EPROM 1. 常用EPROM程序存储器 EPROM主要是27系列芯片,如:2764(8K)/27128(16K) /27256(32K)/27040(512K)等,一般选择8KB以上的芯片作为 外部程序存储器。
4.2.3 MCS-51对外部存储器的扩展
下图所示的8031扩展系统中,外扩了16KB程序存储器(使用两片 2764芯片)和8KB数据存储器(使用一片6264芯片)。采用全地址译码方 式,P2.7用于控制2―4译码器的工作,P2.6, P2.5参加译码,且无悬空地 址线,无地址重叠现象。 1# 2764, 2# 2764, 3# 6264的地址范围分别为:0000H~1FFFH, 2000H~3FFFH, 4000~5FFFH。
MOV DPTR, #7FFFH ; 数据指针指向74LS377 MOV A, 60H ; 输出的60H单元数据送累加器A MOVX @DPTR, A ; P0口将数据通过74LS377输出
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.2.3 循环程序
循环程序一般包括以下几个部分: ⑴ 循环初值; ⑵ 循环体; ⑶ 循环修改; ⑷ 循环控制; 以上四部分可以有两种组织形式,其结构如图4-6所 示。
例4-10
设Xi均为单字节数,并按顺序存放在以50H为首地址的内RAM存储单元 中,数据长度(个数)N存在R2中,试编程求和S=X1+X2+‥‥+XN,并将S (双字节)存放在R3R4中,(设S<65536)。 解:程序如下: SXN: MOV R2,#N ;置数据长度(循环次数) MOV R3,#00H ;和单元(高8位)清0 MOV R4,#00H ;和单元(低8位)清0 MOV R0,#50H ;求和数据区首址 LOOP:MOV A,R4 ;读前次低8位和 ADD A,@R0 ;低8位累加 MOV R4,A ;存低8位和 CLR A ; ADDC A,R3 ;高8位加进位 MOV R3,A ;存高8位和 INC R0 ;指向下一数据 循环修改 DJNZ R2,LOOP ;判N个数据累加完否? 循环控制 RET ;退出循环 退出循环
定义字节伪指令DB(Define Byte)
格式:DB 8位二进制数表 功能:从指定的地址单元开始,定义若干个8位内存单元的 数据。数据与数据之间用“,”分割。
ORG 4000H TAB:DB 73H,45,”A”,”2” ;(4000H)=73H,(4001H)=2DH…
定义字伪指令DW(Define Word)
一般应按以下几个步骤进行: 1.分析问题,确定算法或解题思路 2.画流程图 3.编写源程序 4.汇编和调试
4.2 程序设计举例
4.2.1 顺序程序
顺序程序是指按顺序依次执行的程序,也称为简单 程序或直线程序。 顺序程序结构虽然比较简单,但也能完成一定的功 能任务,是构成复杂程序的基础。
例4-2
已知16位二进制负数存放在R1R0中,试求其补码,并将结 果存在R3R2中。 解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用 CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位 的进位。注意这里不能用INC指令,因为INC指令不影响标志位。 CONT: MOV A,R0 ;读低8位 CPL A ;取反 ADD A,#1 ;加1 MOV R2,A ;存低8位 MOV A,R1 ;读高8位 CPL A ;取反 ADDC A,#80H;加进位及符号位 MOV R3,A ;存高8位 RET
例4-17
在单片机应用系统中,常用LED数码管显示数码,但显示数字 (≤9)与显示数字编码并不相同,需要将显示数字转换为显示字段 码,通常是用查表的方法。现要求将30H中的显示数字转换为显 示字段码并存入30H。已知共阴字段码表首址为TABD。 解:编程如下: CHAG: MOV DPTR,#TABD;置共阴字段码表首址 MOV A,30H ;读显示数字 MOVC A,@A+DPTR ;查表,转换为显示字段码 MOV 30H,A ;存显示字段码 RET ; TABD:DB 3FH,06H,5BH,4FH,66H;0~4共阴字段码表 DB 6DH,7DH,07H,7FH,6FH;5~9共阴字段码表
4.1.2 伪指令
用汇编语言编写的程序称为汇编语言源程序。而计算机 是不能直接识别源程序的,必须把它翻译成目标程序 (机器语言程序),这个翻译过程叫“汇编”。 在汇编时起控制作用,自身并不产生机器码,而仅是为 汇编服务的一些指令,称为伪指令。伪指令不属于 80C51指令系统。
起始伪指令 ORG(Origin)
解:程序如下: FLASH:MOV A,#01H FSH0: MOV R2,#0AH FLOP: MOV P1,A LCALL DY1s MOV P1,#00H LCALL DY1s DJNZ R2,FLOP RL A SJMP FSH0 RET
;置灯亮初值 ;置闪烁次数 ;点亮 ;延时1s ;熄灭 ;延时1s ;闪烁10次 ;左移一位 ;循环
格式:ORG 16位地址 功能:规定ORG下面目标程序的起始地址。
ORG 0100H START; MOV A,#05H ;标号START代表的地址为0100H
结束伪指令 END
格式:END 功能:汇编语言源程序的结束标志。 在END后面的指令,汇编程序不再处理。一个源程序 只能有一个END指令,放在所有指令的最后。
GON:
NEXT: GRET:
4.2.4 查表程序
在80C51中,数据表格是存放在程序存储器ROM中, 而不是在RAM中。编程时,可以通过DB伪指令将表格 的内容存入ROM中。
用于查表的指令有两条: MOVC A,@A+DPTR MOVC A,@A+PC
当用DPTR作基址寄存器时,查表的步骤分三步: ① 基址值(表格首地址)→DPTR; ② 变址值(表中要查的项与表格首地址之间的间隔字节数)→A; ③ 执行MOVC A,@A+DPTR。
例4-15
编制一个循环闪烁灯的程序。
设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反 相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。当输出位 为“1”时,发光二极管点亮,输出位为“0”时为暗。试编程实 现:每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循 环不止。
4.2.1 分支程序
根据不同条件转向不同的处理程序,这种结构的程 序称为分支程序。 80C51指令系统中的条件转移指令、比较转移指 令和位转移指令,可以实现分支程序。
例4-8
已知电路如图4-5所示,要求实现: ① S0单独按下, 红灯亮,其余灯灭; ② S1单独按下, 绿灯亮,其余灯灭; ③ 其余情况,
例4-13
编写延时10ms子程序,fosc=12MHz。 解:fosc=12MHz,一个机器周期为1s。 DY10ms:MOV R6,#20 ; 置外循环次数 DLP1: MOV R7,#250 ; 置内循环次数 DLP2: DJNZ R7,DLP2 ; 2机周×250 =500机周 DJNZ R6,DLP1 ; 500机周×20= 10000机周 RET ; 说明:MOV Rn指令为1个机器周期;DJNZ指令为2个机器周期; RET指令为2个机器周期; {[(2机周×250)+1+2]×20+1+2}×1s/机周 =10063s≈10ms
格式:DW 16位二进制数表 功能:从指定的地址单元开始,定义若干个16位数据。占 用两个字节,高8位先存入,低8位后存入。不足16位 者,用0填充。
ORG 1000H HTAB:DW 7856H,89H,30 ;(1000H)=78H,(1001H)=56H…
定义位地址伪指令BIT
格式:字符名称 BIT 位地址 功能:将位地址赋予所规定的字符名称。
第4章
本章要点
汇编语言程序设计
80C51汇编语言语句结构的基本格式 伪指令的功能和应用 汇编的概念 程序设计的步骤和基本方法 顺序程序 分支程序 循环程序 查表程序 散转程序
4.1汇编语言程序设计基本概念
4.1.1汇编语言及其语句结构
标号:操作码 [目的操作数,源操作数];注释
例4-19
用查表程序求0~40之间整数的立方。已知该整 数存在内RAM 30H中,查得立方数存内RAM 30H (高8位)31H。
等值伪指令 EQU(Equate)
格式:字符名称 EQU 数据或汇编符号 功能:将一个数据或特定的汇编符号赋予规定的字符名称。
ABC EQU 30H ;ABC=30H, #ABC=#30H
数据地址赋值伪指令 DATA
格式:字符名称 DATA 表达式 功能:将数据地址或代码地址赋予规定的字符名称。 DATA与EQU的区别:EQU定义的符号必须先定义后使 用,DATA可以先使用后定义。
(2)边平均边累加
AVRG2: ALOP: MOV MOV MOV MOV MOV DIV ADD MOV MOV ADD MOV CLR SUBB JC INC MOV LCALL DJNZ MOV CJNE JC INC RET 30H,#0 31H,#0 R4,#100 A,P1 B,#100 AB A,30H 30H,A A,B A,31H 31H,A C A,#100 GON 30H 31H,A DY10ms R4,ALOP A,31H A,#50,NEXT GRET 30H ;商累加寄存器清0 ;余数累加寄存器清0 ;置平均次数 ;读P1口数据 ;置除数(平均次数) ;P1口数据除以100 ;商累加 ;回存 ; ;余数累加 ;回存 ; ; ;余数累加<100,余数累加寄存器不变 ;余数累加≥100, 商累加寄存器+1 ;减去100后差→余数累加寄存器 ;延时10ms ;判100次累加完否?未完继续 ;100次累加完毕,余数累加四舍五入 ; ;C=1,<50, 舍 ;C=0,≥50, 入
黄灯亮。
解:程序如下 SGNL:ANL P1,#11100011B ;红绿黄灯灭 ORL P1,#00000011B ;置P1.0、P1.1输入态, P1.5~P1.7状态不变 SL0: JNB P1.0,SL1 ;P1.0=0,S0未按下,转判S1 JNB P1.1,RED ;P1.0=1,S0按下;且P1.1=0,S1未按下,转红灯亮 YELW:SETB P1.4 ;黄灯亮 CLR P1.2 ;红灯灭 CLR P1.3 ;绿灯灭 SJMP SL0 ;转循环 SL1: JNB P1.1,YELW ;P1.0=0,S0未按下;P1.1=0,S1未按下,转黄灯亮 GREN:SETB P1.3 ;绿灯亮 CLR P1.2 ;红灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环 RED: SETB P1.2 ;红灯亮 CLR P1.3 ;绿灯灭 CLR P1.4 ;黄灯灭 SJMP SL0 ;转循环
DEF BIT 30H ;把位地址赋给字符DEF,DEF可作为位地址30H使用。
相关文档
最新文档