当前位置:文档之家› 单片机汇编语言实验教程(1).

单片机汇编语言实验教程(1).

单片机汇编语言实验教程(1).
单片机汇编语言实验教程(1).

本文由zaoangy贡献

doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

实验一熟悉MCS-51寻址方式及传送类指令

一.实验目的: 1.熟悉uVision2集成调试环境 2.熟悉

MCS-51寻址方式及传送类指令二.uVision2集成调试环境的使用uVision2是德国Keil Software公司用于多种嵌入式微处理器的一个理想、快速、

可靠的程序调试器。此调试器包含一个高速模拟器,能够让你模拟整个8051

系统,包括片上外围.....器件和外部硬件。 1.创建项目uVision2是以项目来管理你的任务,它可以使你的8051应用系统设计变得简单。要创建一个应用,你需要按下列步骤进行操作:①第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:\单片机实验;②启动uVision2,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:直接在桌面上点击uVision2程序图标就可以启动它。要新建一个项目文件,从uVision 2的Project菜单中选择New Project,这将打开一个标准的Windows对话框,此对话框要求你输入项目文件名,例如为实验一新建项目:D:\单片机实验\ex1.vu2。紧接着,Select

Device for Target,即为你的项目选择一个CPU。我们选择Gene ric下的8032。 2.新建一个源文件你可以用菜单选项File-New来新建一个源文件。这将打开一个空的编辑窗口让你输入你的源代码。编辑后,我们把我们的实验程序保存为D:\单片机实验\dpj1.asm。 3.将你的源文件加入到你的项目中在你的P roject Workspace窗口双击Target1及Suorce Group1,将你的目标系统一直展开到看到源文件组,如图1(a所示。右击Suorce Group1,出现Add files选项, 选择它可打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件dpj1.asm 。

(a

(b

图1Suorce Group1中的文件STARTUP.A51是大多数不同的8051CPU准备的启动代码。我们暂且先不用它,用右键点击删除它(Remove File…STARTUP.ASM? 。现在你的项目中只包含一个源文

件:dpj1.asm,如图1(b。 4.编译(或汇编你的源程序依次点击Project、Build Target即可编译(或汇编你的源程序 (留意一下,在工具栏上可找到相应快捷按钮。

在下面的输出窗口Output Window(如图2可看到编译(汇编的结果,应该没有错误才可继续下面实验。否则修改你的源程序,直到没有错误为止。

如图2 4.调试你的程序依次点击Debug,Start/Stop Debug Session进入调试模式(也可利用快捷按钮,并且如再按一次该按钮,则又切回到程序编辑状态。你现在就可以采用指令单步、函数单步、运行到光标处行、连续运行等命令调试你的程序(这些命令在Debug下Step、Step over,Run to Cursor line、Go。也可利用快捷按钮。你也可以设置断点后,连续执行程序进行调试。如程序运行到中间想从头再来,只要按RST按钮即可。常用调试快捷按钮符号Rst说明复位连续运行指令单步函数单步Go Step into Step over Run to Cursor line运行到光标处行Start/Stop Debug Session调试模式/编辑模式切换

5.存储器、寄存器的查看、修改在调试程序时,经常需要查看存储器内容,你可以查看80C52内的4个存储器逻辑空间的任一个。在调试模式下,依次点击V iew,Memory Window,你可以看到包含4个存储器空间的窗口,你在第一个存储器空间的Address栏内输入C:0,即可看到从0000H开始的一段程序存储内容;你也可以在其它Address栏内分别填入X:0、D:0、I:0就可以查看外部数据存储器空间、直接寻址的片内存储空间(包括片内

00-7FH的RAM,及80H-0FFH的SFR、间接寻址的片内存储空间(包括片内00-7FH的RAM,及8032的80H-0FFH的数据RAM 。如要修改Memory Window内存储单元内容,可用鼠标右键点击选定存储单元, 根据提示即可修改。在Project Workspace窗口,你还可以看到8031的所

有寄存器,这对调试程序也很重要。如要查看单片机的外围部件,像端口P0-

P3,定时器T0、T1等,可点击Peripherals。三.传送类指令练习MCS-51

单片机的存储空间如表所示:

数据空间片内/片内片外寻址方式空间范围表示

方法RAM直接间接 00-7FH DATA片内SFR直接寻址80-FFH SFR RAM间接寻址80H-FFH IDATA片外RAM间接寻址0000-FFFFH XDATA片内ROM间接寻址0000-0FFFH CODE

程序空间片外ROM间接寻址0000-0FFFH CODE ROM 间接寻址1000H-0FFFF H CODE

1.直接寻址只能在DATA区和SFR中进行,如下例MOV A,

03H;把地址03H中的数移入累加器MOV43H,22H;把地址22H

中的数移入地址43H中MOV02H,C;把Cy中的数移入位地址02H

中MOV42H,#18H;把立即数18移入地址42H中MOV0 9H,

P1;把端口1中的数移入地址09H中 2.间接寻址要使用DPTR,PC,R0,

R1寄存器作为指针访问各存储器。可访问的空间为CODE、IDATA、XDATA 存储区,对DATA存储区也可进行间接寻址。只能用直接寻址方式对位地址进行寻址。DATA和IDATA区寻址:MOV R1,#22H;设置R1为指向DATA区内的地址22H的指针MOV R0,#0A9 H;设置R0为指向IDATA区内的地址0A9H的指针MOV A,@R1;读入地址22H的数据MOV@R0,A;将累加器中的数据写入地址A9H INC R0;RO

中的地址变为AAH IN C R1;R1中的地址变为23H MOV34H,

@R0;将地址AAH中的数据写入34H MOV@R1 ,#67H;把立即数写入地址23H XDATA区寻址:MOV DPTR,#3048H;DPTR指向外部存储区MOVX A,@DPTR;读入外部存储区地址3048H中的数INC DPTR;指针加一 MOV A,#26H;立即数26H写入A中MOVX

@DPTR,A;将26H写入外部存储区地址3 049H中MOV R0,#87H; R0指向外部存储区地址87H MOVX A,@R0;将外部存储区地址87H

中的数读入累加器中CODE区寻址:MOV DPTR,#TABLE_BASE;DPTR 指向表首地址MOV A,#5;把偏移量(立即数5装入累加器中MOVC A, @A+DPTR;从表中读出数据到累加器中(5的平方

SJMP INDEX2TABLE_BASE:DB0,1,4,9,16,25,36;平方表INDEX2:MOV A,# 5;把偏移量(立即数5装入累加器中ADD A,

#2;由于SJMP EXIT指令占用2字节, 修正偏移量MOVC A,@A+PC;从表中读出数据到累加器中(5的平方SIMP EXIT EXI T:DB

0,1,4,9,16,25,36;平方表SJMP¥

四.实验步骤 1.熟悉uVision2集成调试环境的使用。 2.按照上述二.2条, 新建一源程序文本文档,并将第三步中字体为蓝色的程序录入。 3.

在已录入的程序前插入如下程序,作为内存初始化;dpj1MOV A,#0MOV

R0,#0FFH INI:MOV@R0, A INC A DJNZ R0,INI 4. 5. 6. 7.在录入的程序最后加上:END作为程序结束保存文件名为“dpj1.asm”(如该文件已存在,也可存为其它*.asm文件。切换到调试模式,先将光标置于上述

内存初始化程序的下一行,也即第2步录入的正式程序的第一行,利用Run to Cursor line,直接将程序运行到正式程序的第一行。单步逐条向下执行指令。每执行一条指令,都要分析一下指令源操作数、目的操作数在存储空间的哪个单元,看一看你所理解的指令执行结果与实际运行结果是否符合,并且把每条指令执行后目的操作数的值记录下来。将实验结果整理后写到实验报告上。

8.

1

单片机实验指导书

《单片机原理与应用》 实验指导书 注意: 1、做实验前必须预习 2、带教材和实验指导书 理工大学 自动化学院自动化系

实验仪的使用 本实例是仿真INTEL的8031单片机,来循环点亮P1口的发光二极管(低电平有效)。程序是用汇编语言来编写。下面介绍相应的操作步骤: 1、运行桌面“星研集成软件”,画面如下: 2、建立源文件 执行 [主菜单?文件?新建],(或者点击图标)打开窗口。 选择存放源文件的目录,输入文件名,注意:一定要输入文件名后缀。对源文件编译、连接、生成代码文件时,系统会根据不同的扩展名启动相应的编译软件。比如:.ASM文件,使用A51来对它编译。本实 例文件名为xunhuan.asm 。窗口如下: 按“确定”即可。然后即出现文件编辑窗口: 输入源程序,参照实验一源程序。 .专业DOC.

这样一个源文件就建立好了。 3.编译、连接文件 首先选择一个源文件,然后可以编译、连接文件了。对文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、HEX文件)。编译、连接文件的方法有如下二种:(1)使用[ 主菜单?项目?编译、连接 ]或[主菜单?项目?重新编译、连接]”。(2)点击图标或来“编译、连接”或“重新编译连接”。编译、连接过程中产生的信息显示在信息窗的“建立”视中。编译没有错误的信息如下: 若有错误则出现如下信息框: 有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。 这时用户可以作相应的修改,直到编译、连接文件通过。 4.调试 编译、连接正确后,可以开始调试程序。进入调试状态方法有: a)执行[ 主菜单?运行?进入调试状态] b)点击工具条的进入后的窗口如下:

《单片机》课程实验教案

《单片机》课程实验教案 实验一流水灯实验 实验目的: 1、熟悉仿真软件PROTEUS的使用方法。 2、掌握利用PROTEUS软件进行单片机系统设计与仿真的过程。 3、掌握发光二极管的控制方法。 实验原理: 利用P1口的通用I/O口功能,P1口做输出口,通过程序向P1口传送数据,用8只发光二极管分别显示P1.7~P1.0各管脚的电平状态,编写程序实现暗点以1HZ频率由低位到高位循环。 P1口接发光二极管的阴极,P1口的管脚输出低电平时对应的发光二极管点亮,实验电路如图所示。 1、从 (1)AT89S51:单片机; (2)RES、RX8:电阻、8排阻; (3)LED-GREEN:绿色发光二极管; (4)CAP、CAP-ELEC:电容、电解电容; (5)CRYSTAL:晶振。 2、放置元器件。 3、放置电源和地。 4、连线。 5、元器件属性设置。 6、电气检测。 实验设备及软件系统: 1、电脑;

2、MA TLAB软件。 实验步骤: 1、画流程图。 2、编写汇编程序。 3、通过菜单“source→Add/Remove Source Files…”新建源程序文件:DSJ1.ASM。 4、通过菜单“source→DPJ1.ASM”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 5、程序编辑好后,单击按钮存入文件DSJ1.ASM。 6、源程序编译汇编、生成目标代码文件。 7、通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 8、加载目标代码文件。 9、全速仿真。 单击按钮,启动仿真。暗点以1HZ频率由低位到高位循环移动。 10、仿真调试。 (1)带断电仿真。

(完整版)快速入门单片机汇编语言

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(p0.0—p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(p1.0—p1.7):其每一位都能作为可编程的输入或输出线。 P2口(p2.0—p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(p3.0—p3.7):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释]

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

单片机实验指导书

《单片机原理实验指导书》 2013年03月

单片机实验是学习单片机理论的重要实践环节。其目的在于通过试验来验证和研究单片机理论,增强感性认识, 以促进认识的深化,培养学生科学的分析能力,使学生掌握单片机试验的操作方法和基本技能;培养学生严肃认真和实事求是的科学作风,锻炼科学实验的能力。 为了培养学生独立分析问题和解决问题的能力;培养学生的动手操作能力;为了更有效的完成每项实验,要求学生在实验前必须作充分预习。除复习与实验有关的理论,还要认真研究实验指导书,了解实验目的、内容、弄清实验原理,掌握编程步骤、调试程序的方法。 本指导书是根据数控专业实验教学大纲的要求以及我校单片机实验室的现状编写的。

前言 keil51软件使用简要说明---------------------------------------------------4 实验一数据传送类指令实验----------------------------6 实验二算术指令实验-----------------------------------9 实验三逻辑指令实验-----------------------------------------------------11 实验四控制转移和子程序调用实验-----------------------------------13 实验五典型程序设计-----------------------------------------------------14 实验六定时/计数器及中断实验---------------------------18 keil51使用简要说明

51单片机汇编语言

51单片机汇编语言 a)单个与多个LED灯,位操作与字节操作—输出 ORG 0000H START: CLR C MOV P0.0,C MOV P1.1,C MOV P2.2,C MOV P3.3,C CLR A

CPL A MOV P0,A MOV P1,A MOV P2,A MOV P3,A END 程序说明: 可以用7段数码管来代替各端口的8个LED灯,硬件的这种显示方式使得数字表达成为实用。数字显示由数码管的硬件结构与工作原理(7个LED灯的几何变形组合)和数字表达的数据格式确定。 如: 共阳极数码管显示数字3,则有P1口送数据#4FH;MOVP1, #0B0H 共阴极数码管显示数字8,则有P1口送数据#80H;MOVP1, #7F H 用数据表表示则有: TABshuziyang: //阳极管(共阴极管取反即可) DB(数字0~F) C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C 6H,A1H,86H,8EH

TABshuziyin: //阴极管(共阳极管取反即可) DB(数字0~F) 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,3 9H,5EH,79H,71H b)单个与多个LED灯闪烁—延时子程序—注意定时器 前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。但是硬件的响应时间太短,使得效果不佳。虽然可以通过改变单片机的时钟设置来改变效果。但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。延时效果是利用单片机空转来实现的。 ACALLDELAY;调延时子程序 ************************************************* ************************

单片机课程设计指导书

单片机原理及应用课程设计指导书 一、课程设计目的 《单片机原理及应用》是一门技术性,应用性、实践性很强的学科。课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。 二、课程设计要求 1、每个学生可以从下面的课程设计题目中任选一个(也可以根据自己的兴趣选题,但选题必须是和单片机应用有关的其他控制或测试系统,同时要通过指导老师确认),选题后按任务书的要求查阅资料,完成系统的总体设计和各个模块的设计。具体实现可以用Proteus仿真,也可以用硬件。 2、进入实验室以后应根据前面的设计在2周内独立完成仿真和调试任务。课程设计过程中,要认真记录资料来源、出现的问题和解决方法。 3、不同的学生如果选题相同,相互之间可以相互探讨,但杜绝抄袭。如果发现,按零分计算。 4、设计完成后学生要按要求认真撰写课程设计报告,并于设计完成后一周内交指导老师评阅。同时准备设计测试和答辩。

三、时间安排 1、13周之前完成分组和选题,并根据选题向指导老师要任务书 2、14周根据任务书的设计要求,查阅相关的资料,完成系统总体方案设计及各模块的软硬件设计 3、15周进入实验室进行仿真、调试,并馔写设计报告,并于16周周一交给指导教师,并准备系统测试和答辩。 四、设计作品提交 1、课程设计报告书 2、proteus仿真程序(对于用proteus仿真的学生) 3、硬件实物及单片机源程序文件 五、设计报告的撰写 1、设计报告采用统一的格式,封面包括:课程设计名称、班级、姓名、学号、设计时间,具体参考设计摸板。 2、设计报告书写规范,系列分以下几个部分进行书写: 1、绪论:介绍设计的背景和意义 2、系统总体方案设计:给出系统设计硬件框图,说明实现的基本原理 3、硬件系统设计:针对框图中的硬件模块,分别介绍选择的具体元器件型号,并介绍这些器件的性能及和单片机的连接图,最后画出详细的这个系统硬件原理图。 4、系统软件设计:根据设计的功能划分模块,画出主程序和主程序的软件流程图。 5、系统调试及仿真 写出调试方法和运行结果 6、设计总结 六、课程设计内容及提示

快速入门单片机汇编语言

快速入门单片机汇编语 言 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 P3口第二功能

Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

51单片机电子时钟课程设计实验报告

《单片机原理与应用》课程设计 总结报告 题目:单片机电子时钟(带秒表)的设计 设计人员:张保江江润洲 学号:2012197213 2012118029 班级:自动化1211 指导老师:阮海容

目录 1.题目与主要功能要求 (2) 2.整体设计框图及整机概述 (3) 3.各硬件单元电路的设计、参数分析及原理说明 (3) 4.软件流程图和流程说明 (4) 5.总结设计及调试的体会 (10) 附录 1.图一:系统电路原理图 (11) 2.图二:系统电路PCB (12) 3.表一:元器件清单 (13) 4.时钟程序源码 (14)

题目:单片机电子时钟的设计与实现 课程设计的目的和意义 课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。 课程设计的基本任务 利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。 主要功能要求 最基本要求 1)使用MCS-51单片机设计一个时钟。要求具有6位LED显示、3个按键输入。 2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后又变成000000。 4)使用3个键分别作为小时、分、秒的调校键。每按一次键,对应的显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位(例如分加到59后变为00,但小时不发生改变)。 5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。 6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。 7)掌握硬件和软件联合调试的方法。 8)完成系统硬件电路的设计和制作。 9)完成系统程序的设计。 10)完成整个系统的设计、调试和制作。 11)完成课程设计报告。 基本要求 1)实现最基本要求的1~10部分。 2)键盘输入可以控制电子时钟的走时/调试。 3)设计键盘输入电路和程序并调试。 4)掌握键盘和显示配合使用的方法和技巧。 提高发挥部分

51单片机汇编语言教程:13课单片机逻辑与或异或指令详解

51单片机汇编语言教程:第13课-单片机逻辑与或异或指令详解

结果11111001 而所有的或指令,就是将与指仿中的ANL换成ORL,而异或指令则是将ANL换成XRL。即或指令: ORL A,Rn;A和Rn中的值按位'或',结果送入A中 ORL A,direct;A和与间址寻址单元@Ri中的值按位'或',结果送入A中 ORL A,#data;A和立direct中的值按位'或',结果送入A中 ORL A,@Ri;A和即数data按位'或',结果送入A中 ORL direct,A;direct中值和A中的值按位'或',结果送入direct中 ORL direct,#data;direct中的值和立即数data按位'或',结果送入direct中。 异或指令: XRL A,Rn;A和Rn中的值按位'异或',结果送入A中 XRL A,direct;A和direct中的值按位'异或',结果送入A中 XRL A,@Ri;A和间址寻址单元@Ri中的值按位'异或',结果送入A中 XRL A,#data;A和立即数data按位'异或',结果送入A中 XRL direct,A;direct中值和A中的值按位'异或',结果送入direct中 XRL direct,#data;direct中的值和立即数data按位'异或',结果送入direct中。 练习: MOV A,#24H MOV R0,#37H ORL A,R0 XRL A,#29H MOV35H,#10H ORL35H,#29H MOV R0,#35H ANL A,@R0 四、控制转移类指令 无条件转移类指令 短转移类指令 AJMP addr11 长转移类指令

51单片机中的汇编语言与C语言.

51单片机中的汇编语言与 C 语言 C 语言, 更多的是为了掌握单片机的应用, C 语言是高效的应用程序开发工具, 与汇编语言比却不是开发高效应用程序的工具。就目前而言, 更多的是为了应用单片机, 开发应用程序, 更多的是强调开发效率, 而不是程序的运行效率 (相对而言。再就是应用程序对单片机内部资源的使用效率, 这在过去, 单片机内部资源紧缺的年代, 特别的强调, 现在已经不是特别重要了。所以, 大多数人都认为,只用 C 语言,就可以应对大多数单片机的应用开发了。 其实,汇编语言跟 C 语言在本质上一样的,只是语言形式不同而已,一个接近底层逻辑, 一个接近人类语言, 本质上都是对寄存器或存储器的读写操作而已。 汇编语言中,用 MOV 来回传送数据, C 语言里,用等号表示数据传送。汇编语言中,用 call 转去执行子过程程序, C 语言里,用个函数名调用子程序。汇编语言中,用 JMP 完成分支转移, C 语言里用 if 、 switch 、 while 、 for 来判断跳转。汇编语言跟 C 一样可以给寄存器指定命名,然后对定义的名称进行操作。汇编语言提供了对很多标志位的操作, C51根据需要也进行了改进, C 语言可以通过 #include给存储器命名来简化操作。 我觉得, C 语言是最接近汇编语言的一种高级语言, 要说不同, 也许具有大量函数的函数库,是 C 语言与汇编语言的最大区别,也是 C 语言比汇编语言有更大开发效率的原因。 在应用汇编语言进行应用程序开发时, 如果精心规划好程序结构, 设计好各种数据结构、子程序、中断程序,积累大量的算法程序(相当于函数库,也可以高效率的用汇编语言进行单片机开发。倒是兼容性、可移植性是汇编语言的最大限制,因为不同单片机有不同的指令系统,而 C 语言把这个问题,交给了机器也就是编译器去解决了。其实, 计算机的发展, 就是把尽可能多的事情交个机器去解决。

单片机实验指导书

单片机实验 实 验 指 导 书 2017年2月

单片机实验报告 (自动化XX级) 实验名称 学生 联系方式 学号 院系工学院电气与信息工程系专业自动化 指导教师 填写日期

实验一数据传送 一、实验目的 1.进一步熟悉仿真器的使用方法。 2.练习设计简单的程序。 3.掌握8051片RAM和片外RAM的数据传送方法,从而了解这两部分存贮器的特点。 二、实验容 将8051部RAM 40H~4FH置初值00H~0FH,然后将40H~4FH容传送到外部RAM的4800H~480FH,再将4800H~480FH传回部RAM的50H~5FH。设置断点B1、B2、B3每运行到断点时检查相应的CPU现场和存贮单元的容。 三、实验准备 1、认真阅读本实验指导。 2、读懂下面的程序: #include #include char data *p40 ,*p50 ; char xdata *p4800; char i, j, k; void main( ) { p40=0x40; p50=0x50; p4800=0x4800; for(i=0;i<16;i++) { *p40=i; p40=p40+1; } //B1 p40=0x40; for(j=0;j<16;j++) { *p4800=*p40; p40=p40+1; p4800=p4800+1; } // B2 p4800=0x4800; for(k=0;k<16;k++) { *p50=*p4800; p50=p50+1;

p4800=p4800+1; } } //B3 3、画出如下要测的数据表格: 四、实验步骤 1、向机器输入程序。 2、运行程序至第一个断点B1,检查40H~0FH单元容及指针p40的容。 3、运行程序至第二个断点B2,检查4800H~480FH单元容及指针p40,p4800的容。 4、运行程序至第三个断点B3,检查50H~5FH单元容及累加器及指针p50的容。 五、实验报告要求 1、写出C语言源程序和对应的汇编语言指令及注解的程序清单。 2、将测得的数据填入表格,并和理论分析的结果相比较。 3、说明8031CPU对部存贮器和外部扩展RAM存贮器各有哪些寻址方式? 4、如果要读外部程序存储器0x4800中的容,该如何访问? 5.实验心得。(必须)

51单片机经典编辑流水灯汇编程序

单片机流水灯汇编程序设计 流水灯汇编程序 8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms PUSH PSW ;现场保护指令(有时可以不加) MOV R4,#2 L3: MOV R2 ,#00H L1: MOV R3 ,#00H L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END

51单片机汇编程序集(二) 2008年12月12日星期五 10:27 辛普生积分程序 内部RAM数据排序程序(升序) 外部RAM数据排序程序(升序) 外部RAM浮点数排序程序(升序) BCD小数转换为二进制小数(2位) BCD小数转换为二进制小数(N位) BCD整数转换为二进制整数(1位) BCD整数转换为二进制整数(2位) BCD整数转换为二进制整数(3位) BCD整数转换为二进制整数(N位) 二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码) 二进制整数(M位)转换为十进制整数(组合BCD码) 三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD21 : MOV NCNT,#00H MOV R2,#00H IBD211 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R3 ORL A,R4 JNZ IBD211 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节

基于汇编语言的单片机led点阵显示(含c)

8X8 LED点阵显示技术 在8X8LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。 电路原理图 图4.24.1 硬件电路连线

(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块” 区域中的“DR1-DR8”端口上; (2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块” 区域中的“DC1-DC8”端口上; 程序设计容 (1).8X8点阵LED工作原理说明 8X8点阵LED结构如下图所示

从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述: 一根竖柱:对应的列置1,而行则采用扫描的方法来实现。 一根横柱:对应的行置0,而列则采用扫描的方法来实现。

汇编源程序 ORG 00H START: NOP MOV R3,#3 LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,A+DPTR MOV P3,A INC R2 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,#7 LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,A+DPTR MOV P3,A DEC R2 LCALL DELAY DJNZ R4,LOP3

单片机课程实验指导书

单片机实验指导书 编写者:小编 机械学院 2018年12月

目录 单片机实验指导书 (1) 实验1 - LED流水灯实验 (3) 实验2 - 模拟汽车转向灯实验 (5) 实验3 - 模拟二进制累加器实验 (7) 实验4 - 继电器控制实验 (9) 实验5 - 步进电机控制实验 (11) 实验6 - PWM波输出实验 (13) 实验7 - 直流电机调速实验 (15) 实验8 - 中断控制实验 (17)

实验1 - LED流水灯实验 一、实验目的 1.熟悉C51的开发环境; 2.掌握芯片的基本开发技能; 3.加深对单片机I/O口工作原理的了解; 4.掌握单片机引脚输出状态的基本控制方法。 二、实验原理 1.P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,可以通过控制寄存器输出对应的高低电平; 2.L1-L8等8颗LED灯管的电气特性与类似,正向电压点亮,反向电压熄灭; 3.P1口的8个引脚可以有效控制8颗LED的工作状态,合理编排输出状态即可实现LED流水灯的基本功能。 三、实验材料 1.DICE-598KⅢ实验平台; 2.PC机一台; 3.导线若干。 四、基本电路原理图 五、参考程序流程

六、实验步骤 1.单片机AT89S52的P1.0-P1.7口接L1-L8; 2.根据程序流程图编写出相应的C51工程代码; 3.使用keil_v5对代码进行调试和仿真; 4.记录调试过程和仿真结果,并结合理论知识进行分析; 5.将代码烧写到芯片上并运行,观察运行结果; 6.如实记录观察到的现象,并结合理论知识进行分析。 七、实验要求 1.准时到达实验室; 2.合理完善实验步奏; 3.独立完成单片机工程的建立、调试和仿真; 4.独立完成实验过程,能自由调整流水灯的周期; 5.如实记录实验过程; 6.认真撰写实验报告。

LCD1602-51单片机汇编程序

1602汇编程序,51单片机汇编程序,仅需修改引脚定义即可。晶振大小12M,程序测试完全正确。内部包含写数据、写命令(包括读忙和不读忙)、初始化等子函数。调用时先给LCD_DAT赋值,给出需要写入的数据或命令,然后调用。 ;端口引脚定义区 LCD_RS BIT P2.4 ;1602数据命令选择端口 LCD_RW BIT P2.5 ;1602读写选择端口 LCD_EN BIT P2.6 ;1602使能端口 LCD_DATA EQU P0 ;1602数据端口 ;变量声明区 ALL_FLAG EQU 20H ;标志位 LCD_FLAG EQU ALL_FLAG.7 ;1602读忙标志位 LCD_DAT EQU 30H ;1602数据命令字 DELAYED EQU 31H ;延时字 /***************************************** 1602读命令函数,高位存至LCD_LAG中 *****************************************/ LCD_R_DATA: MOV LCD_DATA,#0FFH LCD_BUSY: CLR LCD_RS SETB L CD_RW NOP SETB L CD_EN NOP MOV Acc,LCD_DATA MOV C,Acc.7 MOV LCD_FLAG,C CLR LCD_EN NOP JB LCD_FLAG,LCD_BUSY RET /***************************************** 1602写数据函数,数据存在LCD_DAT *****************************************/ LCD_W_DATA: LCALL LCD_R_DATA SETB L CD_RS CLR LCD_RW NOP MOV LCD_DATA,LCD_DAT

实验(8课时用)单片机实验指导书

单片机原理及应用》实验指导书 计算机科学与技术系 2012 年8 月

目录 实验一:流水灯实验.......................................... 1...实验二:中断实与定时器中断实验................................ 4..实验三:串行口实验.......................................... 9...实验四:矩阵式键盘输入识别.................................. 1..3实验五:LCD循环显示设计 (19)

实验一:流水灯实验 通过对P3 口地址的操作控制8位LED 流水点亮,从而认识单片机的存储器 实验参考电路图如下: VCC A P17 P3.7ZEQ P1.6 P3.6M^ P1.5 P3.5/T1 PI -1 P3.4/T0 P1.3 P33JlhJT1 P1.2 P3.2JirJT0 P1 1 P3.1 仃: // 包含单片机寄存器的头文件 sfr x=OxbO; 〃P3 口在存储器中的地址是 bOH 通过sfr 可定义8051内核单 片机 // 的所有内部8位特殊功能寄存器,对地址x 的操作也就是对P1 口的 操作 ************************************** 实验目的: 实验原理图 —>XTAL1 AD[O .7] D4 R447QR D6 R6屮斤 D0 R8_470R D3 R3_4?OR D1 R1 470R- D7 R74Z0F? D5 R5_4?OR D2 R2 470R

基于单片机的汇编语言入门教程

入门教程2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用

相关主题
文本预览
相关文档 最新文档