80C51单片机C语言常用模块子程序
第3章 80C51单片机的指令系统及编程
三、指令系统 ~
(1) 数据传送类指令(28条)
数据传送类指令是数据处理的最基本操作,在80C51 单片机中,数据传送类指令占得比重比较大。这类指 令一般不影响程序状态字寄存器PSW的状态。 数据传送类指令可分为:一般传送类指令、查表指
令、片外RAM访问指令、堆栈操作指令和交换指令。 片外RAM访问指令 RAM
CLR C CLR bit CPL C CPL bit SETB C SETB bit 对全部可位寻址区的每一位, 对全部可位寻址区的每一位, 均可直接进行清0、 均可直接进行清 、取反及 置1操作 操作
三、指令系统 ~
(5)位操作类指令(17条)
(3)位逻辑运算指令 条) )位逻辑运算指令(4条
1、无条件转移指令(4条) 无条件转移指令( 2、条件转移指令(8条) 条件转移指令( 3、子程序调用与返回指令(4条) 子程序调用与返回指令( 4、空操作指令(1条) 空操作指令(
三、指令系统 ~
(4)控制转移类指令(17条)
1、无条件转移指令(4条) 无条件转移指令(
三、指令系统 ~
(4)控制转移类指令(17条)
2、条件转移指令(8条) 条件转移指令( (1)累加器判0转移指令(2条) 累加器判0转移指令(
三、指令系统 ~
(2) 比 较 不 相 等 转 移 指 令 条 (4 条)
(4)控制转移类指令(17条)
三、指令系统 ~
(4)控制转移类指令(17条)
2、条件转移指令(8条) 条件转移指令( (3)减1不为0转移指令(2条) 不为0转移指令(
二、寻址方式 ~ 3、寄存器寻址
二、寻址方式 ~ 4、寄存器间接寻址
二、寻址方式 ~ 5、变址寻址
二、寻址方式 ~ 6 、相对寻址
80C51单片机的程序设计(完整版)
第四章 80C51单片微机的程序设计 单片微机的程序设计
4.1概述 概述
4.1.1 汇编语言格式
1. 计算机语言 计算机语言——机器语言、汇编语言与高级语言 机器语言、 机器语言 程序就是为计算某一算式或完成某一工作的若干指令的有序 集合。计算机的全部工作概括起来, 集合。计算机的全部工作概括起来,就是执行这一指令序列的 过程。这一指令序列称为程序。为计算机准备这一指令前的过 过程。这一指令序列称为程序。 程称为程序设计。目前, 程称为程序设计。目前,可用于程序设计的语言基本上可分为 三种:机器语言、汇编语言和高级语言。 三种:机器语言、汇编语言和高级语言。 ⑴ 机器语言 在计算机中,所有的数符都是用二进制代码来表示的, 在计算机中,所有的数符都是用二进制代码来表示的,指令 也是用二进制代码来表示。这种用二进制代码表示的指令系统 也是用二进制代码来表示。 称为机器语言系统,简称为机器语言。 称为机器语言系统,简称为机器语言。直接用机器语言编写的 程序称为手编程序或机器语言程序。 程序称为手编程序或机器语言程序。
两种语句都由四个部分组成。其中每一部分称为域也称为字段, 两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符有 冒号“ ”“逗号 逗号“ 和分号“ 冒号“:”“逗号“,”和分号“;”。其中方括号括起来的是 可选择部分。 可选择部分。
标号(也称为名字 标号 也称为名字) 域: 也称为名字 用来说明指令的地址。标号可以作为LJMP、AJMP、 用来说明指令的地址。标号可以作为 、 、 LCALL及ACALL等指令的操作数。 等指令的操作数。 及 等指令的操作数 • 在指令语句中,标号位于一个语句的开头位置,由字母和数 在指令语句中,标号位于一个语句的开头位置, 符组成, 字母打头,冒号“ 结束。 符组成 , 字母打头 , 冒号 “ : ” 结束 。 在 80C51单片微机的汇编 单片微机的汇编 语言中,标号中的字符个数一般不超过8个 若超过8个 语言中,标号中的字符个数一般不超过 个,若超过 个,则以前 面的8个为有效 后面字符不起作用。 个为有效, 面的 个为有效,后面字符不起作用。 • 不能使用本汇编语言中已经定义了的符号作标号, 不能使用本汇编语言中已经定义了的符号作标号,比如指令 助记符(如 及寄存器符号名称(如 助记符 如ADD) 、伪指令 (如END) 及寄存器符号名称 如PC) 。 如 • 一条语句可以有标号,也可以没有标号, 一条语句可以有标号,也可以没有标号,标号的有无取决于 程序中的其它语句是否需要访问该条语句。 程序中的其它语句是否需要访问该条语句。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。
第4章 80C51单片机汇编语言程序设计(新)
DW BR1 ;BRTAB+2、BRTA+3
…
精选版课件ppt
25
初始化部分
循环结构
对于循环次数计数器、地址指针赋初值,对于使用到 的寄存器或者存储单元赋初值,为循环作准备。
循环体部分
为下一次循环创造条件:修改循环次数计数器、地址 指针,避免死循环。
循环的判断与控制:判断循环次数计数器,或者检查 判断循环条件。
熟悉单片机汇编程序常用的伪指令 了解汇编语言程序的格式
精选版课件ppt
2
汇编语言源程序的编辑和汇编
精选版课件ppt
3
机器编辑→交叉汇编→串行传送
*.ASM
地址 8000
8002
机器码
标号 助记符指令
7820
SORT: MOV R0,#20H
7F07
MOV
精选版课件ppt
4
编辑、汇编
编辑:
JC NEXT3
;x<5,则转NEXT3
CJNE A,#10,NEXT2 ;与10比较
JNC NEXT4
; x>10,则转NEXT4
MOV R0,#0
;5≤x ≤10,y=0
SJMP NEXT5
MOV R0,A
DEC R0
;x<5,y=x-1
SJMP NEXT5
MOV R0,A
INC R0
;x>10,y=x+1
x-1(x<5)
Y=
0(5≤x ≤ 10)
x+1(x>10)
要根据x的大小来决定y值,在判断x<5和y>10时,采用CJNE和JC 以及CJNE和JNC指令进行判断。
精选版课件ppt
19
NEXT1: NEXT2:
单片机课程第4章 80C51汇编程序设计
4.3.2 参数传递
利用累加器或寄存器(简单、快速,但参数个数不多) 【例4-6】实现两个8位的十六进制无符号数求和的子程序。 例 实现两个8位的十六进制无符号数求和的子程序。
入口: R3) 加数; 入口:(R3)=加数; R4) 被加数。 (R4)=被加数。 SADD:MOV CLR ADD JC MOV SJMP PP1:MOV PP2:MOV RET A,R3 C A,R4 PP1 R3,#00H PP2 R3,#01H R4,A 出口: R3) 和的高字节; 出口:(R3)=和的高字节; R4) 和的低字节。 (R4)=和的低字节。 ;取加数( R3中 ;取加数(在R3中) 取加数 ;被加数( R4中 ;被加数(在R4中)加A 被加数 ;结果小于255时 高字节R3内容为00H ;结果小于255时,高字节R3内容为00H 结果小于255 R3内容为 ;结果大于255时 高字节R3内容为01H ;结果大于255时,高字节R3内容为01H 结果大于255 R3内容为 ;结果的低字节在R4中 结果的低字节在R4 ;结果的低字节在R4中
MAIN:MOV MOV LOOP0:MOV CJNE SJMP LOOP1:MOVX INC INC SJMP DONE:SJMP R0,#60H DPTR,#1000H A,@R0 A,#24H,LOOP1 DONE @DPTR,A R0 DPTR LOOP0 DONE ;置初值 ;置初值 ;取数据 ;取数据 ;循环结束 循环结束? ;循环结束? ;是 ;是 ;循环处理 ;循环处理 ;循环修改 ;循环修改 ;继续循环 ;继续循环 ;结束处理 ;结束处理
;置初值 ;置初值 ; ; ;循环处理 ;循环处理 ; ;循环修改 循环修改, ;循环修改,判结束 ;结束处理 ;结束处理
单片机 80C51单片机的软件基础_2
单片机 80C51单片机的软件基础_2在现代电子技术领域,单片机扮演着至关重要的角色。
80C51 单片机作为其中的经典代表,其软件基础是我们深入理解和应用它的关键。
首先,让我们来了解一下 80C51 单片机的指令系统。
指令是单片机能够执行的基本操作命令,就如同我们日常做事的具体步骤。
80C51单片机的指令系统丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、控制转移指令等等。
数据传送指令用于在单片机内部的寄存器、存储器之间进行数据的移动。
比如说,将一个数值从一个寄存器传送到另一个寄存器,或者将存储单元中的数据读取到寄存器中。
算术运算指令则能实现加法、减法、乘法、除法等基本的数学运算。
这在处理各种数据计算的任务中是必不可少的。
逻辑运算指令用于对数据进行逻辑与、或、异或等操作,帮助我们实现对数据的逻辑判断和处理。
控制转移指令则决定了程序的执行流程。
它可以让程序根据特定的条件跳转到指定的地址继续执行,从而实现分支和循环等功能。
接下来,我们说一说 80C51 单片机的编程语言。
常见的编程语言有机器语言、汇编语言和高级语言。
机器语言是单片机能够直接识别和执行的二进制代码。
它由一连串的 0 和 1 组成,虽然执行效率高,但编写和阅读都非常困难。
汇编语言是一种符号化的机器语言,使用助记符来代替机器指令的操作码,用地址符号或标号来代替地址码。
相比机器语言,汇编语言更易于理解和编写,但仍然需要对单片机的硬件结构有较深入的了解。
高级语言,如 C 语言,具有更高的可读性和可维护性。
它能够让开发者更专注于解决问题的逻辑,而不必过多地关注单片机的底层硬件细节。
使用高级语言编写的程序,经过编译后可以在 80C51 单片机上运行。
在软件开发过程中,编程工具也是不可或缺的。
Keil 就是一款常用的 80C51 单片机编程软件。
它提供了方便的代码编辑、编译、调试环境,能够大大提高开发效率。
编写好程序后,我们需要将其下载到单片机中。
8 80C51的C语言程序设计
{}
}
//外部中断T0中断函数 void int0(void) interrupt 0 using 0 {
P10=~P10; }
2019/10/7
29
定时计数器编程示例
R6、R7 R4、R5 R2、R3
long、float R4~R7 R4~R7
一般指针
R1、R2、R3 R1、R2、R3 R1、R2、R3
2019/10/7
26
固定存储器位置参数传递
SMALL模式下,在内部RAM中完成 COMPACT模式下,在外部RAM中完成 LARGER模式下,在外部RAM中完成
80C51单片机不采用堆栈传递参数。但C51提供一种模拟堆栈,从而支持可重 入函数的递归调用。
5.3 C51的库函数
常用的C51库函数参见C51的帮助文件
2019/10/7
27
6 C51编程实例
6.1 80C51内部资源的编程
中断服务函数示例
中断函数的定义形式 void 函数名(void)interrupt n [using m] { 函数体 }
C51程序开发过程
编写源程序 建立工程,加入源程序 编译生产目标程序 仿真调试、写存储器
2019/10/7
2
系统库
2019/10/7
C51源程序 C51编译器 浮动目标码模块
连接器 绝对定位目标码文件
编程器
列表文件 用户库
映像文件 硬件仿真器
3
1.2 C51程序结构
#include <reg52.h> #include <stdio.h> void delayms(unsigned); void main(void) { unsigned char i; P1=0x01; do { for (i=0;i<=7;i++)
80c51汇编语言指令
80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。
它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。
本文将介绍80C51汇编语言的一些常用指令。
一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。
例如,MOV A, #25H表示将立即数25H复制到A寄存器中。
二、ADD指令ADD指令用于执行两个操作数的相加运算,并将结果存储在目标操作数中。
例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。
三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。
与ADD指令不同的是,SUBB指令会考虑进位位的值。
例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。
四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。
例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。
五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。
例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。
六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。
JNC指令则相反,只有当进位标志位为0时才执行跳转。
七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。
JNZ指令则相反,只有当零标志位为0时才执行跳转。
八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。
如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。
第三章-80C51单片机的指令系统
第三章-80C51单片机的指令系统80C51单片机是一种常用的微控制器,广泛应用于嵌入式系统中。
其指令系统是该单片机的核心组成部分,决定了其功能和特性。
在本文中,我们将深入探讨80C51单片机的指令系统,包括其指令格式、指令集以及指令的执行过程。
一、指令格式80C51单片机的指令格式通常由若干个字节组成,每个字节又分为几个字段。
具体而言,一条指令通常包括操作码、目标操作数和源操作数等字段。
其中,操作码表示指令的类型和功能,目标操作数表示指令操作的目标寄存器或内存单元,源操作数表示指令操作的源寄存器或内存单元。
以MOV指令为例,其指令格式如下:| 操作码 | 目标操作数 | 源操作数 |其中,操作码为一个字节,表示MOV指令;目标操作数和源操作数也为一个字节,分别表示指令操作的目标和源。
二、指令集80C51单片机的指令集丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、分支指令等等。
这些指令可以实现各种功能,满足不同的应用需求。
1. 数据传送指令数据传送指令用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。
例如,MOV指令可以实现数据传送操作。
2. 算术运算指令算术运算指令用于进行加法、减法、乘法和除法等运算。
例如,ADD指令可以实现两个操作数的相加操作。
3. 逻辑运算指令逻辑运算指令用于进行与、或、非、异或等逻辑运算。
例如,AND 指令可以实现两个操作数的与运算。
4. 分支指令分支指令用于实现循环、条件判断和跳转等功能。
例如,JMP指令可以无条件跳转到指定的地址。
除了上述指令之外,80C51单片机还支持位操作指令、移位指令、输入输出指令等。
三、指令执行过程在80C51单片机中,指令的执行过程包括取指、译码、执行以及访问存储器等阶段。
1. 取指阶段取指阶段是指令执行的第一步,其目的是从存储器中读取指令。
取指的过程通常涉及到程序计数器的操作,确定下一条要执行的指令地址。
2. 译码阶段译码阶段是将取到的指令进行解码,将其转换为内部指令表示形式,以便后续的执行。
第3章 80C51系列单片机指令系统
一、数据传送类指令
⒈ 内RAM数据传送指令 (15条)
⒉ 16位数据传送指令
⒊ 外RAM传送指令.
(2条)
(4条)
⒋ 读ROM指令
⒌ 堆栈操作指令
(2条)
(2条)
⒍ 交换指令
(5条)
36
⒍ 交换指令(5条) 注意:必须以A为操作数!
⑴ 字节交换指令 ① XCH ② XCH ③ XCH XCHD A,Rn A,@Ri ; A←→Rn,n=0~7 ; A←→(Ri),i=0、1
MOV
A,R0
;将R0中的数据传送至A中
9
⒋ 寄存器间接寻址
间接寻址是根据操作数地址的地址寻找操作数。
R0、R1和DPTR可以作为间接寻址寄存器。
间接寻址用间址符“@”作为前缀。 【例】
MOV MOVX
A,@R0
;将以R0中内容为地址的存储 单元中的数据传送至A中
A,@DPTR;将外RAM DPTR所指存储单元
18
• MOV指令在片内RAM的允许操作图 • 不允许的操作有: • @Ri → @Ri Rn → Rn @Ri → Rn
19
【例】 (70H)=60 (60H)=20H P1=0B7H
• • • • • • • MOV R0,#70H MOV A, @R0 MOV R1,A MOV A,@R1 MOV @R0,P1 结果: (70H)= R1=
① MOV ② MOV ③ MOV Rn,A ;A→Rn,n=0~7
Rn,direct;(direct)→Rn,n=0~7 Rn,#data ;data→Rn,n=0~7
15
⑶ 以直接地址为目的字节的传送指令(5条)
① MOV ② MOV ③ MOV ④ MOV direct,A direct,Rn direct,@Ri ;A→(direct) ;Rn→(direct),n=0~7 ;(Ri)→(direct),i=0、1
80C51单片机C语言常用模块子程序
j=i+1; } } } return j; }
3、利用 74Ls164 输出脉冲继续数码管显示的计数: void clear164()//将 164 输出所以清零 { char k; for(k=0;k<8;k++) { DIN=1; CLK=0; CLK=1; } } 4、数码管显示子程序: void display(char wei,char shu) { uchar m,n; clear164(); DIN=0; for(n=wei;n>0;n--)//去掉没有显示的位数 {CLK=0; CLK=1; DIN=1; } CLK=0; CLK=1; P0=table[shu]; //显示号码的位数 delay(5); for(m=8-wei;m>0;m--)//去掉剩下的位数 { DIN=1; CLK=0; CLK=1; } } 5、中断子程序:
} DIN=0; CLK=0; CLK=1; for(z=8;z>x;z--) { DIN=1; CLK=0; CLK=1; } } void main() { init(); while(1) { uchar i; if(flag==0) { shi=num/10; wei(7); P0=table[shi]; delay(1); P0=0xff; ge=num%10; wei(8); P0=table[ge]; delay(1); P0=0xff; } if(flag==1) { for(i=0;i<8;i++) { wei(i+1); P0=table1[i]; delay(1); P0=0xff; } } }
#define uint unsigned int #define uchar unsigned char sbit CLK=P3^4; sbit DIN=P2^3; bit flag; uchar shi,ge; uchar num,num1; uchar code table[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x7 1,0xFD };//0 到 F 的代码 uchar code table1[]={0x09,0x99,0x03,0x01,0x9f,0x03,0x25,0x0d}; // 学号的代码 94081013 void init(); //初始化函数声明 void delay(uint t) //延时函数 { uint i,j; for(i=t;i>0;i--) for(j=125;j>0;j--); } void wei(uint x) //数码管第 X 位显示 { uchar y,z; for(y=8;y>9-x;y--) { DIN=1; CLK=0; CLK=1;
第5章 80C51单片机的C语言程序设计
6. 可寻址位类型(sbit):利用sbit可以对8051内部 RAM的位寻址空间及特殊功能寄存器的可寻址位进行定 义。 7.数据类型的转换: 不同类型的数据是可以相互转换的, 可以通过赋值或者强制转换。
赋值转换次序为:bit-char-int-long-float,如果反 向赋值,则结果丢弃高位。
bit型可以在函数内部或者外部定义变量。 main() { bit LED_EN = 1; //定义了变量LED_EN, 赋初值1. P1=0; LED_DIS = 0; LED_EN=1; P0=0X0F; }
10.3 C51程序举例
10.3.1 编程让实验箱上的LED灯亮两个 代码如下: #include <reg51.h>
例如:char v; //在SMALL模式下,v被定位在data区; //在使用COMPACT模式下,v被定位在pdata区; //在使用LARGE模式情况下,v被定位在xdata区中。
10.2.3 8051单片机特殊功能寄存器的C51定义 一 、特殊功能寄存器的声明 如何对SFR操作
其定义语法如下: sfr name=adress
第2种方式: sbit 位变量名=字节地址^位位置(0-7) 例如:sbit OV=0xD0^2; /*OV位地址为 0xD2*/ 这种方法以一个整常数作为基地址,该值 必须在0X80—0xFF之间,并能被8整除。 第3种方式: sbit 位变量名=位地址 这种方法将位的绝对地址赋给变量,地址 必须位于0x80到0xFF之间。 例如:sbit OV=0XD2;
sfr和sbit只能在函数外进行申明,不能在函数内使用。且只能小写 如以下代码是错误的
第五章80C51单片机的程序设计
第五章80C51单片机的程序设计
宏指令语句:用以代替汇编语言源程序中 重复使用的程序段的一种语句,由汇编程序 在汇编时产生相应的目标代码。 (2) 汇编语言语句的格式 为了使汇编语言程序清晰、明了、易读、 易懂,特对汇编语言的话句格式作了严格的 规定。 指令语句的格式为: 标号: 助记符(操作码) 操作数(参数) ;注释
第五章80C51单片机的程序设计
例: 双字节加法程序段。 设被加数存放于片内RAM的addr1(低位字 节)、addr2(高位字节),加数存放于adddr3(低 位字节)和addr4(高位字节),运算结果和数存 于addr1和addr2中。其程序段如下: START: PUSH ACC ;将A中内容进栈保护 MOV R0, #addr1 ;将addr1地址值送R0 MOV R1, #addr3 ;将addr3地址值送R1 MOV A, @R0 ;被加数低字节内容送A
程序就是为计算某一算式或完成某一工作 而编制的若干指令的有序集合。计算机的全部 工作概括起来,就是执行这一指令序列的过程。 这一指令序列称为程序。 目前,可用于程序设计的语言基本上可分 为三种:机器语言、汇编语言和高级语言。
第五章80C51单片机的程序设计
下面先对这三种语言作以简单说明,然后重点 介绍80C51单片机的汇编语言。 1 机器语言:机器语言在计算机中,所有的数符 都是用二进制代码来表示的,指令也是用二进制代 码来表示。这种用二进制代码表示的指令系统称为 机器语言系统,简称为机器语言。直接用机器语言 编写的程序称为手编程序或机器语言程序。 计算机可以识别机器语言,并加以执行。但是, 对于使用者来说,不易看懂,不便记忆,容易出错。 为了克服这些缺点,从而出现了汇编语言和高级语 言。
在编写汇编语言程序时,标号、注释并不 是所有的语句都必需的,可以缺省。对于无操 作数指令,操作数域也缺省。具体书写格式如 下: 标 号: 操作码域 操作数域 ;注释
80C51系列单片机指令表
80C51系列单片机指令表80C51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1. ACALL addr11指令名称:绝对调用指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数:2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2. ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV3. ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数:2机器周期:1影响标志位:C,AC,OV4. ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV5. ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数:2机器周期:1影响标志位:C,AC,OV6. ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV7. ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数:2机器周期:1影响标志位:C,AC,OV8. ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV9. ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数:2机器周期:1影响标志位:C,AC,OV10. AJMP addr11指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,实现程序转移.其方法是以指令提供的11位地址,取代PC的低11位,而PC的高5位保持不变.操作内容:PC←(PC)+2PCl0~0←addrll字节数:2机器周期:2使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB.11. ANL A,Rn指令名称:寄存器逻辑与指令指令代码:58H~5FH指令功能:累加器内容逻辑与寄存器内容操作内容:A←(A)∧(Rn),n=0~7字节数:1机器周期:112. ANL A,direct指令名称:直接寻址逻辑与指令指令代码:55H指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容操作内容:A←(A)∧(diret)字节数:2机器周期:113. ANL A,@Ri指令名称:间接寻址逻辑与指令指令代码:56H~57H指令功能:累加器内容逻辑与内部RAM低128单元内容操作内容:A←(A)∧((Ri))i=0,1字节数:1机器周期:114. ANL A,#data指令名称:立即数逻辑与指令指令代码:54H指令功能:累加器内容逻辑与立即数操作内容:A←(A)∧data字节数:2机器周期:115. ANL direct,A指令名称:累加器逻辑与指令指令代码:52H指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容操作内容:direct←(A)∧(direct)字节数:2机器周期:116. ANL direct,#data指令名称:逻辑与指令指令代码:53H指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数操作内容:direct←(direct)∧data字节数:3机器周期:217. ANL C,bit指令名称:位逻辑与指令指令代码:82H指令功能:进位标志逻辑与直接寻址位操作内容:C←(C)∧(bit)字节数:2机器周期:218. ANL C,/bit指令名称:位逻辑与指令指令代码:B0H指令功能:进位标志逻辑与直接寻址位的反操作内容:C←(C)∧(bit)字节数:2机器周期:280C51系列单片机指令以C开头的指令有10条,分别为: CJNE A,dircet,relCJNE A,#data,relCJNE Rn,#data,relCJNE @Ri,#data,relCLR ACLR CCLR bitCPL ACPL CCPL bit1. CJNE A,dircet,rel指令名称:数值比较转移指令指令代码:B5H指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移。
第4章 80C51单片机汇编语言程序设计
形式,即顺序结构、分支结构、循环结构和子程序结构。
4.2.1 顺序程序结构 顺序程序是最简单的程序结构,在顺序程序中,既无分支, 循环,也不调用子程序,程序执行时一条一条地按顺序执行指令 例:假定三字节无符号数相加,其中一个加数在内部RAM的
50H、51H和52H单元中,另一个加数在内部RAM的53H、54H和55H
MOVX
DEC
@R1,
R0;
A;
保存N1、N2中间字节和
修改加数N1的地址指针内容
课程:单片机技术 教材:单片机基础
DEC R1; 修改加数N2的地址指针内容 MOVX A, @R1; 取N2的高字节 ADDC A, @R0; N1、N2高字节带中间字节和进位相加 MOVX @R1, A; 保存N1、N2高字节和 MOV 00H, C; 高字节和的进位送00H位保存 END 如果N2、N3的数据地址指针采用DPTR,则程序修改如下: ORG 1000H MOV RO, #52H;加数N1的低字节地址送地址指针R0 MOV DPTR, #0055H;加数N2的低字节地址送DPTR MOVX A, @DPTR; 取N2的低字节 ADD A, @R0; N1、N2低字节相加 MOVX @DPTR, A; 保存N1、N2低字节和 DEC R0; 修改加数N1的地址指针内容
课程:单片机技术 教材:单片机基础
课程:单片机技术 教材:单片机基础
4.2.2
分支程序结构
(1)单分支程序
单分支程序是通过条件转移指令实现的,即根据条件对程序
的执行进行判断,满足条件则进行程序转移,不满足条件程序就 顺序执行。 在MCS-51指令系统中,可利用JZ,JNZ,CJNE,DJNZ,JC, JNC,JB,JNB,JBC等指令,完成为0、为1、为正、为负以及相
单片机 第四章 80C51单片机汇编语言程序设计
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境
51单片机c语言模块化编程的步骤和方法
51单片机c语言模块化编程的步骤和方法
模块化编程是一种编程方法,它将程序划分为独立的、可重用的模块,每个模块执行特定的功能。
对于51单片机来说,C语言是常用的编程语言。
下
面是一般的步骤和方法,以实现C语言的模块化编程:
1. 明确需求和功能模块:首先,你需要明确你的程序需要完成哪些功能。
将这些功能划分为独立的模块,每个模块执行一个特定的任务。
2. 创建模块:为每个功能模块创建一个C文件。
例如,如果你有一个控制LED的模块,你可以创建一个名为``的文件。
3. 编写模块函数:在每个模块的C文件中,编写实现该模块功能的函数。
这些函数应该是模块的一部分,并且应该是模块化的。
4. 编写头文件:为每个模块创建一个头文件。
头文件应该包含该模块的函数声明和任何公共变量。
例如,``可能包含控制LED的函数的声明。
5. 主程序调用模块函数:在主程序中,你需要包含适当的头文件,并调用需要的模块函数。
主程序应该将所有模块组合在一起,以实现所需的功能。
6. 编译和链接:使用适当的编译器将所有C文件编译为目标文件。
然后,
使用链接器将这些目标文件链接在一起,生成最终的可执行文件。
7. 测试和调试:在目标硬件上测试和调试程序。
确保每个模块都按预期工作,并且所有模块都能协同工作。
这只是一个基本的步骤和方法。
具体的实现可能会根据硬件、需求和其他因素有所不同。
不过,基本的模块化编程原则应该是相同的。
80C51单片机的C51程序设计说明书.
bit bdata my_flag;
/*item1*/
char data var0;
/*item2*/
float idata x,y,z;
/*item3*/
unsigned int pdata temp ;
/*item4*/
unsigned char xdata array[3][4]; /*item5*/ item1:位变量my_flag被定义为bdata存储类型,C51编译器 将把该变量定义在8051片内数据存储区(RAM)中的位寻址区 (地址:20H~2FH)。
字符型 整型 长整型 浮点型 位型 访问SFR
数据类型 signed char unsigned char signed int unsigned int signed long
unsigned long float bit sbit sfr sfr16
长度(位) 8 8 16 16 32 32 32 1 1 8 16
item5:无符号字符二维数组 unsigned char array[3][4] 被定义为xdata存储类型,C51编译器将其定位在片外数据存 储区(片外RAM),并占据3x4=12字节存储空间,用于存 放该数组变量。
8.2.4 80C51硬件结构的C51定义
C51是适合于80C51单片机的C语言。它对标准C语言(ANSI C) 进行扩展,从而具有对80C51单片机硬件结构的良好支持与操作能 力。
3)sbit 位变量名=位地址 例如:
sbit OV =0xd2; /*定义OV位的地址为0xd2*/ sbit CF =0xd7; /*定义CF位的地址为0xd7*/ 注意:位地址必须位于0x80~0xFF之间。
3、8051并行接口及其C51定义
(最新整理)单片机第4章80C51单片机C语言程序设计thh
2021/7/26
6
4.1.2 C语言与ANSI 的区别
用C51编写单片机程序,与用ANSI C编 写程序的不同之处是,需要根据单片机存储 器结构及内部资源,定义相应的数据类型和 变量。
其它的语法规定、程序结构及程序设计 方法,都与ANSI C相同。所以本章主要介 绍C51各种变量的定义、指针定义、函数定 义和混合编程。
C51变量定义的一般格式为:
[存储类型] 数据类型 [存储区]
变量名1[=初值] [,变量名2[=初值]] [,…]
或 [存储类型] [存储区] 数据类型
变量名1[=初值] [,变量名2[=初值]] [,…]
可见变量(非位变量)的定义由4部分组 成,即在变量定义时,指定变量4种属性。
数据类型:在前面的4.2中已经叙述过, 对于变量名也无须多说,下面主要解释“存 储类型”和“存储区”等概念。
1)定义存储在data区域的动态unsigned char变量:
unsigned char data sec=0, min=0, hou=0; 2)定义存储在data区域的静态unsigned char变量: static unsigned char data scan_code=0xfe; 3)定义存储在data区域的静态unsigned int变量: static unsigned int data dd;
❖(最新整理)单片机第4章80C51单片机C语言程序设计thh
2021/7/26
1
第3章 80C51单片机C语言程序设计
3.1 C51对标准C的扩展 3.2 C51的指针 3.3 C51的函数 3.4 C51与汇编程序的接口
2002211//77/2/926
2
2
80C51的汇编语言程序设计
.M51
映像文件
仿真调试
写入芯片
2021/6/4
10
MCS-51单片机汇编语言,包含两类不同性质的指令。
(❖1)基本指令(指令性语句):即指令系统中的指令。它们 都❖是机器能够执行的指令,每一条指令都有对应的机器码。 源程序的主要功能都是由指令性语句完成。
(2)伪指令(指示性语句):汇编时用于控制汇编的指令。 它们都是机器不执行的指令,无机器码。
MOV DPTR,STRT
标号为符号地址其值为8000H
2021/6/4
12
ORG 8000H START:MOV A,#30H
MOV R2,#20H ORG 8001H MOV A,#40H
结束汇编伪指令END END
该伪指令位于源程序的最后一行。
2021/6/4
13
定义字节数据表伪指令DB
1000H FEH
之间用逗号隔开。使用方法与DB类同。
大端模式
ORG 1400H DATA1:DW 324AH,3CH
……
2021/6/4
15
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式
符号名可代表: ❖地址 ❖常数 ❖段名 ❖字符串 ❖寄存器名 ❖位名
比较:标号只能是地址
LEN EQU SUM EQU BLOCK EQU
SWAP A MOV 41H,A
;取数 ;屏蔽高4位 ;存低4位 ;再取 ;屏蔽低4位 ;高低4位交换 ;存高4位
01010110B 56H
01010110B 56H
——∧——0—0—00—1—11—1—B———0F—H—— 00000110B 06H
——∧——1—11—1—0—00—0—B———F—0—H—— 01010000B 50H