第四章 单片机C语言程序设计
单片机原理及应用(C51版)第4章单片机C语言程序设计精品PPT课件
4.1 Keil C简介与环境设置 4.2 C51 4.3 C51基础知识及表达式 4.4 C51控制语句 4.5 数组 4.6 指针 4.7 函数 4.8 C51开发工具使用 4.9 Keil C调试方法
一般情况下单片机常用的程序设计语言有两种:
4.2 Cx51简介
4.2.1 Cx51的扩展
Cx51编译器兼容ANSI C标准,又扩展支持了8051微处 理
器,其扩展内容如下: ① 存储区; ② 存储区类型; ③ 存储模型; ④ 存储类型说明符; ⑤ 变量数据类型说明符; ⑥ 位变量和位可寻址数据; ⑦ SFR; ⑧ 指针; ⑨ 函数属性。
部RAM地址为0x80-0xFF的128字节存储单元,这些 存储器一般用作计时器、计数器、串口、并口和外围 使用。
4. sfr16类型 sfr16类型用于声明两个连续地址的特殊功能寄
存器(地址范围为0~65 535)。 5.其它类型 C51程序中常用的数据类型还有: char(字符型) unsigned char(无符号字符型) int(整型) unsigned int(无符号整型)等类型。
4.2.2 存储区
8051单片机支持程序存储器和数据存储器的分离,存 储器根据读写情况可以分为:程序存储区(ROM)、快速 读写存储器(内部RAM)、随机读写存储器(外部RAM)。
1. 程序存储器(code)
在中程序存储器是只读存储器,其空间为64K ,在 C51中用code关键字来声明访问程序存储区中的 变量。 。
● 汇编语言:
汇编语言具有执行速度快、占存储空间少、对硬件可直 接编程等特点,因而特别适合在对实时性能要求比较高的 情况下使用。
● C语言:
C语言克服了汇编语言的不足之处,同时又增加了代码 的可读性,C语言大多数代码被翻译成目标代码后,其效 率和汇编语言相当。特别是C语言的内嵌汇编功能,使C语 言对硬件操作更加方便。
单片机c语言课程设计
单片机c语言课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理和结构,理解C语言在单片机编程中的应用。
2. 培养学生运用C语言进行单片机程序设计和调试的能力。
3. 使学生了解单片机外围设备的接口技术,并能结合实际需求进行简单系统设计。
技能目标:1. 培养学生运用Keil等开发工具进行单片机C语言编程,完成程序设计、编译、下载和调试。
2. 培养学生分析问题和解决问题的能力,能够针对实际应用场景设计单片机控制系统。
3. 提高学生的动手实践能力,通过课程设计,独立完成一个具有实际应用价值的单片机控制系统。
情感态度价值观目标:1. 培养学生积极的学习态度,激发对单片机及嵌入式系统开发的兴趣。
2. 培养学生的团队合作意识,学会在项目中进行有效沟通和协作。
3. 增强学生的创新意识,鼓励他们在课程设计中勇于尝试新思路、新技术。
课程性质分析:本课程为单片机C语言课程设计,侧重于实践操作和实际应用,旨在帮助学生将所学理论知识与实际工程相结合,提高解决实际问题的能力。
学生特点分析:学生已具备一定的单片机原理和C语言基础,具有一定的编程和动手能力。
在此基础上,通过课程设计,提高学生的综合应用能力和创新能力。
教学要求:1. 结合课本内容,注重理论与实践相结合,强化学生的动手实践能力。
2. 以项目为导向,引导学生主动探索,培养学生的问题分析和解决能力。
3. 注重团队合作,培养学生的沟通能力和协作精神。
4. 关注学生的个体差异,实施差异化教学,提高全体学生的学习效果。
二、教学内容1. 单片机基础理论:回顾51单片机的结构、原理及其外围设备的工作原理,重点复习I/O口编程、定时器、中断系统等内容。
教材章节:第一章至第三章2. C语言编程基础:巩固C语言基本语法,包括数据类型、运算符、控制语句、函数等,结合单片机编程需求进行讲解。
教材章节:第四章至第六章3. 单片机C语言编程实践:学习使用Keil开发工具进行单片机C语言编程,掌握程序设计、编译、下载和调试的全过程。
单片机c语言程序设计
单片机c语言程序设计
单片机C语言程序设计主要包括以下几个方面的内容:
1. 硬件初始化:包括对单片机的引脚、端口、定时器、中断等进行初始化设置。
2. 输入输出操作:对外部设备的输入输出进行控制,如读取按键、控制LED灯、驱动液晶显示屏等。
3. 时钟和定时器操作:利用单片机内部的定时器来生成精确的时间延时,进行定时操作。
4. 中断处理:单片机的中断是实现异步事件响应的重要手段。
程序中需要设置中断的触发条件,并编写对应的中断服务函数。
5. 存储器操作:包括对寄存器、变量、数组等进行读写操作,以及对外部存储器的读写操作。
6. 节能和休眠模式:单片机在待机、休眠等低功耗模式下可以通过设置进行省电操作。
7. 通信协议和接口:可以通过UART、SPI、I2C等通信协议
与其他外部设备进行数据交换。
8. 程序控制流程:包括循环、条件分支、跳转等控制结构的使用,以实现程序的逻辑控制。
以上只是单片机C语言程序设计的一些常见内容,具体的程序设计还需要根据实际需求进行设计。
可以根据单片机的型号和数据手册,选择合适的编译器和开发工具,参考相关资料和示例代码进行学习和实践。
单片机c语言程序设计
单片机c语言程序设计
单片机C语言程序设计是指使用C语言编写单片机控制程序,实现各种功能和任务。
具体步骤如下:
1. 确定程序功能:首先明确单片机的控制目标和需求,确定要实现的功能。
2. 编写主函数:使用C语言编写一个主函数,作为程序的入
口点。
在主函数中,可以定义变量、调用函数、编写主要的程序逻辑。
3. 初始化设置:在主函数中,进行单片机的初始化设置,包括引脚初始化、时钟设置、模块初始化等。
4. 编写中断服务函数:根据需要,编写中断服务函数。
在中断服务函数中,处理特定的中断事件,例如定时器中断、外部中断等。
5. 编写任务函数:根据程序的需求,编写各个任务函数。
任务函数可以是循环执行的函数,或者是根据事件触发执行的函数。
6. 实现控制逻辑:在任务函数中编写具体的控制逻辑代码,根据需要使用控制语句(如if、switch)和循环语句(如for、while)。
7. 进行调试和测试:完成编写后,进行程序的调试和测试,通过仿真器或者实际连接到单片机的硬件进行测试。
8. 优化和修改:根据测试结果进行程序的优化和修改,改善程序的性能和功能。
9. 生成可执行文件:将C源文件编译成可执行文件,可以直接下载到单片机中运行。
10. 下载和运行:将生成的可执行文件通过下载器下载到目标单片机中,并进行运行测试。
以上是单片机C程序设计的一般步骤,具体的实现方法和内容会根据不同的单片机型号和功能需求而有所不同。
第4章单片机C语言1
变量:在程序运行中其值可以改变的量。
定义一个变量,编译系统就会自动为它安排一个存贮区,具体的 地址值 ,用户不必在意。一个变量由变量名和变量值构成. 变量名:存贮单元地址的符号表示。 变量的值:变量所在地址单元存放的内容。
Microcontroller 单片机的C语言 05
数据类型:数据的长度。 无论哪种数据都是存放在存贮单元中的,每一个数据究竟要占用几 个单元,都要提供给编译系统,正如汇编语言中存放数据的单元要用DB、 DW、DD伪指令进行定义一样。
Microcontroller 单片机的C语言
10
4.3.2
在固定的存贮器地址进行变量参数传递是C51的一个标准特征,定 义了变量、参数传递区的存贮器模式,也就是默认了变量和参数传递 区存贮器类型、无需再对变量和参数传递区的存贮器类型进行说明。 存贮器模式决定了变量的默认存贮器类型、参数传递区和无明确存 贮区类型的说明。有三种存贮器模式:SMALL、LARGE 和 COMPACT。
Microcontroller 单片机的C语言
14
下面表格表示两种语言将m单元的内容送n单元的对照语句: 直接寻址
汇编语言 MOV n,m 传送语句 C 语言 n=m; 赋值语句 汇编语言 MOV R1,#m ; m的地址送R1 MOV n,@R1 ; m单片机的C语言
04
4.2 C51的数据类型
C51的数据有常量和变量之分。 常量:在程序运行中其值不变的量。 数值型常量:可以为十进制数、 十六进制数( 用0x表示)和字符 (用‘ ’ 引号括起)。 符号型常量:用符号表示常量,此符号需用宏定义指令(#define)对 其进行定义(相当于汇编的‚EQU‛伪指令)。 如:#define PI 3.1415那么程序中只要出现PI的地方,编译 程序都译为3.1415。
第四章 单片机C51简介
五、C51常用运算符
赋值运算符、算数运算符、关系运算符、 逻辑运算符、位运算符、条件运算符….
位运算符 位运算是按位对变量进行运算的,但并不改变参与 运算的变量的值。 C51 中位运算符只能对整数进行操作,不能对浮点 数进行操作。C51中的位运算符有: & 按位与 ︱ 按位或 ∧ 按位异或 ~ 按位取反 << 左移 >> 右移
//声明单个位
2. C51数据存储类型
存储类型 data 与存储空间的对应关系 直接寻址片内数据存储区,访问速度快(128字节) 可位寻址片内数据存储区,允许位与字节混合访问(16字 节) 间接寻址片内数据存储区,可访问片内全部RAM地址空 间(256字节) 分页寻址片外数据存储区(低256字节) 寻址片外数据存储区(64K字节) 寻址代码存储区(64K字节)
bit bdata flags;
float idata x,y,z;
unsigned int pdata dimension; unsigned char xdata vector[10][4][4];
unsigned char code a[]={0x00,0x01};
P78 例4-2、4-3(自行看书)
•sfr16 16位特殊功能寄存器
sfr16占用两个内存单元,值域为 0~65535。sfr16和sfr 一样用于操作特殊功能寄存 器,不同的是它用于操作占两 个字节的寄存器,如定时器T2。 sfr16 T2=0xCC; //定义8052定时器2,低8位地址为
// T2L=CCH,高8位T2H=CDH
指针
当定义一个指针变量时,若未指定它所指向的 对象的存储类型,则该指针变量被认为是一般 指针; 指定了它所指对象的存储类型,则该指针被认 为是基于存储器的指针。
单片机C语言的程序设计
单片机(Microcontrollers)诞生于 1971 年,经历了 SCM、MCU、SoC 三大阶段,早期的 SCM 单片机都是 8 位或 4 位的。其中最成功的是 INTEL 的 8051,此后在 8051 上发展出了 MCS51 系列 MCU 系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了 16 位单片机,但因为性价比不理想并未得到很广泛的应用。90 年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着 INTEL i960 系列特别是后 来的 ARM 系列的广泛应用,32 位单片机迅速取代 16 位单片机的高端地位,并且进入主流市场。而传统的 8 位单片机的性能也得到了飞速提高,处理能力比 起 80 年代提高了数百倍。高端的 32 位 Soc 单片机主频已经超过 300MHz,性能直追 90 年代中期的专用处理器,而普通的型号出厂价格跌落至 1 美元,最高 端的型号也只有 10 美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上 电脑和手机核心处理的高端单片机甚至可以直接使用专用的 Windows 和 Linux 操作系统。
03 8 只 LED 左右来回点亮
/*
名称:8 只 LED 左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x)
01
闪烁的 LED
/*
单片机第4章汇编语言程序设计
4.2 伪指令
伪指令是在机器汇编中告诉汇编程序 如何汇编、对汇编过程进行控制的命令。 伪指令与汇编语言指令不同,只在源程序 中出现,不产生任何机器代码,在程序的 运行过程中不起作用,故称为“伪指令”。
处理 判断 连接
2.绘制程序流程图 简单的问题可由文字说明, 当问题复杂时,将文字说明的步骤以图形符号表示, 称流程图。
3.编写源程序 用汇编语言把流程图所表明的 步骤描述出来,实现流程图中每一框内的要求,从 而编制出一个有序的指令流,即汇编语言源程序。
4.汇编、调试 汇编语言是用指令助记符代替机 器码的编程语言,所编写的程序是不能在计算机上 直接执行的,因此利用它所编写的汇编语言程序必 须转换为单片机能执行的机器码形式的目标程序才 能运行,我们把这一过程称为汇编,进行汇编的程 序称为汇编程序。
4. 定义字伪指令DW
[标号:] DW 16位字数据表
该指令的功能与DB相似, 区别仅在于从指定地
址开始存放的是指令中的16位数据, 而不是字节串。
每个16位数据要占两个存储单元, 高8 位先存(低位
地址), 低 8 位后存(高位地址)。
1403H 3CH
ORG 1400H DATA1:DW 324AH,3CH
散转程序是分支程序的一种, 它可根据运算结果或输入数 据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指 令JMP@A+DPTR,用它可以很容易地实现散转功能。该指令 把累加器的8位无符号数与16位数据指针的内容相加, 并把相加 的结果装入程序计数器PC,控制程序转向目标地址去执行。
单片机的C语言程序设计
零基础学单片机c语言程序设计
零基础学单片机c语言程序设计
1、了解单片机基本知识:包括单片机结构、单片机工作原理以及常见的单片机类型及其特点;
2、学习单片机操作系统:学习C的编程语言接口,掌握使用C语言在单片机上编写程序的标准;
3、具体实现:了解各种输入输出设备的特性,如:LCD屏、I2C、ADC等,学习使用C语言对这些设备进行控制;
4、模拟实验:学会如何使用单片机编程软件,编写C语言程序,在软件上模拟单片机系统操作,掌握应用单片机C语言编程规范;
5、调试:学习如何进行单片机调试,了解常用的调试技术,比较各种调试工具的使用;
6、系统集成:学习如何把了解的硬件及软件部件快速集成,成为可以识别的功能模块,进行系统集成;
7、实际应用:了解单片机在具体实际应用中的特点,比如电器控制、安全报警控制、机器人控制等,能够应用C程序编写上述应用程序。
单片机c语言编程
单片机c语言编程
单片机C语言是一种用来进行编程的程序设计语言,它一直是显
示技术,工控技术,以及嵌入式系统的重要编程语言之一。
它的出现,极大地改变了单片机编程的方式,也带给了很多便利,由此推动了智
能产品的发展,变得更加智能,便利。
单片机C语言编程的第一步就是了解单片机的架构,根据单片机
的特性,设计出适合自己的单片机C语言程序,其次,根据编写的程
序的具体内容,以及实现的目的,选择合适的编译器或开发环境,下
载到单片机中,然后使用编译程序编译单片机C语言源程序,调试好
程序的中的语法错误和逻辑错误,完成程序的设计和编写,最后,将
程序下载到单片机上,使其处于可运行状态,达到期望的效果。
在单片机C语言编程中,语法是非常重要的,必须完全正确,这
样才能正确运行程序。
编译程序肩负着检查语法错误的职责,任何错
误的语法都会被识别出来,以便更快地发现和修复问题,实现对程序
的更高精确性。
要编写出一个好的单片机程序,除了要了解单片机架构,熟悉语
法以外,还要考虑程序的可读性。
在实际编程过程中,通常需要使用
结构体,指针急速跳转,函数,宏等技术,这些技术让程序变得更加
简洁,可读性也更高,方便程序扩展和维护。
单片机C语言的优势非常明显,不仅比汇编语言的操作更加简单,功能也更加强大,也更加容易掌握,同时也为可编程逻辑引入了C程
序设计中一系列问题,例如内存、数据定义、流程控制等,使得程序
开发变得更加方便。
因此,单片机C语言编程的程序是单片机的今后
的发展方向之一。
c语言单片机程序开发
c语言单片机程序开发
C语言单片机程序开发是指使用C语言来编写单片机的程序。
单片机是一种集成电路芯片,具有处理器、存储器、输入输出接口等功能,可以用来控制各种电子设备。
C语言是一种高级编程语言,具有易学易用、灵活性强等特点,非常适合用来开发单片机程序。
在C语言单片机程序开发中,首先需要选择适合的单片机芯片,并了解其硬件结构和特性。
然后,根据需求设计程序的功能模块,并使用C语言编写程序代码。
在编写代码时,需要使用单片机提供的相关库函数和指令集,来控制单片机的输入输出、存储器操作、定时器和中断等功能。
同时,还需要注意代码的效率和可靠性,以确保程序的正确运行。
在开发过程中,可以使用各种开发工具来辅助编写和调试程序,如编译器、调试器、仿真器等。
最后,将编写好的程序下载到单片机芯片中,进行测试和调试,确保程序的功能和性能符合要求。
C语言单片机程序开发广泛应用于各种领域,如嵌入式系统、电子设备控制、自动化控制等。
通过C语言单片机程序开发,可以实现各种功能,如电路控制、数据采集、通信等,为各种电子设备提供智能化和自动化的控制能力。
单片机的C语言应用程序设计
单片机的C语言应用程序设计单片机(Microcontroller)是一种集成电路芯片,内部集成了处理器、存储器和各种外设接口等功能模块,可用于控制各种电子设备。
C语言是一种高级编程语言,广泛应用于单片机的软件开发中。
本文将介绍单片机的C语言应用程序设计。
首先,单片机的C语言应用程序设计需要明确目标和需求。
根据具体的应用场景和功能要求,选择合适的单片机型号和C编译器,开始进行程序开发。
在开发之前,需要了解单片机的硬件结构和特性,包括IO口的使用、中断控制、定时器计数器等。
程序设计的第一步是编写初始化代码,对单片机的各个模块进行初始化配置。
这些模块包括GPIO(General Purpose Input/Output)口、中断控制器、定时器计数器等。
通过配置这些模块,可以使单片机能够正常工作,并且可以根据需要使用各种外设接口。
接下来,根据具体需求,编写各个功能模块的代码。
比如,如果需要使用串口通信功能,可以编写相应的串口初始化、发送和接收函数。
如果需要使用LCD显示屏,可以编写相应的LCD初始化、显示和控制函数。
在编写这些功能模块的代码时,需要充分利用单片机的硬件资源,并优化代码,使其具有高效率和稳定性。
在编写应用程序的过程中,需要注意单片机的资源限制和实时性要求。
单片机的内存、存储器和计算能力有限,因此需要合理规划和使用这些资源,避免程序过于庞大和复杂。
另外,由于单片机的处理能力比较有限,需要注意程序的实时性能。
如果程序需要及时响应外部事件或者传感器信号,需要合理使用中断控制和定时器计数器等功能,确保程序的实时性。
最后,进行调试和测试。
在开发完成后,需要对程序进行调试和测试,以确保程序的正确性和稳定性。
可以通过仿真器或者示波器等工具进行调试,观察程序的执行过程和信号变化,及时发现和修复程序中的问题。
总之,单片机的C语言应用程序设计是一个较为复杂和专业的领域,需要对单片机的硬件结构和特性有深入了解,并具备一定的编程和调试技巧。
C单片机的C语言程序设计解读
C单片机的C语言程序设计解读C单片机的C语言程序设计是指使用C语言编写单片机程序的过程。
C语言是一种通用编程语言,非常适合用于嵌入式系统开发,特别是单片机。
在单片机中,C语言用于控制和编程微处理器的功能,比如读写IO口、中断处理、定时器控制等。
1. 引入库函数:在C单片机程序设计中,首先需要引入相应的库函数。
库函数是封装了一系列常用功能的函数集合,通过调用库函数可以方便地实现各种功能。
例如,可以引入stdio.h库函数实现标准的输入输出功能,或者引入io.h库函数实现IO口控制功能。
2. 定义宏定义和常量:在C单片机程序中,可以使用宏定义和常量来定义一些固定的数值或者字符串。
宏定义使用#define指令,在程序中定义一个标识符,并将其替换为指定的文本。
常量使用const关键字定义,定义后数值不可更改。
宏定义和常量可以提高程序的可读性和可维护性。
3.变量的声明和定义:变量是C程序的基本组成元素之一,用于存储和表示数据。
在C单片机程序中,可以先声明变量的类型,然后再进行定义。
变量的类型可以是整型、浮点型、字符型等。
变量的作用范围和生命周期取决于其在程序中的声明位置。
4.函数的定义和调用:函数是C程序的另一个基本组成元素,用于封装一段独立的代码块,实现特定的功能。
在C单片机程序中,可以先定义函数的原型,然后再实现函数的具体功能。
函数的调用使用函数名和实参列表,可以将函数的返回值赋给一个变量或者作为一个表达式的值进行使用。
5. 控制语句:控制语句是用于控制程序执行流程的语句。
C单片机程序中常用的控制语句包括条件语句(if-else语句、switch语句)、循环语句(for循环、while循环、do-while循环)和跳转语句(break语句、continue语句、goto语句)。
通过控制语句可以根据不同的条件执行不同的操作,或者循环执行一些代码块,或者跳转到程序的其他位置。
6.中断处理:中断是单片机程序中常用的一种处理方式。
单片机c语言程序设计与仿真
单片机c语言程序设计与仿真
单片机C语言程序设计与仿真是指使用C语言来编写程序,以控制单片机(Microcontroller)的行为。
单片机是一种集成电路芯片,它包含了计算机的基本功能,可以在其中执行程序、存储数据等。
而C语言是一种通用的编程语言,广泛应用于系统软件、应用软件、嵌入式系统等领域。
以下是单片机C语言程序设计与仿真的详细内容:
1.单片机基础知识:了解单片机的内部结构、工作原理、常用外设(如I/O
端口、定时器、串口通信等)以及单片机的指令系统。
2.C语言编程基础:学习C语言的语法、数据类型、运算符、控制结构、函
数等基础知识,以及如何使用C语言进行基本的编程操作。
3.单片机C语言编程:学习如何使用C语言编写程序来控制单片机的行为。
这包括对单片机的初始化、输入输出控制、中断处理、定时器操作等方面的编程。
4.仿真工具:使用仿真工具进行单片机程序的仿真和调试。
仿真工具可以模
拟单片机的运行环境,让程序员在没有实际硬件的情况下也能测试和调试程序。
5.实际应用案例:通过实际的应用案例来深入了解单片机C语言程序设计的
实际应用和解决方案。
总结来说,单片机C语言程序设计与仿真是指使用C语言来编写程序,控制单片机的工作,并通过仿真工具进行程序的测试和调试。
通过学习和实践这个过程,可以掌握单片机C语言编程的基本知识和技能,为进一步开发和应用嵌入式系统打下基础。
第四章单片机C语言程序设计
(2)extern:定义的变量称为外部变量。在一个 函数体内,要使用一个已在该函数体外或别的程序中 定义过的外部变量时,该变量在该函数体内要用 extern说明。外部变量被定义后分配固定的内存空间, 在程序整个执行时间内都有效,直到程序结束才释放。
(3)static:定义的变量称为静态变量。分为内部 静态变量和外部静态变量。在函数体内部定义的静态 变量为内部静态变量,它在对应的函数体内有效。
x=5; y=8; sum=x+y; sub=x-y; mul=x*y; div=y/x; while(1); }
一、C51语言源程序的组成 一个C51语言源程序是由一个或若干个函数组成, 每一个函数完成相对独立的功能。 1、每个C51程序都必须有(且仅有)一个主函数 main(),程序的执行总是从主函数开始,调用其他 函数后返回主函数main(),不管函数的排列顺序如 何,最后在主函数中结束整个程序。 2、C51语言程序中可以有预处理命令,预处理命 令通常放在源程序的最前面,用include定义。 3、C51语言程序使用“;”作为语句的结束符, 一条语句可以多行书写,也可以一行书写多条语句。
转义字符 \0 \n \r \t \b \f \‘ \” \\
含义
ASCII码(十六进制数)
空字符(null)
00H
换行符(LF)
0AH
回车符(CR)
0DH
水平制表符(HT)
09H
退格符(BS)
08H
换页符(FF)
0CH
单引号
27H
双引号
22H
反斜杠
5CH
4.字符串型常量 字符串型常量由双引号“”括起的字符组成。如 “D”、“1234”、“ABCD”等。 注意字符串常量与字符常量是不一样,一个字符 常量在计算机内只用一个字节存放,而一个字符串 常量在内存中存放时不仅双引号内的字符一个占一 个字节,而且系统会自动的在后面加一个转义字符 “\0”作为字符串结束符。因此不要将字符常量和字 符串常量混淆,如字符常量‘A’和字符串常量“A” 是不一样的。
第4章 单片机C语言程序设计
4.1.2 C语言与MCS-51单片机
用C语言编写MCS-51单片机程序与用汇编语言编写MCS–51单片机程序 不一样,用汇编语言编写MCS–51单片机程序必须要考虑其存储器结构, 尤其必须考虑其片内数据存储器与特殊功能寄存器的使用以及按实际地址 处理端口数据。用C语言编写的MCS–51单片机应用程序,则不用像汇编 语言那样须具体组织、分配存储器资源和处理端口数据,但在C语言编程 中,对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则 编译器不能正确地映射定位。
(5)C51与标准C在函数使用方面也有一定的区别,C51中有专 门的中断函数。
4.2 C51的数据类型
C51的数据类型分为基本数据类型和组合数据类型,情况与标准C中的数据 类型基本相同,但其中char型与short型相同,float型与double型相同,另外, C51中还有专门针对于MCS-51单片机的特殊功能寄存器型和位类型。
第4章 单片机C语言程序设计 4.1 C语言与MCS-51单片机
4.1.1 C语言的特点及程序结构
一.C语言的特点 1.语言简洁、紧凑,使用方便、灵活。 2.运算符丰富。 3.数据结构丰富。具有现代化语言的各种数据结构。 4.可进行结构化程序设计。 5.可以直接对计算机硬件进行操作。 6.生成的目标代码质量高,程序执行效率高。 7.可移植性好。
数定义部分包括有函数类型、函数名、形式参数说明等,函数名后面 必须跟一个圆括号(),形式参数在()内定义。函数体由一对花括 号“{}”组成,在“{}”的内容就是函数体。如果一个函数内有多个花括 号,则最外层的一对“{}”为函数体的内容。函数体内包含若干语句, 一般由两部分组成:声明语句和执行语句。声明语句用于对函数中用 到的变量进行定义。也可能对函数体中调用的函数进行声明。执行语 句由若干语句组成,用来完成一定功能。当然也有的函数体仅有一对 “{}”,其中内部既没有声明语句,也没有执行语句。这种函数称为空 函数。
单片机C语言及程序设计
单片机C语言及程序设计4.1 C51概述“C51”概念:为了与ANSI C区别,把“单片机C语言”称为“C51”,也称为“Keil C”。
用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。
➢ 4.1.2 C语言与ANSI 的区别用C51编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是C51对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。
用C51编写单片机程序,与用ANSI C编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。
其它的语法规定、程序结构及程序设计方法,都与ANSI C相同。
所以本章主要介绍C51各种变量的定义、指针定义、函数定义和混合编程。
➢ 4.1.3 C51扩展的关键字由于单片机在结构及编程上的特殊要求,C51有自己的特殊关键字,称之为C51扩展的关键字,下面给出常用的C51扩展的关键字。
_at_ bdata bit codedata idata interrupt pdatareentrant sbit sfrsfr16 using volatile xdata数据类型转换1)自动转换转换规则是向高精度数据类型转换、向有符号数据类型转换。
如字符型变量与整型变量相加时,则位变量先转换字符型或整型数据,然后相加。
2)强制转换像ANSI C一样,通过强制类型转换的方式进行转换。
如:unsigned int b;float c; b=(int)c;➢ 4.2.2 C51数据的存储MCS-51单片机只有bit和unsigned char两种数据类型支持机器指令,而其它类型的数据都需要转换成bit或unsigned char型进行存储。
为了减少单片机的存储空间和提高运行速度,要尽可能地使用unsigned char型数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1.1 C语言的特点及程序结构
一.C语言的特点 1.语言简洁、紧凑,使用方便、灵活。 2.运算符丰富。 3.数据结构丰富。具有现代化语言的各种数据结构。 4.可进行结构化程序设计。 5.可以直接对计算机硬件进行操作。 6.生成的目标代码质量高,程序执行效率高。 7.可移植性好。
4.1.2 C语言与MCS-51单片机
C语言编程要与存储结构相关联:片内数据存储器与特殊功能寄存器。 按实际地址处理端口数据。 KEIL/Franklin编译器。 4.1.3 C51程序结构
C51程序与标准的C程序在以下几个方面不一样: (1)库函数不同。 (2)数据类型也有一定的区别。 (3)存储模式不一样。 (4)C51中的输入输出是通过MCS-51串行口来完成的,输入输 出指令执行前必须要对串行口进行初始化; (5)C51中有专门的中断函数。
/* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0; /* TCON */ sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88; /* IE */ sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA
4.2 C51的数据类型
基本数据类型和组合数据类型。 有专门针对于MCS-51单片机的特殊功能寄存器型和位类型。 一.字符型char signed char和unsigned char,默认为signed char。 长度为一个字节。 signed char,定义带符号字节数据,其字节的最高位为符号位,“0”表示正数,“1”表 示负数。 unsigned char,存放无符号数或西文字符(ASCII码)。 二.int整型 singed int和unsigned int。 长度为两个字节。
用Ri间接访问的片外RAM的低256B
用DPTR间接访问的片外RAM,允许访问全部64kb片外RAM 程序存储器ROM64kb空间
【例4-2】变量定义存储种类和存储器类型相关情况。 char data varl; /*在片内RAM低128B定义用直接寻址方式访问的字符型变量 var1*/ int idata var2; /*在片内RAM256B定义用间接寻址方式访问的整型变量var2*/ auto unsigned long data var3; /*在片内RAM128B定义用直接寻址方式访问的自动无符号长整型 变量var3*/ extern float xdata var4; /*在片外RAM64KB空间定义用间接寻址方式访问的外部实型变量 var4*/ int code var5; /*在ROM空间定义整型变量var5*/ unsign char bdata var6; /*在片内RAM位寻址区20H~2FH单元定义可字节处理和位处理的 无符号字符型变量var6*/
五.特殊功能寄存器变量 格式: sfr或sfr16 特殊功能寄存器名=地址; sfr:对MCS-51单片机中单字节的特殊功能寄存器进行定义。 sfr16:用于对双字节特殊功能寄存器进行定义。 特殊功能寄存器名一般用大写字母表示。 地址一般用直接地址形式。 【例4-3】特殊功能寄存器的定义。 sfr PSW=0xd0; sfr SCON=0x98; sfr TMOD=0x89; sfr P1=0x90; sfr16 DPTR=0x82; sfr16 T1=0X8A;
转义字符
含 义
ASCII码(十六进制数)
\o
\n \r \t \b \f \„
空字符(null)
00H
0AH 0DH 09H 08H 0CH 27H
换行符(LF) 回车符(CR)
水平制表符(HT) 退格符(BS) 换页符(FF) 单引号
\”
\\
双引号
反斜杠
22H
5CH
四.字符串型常量 双引号“”括起:如“D”、“1234”、“ABCD”等。 一个字符常量在计算机内只用一个字节存放。 一个字符串常量:双引号内的字符一个占一个字节,自动后面 加一个转义字符“\o”作为字符串结束符。
三.long长整型 分singed long和unsigned long。 长度为四个字节。 四.float浮点型 五.* 指针型 指向另一个数据的地址。它的长度一般为1~3个字节。
六.特殊功能寄存器型 sfr和sfr16两种类型。 sfr为字节型,占一个内存单元,可以访问MCS-51内部的所有特殊功能 寄存器。 sfr16占用两个字节单元,可以访问所有两个字节的特殊功能寄存器。 在C51中对特殊功能寄存器的访问必须先用sfr或sfr16进行声明。 七.位类型 隐式转换的优先级: bitcharintlongfloat signedunsigned
功能函数
3.函数由“函数定义”和“函数体” 组成。
(1)函数定义包括函数类型、函数名、形式参数说明等。 函数名后面必须跟一个圆括号(),形式参数在()内定义。
(2)函数体,由一对花括号“{ }”组成。 包括:声明语句和执行语句。 仅有一对“{ }”,其中内部既没有声明语句,也没有执行语句。这种函数 称为空函数。 (3)每条语句后面必须以分号“;”作为结束符。 大小写字母有区别。 用“/*………*/”或“//” 作注释。 (4)输入和输出是通过输入输出函数scanf()和printf()来实现的。
四.存储器类型 存储器类型是用于指明变量所处的单片机的存储器区域情况。
存储器类型 data bdata idata
描 述 直接寻址的片内RAM低128B,访问速度快 片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问 间接寻址访问的片内RAM,允许访问全部片内RAM
pdata
xdata code
4.3.2 变量 可以改变的量:变量名和变量值。 使用前必须定义:数据类型和存储模式。 格式: [存储种类] 数据类型说明符 [存储器类型] 变量名1[=初值],变量名2[=初 值]…; 一.数据类型说明符 必须通过数据类型说明符指明变量的数据类型,指明变量在存储器中占用的 字节数。 用typedef起别名,格式如下: typedef c51固有的数据类型说明符 别名; 定义别名后,就可以用别名代替数据类型说明符对变量进行定义。别名 可以用大写,也可以用小写,为了区别一般用大写字母表示。 【例4-1】 typedef的使用。 typedef unsigned int WORD; typedef unsigned char BYTE; BYTE a1=0x12; WORD a2=0x1234;
sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; “reg51.h”或“reg52.h”的头文件:使用预处理命令#include reg52.h>。
#ifndef __REG51_H__ #define __REG51_H__ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99;
长度 1字节 1字节 2字节 2字节 4字节 4字节
取值范围 0~255 -128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647
float
bit Sbit sfr sfr16
4字节
1位 1位 1字节 2字节
1.175494E38~3.402823E+38
0或1 0或1 0~255 0~65535
4.3.1 常量
4.Байду номын сангаас 51的运算量
常量是指在程序执行过程中其值不能改变的量。 整型常量、浮点型常量、字符型常量和字符串型常量。 一.整型常量 十进制整数。如234、-56、0等。 十六进制整数。以0x开头表示,如0x12表示十六进制数12H。 长整数。在存储器中占四个字节。 一个整数后面加一个字母L,长整型。 如123L在存储器中占四个字节。 二.浮点型常量 三.字符型常量 用单引号引起的字符,如‘a‟、‘1‟、‘F‟等。 ASCII字符或不可显示的控制字符。 不可显示的控制字符须在前面加上反斜杠“\”组成转义字符。
bit型和sbit型。 占一个二进制位,其值可以是“1”或“0”。 强制类型转换符“()” 。 bit不同的时候位地址是可变。 sbit对应的位地址是不可变。
基本数据类型 unsigned char signed char unsigned int signed int unsigned long signed long
【例4-5】sbit型变量的定义。 sbit OV=0xd2; sbit CY=oxd7; unsigned char bdata flag; sbit flag0=flag^0; sfr P1=0x90; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2;