第4章 80C51单片机的软件基础汇总
第4章80C51单片机的C语言程序设计

2015/6/1
27
4.5.2
C51函数的调用与参数传递
参数传递
主调函数要向被调函数传递所需的参数 传递给被调函数的数据称为实际参数,即实参 实参向形参的传递是单向的 参数传递可以采用寄存器、固定存储器位置方式
寄存器参数传递
传递的参数 参数1 参数2 参数3 char、1字节指针 R7 R5 R3 int、2字节指针 R6、R7 R4、R5 R2、R3 long、float R4~R7 R4~R7 一般指针 R1、R2、R3 R1、R2、R3 R1、R2、R3
关系表达式 关系表达式的值为逻辑值:真(1)和假(0)
2015/6/1
13
逻辑运算符和逻辑表达式 逻辑运算符
&& || ! 逻辑与 逻辑或 逻辑非
逻辑表达式 逻辑表达式的值为逻辑值:真(1)和假(0)
例:5| | 0结果为1,2&&0结果为0
14
2015/6/1
位运算符
& | ^ ~ << >> 按位与 按位或 按位异或 按位取反 左移 右移
2015/6/1 26
4.5 C51的函数
10.5.1
返回值类型 { 函数体 }
C51函数的定义
一般形式:
函数名(形式参数列表)[编译模式][reentrant][interrupt n][using n]
编译模式为SMALL、COPACT或LARGE reentrant用于定义可重入函数 interrupt n 用于定义中断函数,n为中断号,可以为0~31 using n 确定工作寄存器组,取值为0~3
编译器能自动完成变量的存储单元的分配 对常用功能模块和算法编制相应的函数,方便移植
单片机原理及应用 第四章 80C51单片机的功能单元

Vcc
R (上拉电阻)
P1·X 引脚
1
读引脚
输入缓冲器
驱动能力:P1、P2、P3可驱动4个LSTTL负载 P0可驱动8个LSTTL负载
2、用作输入口 两种工作方式:
读锁存器 读引脚
1)读锁存器
将端口锁存器的内容读入内部总线,经过运算和变换,再 写回到端口锁存器。
称为 读—修改—写指令
例:ANL P1,#0FH
1、用作输出口 可直接与外设相连,不必外加字锁节存寻器址
输出指令:
MOV P1,A MOV P1,#data
;MOV P1,Rn ;MOV P1,@Ri
MOV P1,direct 位操作
MOV P1.X , C
P1·0位
读锁存器
内部总线 1
写锁存器
例: MOV P1,#0FH
输入缓冲器
1 D P1·X Q CL 锁存器 Q 0
4、作为双向口使用 准双向口
80C51的4个I/O口在进行数据的输入输出操作时, 均可作为双向口使用。即,同一口线既作为输入 口,又用作输出口。
操作方法:以P1口为例 MOV P1, A
;直接使用输出指令
··· ··· MOV P1,#0FFH MOV A,P1
;锁存器置1 ;输入指令
80C51的P1由输出口转为输入口时,需先将锁 存器置1,然后使用输入指令。
P1、P2、P3口: 4个TTL负载
五、80C51的外部总线
4.2 定时/计数器
单片微机系统特点:面向测控系统
要求单片微机能够提供实时功能,以实现定时、 延时或实时时钟;也常要求计数功能,以实现 对外部事件计数
80C51系列单片微机提供2个(8051型)或3个 (8052型)16位的定时/计数器,可程控为4种 工作方式
第4章 80C51单片机IO端口及应用最终

24
参考程序:
#include <reg51.h> void main(void) { unsigned char i; P2=0xff; for(;;) { i=P2; P1=i; } }
25
4.6单片机I/O口控制电磁继电器
在控制系统中,常常存在电子电路与电气电路的互 相连接问题,需要电子电路控制电气电路的执行元件, 例如电动机、电磁铁、电灯等,同时实现电子线路与电 气电路的电隔离,以保护电子电路和人身的安全,继电 器在其中起了重要的桥梁作用。
控制
T1
内部总线 写锁存器 读引脚
D P0.x Q 锁存器 Q
BUF2
MUX
P0.x引脚 T2
图4-1 P0口的位电路结构
4
2.P0口工作原理 (1)P0口作为地址/数据总线分时复用口
当80C51单片机外部扩展存储器或者I/O接口芯片,需要 P0口作为地址/数据总线分时使用时,“控制”信号输出高 电平;转换开关MUX 将T2与反相器输出端接通,同时“与 门”开锁,“地址或数据”信号通过与门驱动T1管,并通过 反相器驱动T2管,使得P0.x引脚的输出状态随“地址/数据” 状态的变化而变化。具体输出过程如下。
注意,当P0口作输出口使用时,输出级属开漏电路,在 P0.x引脚应外接上拉电阻。
6
② P0口作为I/O口输入时,端口中的两个三态缓冲器用于读 操作。有2种读操作:读锁存器和读引脚。
“读引脚”:当执行一般的端口输入指令时,引脚上的外部 信号既加在三态缓冲器BUF2的输入端,又加在场效应管T2 漏极上,若此时T2导通,则引脚上的电位被钳在0电平上。 为使读引脚能正确地读入,在输入数据时,要先向锁存器置 “1”,使其Q反端为0,使输出级T1和T2两个管子均被截止, 引脚处于悬浮状态;作高阻抗输入。“读引脚”脉冲把三态 缓冲器打开,于是引脚上的数据经缓冲器到内部总线;
第四章+80C51单片微机的程序设计

⒉ END(END of assembly) 汇编结束伪指令
汇编结束伪指令一般有以下两种格式: 主程序模块:<标号> END <表达式> 子程序模块: <标号> END 含义:通知汇编程序,该程序段汇编至此结束。ቤተ መጻሕፍቲ ባይዱ
END语句应设置在整个程序(包括伪指令在内)的后面。 当源程序为主程序时,END伪指令中可有标号,这个标
ORG 2000H
TABLE DB 73H,04,100,32,00,-2,“ABC”
表示字节串数据存入由TABLE标号为起始地址的连续存 储器单元中。即从2000H存储单元开始依次连续存放数据为: 73H,04H,64H,20H,00H,FEH,41H,42H,43H。
若不采用ORG伪指令专门规定数据区的起始地址,则数 据区的起始地址即根据DB命令前一条指令的地址确定。这时DB 所定义的数据字节的起始地址为DB命令前一条指令的地址加上 该指令的字节数。
⒌ DB(Define Byte) 定义字节伪指令
指令格式为:<标号> DB <表达式或表达式表>
含义:将表达式或表达式表所表示的数据或数据串存入从标 号开始的连续存储单元中。标号为可选项,它表示数据存储单元 地址。表达式或表达式表是指一个字节或用逗号分开的字节数据。 可以是用引号括起来的字符串。字符串中的字符按ASCII码存于 连续的ROM中。例如:
•对于操作数域出现的常数:若采用十六进制数表示,其末尾必 须加“H”说明;若十六进制数以A、B、C、D、E、F开头,其 前面必须添1个“0”进行引导说明。
•若采用二进制数表示,其末尾必须用“B”说明。
•若采用十进制数表示,可以不加后缀或加“D”说明。
单片机第4章8051单片机指令系统

单片机第4章8051单片机指令系统在单片机的世界里,指令系统就如同指挥官手中的指令手册,指引着单片机完成各种复杂的任务。
8051 单片机的指令系统更是其中的重要组成部分,它为我们提供了丰富多样的指令,让我们能够灵活地控制单片机的运行。
8051 单片机的指令系统可以分为五大类,分别是数据传送指令、算术运算指令、逻辑运算指令、控制转移指令和位操作指令。
数据传送指令是指令系统中的基础,就像是在战场上调配物资一样。
它能够实现寄存器之间、寄存器与存储器之间、立即数与寄存器或存储器之间的数据传递。
比如 MOV 指令,它可以将一个数据从源地址传送到目的地址。
假设我们要将立即数 50H 传送到累加器 A 中,就可以使用指令“MOV A, 50H”。
这样,累加器 A 就存储了 50H 这个数值。
算术运算指令则像是在进行战斗中的兵力计算。
它包括加法、减法、乘法和除法等运算。
ADD 指令用于加法运算,SUBB 指令用于带借位的减法运算。
例如,我们要将累加器 A 中的值与寄存器 B 中的值相加,并将结果存放在累加器 A 中,就可以使用指令“ADD A, B”。
如果要进行带借位的减法运算,比如从累加器 A 中减去寄存器 B 中的值以及借位标志位 CY 的值,可以使用指令“SUBB A, B”。
逻辑运算指令就像是在制定战略时的思考逻辑。
AND 指令用于逻辑与操作,ORL 指令用于逻辑或操作,XRL 指令用于逻辑异或操作。
以 AND 指令为例,如果我们要将累加器 A 中的值与立即数 80H 进行逻辑与操作,并将结果存放在累加器 A 中,就可以使用指令“AND A, 80H”。
控制转移指令则是指挥战斗中的战略部署调整。
它可以改变程序的执行顺序,使单片机能够根据不同的条件执行不同的程序段。
比如 JZ 指令,如果累加器 A 的值为 0,则程序跳转到指定的地址;JC 指令,如果进位标志位 CY 为 1,则程序跳转到指定的地址。
位操作指令则专注于对单个位的操作,就像是在精细地调整战斗中的某个关键环节。
单片机课程第4章80C51汇编程序设计精品PPT课件

MOV R4,#12H MOV R5,#2BH MOV R0,#33H
NOP ACALL BMUL
MOV @R0,#00h MOV R7,#04
SJMP $
DEC R0
DEC R0
DEC R0
DEC R0
子程序:
BMUL: MOV A,R3 MOV B,R5 MUL AB ACALL RADD MOV A,R3 MOV B,R4 MUL AB INC R0 ACALL RADD MOV A,R2 MOV B,R5 MUL AB INC R0 INC R0 ACALL RADD MOV A,R2 MOV B,R4 MUL AB INC R0 ACALL RADD INC R0
@R0,A ;循环处理
R0
;
R7,LOOP ;循环修改,判结束
$
;结束处理
结束
【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中 起始地址为1000H的存储区域,直到发现‘$ ’字符停止传送。
开始
置初值 Y
循环结束? N 循环处理 循环修改
结束处理
结束
MAIN:MOV MOV
LOOP0:MOV CJNE SJMP
教学重点:
1、 源程序形成目标程序的步骤 2、 伪指令与单片机指令的本质区别 3、 分支、循环、子程序及按键、LED显示程序的设计
教学难点:
程序的设计及实现
4.1.1 汇编语言程序设计过程
汇编语言,生成的目标程序占内存空间少、运行速 度快,具有效率高、实时性强。
高级语言,对系统的功能描述与实现简单,程序阅 读、修改和移植方便,适合于编写复杂的程序。
0000H MAIN 0040H R7,#16 R0,#60H A,#55H @R0,A R0 R7,LOOP $
第4章80C51单片机的C语言程序设计

10.2 C51的数据类型与运算
10.2.1 C51的数据类型
数据类型决定其取值范围、占用存储器的大小及可参与哪种运算。
数据类型
字符型
signed char unsigned char
整型 长整型
signed int unsigned int signed long unsigned long
~= 逻辑非赋值
例:a*=5相当于a=a*5;b&=0x80相当于b=b&0x80。
2019/10/16
16
10.3 C51流程控制语句
10.3.1 C51选择语句 条件语句 if(条件表达式)语句
例如: if(p1!= 0){ c=20;}
if(条件表达式)语句1 else 语句2
例如: if(p1!= 0){ c=20;} else { c=0;}
类型转换运算符
自动转换,顺序:bit→char→int→long→float 强制类型转换,如:(double)a
2019/10/16
12
关系运算符和关系表达式
关系运算符
< 小于; <= 小于等于; > 大于; >= 大于等于; = = 等于; != 不等于。
关系表达式 关系表达式的值为逻辑值:真(1)和假(0)
sbit 位变量名 = 字节地址^位的位置(0~7) 例如: sbit OV=0xD0^2; sbit CY=0xD0^7;
sbit 位变量名 = 位地址 例如: sbit OV=0xD2; sbit CY=0xD7;
2019/10/16
9
内部RAM中可位寻址对象的定义
先定义变量的数据类型和存储类型 例如: int bdata ibase; char bdata array[4];
单片机-第4章80C51单片微机的程序设计

mov
09h,a
mov
a,12h
addc a,23h
mov
08h,a
高级语言(C语言)
int
a,b,c;
a = 0x1234;
b = 0x2345;
c = a + b;
汇编语言——语句种类
指令语句(指令性语句)
– 对应机器指令,有相应的机器码 – 如 mov a, #0
伪指令语句(指示性语句)
分隔 – 满足寻址方式的规定 – 常数的表示:不能与标识符混淆
汇编语言——语句格式
注释域
– 由“;”开始,直到行末尾
例子
标号域 操作码域 begin:mov
mov movx mov
操作数域 dptr,#2200h r0,#30h a,@dptr @r0,a
注释域 ;(dptr)=2200h ;(r0)=30h ;(a)=((dptr)) ;((r0))=a
– 某些汇编程序没有实现dl伪指令
dseg——数据段 cseg——代码段
汇编语言——伪指令语句
db——定义字节伪指令
– 格式:标号 db 表达式或表达式表 – 作用:将表达式或表达式表所表示的数据或
数据串存入从标号开始的连续存储单元中; 表达式是一个字节,表达式表是用逗号分开 的字节数据(可以是字符串);存入程序存 储器空间
end——汇编结束伪指令
– 格式:end – 作用:通知汇编程序,程序段(源程序文件)
汇编至此结束 – 某些汇编程序要求:end必须是一个汇编语
言源程序的最后一条(伪)指令
汇编语言——伪指令语句
equ——赋值伪指令
– 格式:标号 equ 表达式 – 作用:把表达式赋值于标号
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
02:49
8
(1) 工作寄存器名 由PSW.3和PSW.4规定的当前工作寄存器区中的R0~R7都可以 出现在操作数字段中。
(2) 特殊功能寄存器名 8051中的21个特殊功能寄存器的名字都可以作为操作数使用。
位寻址。
02:49
13
1.立即寻址
操作数就跟在操作码的后面,可以立即参与指令所规 定的操作,不须另去寄存器或存储器等处寻找和取数。
例:MOV A,#30H ;A←30H MOV DPTR,#2000H ;DPTR←2000H
书写单片机指令时,为了辨识是立即数,规定在它的 前面加一个“#”号作为前缀。
02:49
11
4. 注释
注释是对指令或程序段的简要功能说明,以方便阅读与调试程 序。
02:49
12
4.1.2 指令系统的寻址方式
寻找操作数所在单元的地址称为寻址;确定操作数所在单元 地址的方法称为寻址方式。
80C51单片机指令系统中的寻址方式共有七类,分别为 立即寻址、 寄存器寻址、 寄存器间接寻址、 直接寻址、 变址寻址、 相对寻址、
(3) 标号名 可以在操作数字段中引用的标号包括: 赋值标号:由汇编伪指令EQU等赋值的标号可以作为操作数。 指令标号:指令标号虽未被赋值,但这条指令的第一字节地址 就是这个标号的值,在以后指令操作数字段中可以引用。
02:49
9
(4) 常数 为了方便用户,汇编语言指令允许以各种数制表示常数,即常 数可以写成二进制、十进制或十六进制等形式。
02:49
14
2. 寄存器寻址
寻址某工作寄存器,自该寄存器读取或存放操作数, 以完成指令所规定的操作。
例 MOV R3,A ;R3←(A) ADD A,R2 ;A←(A)+(R2)
可以寻址的寄存器种类有工作寄存器R0~R7、累加器 A、寄存器B、数据指针DPTR、位累加器Cy。
02:49
15
3.寄存器间接寻址
言是必不可少的。但对于较复杂的单片机应用系
统,它的编写效率很低。
02:49
3
为了提高软件的开发效率,编程人员采用高级语 言C语言来开发单片机应用程序。
目前许多软件公司致力于单片机C编译器的开发 研究,许多C编译器的效率已接近汇编语言的水平, 对于较复杂的应用程序,C语言产生的代码效率甚 至超出了汇编语言。同时目前单片机片内程序存储 器的发展十分迅速,许多型号的单片机片内ROM已 经达到64KB甚至更大,且具备在系统编程(ISP)功 能,进一步推动了C语言在单片机应用系统开发中 的应用。
在学习C语言之前,了解汇编语言,能读懂汇编 语言程序,并且会编中、小规模的汇编语言程序是 十分必要的。
02:49
4
4.1 80C51单片机的指令系统
根据设计使某台计算机具有的指令的集合便构成 了这一计算机的指令系统。
80C51系列单片机的指令系统共有111条指令。
4.1.1 指令格式
一条汇编语言指令中最多包含4个字段,其格式为: [标号:] 操作码 [目的操作数][,源操作数][;注释]
(4) 此方式也可用于访问外部RAM的64KRAM。
(5) 此方式不可以用于访问特殊功能寄存器。
机器语言是计算机唯一能识别的语言,用汇编语 言和高级语言编写的程序(称为源程序)最终都必须 翻译成机器语言的程序(称特性直接控制硬
件的语言,它直接使用CPU的指令系统和寻址方
式,从而得到占用空间小、执行速度快的高质量
程序。对于一些实时控制要求高的场合,汇编语
寄存器中存放的是地址而不是操作数,寻找到该工作寄存器 后,以其内容为地址,去寻找所指的RAM单元以读取或存放 操作数,称为寄存器间接寻址。
例 设R1的内容为40H,则 MOV A,@R1 ;A←片内RAM(40H)的内容。
40H 1AH 3FH XX
R1 40H R0
A 1AH
00H
02:49 图4-1 MOV A,@R1指令执行过程
16
说明:
(1) 对于51子系列单片机来说,寄存器间接寻址可用于访问内部 RAM的128个存储单元(00H~7FH),对于52子系列单片机 芯片则可以访问内部RAM的256个单元(00H~FFH)。
(2) 只能用R0或R1间接寻址,对外部RAM,当地址值>256B时, 用DPTR间接寻址。
(3) 书写单片机指令时,为了辨识是间接地址,规定在寄存器的 前面加一@作为前缀。
第4章 80C51单片机的软件基础
02:49
1
内容
4.1 80C51单片机的指令系统 4.2 C51程序设计基础 4.3 C51语言的语句 4.4 C51的函数 4.5 C51的程序结构
02:49
2
单片机应用系统是由硬件和软件共同组成的。要 使单片机实现所需要的控制功能,必须有控制软
件,没有控制软件的单片机是毫无用处的。
(5) $ 操作数字段中还可以使用一个专门符号“$”,用来表示程序计
数 器的当前值。这个符号最常出现在转移指令中,如“SJMP $”, 该指令表示继续执行该指令,在原地循环。
02:49
10
(6) 表达式 汇编程序允许把表达式作为操作数使用。在汇编时,计算出表 达式的值,并把该值填入目标码中。例如:MOV A,SUM+l。
一条指令中的标号代表该指令所存放的第一个字节存储单元的 地址,故标号又称为符号地址,在汇编时,把该地址赋值给该 标号。
02:49
6
2. 操作码
操作码是用英文缩写的指令或伪指令功能助记符,用来表示指 令的性质或功能。如MOV表示传送操作,ADD表示加法操作。
02:49
7
3. 操作数
操作数字段给出参与操作的数据或数据所在单元的地址。
例: LOOP: ADD A, #10H ; A←(A)+10H
02:49
5
1. 标号
标号是用户定义的一个符号,表示指令或数据的存储单元地址。 标号由以英文字母开始的1~8个字母或数字串组成,以冒号
“:” 结尾。不能用指令助记符、伪指令或寄存器名来做标号。一旦 使用了某标号定义一地址单元,在程序的其它地方就不能随意 修改这个定义,也不能重复定义。