最新MCS-51单片机C语言程序设计
第4章 MCS-51单片机的程序设计
$
;无需处理
A, NUM16
;取低位
A
;取反
A, #1
;加一
NUM16, A
;保存
A, NUM16+1
;高位
A
A, #0
ACC.7
NUM16+1, A
$
分支结构的例子
使用查表指令和堆栈实现的多分支转移程序。 假设分支转移序号在R3中,分支程序表入口地 址为BR_TAB
MOV MOV RL MOV INC
即使在高级语言开发的软件中,对响应速度要 求严格的程序段也常用汇编语言编写
单片机程序开发过程
以汇编语言为例 编写汇编语言源程序 如果没有语法错误,经过汇编后,每个源程序
文件产生一个相应的浮动(可重定位的)地址目 标文件 由连接定位程序(连接定位器)将这些目标文件 连接,将浮动地址确定下来,生成一个绝对地 址目标文件
计数式循环可以使用DJNZ类指令,条件式循 环可以使用条件转移指令实现
循环结构的例子
将外部RAM地址2000H~201FH单元32个字 节数据复制到内部RAM 30H~4FH中。这是典 型的计数式循环,循环次数为32。
X_BUF
XDATA
2000H;外部缓冲区起始地址
I_BUF
DATA 30H
分支结构的例子
ADD MOV MOV JMP BR_TAB:LJMP LJMP ………… LJMP
MCS-51 C语言编程示例
MCS-51 C 语言编程示例
例1 图1所示是利用优先权解码芯片,在单片机8031的一个外部中断1INT 上扩展多个中断源的原理电路图。图中是以开关闭合来模拟中断请求信号。当有任何一中断源产生中断请求,能给8031的
1INT 引脚送一个有效的中断信号,由P1的低
3位可得对应中断源的中断号。
图1 扩展多个中断源
在中断服务程序中仅设置位置标志,并保存I/O 口输入状态。FRANKLINC51编译器提供定义特定MCS-51系列成员的寄存器头文件。MCS-51头文件位REG51.H 。C51程序如下:
#INCLUDE UNSIGNED CHAR STATUS; BIT FLAG;
VOID SERVICE_INT1()INTERRUPT 2 USING 2 {FLAG=1; STATUS=P1; }
VOID MAIN(VOID) {IP=0X04; IE=0X84; FOR( ; ; ) {IF(FLAG)
{SWITCH(STATUS) {CASE 0:BREAK; CASE 1:BREAK; CASE 2:BREAK; CASE 3:BREAK; DEFAULT: ; } FLAG=0; } } }
例2 设单片机的osc f =12MHZ 晶振,要求在P1.0脚上输出
周期位2MS 的方波。
周期位2MS 的方波要求定时时间间隔1MS ,每次时间到P1.0取反。
机器周期=
12/osc f =1s μ
需要计数的次数
=
1000/(12/)1000/11000osc f ==
由于计数器的加一计数,为得到1000个计数之后的定时器
MCS51单片机C语言编程
实验二 MCS-51单片机C语言编程练习
一. 实验目的
1. 了解单片机的C51语言与汇编语言以及标准C语言的异同,掌握C51语言的基本语法知识以及特有的程序设计特点。
2. 掌握使用C51语言进行顺序、分支、循环结构的程序设计方法。
3. 能够使用C51语言,独立设计出具有一定综合性的单片机应用程序,并与汇编语言的相应程序进行比较,加深理解。
4. 对应用问题能抽象出数学模型,绘制软件程序的流程图,并能用C51语言实现。
二.预习与思考
1. 预习理论教材中“C51语言程序设计”的相关内容,掌握C51程序设计的基本方法、思路以及设计规范。
2. 预习理论教材中“C51程序设计”的相关例程。
3. 掌握单片机C51语言的调试方法,体会与标准C语言的异同。
4. 思考如何使用C51语言,对顺序、分支、循环结构的单片机应用程序进行设计,重点体会C51语言特有的设计方法与思想。
三. 实验原理
1. 单片机的C51语言简介
通常,将一些能够对MCS—51系列单片机进行硬件操作的C语言统称为C51语言。在众多的C51语言中,功能最强、最受用户欢迎的是德国KEIL公司的Keil C51语言。单片机应用系统的程序设计,既可以采用汇编语言,也可以采用C51语言,两者各具特色。其中,汇编语言是一种用助记符来代表机器语言的符号语言。因为它最接近机器语言,所以汇编语言对单片机的操作直接、简捷,编写的程序紧凑、执行效率较高。但是,不同种类的单片机其汇编语言存在一定的差异。在一种单片机上开发的应用程序,通常不能直接应用到另一种单片机芯片上,如果进行程序的移植,难度也比较大。与此同时,汇编语言开发的程序可读性较差,不容易理解,特别是当单片机应用系统的规模比较大时,汇编语言的编程工作量非常大,从而影响应用系统的开发效率。
第三章MCS51系列单片机指令系统及汇编语言程序设计
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。 内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。 外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在 MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种 由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同 寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
3.1 MCS-51单片机的寻址方式
MCS-51单片机共有7种寻址方式:
➢ 立即寻址 ➢ 直接寻址 ➢ 寄存器寻址 ➢ 寄存器间接寻址 ➢ 变址寻址 ➢ 相对寻址 ➢ 位寻址
1. 立即寻址
立即寻址就是把操作数直接在指令中给出,即操作 数包含在指令中。立即操作数有8位和16位两种形式, 前面加“#”来表示。
CLR A ;0→A,累加器A中的内容清零 循环移位指令(4条)
RL A ;累加器A中的内容左移一位 RR A ;累加器A中的内容右移一位 RLC A ;累加器A中的内容连同进位位C左移一位 RRC A ;累加器A中的内容连同进位位C右移一位 例:A=16H,指令RR A执行后,A=0BH。
4.控制转移类指令 (共17条)
MCS51-C语言编程
一个变量由变量名和变量值构成,变量名即是存贮 单元地址的符号表示,而变量的值就是该单元存放 的内容。定义一个变量,编译系统就会自动为它安 排一个存贮单元,具体的地址值用户不Байду номын сангаас在意
C51数据类型
C51数据类型
C51语言数据类型
类型 符号
关键字
位数
(signed) int
16
有
(signed) short
MCS-51单片机的C语言采用C51编译器(简称 C51)
C51与ASM51
对MSC-51的指令系统不要求了解,仅需了解 存贮器结构
寄存器分配、不同存贮器的寻址及数据类型等 细节编译器管理
提供的库包含许多标准子程序,具有较强的数 据处理能力
由于具有方便的模块化编程技术,使已编好程 序可容易地移植
MCS-51C语言编程
C51的程序结构 C51数据类型 存储类型和存储模式 指针 函数 C语言编程实例
C语言
C语言是一种编译型程序设计语言,它兼顾了 多种高级语言的特点,并具备汇编语言的功能
C语言进行程序设计已经成为嵌入式软件开发 的一个主流
用C语言开发系统可以大大缩短开发周期,增 强程序的可读性和可维护性
sbit 可寻址位。定义8051单片机内部RAM中 的可寻址位或特殊功能寄存器中的可寻址位
变量的存储类型定义举例
第3章51系列单片机程序设计(C语言部分)
第3章 51系列单片机程序设计(C部分)
(3) 对位变量定义的限制。
如:bit * bit_pointer。 如:bit b_array[ ]。
源自文库
位变量不能定义成一个指针 错,不存在位数组
在位定义中,允许定义存储类型,位变量都被放入一个 位段,此段总位于MCS-51片内的RAM区中。因此,存 储类型限制为data和idata,如果将位变量的存储类型定 义成其它存储类型都将编译出错。
idata
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)
pdata
分页寻址片外数据存储区(256字节)由MOV @Ri访问(i=0,1)
xdata
片外数据存储区(64 KB)由MOVX @DPTR访问
code
程序存储器64 KB空间,由MOVC @DPTR访问
第3章 51系列单片机程序设计(C部分)
常用编译器: KEIL/Franklin
KEIL/Franklin以它的代码紧凑和使用方便等特点优于其它 编译器。
。 本章是针对这种编译器介绍 MCS–51单片机C语言程序设计
以下把支持MCS-51的C编译器简称“C51”
第3章 51系列单片机程序设计(C部分)
3.4.1 C51数据类型及在MCS-51中的存储方式
第3章 51系列单片机程序设计(C部分)
MCS51-C语言编程
函数
库函数 库函数是编译系统为用户设计的一系列标准函 数 用户自定义函数 用户根据任务编写的函数
中断
C51编译器支持在C语言程序中直接编写51单片机的中 断服务程序,C51编译对函数定义进行了扩展,增加了 一个关键字interrupt,interrupt是函数定义时的一 个选项,加上它函数将函数定义成中断服务函数 函数类型 函数名(形式参数表) [interrupt n][using n]
C语言编程实例
用P1.0输出1KHz和500Hz的音频信号驱动扬声 器,作报警信号,要求1KHz信号响100ms,500Hz 信号响200ms,交替进行,P1.7接一开关进行控 制,当开关合上,响报警信号,当开关断Kk告警 信号停止,编出程序.
C语言编程实例
#include<reg51.h> sbit P10=P1ˆ0; sbit P17=P1ˆ7; main() { unsigned char i, j; while(1) { while(P17==0) { for(i==1;i<=150;i++) /*控制音响时间*/ { P10=~P10; for(j=0;j<=50;j++); /*延时完成信号gou周期时间*/ } for(i=1;i<=100;i++) /*控制音响时间*/ { P10=~P10; for(j=0;j<=100;j++); /*延时,完成信号周期时间*/ } } } }
MCS51单片机C语言程序设计基础
±1.176E-38~±3.40E+38(6位有效数 字) ±1.176E-38~±3.40E+38(10位有效 数字) 0~65535(存储空间)
百度文库
指针
24
3
二、C51数据类型修饰符
表2.2 C51存储类型修饰符
存储类型 与存储空间的对应关系 data bdata 直接寻址片内数据存储区,访问速度快(128字节),值 域 0~127 可位寻址片内数据存储区,允许位与字节混合访问(16 字节,值域0~127
本章主要内容
• C51变量声明
• C51的IO口操作
• C51的中断响应方法
• C51的定时器操作
• C51的串行口操作
• C51的外部总线扩展操作
2.1 C51语言变量声明
但在C语言编程中,对数据类型与变量的定义必须 要与单片机的存储结构相关联,否则编译器就不能正 确的映射。 所以用C语言编写单片机应用程序是要根据单片机 的结构及内部资源定义相应的C语言中的数据类型和 变量。 用C语言编写的应用程序必须经单片机的C语言编 译器,将源代码转换成单片机的可执行程序。支持 MCS-51系列单片机的编译器有很多,比较著名也是 实际应用最多的是KEIL/Franklin编译器。这也是这门 课使用的编译器。
三、C51存储模式
表2.4 存储模式说明 存储模式 说明
51单片机C语言程序设计-图文
//延时 void DelayMS(uint x) {
uchar i; while(x--) for(i=0;i<120;i++); } //交通灯切换 void Traffic_Light() { switch(Operation_Type) {
case 1: //东西向绿灯与南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0; RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000); Operation_Type=2; break;
1 Ykcsh 呈献
//延时 void DelayMS(uint x) {
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { P0=0xfe; while(1) {
P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150); } }
04 花样流水灯
/* 名称:花样流水灯 说明:16 只 LED 分两组
按预设的多种花样变换显示 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0[]= {
MCS51单片机C语言
– MOV direct,#data ;(direct)←data
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.2.1 数据传送和交换类指令
– 〔4〕以存放器间接地址为目的的传送指令:
– MOV @Ri,A
;((Ri))←(A)
– MOV @Ri,direct ;((Ri))←(direct)
• ORG 0000H • MOV R0,#40H ;R0←40H • MOV 40H,#10 ;(40H)←10 • MOV @R0,#00H ;((R0))←00H • END • 解:(R0)=40H,(40H)=00H
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.2.1 数据传送和交换类指令
2.1.2 MCS-51单片机寻址方式
– 位寻址方式的寻址范围包括以下两种情况: – 〔1〕内部RAM中的位寻址区。单元地址为
20H~2FH,共16个单元,128个位,位地址 为00H~7FH。 – 〔2〕特殊功能存放器中的可寻址位。可供位 寻址的特殊功能存放器有11个,共有88个位, 其中5位没有定义,所以有可寻址位83位。
给
SCON,即
SCON←00H
– 操作数直接在指令中给出,它是指令代码一局 部,是存放在程序存储器内的一个常数,这种 寻址方式就称为立即寻址。
– 注意:立即数的前面必有“#〞标志。
第五章C51程序设计
在xdata存储器中定义一个指向字符型(char) 的指针变量px。指针自身在默认存储区,长度为 2个字节(值为0~0xFFFF)。
1、基于存储器的指针
(2)char xdata *data pdx; 除了明确定义指针位于内部存储区data外,其它
与以上相同。 (3)data char xdata *pdx; 与上例完全相同
1、基于存储器的指针
(4)struct time
{char hour;
char min;
char sec;
struct time xdata *pxtime;
}
在结构中struct time中,除了其它结构成员外, 还包含有一个具有和struct time相同的指针 pxtime,time位于外部数据存储器(xdata), 指针pxtime具有两个字节长度。
1、位变量C51定义
位类型标识符 位变量名
bit direction_bit;
bit look_point;
2、函数可包含类型为“bit”的参数、也可将其作为返回值
bit func(bit b0,bit b1)
{
…
return(b1);
}
六、位变量的C51定义பைடு நூலகம்
3、对位变量定义的限制 位变量不能定义成一个指针 如不能定义:bit *bit_pointer 不存在位数组,如不能定义:bit b_array[] 在位定义中,允许定义存储类型,位变量都被放入
最新单片机应用技术(C语言版)王静霞
单片机最小系统
时钟振荡电路 复位电路
EA高电平,访问 片内存储器
______________________________________ ____________
时钟电路与复位电路
(1)时钟振荡电路
______________________________________ ____________
单片机种类
◆单片机的发展经历了由4位机到8位机,再到16位机的发展过程
◆目前8位单片机仍是单片机的主流机型;
◆生产厂商:
美国微芯片公司:PIC16C××系列、PIC17C××系列、PIC1400系列, 美国英特尔公司的MCS-48和MCS-51系列, 美国摩托罗拉公司的MC68HC05系列和MC68HC11系列, 美国齐洛格公司的Z8系列, 日本电气公司的μPD78××系列, 美国莫斯特克公司和仙童公司合作生产的F8(3870)系列等。
MCS-51单片机信号引脚简介
P1. 0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
RST RXD/ P3. 0 TXD/ P3.1 INT0/ P3.2 INT1/ P3.3
T0/ P3.4 T1/ P3.5 WR/ P3.6 RD/ P3.7
XTAL2 XTAL1
VSS
并行I/O口:4个8位的I/O口P0、P1、P2、P3。
C51-单片机C语言程序设计
用C语言编写单片机应用程序与标准的C语言程序也有相 应的区别:
C语言编写单片机应用程序时,需根据单片机存储结 构及内部资源定义相应的数据类型和变量,而标准的C语
言程序不需要考虑这些问题;
C51包含的数据类型、变量存储模式、输入输出处理、
函数等方面与标准的C语言有一定的区别。其它的语法规则、 程序结构及程序设计方法等与标准的C语言程序设计相同。
(2)C51中的数据类型与标准C的数据类型也有一定的区别, 在C51中还增加了几种针对MCS-51单片机特有的数据类型;
第6页,共120页。
(3)C51变量的存储模式与标准C中变量的存储模式不一 样,C51中变量的存储模式是与MCS-51单片机的存储器紧
密相关;
(4)C51与标准C的输入输出处理不一样,C51中的输入 输出是通过MCS-51串行口来完成的,输入输出指令执 行前必须要对串行口进行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中
第四章 单片机C语言程序设计
4.1 C语言与MCS-51单片机
4.1.1 C语言的特点及程序结构
一.C语言的特点 1.语言简洁、紧凑,使用方便、灵活。 2.运算符丰富。 3.数据结构丰富。具有现代化语言的各种数据结构。 4.可进行结构化程序设计。
5.可以直接对计算机硬件进行操作。
6.生成的目标代码质量高,程序执行效率高。 7.可移植性好。
单片机C51程序设计课后习题答案(复习专用)
单⽚机C51程序设计课后习题答案(复习专⽤)
第⼀章
1. 给出下列有符号数的原码、反码和补码(假设计算机字长为8
位)。
+45 -89 -6 +112
答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101【-89】原=11011001,【-89】反=10100110,【-89】补=10100111
【-6】原=10000110,【-6】反=11111001,【-6】补=11111010
【+112】原=01110000,【+45】反=01110000,【+45】补=01110000 2. 指明下列字符在计算机内部的表⽰形式。
AsENdfJFmdsv120
答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H
3. 什么是单⽚机?
答:单⽚机是把微型计算机中的微处理器、存储器、I/O接⼝、定时器/计数器、串⾏接⼝、中断系统等电路集成到⼀个集成电路芯⽚上形成的微型计算机。因⽽被称为单⽚微型计算机,简称为单⽚机。
4. 单⽚机的主要特点是什么?
答:主要特点如下:
1) 在存储器结构上,单⽚机的存储器采⽤哈佛(Harvard)结构
2) 在芯⽚引脚上,⼤部分采⽤分时复⽤技术
3) 在内部资源访问上,采⽤特殊功能寄存器(SFR)的形式
4) 在指令系统上,采⽤⾯向控制的指令系统
5) 内部⼀般都集成⼀个全双⼯的串⾏接⼝
6) 单⽚机有很强的外部扩展能⼒
5. 指明单⽚机的主要应⽤领域。
答:单机应⽤:1) ⼯业⾃动化控制;2) 智能仪器仪表;3) 计算机外部设备和智能接⼝;4) 家⽤电器
MCS-51系列单片机的汇编语言程序设计
程的指令,它们都是单片机不能执行的指令,无对应的机器码。
基本指令是开发人员“讲给”单片机听的指令,是单片机能 够执行的指令,是真指令;伪指令是开发人员“讲给”计算机听 的指令,这里的计算机是指仅仅起将汇编语言翻译成机器码作用 的开发工具,不是用来完成应用系统控制的单片机。所以,对于 完成应用系统的控制的单片机来说,伪指令不是可执行指令,是 假指令。
第4章 MCS-51系列单片机的汇编语言程序设计
1.机器语言
机器语言是用二进制代码0和1表示指令和数据的最原始的 程序设计语言。机器语言也是唯一能被计算机的CPU、单片机 的MCU直接识别和执行的语言。我们把这种能够被CPU、 MCU直接识别的二进制表示的指令称为机器码。
第4章 MCS-51系列单片机的汇编语言程序设计
符xx等值替换为EQU之后的字符yy。
第4章 MCS-51系列单片机的汇编语言程序设计 4.DATA DATA为片内RAM字节起名伪指令,又称片内RAM地址 赋值伪指令,其格式如下: xx DATA yy 其中,xx表示变量名;yy表示片内RAM字节地址。 DATA伪指令的作用是给变量xx赋一个确定的片内RAM字 节地址yy。该伪指令用于在片内RAM空间定义变量。例如, 如果程序的开始使用伪指令“OUTLED DATA 50H”,即给片
第4章 MCS-51系列单片机的汇编语言程序设计
4.1.2 汇编语言指令类型
第5章-MCS-51单片机C51程序设计
在C51的文本编辑器中编写C程序,系统可以把保留关键字 以不同颜色显示,如int关键字的默认颜色为天蓝色。
17:03
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
3
本章目录
5.4 C51函数 5.4.1 函数的分类 5.4.2 函数的定义 5.4.3 函数的调用 5.4.4 对被调函数的说明 5.4.5 中断函数 5.5 C51结构化程序设计 5.5.1 顺序结构程序 5.5.2 选择结构程序
对C51编译器来说,short类型和int类型相 同,double类型和float类型相同。
17:03
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
14
5.2.2 数据类型
----C51的数据类型
除此之外,为了更加有利地利用MCS-51的结构,C51
还增加了一些特殊的数据类型,包括bit、sbit、sfr、sfr16。 数据类型如表5-2所示。
C语言是一种通用的程序设计语言,其代码率高, 数据类型及运算符丰富,位操作能力强,适用于各种 应用的程序设计。使用C语言进行单片机应用系统开发, 具有编程灵活、调试方便、目标代码编译效率高的特 点。C语言也是目前使用最广的单片机应用系统编程语 言。