单片机汇编语言循环程序设计
单片机课件 汇编语言程序设计PPT

4.1 概述
---- 程序头( 即定义变量和等值符号)---SCL BIT P1.2 ;定义SCL位变量 SDA BIT P1.3 ;定义SDA位变量 ByteCon DATA 30H ;定义字节变量
ByteCon ……
ORG nnnn ;CPU复位后,第一指令机器码存 放单元地址,具体值由CPU类型决定。
用到的有关寄存器,如 Acc、PSW等,即保护现场 …… ;中断服务程序实体,具体指令由程序功能决
定 POP Acc POP PSW ;恢复现场
4.1 概述
CLR TI ;清除中断标志(在51系列中,对于电平触 发的外中断INT0和 INT1、串行接收及发送中断 RI、TI 等,不自动清除,需要在中断服务结束前,通过CLR指 令清除。
例4.9 在51系列中,外部中断0的入口地址为 0003H,显然只有0000H、0001H和0002H三个单 元,刚好可以存放一条长跳转指令的机器码。
4.1 概述
----- 主程序 ----ORG yyyy ;其中yyyy就是主程序代码存放区 的首地址,如0100H Main: MOV SP,#5FH ;初始化有关寄存器,如 设置SP、选择工作寄存器组。
际问题处理程序编写能力。
4.1 概述
4.1 概述 程序设计:为了解决某一个问题,将所设计应用
系统(单片机类型)的指令按一定顺序组合在一起。即用 计算机所能接受的语言把解决问题的步骤描述出来。
单片机汇编源程序结构与通用微机汇编源程序结构 略有不同,原因是:
1、一般没有可以直接利用的监控程序,所有程 序均要自己编写。
转移。(程序走向只有一条路径。)
例4.11 将两个半字节数组合成一个字节数。 设内部RAM中40H、41H单元分别存放着8位二进制
MCS-51单片机指令系统与汇编语言程序设计

docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础

例2:编制一段程序,要求在端口线 :编制一段程序,要求在端口线P1.0,P1.1上分别产生周期为 , 上分别产生周期为 200us和400us的方波.设单片机的外接频率为 的方波. 和 的方波 设单片机的外接频率为12MHz. . 分析:利用定时器产生方波,将定时器设置成为工作方式 , 分析:利用定时器产生方波,将定时器设置成为工作方式3,将寄 存器T0定时 定时100us,T1定时 定时200us,达到定时时间后引起中断,在中 存器 定时 , 定时 ,达到定时时间后引起中断, 断服务程序中各自将P1.0和P1.1引脚取反. 引脚取反. 断服务程序中各自将 和 引脚取反 定时器预设值的设置: 定时器预设值的设置: 单片机的晶体振荡频率为12MHz,计时器的计时频率为1MHz,机 单片机的晶体振荡频率为 ,计时器的计时频率为 , 器周期为1us. 定时 定时100us,因此寄存器 需要计数 需要计数100次 器周期为 . T0定时 ,因此寄存器T0需要计数 次 ,其预 置值为64H+1=9CH. T1定时 定时200us,因此寄存器 需要计数 需要计数200次 置值为 . 定时 ,因此寄存器T1需要计数 次 其预置值为C8H+1=38H. ,其预置值为 . 定时器T0,T1的工作方式设置: 的工作方式设置: 定时器 的工作方式设置 T0采用工作方式 ,因此 采用工作方式3,因此TMOD寄存器的值设置为 寄存器的值设置为#22H. 采用工作方式 寄存器的值设置为 . 定时器T0,T1的控制设置: 的控制设置: 定时器 的控制设置 打开T0, ;要求TCON寄存器的值设置为 寄存器的值设置为#50H. 打开 ,T1;要求 寄存器的值设置为 .
定义存储区域的大小. 6. DS —定义存储区域的大小. 定义存储区域的大小 例: ORG 0350H DS 3
单片机汇编语言程序设计实验报告

单片机实验1 汇编语言程序设计实验---- 存储器块赋值一.实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。
例如将4000H 开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。
)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPU Lab8000/Lab6000通用微控制器 MCS51实验 8051前3个软件实验勾选√使用伟福软件模拟器四实验步骤注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
编译器默认设置:程序框图参考例程序:Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #10 ; 清10个字节mov a, #33h ; 将33H赋值给aLoop:movx @dptr, a 将a写入外部RAMinc dptr ; 指向下一个地址djnz r0, Loop ; 记数减一ljmp $ ; $当前程序指针相当于一直执行自己;ljmp $ end说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp $,程序死循环要求赋值数据为10,9,8,7,6,5,4,3,2,1则以上程序该如何改动? 自己修改程序实现。
第4章 汇编 语言程序设计

DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H
第4章 单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
第4章 MCS-51单片机汇编语言程序设计

程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
单片机指令系统与汇编语言程序设计

例如程序:
ORG
START: MOV
MOV
1000H A,#20H B,#30H
┇
a
5
(2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此 结束,其后的任何内容不予理睬。
(3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符
字(Word):通常由16位二进制数码组成,即1Word=2Byte。
字长:字长是指计算机一次处理二进制数码位的多少。MCS51型单片机是8位机,所以说它的字长为8位。
MCS-51系列单片机都是以Intel公司最早的典型产品8051 为核心,增加了一定的功能部件后构成的。本章以8051为主介 绍MCS-51系列单片机 。
a
1
2.1 概述
指令系统:一台计算机所能识别、执行的指令的集合就是它 的指令系统。
机器语言:指令系统是一套控制计算机执行操作的二进制编 码,称为机器语言。机器语言指令是计算机惟一能识别和执 行的指令。
汇编语言:指令系统是利用指令助记符来描述的,称为汇编 语言。
计算机的指令系统一般都是利用汇编语言描述的,是由 计算机硬件设计所决定的。指令系统没有通用性。
(5)定义双字节伪指令DW 格式:[标号:] DW x1, x2,…, xn 功能:将双字节数据[或双字节数据组]顺序存放在从标号指定
地 存址储单单元元开,始先的存存高储8位单(元存中入。低其位中地,址x单i为元16中位)数,值后常存数低,8占位两(个存 入高位地址单元中)。
a
7
(6)预留存储空间伪指令DS
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
谢谢各位!
▪ 例如
➢ 延时程序
若单片机的晶振频率为12MHz,则一个机器周期为 1μs。执行一条DJNZ指令需要2个机器周期,即 2μs。循环执行DJNZ指令可实现一定时间的延时。
MOV R6,#50 ;1us DEL1: DJNZ R6,DEL1 ;2us*50=100us
本段程序延时时间为: 1+100=101us
分析:结合前述循环程序的四个组成部分 由于循环次数事先不知道,但循环条件可以测试 到。所以,采用先判断后执行的结构比较适宜。
程序段如下页:
MOV R0,#data
MOV DPTR,#buffer
LOOP0:MOV A,@R0 CJNE A,#24H,LOOP1 ;判断是否为‘ $ ’字符
SJMP LOOP2
▪ 例如,工作寄存器设置计数初值,累加器 A清0,以及设置地址指针、长度等。
延时程序中:MOV R6,#50
数据块传送程序中: MOV R0,#data MOV DPTR,#buffer
2、循环体(循环工作部分)
▪ 重复执行的程序段部分,分为循环工作部 分和循环控制部分。
延时程序中: DEL1:DJNZ R6,DEL1 数据块传送程序中: MOVX @DPTR,A
单片机汇编语言的循环程序设计
复习
▪ 顺序程序设计
程序按顺序一条一条地执行指令。
▪ 分支程序设计
程序分支是通过条件转移指令实现的,即 根据条件对程序的执行进行判断、满足条 件则进行程序转移,不满足条件就顺序执 行程序。例如:JZ KS
循环程序设计
▪ 在程序运行时,有时需要连续重复执行某 段程序,可以使用循环程序。
则N=123
即(R6)=123
50ms延时程序如下页:
一、先执行后判断
DEL:MOV R7,#200 ;1 μs
DEL2:MOV R6, #1N2;3 ;1 μ1sμs
NNOOPP
;;11 μμss
DDELE1L:1:DDJNJNZ ZRR6,6,DDELE1L1;;2μ2sμ,s,计计((2×2×12N3))μμss
例1 编程实现50ms的延时程序。
采用循环计数法实现延时,循环次数可以通过计算获 得,并选择先执行后判断的循环结构。
分析计算计数器初始值
50ms=50000 μs =(250×200) μs
令(R7)=200,假设(R6)=N,则根据程序结构
则 [ 1+(2×N)+2 ] μs =250 μs
则 [ 1+1+(2×N)+2 ] μs =250 μs
;是‘ $ ’字符,转其它程序
LOOP1:MOVX @DPTR,A ;不是‘ $ ’字符,执行传送
INC R0
INC DPTR
SJMP LOOP0 LOOP2:… …
;传送下一数据
小结
▪ 循环程序的结构 ▪ 循环程序组织方式
作业: 1.编一段10ms的延时子程序 2.编程序实现统计片内RAM中以data为首地址存 放的一个以‘ $ ’字符为结尾的 字符串的长度并送 NUM单元
3、修改控制变量
▪ 在循环程序中,必须给出循环结束条件。 ▪ 常见的是计数循环,当循环了一定的次数
后,就停止循环。 ▪ 在单片机中,一般用一个工作寄存器Rn作
为计数器,对该计数器赋初值作为循环次 数。每循环一次,计数器的值减1,即修改 循环控制变量,当计数器的值减为0时,就 停止循环。
3、修改控制变量
4、循环控制部分
延时程序中: DEL1:DJNZ R6,DEL1 数据块传送程序中: MOV A,@R0 CJNE A,#?24,H,LOLOPO1P1
置初值
循环体
循环修改
否
循环结束否?
是
退出循环
(a)先执行后判断
置初值
是
循环结束否?
否
循环体
循环修改
退出循环
(b)先判断后执行
循环组织方式流程图
一、先执行后判断
单循环最长延时时间为:1+256*2=513us
➢数据块传送程序
片内RAM
data
a
b
s
r
…
片外RAM
bbuuffffeerr
a
b
s
r
…
t
t
$
▪ 循环程序结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分
▪ 其组织方式如图所示。
1、置循环初值
▪ 对于循环程序中所使用的工作单元,在循 环开始时应置初值。
延时程序中: DEL1:DJNZ R6,DEL1 数据块传送程序中: INC R0 INC DPTR
4、循环控制部分
▪ 根据循环结束条件,判断是否结束循环。 ▪ 循环控制部分每循环一次,检查结束条件,
当满足条件时,就停止循环,往下继续执行 其他程序 ▪ 89C51可采用DJNZ指令来自动修改控制变 量并能结束循环。
DJNZ R7,DEL2 ;2μs RET ;2μs
共计 [1+(1 + 1 +2×123+ 2)×200+2] μs, 即50.003ms
双重循环最长延时时间为: 即132.099ms
[1+(2×256+2+ 2)×256+2] μs
二、先判断后执行
例2 将内部RAM中起始地址为data的数据串传送到 外部RAM中起始地址为buffer的存储区域内,直到 发现‘$ ’字符停止传送。