单片机 简单程序调试
单片机调试方案及流程

单片机调试方案及流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 硬件连接:将 STM32 单片机开发板通过 USB 数据线连接到电脑。
单片机程序调试步骤(一)2024

单片机程序调试步骤(一)引言概述:单片机程序调试是嵌入式开发中重要的一环,它确保了程序在硬件上的正确运行。
本文将介绍单片机程序调试的一般步骤,以帮助开发人员快速排查和修复程序中的问题。
1. 确认程序问题:- 观察现象:仔细观察单片机的运行状况,是否存在明显的问题,如无反应、死机等。
- 分析代码:检查程序代码,确定是否存在逻辑错误、语法错误、变量定义错误等。
2. 配置开发环境:- 安装软件:确保所需的开发软件已正确安装并配置好相关的开发环境。
- 连接硬件:将单片机与编程器、开发板等硬件设备正确连接,并确保连接稳定。
3. 编译程序:- 检查编译选项:确保编译选项设置正确,包括引用的库文件、头文件路径等。
- 编译代码:使用编译器编译程序,并查看编译输出结果,检查是否存在语法错误、警告等。
4. 下载程序:- 配置下载器:检查下载器的设置,确保下载器与目标单片机的型号、通讯方式等匹配。
- 下载程序:使用下载器将编译好的程序下载到目标单片机,并确保下载完成且成功。
5. 调试程序:- 断点调试:在代码中设置断点,通过单步执行、变量查看等功能逐步调试程序,定位问题所在。
- 调试工具:使用调试工具,如逻辑分析仪、示波器等,对信号进行监测和分析,定位硬件问题。
总结:单片机程序调试是确保程序正确运行的关键步骤,通过确认程序问题、配置开发环境、编译程序、下载程序以及调试程序,开发人员可以有效地排查和修复程序中的问题。
调试过程中需要仔细观察现象、分析代码、设置断点和使用调试工具等,从而找到问题所在,并解决它们。
只有经过充分的调试,单片机程序才能在硬件上稳定运行。
飞思卡尔单片机程序调试方法说明

飞思卡尔单片机程序调试方法说明对于飞思卡尔单片机编程,常用的调试方法有3种:调试方法1:在线调试法(Debug模式)CodeWarrior 10.3 开发环境下,可启动Debug模式,利用step into, step over, step return ,run to line 按钮,程序中设置断点,修改变量的值,查看寄存器的值等,进行调试。
有关调试窗口的按钮定义和调试方法,可查看帮助中debug View 和Debug information的说明。
调试方法2:串口调试法通过将程序运行过程中的数据、变量值等发送到PC机上查看,同时也可从PC机上通过串口发送数据到单片机,修改程序运行的参数(或步骤)进行调试。
智能车运行过程中常用用串口调试的方法。
调试方法3:硬件调试法通过连接在芯片外部的硬件或电路的变化或响应,查看程序运行的结果或状态(例如,在程序的某一位置点亮小灯、开蜂鸣器、发数据到LCD等)。
理解和掌握概念:单步调试相信任何调试人员对单步调试非常的熟悉。
CodeWarrior(与Eclipse基本一致)提供step into、step over、step return三个命令来支持单步调试。
三者的具体区别是:step into(快捷键F5)就是单步执行,遇到子函数就进入并且继续单步执行;step over(快捷键F6)是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。
step return(快捷键F7)就是单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函数。
说的通俗点就是,step into:进入子函数,step over:越过子函数,但子函数会执行,step return:跳出子函数。
此外,Eclipse还提供了Run to line(快捷键Ctr + R)功能,从开始处运行程序,到正在执行的断点暂停。
单片机的程序设计与调试

单片机原理与应用
【例4-1】将BLOCK单元开始存放的10个无符号数进行求和, 并将结果存入SUM单元中(假设结果小于255)。 ORG 0100H ; 起始汇编 LEN EQU 10 ; LEN =“10” SUM EQU 20H ; SUM =“20H” BLOCK EQU 30H ; BLOCK =“30H” START: CLR A ; A清 0 MOV R2, #LEN ; 计数初值送R2 MOV R0, #BLOCK ; 指针初值送R0 LOOP: ADD A, @R0 ; 累加 INC R0 ; 指针加1 DJNZ R2, LOOP ; 未完继续 MOV SUM, A ; 保存结果 HERE: SJMP $ ; 动态停机 END ; 结束汇编
序存储器中预留出一段存储单元作为备用空间,预留 单元数量由表达式确定。 例如: ORG 0800H SPARE: DS 20H …… 汇编后,从ROM中地址为0800H的单元开始,预 留32个空的存储单元作为备用单元。
单片机原理与应用
源程序的设计
(1)顺序程序 (2)分支程序 (3)循环程序 (4)查表程序 (5)子程序 (6)应用举例
; 转主程序 ; 转中断0 ; 转定时器 T0中断 INT0
; 转中断1
INT1
; 8155初始化
00H, 0FFH, 06H, 20H, 15H
单片机原理与应用
2.结束汇编伪指令
指令格式:END
指令功能:结束汇编。放置于汇编 源程序的末尾,当汇编程序遇到 END 伪指令时,即结束汇编。处于 END 之后的程序,汇编程序不会进 行处理。
开始 X A Y A=0? N
A>0?
Y
N A=-1 存结果 结束
单片机专题实训课件-程序调试方法

2 正确配置开发环境
安装、配置编译器、下载器等工具,确保正 常运行。
4 理解硬件和外设
熟悉单片机的硬件和外设功能,便于快速定 位问题。
பைடு நூலகம்
单步执行调试方法
通过逐行执行程序,在每一步观察程序状态,定位错误所在。
断点调试方法
在程序中设置断点,当程序执行到断点处时停止,观察程序状态。
3 调试指令的执行顺序
设置断点、单步执行等命令来控制程序的执行流程。
Debug工具的使用
仿真器
使用仿真器进行程序调试,实时查看程序状态。
逻辑分析仪
使用逻辑分析仪对信号进行捕获,分析程序执行过程。
单片机专题实训课件-程 序调试方法
本课件介绍了单片机程序调试的方法和技巧,包括调试前的准备工作、单步 执行调试、断点调试、观察变量调试、观察寄存器调试、观察存储器调试等 内容。通过本课程,您将学会有效地解决程序调试中的常见问题。
调试前的准备工作
1 清晰的程序设计
确保程序逻辑清晰,无歧义。
3 准备测试数据
观察变量调试方法
在程序中观察关键变量的值,以判断程序运行是否正常。
观察寄存器调试方法
通过观察微处理器的寄存器状态,了解程序的执行过程。
观察存储器调试方法
观察存储器中的数据,判断数据是否被正确存储和读取。
调试命令的使用
1 查看和修改寄存器
使用特定的调试命令查看和修改寄存器的值。
2 读写存储器
使用调试命令读写存储器的内容。
单片机指令的调试与错误排查方法

单片机指令的调试与错误排查方法在单片机的开发过程中,指令调试和错误排查是非常关键的步骤。
本文将介绍一些常用的单片机指令调试和错误排查方法,帮助开发人员有效解决单片机程序中可能出现的问题。
一、调试工具的选择通常,单片机开发人员使用调试工具来进行指令调试和错误排查。
调试工具的选择对调试效率有重要影响。
常用的单片机调试工具包括仿真器、调试器和编程器等。
具体选择哪种调试工具要根据单片机型号和开发环境来决定。
一般来说,仿真器和调试器是开发人员常用的工具,它们可以提供实时调试功能,方便开发人员逐步调试程序。
二、在线调试方法在线调试是指在单片机工作状态下进行调试,可以实时观察和修改程序运行情况。
在进行在线调试时,可以根据具体情况采用以下方法:1. 断点调试:通过在程序中设置断点,可以暂停程序的执行,观察此时程序的状态和变量的值。
通过逐步执行代码,可以逐行检查程序的运行情况,发现潜在问题。
2. 单步调试:在程序暂停的情况下,可以逐条执行指令,观察每条指令的执行结果。
单步调试可以帮助开发人员快速定位错误,并找出造成问题的具体指令。
3. 观察寄存器状态:通过观察单片机的寄存器状态,可以了解程序在运行过程中寄存器的值变化情况。
寄存器是存储指令和数据的关键组件,通常是程序出错的地方。
三、离线调试方法离线调试是指将程序下载到单片机中进行调试,并观察一些指示灯或外部设备来判断程序的执行情况。
离线调试方法适用于一些无法进行在线调试的情况,例如无法连接调试器或者目标系统不支持在线调试。
常用的离线调试方法如下:1. 串口输出调试:通过在程序中插入调试代码,将关键变量的值输出到串口。
通过观察串口输出的结果,可以了解程序在运行过程中变量的取值情况。
这种方法比较简单,适用于小规模的程序调试。
2. LED指示调试:将关键变量的值映射到LED灯上。
通过观察LED灯的亮暗变化,可以判断程序是否按照预期执行。
这种方法适用于调试程序的运行状态和循环次数等问题。
《单片机实验调试任务》
实训课题 ——简易霓虹灯
8051系统中,已知晶震频率为12MHz, 编程分别实现使8只发光二极管分别以水滴 型和拉幕形式点亮,每种状态各持续10秒, 循环不止;在此过程中按下K1键,发光二 极管1Hz的频率闪烁;任何时候按下K2键, 发光二极管以10Hz的频率闪烁。
单片机实验室调试任务1
1、用软件延时,通过P1口循环点亮8只发光二极 管。 2、用软件计数和定时器实现延时实现上述功能。 3、用计数器和定时器实现上述功能。 4、分别点亮8只发光二极管,实现拉幕、水滴点 亮灯动态效果。
单片机实验室调试任务2
编写并调试程序: 8051系统中,已知震荡频率为12MHz, 试用C语言编程,实现从P1.0口输出频率分 别为1Hz和10Hz的变频信号,各持续10S。
实验一 Keil软件的使用及简单程序的调试方法
实验一 Keil软件的使用及简单程序的调试方法一、实验目的掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。
二、实验器材计算机1台三、实验内容1.Keil的使用方法。
2.建立一个单片机汇编语言程序的调试过程及方法四、实验步骤1.Keil的使用方法。
Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。
启动Keil 后的界面如下:几秒钟后即进入Keil的编辑界面。
用户便可建立项目及应用程序。
2.简单程序的调试方法Keil是通过项目工程来管理汇编程序的。
因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。
(1)建立一工程单击Project菜单,在弹出的下拉菜单中选中New Project选项。
并在弹出的对话框中确定保存的位置及工程名称。
又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。
选择Atmel公司的AT89C51单片机。
如下图所示单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。
(2)建一文件单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。
单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。
如下图所示。
(3)将文件添加到工程中单击“Target 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。
单片机的编程技巧与调试方法总结与分享
单片机的编程技巧与调试方法总结与分享随着科技的不断发展,单片机已经成为了许多电子设备的核心部分。
对于工程师而言,掌握单片机的编程技巧和调试方法是必不可少的。
本文将总结和分享一些关于单片机编程的技巧和调试方法,希望能对读者有所帮助。
一、编程技巧1. 确定需求和目标:在开始编程之前,要先明确需求和目标。
了解编程的具体目的能够帮助我们更加专注地开发所需的功能,同时也能避免不必要的代码冗余。
2. 编写清晰简洁的代码:编写清晰简洁的代码是良好的编程习惯。
合理利用注释、模块化和函数化等方式,能够让代码更易读、易懂、易于维护。
3. 合理使用宏定义和枚举类型:通过合理使用宏定义和枚举类型,我们能够提高代码的可读性和可维护性。
宏定义可以用来定义常量,增加代码的可读性;而枚举类型可以用来定义一系列相关的常量,方便我们使用。
4. 掌握好数据类型的选择:在编程中,选择合适的数据类型非常重要。
如果数据类型选择不当,容易导致内存浪费或数据溢出的问题。
因此,我们需要根据具体需求选择合适的数据类型,例如使用int型而不是long型等。
5. 掌握好算法和数据结构:掌握好算法和数据结构是提高编程效率和代码质量的关键。
不同的算法和数据结构对于解决不同的问题有不同的优势,因此我们需要深入学习和理解常用的算法和数据结构,并根据具体情况选择合适的方法。
二、调试方法1. 了解硬件原理和接口规范:在调试单片机程序之前,我们需要深入了解硬件原理和接口规范。
只有对硬件有全面的了解,才能更准确地定位和解决问题。
2. 使用调试工具:调试工具是我们解决问题的得力助手。
常用的调试工具有逻辑分析仪、示波器、仿真器等。
使用这些调试工具能够帮助我们观察信号波形、检查程序执行情况,从而准确地找出问题所在。
3. 采用模块化设计:采用模块化设计可以帮助我们更好地调试和测试程序。
将整个程序分解为多个小模块,逐个测试和调试,有助于定位问题。
同时,模块化设计也便于代码的重用和维护。
单片机指令的编写与调试方法
单片机指令的编写与调试方法单片机作为一种常用的嵌入式系统开发工具,在各行各业得到了广泛的应用。
在单片机的编程过程中,指令的编写与调试是非常重要的环节。
本文将介绍单片机指令的编写与调试方法,以帮助读者更好地理解和应用单片机。
一、指令的编写方法指令是单片机进行计算和控制的最基本单位,编写好的指令可以实现各种功能。
以下是一些常用的指令编写方法:1. 确定指令的功能:在编写指令之前,首先需要明确指令的功能,包括输入、处理和输出等。
根据需要,可以选择合适的单片机型号和编程语言。
2. 了解指令集架构:不同的单片机芯片具有不同的指令集架构。
在编写指令之前,需要详细了解所选择单片机芯片的指令集结构和相关寄存器。
这将有助于正确地使用指令和寄存器,提高编程效率。
3. 写出伪代码:在编写指令之前,可以先用伪代码描述要实现的功能。
伪代码是一种类似于人类语言的编程语言,在编写指令之前可以通过伪代码搭建编程框架,方便后续的指令编写。
4. 选择合适的指令和寄存器:根据指令集架构和伪代码,选择合适的指令和寄存器来实现功能。
指令和寄存器的选择应该满足功能需求,并且尽量提高程序的效率。
5. 编写指令代码:根据选择的指令和寄存器,编写出具体的指令代码。
在编写过程中要注意指令的顺序和逻辑关系,避免出现错误。
二、指令的调试方法编写好的指令需要调试才能确保其正确性和稳定性。
下面是一些常用的指令调试方法:1. 硬件调试:在进行指令调试之前,需要确保硬件电路连接正确并且正常工作。
可以使用示波器、逻辑分析仪等工具对硬件进行调试,排除硬件问题。
2. 单步调试:单步调试是一种逐条执行指令的调试方法,可以查看每条指令的执行情况,用于发现指令错误和逻辑问题。
可以使用单片机仿真器或者开发板自带的调试功能进行单步调试。
3. 添加调试输出:在指令编写过程中,可以通过添加调试输出语句来检查程序的执行情况。
可以打印变量的值、状态信息等。
调试输出可以帮助定位错误和问题所在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开始 100送B 求取数据百位 存放百位 10送B 求取数据十位 存放十位
存放个位 结束
4 简单程序调试
8位二进制转换成BCD码
;程序名:BINBCD1 ;功能: 0~FFH内的二进制数转换为BCD数 ;入口: A存要转换的二进制数 ;出口: R0 存放BCD数 百、十、个位数的地址 BINBCD1: MOV B, #100
MOV R0,#50H MOV R7,#10H MOV A,@R0 AGAIN:INC R0 MOV 40H,@R0 CJNE A,40H,LOOP LOOP:JNC CHANGE MOV A,40H CHANGE:DJNZ R7,AGAIN MOV 2FH,A END
问题: “找出其中最小数并将该数送2FH”, 程序如何修改?
结束
4 简单程序调试 把R2中BCD码数转为二进制数存进R2
开始 取R2中的数据
提取十位 “十位”乘10
保存乘积 提取个位 个位与乘积相加 数据送回R2
结束
BCD2B:MOV A, R2 ;取入口数据
ANL A, #0F0H ;取出十位
SWAP A ;高4位 低4位
MOV B, #0AH
MUL AB
4 简单程序调试
对内部RAM50H开始的10个无符号数求和
编程要点: 两数相加,和与第三数相加
开始 循环次数送R7
除头两数不考虑进位外,其余均需考虑进位 相加的和存储地址应不止1个 需考虑寄存器间接寻址
存储单元清零 数据首址送R0 低位R4送累加器
A与“下一数”相加
进位位送R3
N 加结束了吗?
Y 结束
DJNZ R7,DEL1 DJNZ R5,DEL RET
4 简单程序调试
霓虹灯系统设计
开始 堆栈初始化
显示方式1
显示方式2
ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#30H AGAIN:MOV A,#01H AGAIN1:MOV P1,A LCALL DELAY RL A JNB ACC.0,AGAIN1 MOV R5,#10H AGAIN2:MOV P1,#55H LCALL DELAY MOV P1,#0AAH LCALL DELAY DJNZ R5,AGAIN2 LJMP AGAIN
4 简单程序调试
4 简单程序调试
算法
•算法是一个良定义的计算过程,所谓良定义是指: •算法应当是正确的。因为错误的算法不能达到预期的 工作目的。 •算法应当是有穷的。即一个算法的步骤应当是有限的, 同时一个算法所运行的时间也应当是有限的。 •算法应当是有效的。即一个算法所对应的计算机程序 运行后应当输出有效的运行结果,没有效果的算法是 没有实际意义的。
DJNZ R7, DEL1 ; 0.25ms*200=50ms RET 绘制流程图并计算延时时长 使用12MHz晶振时,一个机器周期为1us, 执行DJNZ指令为 2us,加其他指令的时间(250+1+2)*200+1=50.301ms
•编写时长1s的延时子程序:先写流程图,再照着编程
4 简单程序调试
在主程序中
RET 在子程序中,与标号配合
中断子程序返回指令 RETI 空指令 NOP
4 简单程序调试
霓虹灯系统设计
•并口1数据转换
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
C0H 03H 30H 0CH AAH 55H
4 简单程序调试
ORG 0000H
霓虹灯系统设计
NOP DJNZ R7, LOOP
指令执行周期 1T 1T 1T 2T
消耗时间为(4×100+1)T= 401T
4 简单程序调试
子程序——延时50ms程序设计
DELAY: MOV R7, #200 DEL1: MOV R6, #125 DEL2: DJNZ R6, DEL2 ;125*2=250us
ORG 0030H
MAIN: MOV SP,#30H
MOV P1,#33H
AGAIN:LCALL DELAY
MOV A,P1
RL A
MOV P1,A LJMP AGAIN 子程序:
ORG 0100H DELAY:MOV R5,#10
DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2:DJNZ R6,DEL2
DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1 DJNZ R5,DEL RET
4 简单程序调试
霓虹灯系统设计
开始 堆栈初始化 (P1)=33H
延时0.5s P1左移一位
移位循环模式
ORG 0000H
LJMP MAIN
霓虹灯系统设计
30pF C1
2
GND C2 30pF
VCC
1
Y 12MHz
C3 22uF
19 18
XTAL1 XTAL2
9 31 29 30
RST EA/VPP PSEN ALE/PROG
R 1K
10 11 12 13 14 15 16 17
P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
JC rel •若CY=1,跳转,否则向下执行 JNC rel •若CY=0,跳转,否则向下执行 减1不为零的跳转指令
•若(A)<(direct),则CY=1 DJNZ Rn,rel
DJNZ direct,rel
4 简单程序调试
数据区: 50H~60H;首址送R0 循环次数: 16次;循环次数送R7 比较项: 累加器A和某RAM地址
38H,93H,87H,A7H,B9H,35H,62H
A 51H52H53H54H55H56H …
4 简单程序调试
控制转移指令
比较是否相等的跳转指令 判断CY状态的跳转指令
CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel
Y
开始 数据区首地址送R0
循环次数送R7 第1个数送累加器A
下一个数送40H
(A)>(40H) N
(40H)中数送累加器A
初始化 (R0)=50H (R7)=10H
循环主体
N (R7)-1=0?
Y 累加器的最大数送2FH
结束
4 简单程序调试
ORG 0000H MOV 50H,#38H MOV 51H,#93H MOV 52H,#87H MOV 53H,#0A7H MOV 54H,#0B9H MOV 55H,#35H MOV 56H,#62H MOV 57H,#0E0H MOV 58H,#0CEH MOV 59H,#99H MOV 5AH,#20H MOV 5BH,#82H MOV 5CH,#55H MOV 5DH,#10H MOV 5EH,#0FFH MOV 5FH,#33H MOV 60H,#20H
4 简单程序调试
对内部RAM50H开始的10个无符号数求和
开始 循环次数送R7 存储单元清零 数据首址送R0 低位R4送累加器 A与“下一数”相加
进位位送R3 N
加结束了吗?
ADD1: MOV R7, #10 ;循环次数n=10
MOV R3, #0 ;存放结果的高8位
MOV R4, #0 ;存放结果的低8位
•并口输出
东西 东西 东西 南北 南北 南北 向红 向绿 向黄 向红 向绿 向黄 灯灯灯灯灯灯
P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
22H 21H 14H 0CH
4 简单程序调试
红绿灯系统设计
开始 堆栈初始化 南北向通行
重点语句: MOVP1,#?? LCALLDELAY10S LCALLDELAY0.5S
20 VSS GND
VCC
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P1.0/T2 P1.1/T2EX
P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4
;十位乘10
MOV R3,A ;积暂存进R3
MOV A, R2;再取入口数据
ANL A, #0FH ;取出个位
ADD A, R3
MOV R2,A ;结果→R2
RET ;若不是子程序可用END
4 简单程序调试
查表子程序设计
*用DPTR查表(查0~9平方表) TA:PUSHDPH PUSHDPL MOVDPTR,#TAB MOVCA,@A+DPTR POPDPL POPDPH RET ORG0F00H TAB:DB00H,01H,04H,09H,10H,19H,24H, 31H,40H,51H
4 简单程序调试
常用流程符号
起止框 处理框
判断框 流程线
输入输出框 连接点
4 简单程序调试 例:设在内部RAM中从50H—60H中存放一组数,试编 程找出其中最大数并将该数送2FH,试设计相应算法 (绘制流程图)并编写程序。
需考虑的问题: •如何进行“数的比较”?肉眼观察? •如何找出最大数? 只能进行两个地址中数据的比较 •需要比较多少次? 17个数,比较16次 •用什么指令进行比较? •如何往RAM中置数?
设计要求: 六种模式
子程序:
ORG 0100H DELAY:PUSH 05H
MOV R5,#10 DEL: MOV R7, #200 DEL1: MOV R6, #125 DEL2:DJNZ R6,DEL2