51单片机汇编语言
- 格式:doc
- 大小:268.50 KB
- 文档页数:19
51单片机汇编语言程序设计1.题目:数码管显示1~72.题目分析本实验将要求51单片机采用汇编程序来实现以上程序,我们首先要对51单片机进行硬件电路设计,然后编写相应的汇编程序3.硬件电路4.程序设计;-------------------------------------------------------------------------------;选择P1口作为数码管位选;-------------------------------------------------------------------------------org 0hmov p1,h ;启动P1作为数码管位选again: m ov p2,Fh ;0000 0011 1111 显示数字1sjmp againmov p2,h ;0000 0110 显示数字2sjmp againmov p2,Bh ;0101 1011 显示数字3sjmp againmov p2,Fh ;0100 1111 显示数字4sjmp againmov p2,h ;0110 0110 显示数字5sjmp againmov p2,Dh ;0110 1101 显示数字6sjmp againmov p2,dh ;0111 1101 显示数字7sjmp againend5.程序流程本汇编程序的程序流程如下:1)将P1口设置为数码管的位选;2)通过P2口设置相应的数字,P2口的值将会根据数字的不同而不同,以便实现将不同的数字显示到数码管上;3)循环2步骤,不断刷新P2口的值,从而实现数字的不断变化,从而实现将1-7数字在数码管上循环显示。
3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
51单片机汇编语言入门教程什么是51单片机
51单片机指的是英特尔公司推出的一种单片机芯片种类,其名字为“AT89S52”。
后来,这种芯片因其使用广泛,被人们简称为“51单片机”。
为什么要研究汇编语言
研究汇编语言能够让我们更好地理解机器是如何执行指令的,
从而更好地优化程序,提高程序运行效率。
汇编语言基础知识
数据类型
- 字节:一个字节是8位二进制数,可以表示0~255之间的数。
- 字:一个字是16位二进制数,可以表示0~之间的数。
- 双字:一个双字是32位二进制数,可以表示0~之间的数。
指令集
51单片机有大约100条汇编指令,这些指令可以完成各种操作,如运算、数据传输、中断处理等。
寄存器
51单片机有4个8位的通用寄存器(寄存器0~3)和2个16
位的通用寄存器(DPTR和PC)。
程序结构
51单片机只有一种程序结构——线性结构。
程序从0地址开始执行,一条一条地执行,直到程序结束。
编写第一个汇编程序
以下是一个简单的汇编程序示例:
ORG 0H ;设置程序起始地址为0H
MOV P1, #55H ;将55H赋值给P1口
END ;程序结束指令
这个程序的作用是将55H赋值给P1口。
总结
通过学习本教程,我们了解了基本的汇编语言知识,包括数据
类型、指令集、寄存器、程序结构以及编写程序的基本步骤。
希望
这份教程可以帮助初学者顺利掌握51单片机汇编语言编程的基础。
单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。
汇编语言是一种低级语言,是用于编写单片机指令的一种语言。
汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。
本文将介绍单片机C51的汇编语言编程。
一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。
C51指的是Intel公司推出的一种基于MCS-51架构的单片机。
该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。
二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。
它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。
在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。
三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。
以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。
3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。
4. JMP指令:用于无条件跳转到指定的地址。
5. JZ指令:用于在条件为零时跳转到指定的地址。
6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。
四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。
2. 分析程序的控制流程和数据流程。
3. 设计算法和数据结构。
4. 编写汇编指令,实现程序的功能。
5. 调试程序,并进行测试。
六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。
51单片机汇编语言教程:1课:单片机简叙1、什么是单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。
在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。
而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。
单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。
天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。
不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。
为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。
另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。
既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。
所以8051出来十多年,依然没有被淘汰,还在不断的发展中。
2、MCS51单片机和8051、8031、89C51等的关系更多单片机学习资料请来我们平常老是讲8051,又有什么8031,现在又有89C51,89s51它们之间究竟是什么关系?MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。
51单片机汇编语言指令教程汇集
1.MOV
MOV指令把源操作数的值复制到目的操作数。
格式如下:
MOV dest,src
dest :用于存储源操作数值的目的操作数。
src :用于取源操作数值的源操作数。
MOV指令可以把源操作数的值复制到目的操作数里,其中它的源操作数和目的操作数可以是内存单元,寄存器或立即数。
2.MVI
MVI指令把单字节立即数的值复制到其中一寄存器或内存单元。
格式如下:
MVI dest,data
dest :用于存放单字节立即数值的目的操作数。
data :用于取立即数值的立即数。
MVI指令可以把数据(data)复制到dest所指向的存储单元。
它的目的操作数可以是内存单元或寄存器,源操作数只能是8位立即数。
3.LXI
LXI指令可以把16位数据装载到左边和右边双字节寄存器中。
格式如下:
LXI rp,data
rp :用接受16位数据的双字节寄存器,它可以是BC,DE,HL或SP。
data :用于取16位立即数的立即数。
LXI指令可以把16位立即数data复制到双字节寄存器rp里。
4.LDA
LDA指令可以把存储单元中的数据装载到A寄存器中,格式如下:
LDA addr
addr :用于取存储单元数据值的存储单元地址。
LDA指令可以把存储单元addr中的数据复制到A寄存器中。
5.STA
STA指令可以把A寄存器的值存入指定的存储单元中,格式如下:
STA addr。
MCS51单片机指令系统与汇编语言程序设计MCS-51是一种非常常见的8位单片机系列,该系列包括了多种型号的单片机,如Intel 8051、8031、8052等。
MCS-51单片机指令系统是一组用于驱动该系列单片机的指令集,汇编语言程序设计是利用这些指令来编写程序。
MCS-51单片机指令系统包含了多种指令,可以执行诸如数据传输、算术逻辑运算、控制和数据访问等功能。
这些指令通过各种不同的寻址模式来操作数据,包括立即寻址、寄存器寻址、直接寻址、间接寻址和寄存器间接寻址等。
不同的寻址模式和指令组合可以实现不同的功能。
汇编语言程序设计通过将人类可读的汇编指令翻译成机器可执行的二进制指令来编写程序。
在MCS-51单片机中,汇编指令由操作码和操作数组成。
操作码指定了所执行的操作,如数据传输、算术运算或控制指令。
操作数则指定了指令要操作的数据。
下面以一个简单的例子来说明MCS-51单片机指令系统和汇编语言程序设计的基本原理。
假设我们要编写一个程序,将两个寄存器中的数据相加,并将结果存储到第三个寄存器中。
首先,我们需要将第一个寄存器的值加载到累加器A中,这可以通过MOV指令实现。
MOV指令的操作码为01,操作数为两个寄存器的地址。
例如,MOVA,R0将R0的值加载到A中。
接下来,我们需要将第二个寄存器的值加载到B寄存器中,同样可以使用MOV指令。
MOVB,R1将R1的值加载到B中。
然后,我们可以使用ADD指令将A和B中的值相加,并将结果存储到A中。
ADD指令的操作码为04,操作数为A的地址。
例如,ADDA将累加器中的值与A寄存器中的值相加,并将结果存储到A中。
最后,我们可以使用MOV指令将A中的结果移动到第三个寄存器中,例如,MOVR2,A将A的值移动到R2中。
通过组合使用这些指令,我们可以实现将两个寄存器中的值相加并存储到第三个寄存器中的功能。
总结来说,MCS-51单片机指令系统和汇编语言程序设计是一种用于编程控制该系列单片机的方式。
C51单片机汇编语言程序设计一、二进制数与十六进制数之间的转换1、数的表达方法为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。
2、二进制数与十六进制数对应表二进制十六进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。
例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再写出对应的十六进制数即可。
0101000011011000111150D8F答案:(1010000110110001111)2=(50D8F)16例:将1001101B转化为十六进制数解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。
100111109E答案:10011110B=9EH4、十六进制数转换为二进制数转换方法为:将每1位十六进制数转换为4位二进制数。
例:将(8A)16转化为二进制数解:将每位十六进制数写成4位二进制数即可。
8A10001010答案:(8A)16=(10001010)2例:将6BH转化为二进制数解:将每位十六进制数写成4位二进制数即可。
6B01101011答案:6BH=01101011B二、计算机中常用的基本术语1、位(bit)计算机中最小的数据单位。
由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。
2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。
如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。
51单片机汇编语言51单片机汇编语言是一种基于51系列单片机的汇编语言,它是一种直接操作硬件的低级语言。
在嵌入式系统开发中,经常需要使用汇编语言来编写底层驱动程序和实现特定功能。
本文将介绍51单片机汇编语言的基本概念、语法结构以及常用指令集。
一、51单片机简介51单片机是一种基于哈佛结构的8位单片机,由英特尔公司设计,并于1980年发布。
它具有低功耗、高性能和易于编程的特点,广泛应用于家电、汽车电子、工控设备等领域。
二、汇编语言基础1. 数据类型:51单片机汇编语言支持的数据类型包括位(bit)、字节(byte)、字(word)和双字(dword)。
可以通过定义变量来使用这些数据类型。
2. 寄存器:51单片机包含一组通用寄存器和特殊功能寄存器。
通用寄存器用于存储临时数据,特殊功能寄存器用于控制和配置硬件。
常用的通用寄存器有ACC累加器、B寄存器和DPTR数据指针。
3. 指令集:51单片机汇编语言的指令集丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、跳转指令等。
例如,MOV指令用于数据传送,ADD指令用于加法运算,JMP指令用于无条件跳转。
三、汇编语言示例下面是一个简单的51单片机汇编语言程序示例,实现了一个LED 灯的闪烁效果。
```ORG 0x0000 ; 程序起始地址MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯LOOP:MOV P1, #0xFF ; 将0xFF赋值给P1口,打开LED灯CALL DELAY ; 调用延时子程序MOV P1, #0x00 ; 将0x00赋值给P1口,关闭LED灯CALL DELAY ; 调用延时子程序JMP LOOP ; 无条件跳转到LOOP标签DELAY:MOV R0, #0xFF ; 将0xFF赋值给R0寄存器DELAY_LOOP:DJNZ R0, DELAY_LOOP ; R0减1,如果不等于0则跳转到DELAY_LOOP标签RET ; 返回调用子程序的指令END ; 程序结束标志```四、汇编语言开发工具51单片机汇编语言的开发工具有很多,常用的有Keil C51、SDCC、ASM51等。
51单片机汇编语言指令教程汇集1.MOV指令:MOV指令用于将一个值从一个寄存器或内存位置复制到另一个寄存器或内存位置。
例如,MOVA,将常数10复制到累加器A中。
2.ADD指令:ADD指令用于将两个操作数相加,并将结果保存在目标操作数中。
例如,ADDA,B将寄存器B的值与累加器A的值相加,并将结果保存在累加器A中。
3.SUB指令:SUB指令用于将源操作数减去目标操作数,并将结果保存在目标操作数中。
例如,SUBA,B将寄存器B的值减去累加器A的值,并将结果保存在累加器A中。
4.INC指令:INC指令用于将指定的操作数加1、例如,INCA将累加器A的值加15.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加器A的值减16.JMP指令:JMP指令用于无条件地跳转到指定的地址。
例如,JMP1000h将跳转到地址1000h处执行指令。
9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。
例如,ACALL Subroutine将调用一个名为Subroutine的子程序。
10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。
例如,RET将从子程序返回。
11.NOP指令:NOP指令用于空操作,即不执行任何操作。
它通常用于延时或填充空白。
以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。
学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。
希望本文提供的51单片机汇编语言指令教程能够帮助你入门和掌握51单片机汇编语言的基本知识。
如果你想深入学习51单片机汇编语言,建议参考相关的教材或在线资源,进行更加系统和全面的学习。
51单片机汇编程序1. 简介51单片机是一种常用的8位单片机芯片,具有广泛的应用领域。
51单片机的编程语言主要有汇编语言、C语言和底层汇编语言。
本文主要介绍51单片机的汇编程序。
2. 汇编程序基础2.1 寄存器51单片机的CPU有4个8位寄存器(A、B、DPTR、PSW)和一个16位寄存器(PC)。
在汇编程序中,我们可以使用这些寄存器来进行各种操作。
•A寄存器(累加器):用于存储数据和进行算术运算。
•B寄存器:辅助寄存器,可用于存储数据和进行算术运算。
•DPTR寄存器:数据指针寄存器,用于存储数据存取的地址。
•PSW寄存器:程序状态字寄存器,用于存储程序运行状态信息。
•PC寄存器:程序计数器,用于存储当前执行指令的地址。
2.2 指令集51单片机的指令集包含了多种汇编指令,可以用来进行数据操作、算术运算、逻辑运算、控制流程等。
常用的汇编指令有:•MOV:数据传送指令。
•ADD、SUB:加法和减法运算指令。
•ANL、ORL、XRL:逻辑运算指令。
•MOVX:外部RAM的读写指令。
•CJNE、DJNZ:条件分支指令。
•LCALL、RET:函数调用和返回指令。
2.3 编写一个简单的汇编程序下面是一个简单的汇编程序示例,用于将A寄存器中的数据加1,并将结果存储到B寄存器中。
ORG 0x0000 ; 程序的起始地址MOV A, #0x01 ; 将A寄存器赋值为1ADD A, #0x01 ; 将A寄存器加1MOV B, A ; 将A寄存器的值传送到B寄存器END ; 程序结束在上面的示例中,ORG指令用于指定程序的起始地址,MOV 指令用于将A寄存器赋值为1,ADD指令用于将A寄存器加1,MOV指令用于将A寄存器的值传送到B寄存器,END指令用于标记程序结束。
3. 汇编语言的应用51单片机的汇编语言广泛应用于各种嵌入式系统中,包括智能家居、工业自动化、仪器仪表等领域。
汇编程序具有以下特点:•程序执行效率高:由于汇编语言直接操作硬件,可以精确控制程序的执行流程,提高程序的执行效率。
51单片机汇编语言a)单个与多个LED灯,位操作与字节操作—输出ORG 0000HSTART:CLR CMOV P0.0,CMOV P1.1,CMOV P2.2,CMOV P3.3,CCLR ACPL AMOV P0,AMOV P1,AMOV P2,AMOV P3,AEND程序说明:可以用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,8EHTABshuziyin: //阴极管(共阳极管取反即可)DB(数字0~F)3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,3 9H,5EH,79H,71Hb)单个与多个LED灯闪烁—延时子程序—注意定时器前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。
但是硬件的响应时间太短,使得效果不佳。
虽然可以通过改变单片机的时钟设置来改变效果。
但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。
延时效果是利用单片机空转来实现的。
ACALLDELAY;调延时子程序************************************************* ************************DELAY:;延时子程序—这是一个非常有用、而且常见的一个子程序MOV R5,#04H;将16进制数04H传递给寄存器R5F3:MOV R6,#0FFH;将16进制数0FFH传递给寄存器R6F2:MOV R7,#0FFH;将16进制数0FFH传递给寄存器R7F1:DJNZR7, F1;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令DJNZR6, F2;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令DJNZR5, F3;寄存器R5减1非0跳转到F3,直到减为0顺序执行下一指令RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序************************************************* **************************应用实例MAIN:CLR CMOV P0.0,CMOV P1.1,CMOV P2.2,CMOV P3.3,CACALLDELAY;调延时子程序;CLR ACPL AMOV P0,AMOV P1,AMOV P2,AMOV P3,AACALL DELAY;调延时子程序SJMP MAIN ;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回DELAY:;延时子程序-这是一个非常有用、而且常见的一个子程序MOV R5,#04H;将16进制数04H传递给寄存器R5F3:MOV R6,#0FFH;将16进制数0FFH传递给寄存器R6F2:MOV R7,#0FFH;将16进制数0FFH传递给寄存器R7F1:DJNZR7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令DJNZR6, F2 ;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令DJNZR5, F3 ;寄存器R5减1非0跳转到F3,直到减为0顺序执行下一指令RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序END程序说明:注意延时子程序中的DJNZR7, F1;DJNZR6, F2;DJNZR5, F3;通过增加或减少循环数目控制或改变延时时间c)单个与多个LED灯流动—位循环、字节循环与延时子程序ORG 0000HMAIN:;****************位循环—扫描—流水灯—逐级增加灯的数目*******************CLR CMOV P0.0,CACALLDELAY;调延时子程序MOV P0.1,CACALLDELAY MOV P0.2,CACALLDELAY MOV P0.3,CACALLDELAYMOV P0.4,CACALLDELAYMOV P0.5,CACALLDELAYMOV P0.6,CACALLDELAY MOV P0.7,CACALLDELAY;注意前面各位状态一直持续。
P0口各位电平保持不变;****************位循环—流水灯—逐个改变灯亮与灭*******************CLR CMOV P0.0,CACALLDELAY;调延时子程序CPL CMOV P0.0,CACALLDELAY CLR CMOV P0.1,C ACALLDELAY CPL CMOV P0.1,CACALLDELAYCLR CMOV P0.2,CACALLDELAYCPL CMOV P0.2,CACALLDELAYCLR CMOV P0.3,CACALLDELAYCPL CMOV P0.3,CACALLDELAYCLR CMOV P0.4,CACALLDELAYCPL C MOV P0.4,CACALLDELAYCLR C MOV P0.5,CACALLDELAYCPL C MOV P0.5,CACALL DELAY;注意前面各位状态—电平、输出状态变化……、……;*******************字节循环—逐级增加输出口的数目********************CPL AMOV P0,AACALLDELAYMOV P1,AACALLDELAYMOV P2,AACALLDELAYMOV P3,AACALLDELAY;*******************字节循环—流水灯—逐渐改变灯的亮灭状态*************MOV P2,#01H;注意:#01H #02H #04H #08H #80H #40H #20H #10H阳极管ACALLDELAYMOV P2,#02H;注意:#FEH #FDH #FBH #F7H #7FH #BFH #DFH #EFH阴极管ACALLDELAYMOV P2,#04HACALLDELAYMOV P2,#08HACALLDELAYMOV P2,#10HACALLDELAY MOV P2,#20H ACALLDELAYMOV P2,#40HACALLDELAYMOV P2,#80H ACALLDELAY;****************字节循环—数码管—字符(数字、字母等)**************MOV P1,#40H;改变字节中各位的电平状态,以便控制输出、显示所要求的内容ACALLDELAYMOV P1,#79HACALLDELAYMOV P1,#24H ACALLDELAYMOV P1,#30HACALLDELAYMOV P1,# 19H ACALLDELAYMOV P1,#12HACALLDELAYMOV P1,#02H ACALLDELAY MOV P1,#78HACALLDELAYSJMP MAIN ;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回;*******************延时子程序***************************DELAY:;延时子程序—去除一个循环,时间变短了。
MOV R6,#04H ;将16进制数04H传递给工作寄存器R6。
改变#04H为#3FH时间变长F2:MOV R7,#0FFH;将16进制数0FFH传递给工作寄存器R7 F1:DJNZR7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令DJNZR6, F2 ;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序END;********字节循环—数码管—字符(数字、字母等)—数表与指针***********MAIN:CLR AMOV P3,#00HMOV P0,#00HMOV P2,#00HMOV R0,#00H;寄存器中放数值0MOV DPTR,#TABZshuzi ;指针PC指向数表DISP:;段标记MOV A,R0 ;将寄存器中的数值转移到累加器中MOVC A,A+DPTR;以DPTR作为基础,与累加器相加得到新地址给累加器MOV P3,A;将累加器的地址给P3口MOV P0,ASETB p2.3 ;一位数显示位控制;个位SETB p2.7ACALL DELAY;调延时子程序ACALL DELAYINC R0 ;寄存器R0加1CJNE R0,#16H,DISP ;寄存器与立即数18比较,不相等则转移到DISP循环。
相等则顺序执行TABshuziyang://阳极管DBC0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C 6H,A1H,86H,8EH,0FFHTABshuziyin://阴极管DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH ,39H,5EH,79H,71H,0FFHEND;*************字节循环—数码管—字符(数字、字母等)—移位控制***********RL A将累加器的值左移一位RLC A将累加器含进位C左移一位RR A将累加器的值右移一位RRC A将累加器含进位C右移一位1.单个按键,单个与多个LED灯—最小系统—位输入与位、字节输出—判断与子程序a)单个按键与单个LED灯(位操作—输入与输出)—判断与子程序b)单个按键与多个LED灯(位操作—输入与字节操作—输出)c)单个按键与多个LED灯(位操作—输入与位、字节操作—输出)d)单个按键与单个电机控制—开环控制1.单个按键,单个与多个LED(位操作—输入与位、字节操作—输出)—最小系统a)单个按键,单个LED灯(位操作与位输入、输出)—有、无判断而传送数据通过三个方面(程序指令、虚拟仿真、实体电路)探讨单输入与单输出:主要是理解位数据传送,包括汇编语言的数据传送指令实践、实际虚拟电路的数据传送响应,以体现抽象与具体的可理解性。