单片机应用技术(C语言版)第4篇C51程序设计入门
单片机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型数据。
第四章 单片机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
指针
当定义一个指针变量时,若未指定它所指向的 对象的存储类型,则该指针变量被认为是一般 指针; 指定了它所指对象的存储类型,则该指针被认 为是基于存储器的指针。
教学课件PPT 89C51单片机的C51程序设计

程序存储器(64K字节)
对应MOVC @DPTR访问
可位寻址片内数据存储器(16字节,128位) 允许位和字节混合访问
间接寻址片内数据存储器(256字节)
可访问片内全部RAM空间
分页寻址片外数据存储器(256字节)
对应MOVX @R0访问
4.2 C51程序设计基础
C51存储类型定义举例:
unsigned char data x,y,z; /*在内部RAM区定义了3个无符号字节型变量x,y,z*/
40M/80M/100M,而且还有很多是单周期的。
4.2 C51程序设计基础
4.2.1 C51变量/常量存储类型
C51存储类型 对应89C51单片机存储器空间
data
直接寻址片内数据存储器(128字节)
xdata
片外数据存储器(64K字节)
说明 访问速度快 对应MOVX @DPTR访问
code bdata idata pdata
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4
switch/case
5
while
6
do-while
7
for
8
函数
含义 赋值语句 条件语句 条件运算符 多分支语句 循环语句 循环语句 循环语句 模块化程序设计
4.2 C51程序设计基础
表4-6 常用语句
序号 语句
1
=
2
if
3
表达式1 ? 表达式2 : 表达式3
4.3 C51程序举例
例4:把外部数据RAM中从地址2000H单元开始的100个有符号 数逐一取出,若为正数则放回原单元,若为负数则求补后放回。
单片机应用技术(C语言版)(第4版)

2019年1月,《单片机应用技术(C语言版)(第4版)》由电子工业出版社出版发行。
内容简介
该书共8个项目,项目1包括Keil C51软件的使用与一个LED发光二极管的闪烁控制两个任务,项目2介绍了单 片机控制蜂鸣器发声、模拟汽车左右转向灯控制与仿真调试发光二极管闪烁控制系统这三个任务,项目3分别为流 水灯、按键控制多种花样霓虹灯、声光报警器和基于PWM的可调光台灯的设计四个任务,项目4涵盖了8路抢答器 设计、小型LED数码管字符显示屏控制、LED点阵式电子广告牌控制、字符型LCD液晶显示广告牌控制、密码锁设 计五个任务,项目5为简易秒表及模拟交通灯控制系统的设计两个任务,项目6讲述了银行动态密码获取系统、移 动终端数据上传系统、串口控制数码管显示系统的设计三个任务,项目7安排了简易数字电压表设计及基于A/D和 D/A转换芯片的可调光台灯设计两个任务,项目8设置了数字钟的设计与制作、图形液晶显示系统设计、单片机温 度检测记录系统设计、家居照明蓝牙控制系统的设计、WIFI遥控小车设计五个任务。
获得荣誉
《C51单片机程序设计》教学大纲

《C51单片机程序设计》课程教学大纲课程编码:AL042330课程性质:专业选修课适用专业:电气工程及其自动化、自动化学时学分:32学时2学分(其中讲课16学时,实验16学时)所需先修课:大学物理、电路原理、模拟电子技术、数字电子技术、计算机语言(C)、单片机原理及应用一、课程说明1.课程简介本课程是电气工程及其自动化专业和自动化的一门任意选修课,主要讲授如何利用C51进行编程设计,主要针对基于51单片机的测控系统的硬件软件设计与开发技术进行深入学习。
学习液晶显示、串口通信、1-wire、SPI、I2C等常用接口模块在单片机测控系统的扩展技术。
本课程以大学物理、电路原理、模拟电子技术、数字电子技术、计算机语言(C)、单片机原理及应用等课程为先修基础课,主要为后期的计算机控制系统、单片机原理及应用课程设计、单片机原理及应用课程实习、毕业设计等课程打下坚实的基础。
对于单片机原理及应用学时偏少的情况,可在本门课程中将串行口通信,串行接口的扩展与应用作为重点内容进行教学。
本课程以MCS-51单片机为典型机讲述。
2.教学目标要求本课程主要采用项目教学法,以工程实训的形式使学生掌握MCS-51单片机应用系统的硬、软件开发方法。
课程开设的目的主要是让学生掌握利用高级语言C51进行单片机测控系统的程序设计与开发技术,能熟练运用于实践设计。
结合专业能利用C51高级语言进行单片机应用系统软件硬件开发开发设计。
3.教学重点难点1)掌握C51高级语言编程技巧;2)掌握通用型液晶与单片机的接口,典型应用;3)掌握51单片机串行口的基本概念,常用的一对一,一对多的串行通信,从而学习通信网络的基本知识;4)熟练各种串行总线标准,常用接口芯片的功能及操作时序。
包括单总线18B20,I2C总线AT24C04,SPI总线等;5)掌握利用C51高级语言进行单片机应用系统的开发环境和开发流程。
4.学时分配表本课程的课内教学学时为32学时,其中课堂理论16学时,实验16学时。
单片机原理与应用及c51程序设计答案

单片机原理与应用及c51程序设计答案【篇一:单片机原理与c51语言程序设计与基础教程_课后习题答案】p> 习题填空题1.一般而言,微型计算机包括、四个基本组成部分。
2.单片机是一块芯片上的微型计算机。
以地应用范畴。
3.atmel 公司生产的cmos型51系列单片机,具有代替rom作为程序存储器,4.单片机根据工作温度可分为、和三种。
民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。
5.在单片机领域内,ice的含义是。
选择题1.单片机的工作电压一般为v?a 5vb 3vc 1vd 4v2.单片机作为微机的一种,它具有如下特点:a 具有优异的性能价格比b 集成度高、体积小、可靠性高c 控制功能强,开发应用方便d 低电压、低功耗。
3.民用级单片机的温度范围是:a -40℃~85℃b 0℃一70℃c -55℃-125℃d 0℃一50℃4.mcs-51系列单片机最多有a 3b 4c 5d 65.下列简写名称中不是单片机或单片机系统的是a mcub scmc iced cpu问答题1.单片机常用的应用领域有哪些?2.我们如何学习单片机这么技术?3.单片机从用途上可分成哪几类?分别由什么用处?填空题1.运算器、控制器、存储器、输入输出接口2.单片机嵌入式系统3. mcs-51flash rom4.民用级(商业级)工业级军用级5.在线仿真器选择题1、a2、abcd3、b 4、c5、d问答题1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:(1)在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
单片机C51语言及程序设计

单片机C51语言及程序设计单片机是一种微型计算机芯片,通常用于控制和执行各种电子设备中的任务。
单片机C51语言是一种基于C语言的编程语言,它在单片机开发中被广泛应用。
本文将对单片机C51语言及程序设计进行介绍。
一、单片机C51语言简介单片机C51语言是一种基于C语言的嵌入式编程语言,它是Intel公司为其8051系列单片机提供的编程语言。
C51语言与C语言的语法相似,但是在一些底层操作和特殊功能上有所区别。
使用C51语言编写的程序可以在8051系列单片机上直接运行,实现各种控制和功能。
C51语言的特点包括高效的编译器、丰富的库函数、快速的速度和较小的存储空间占用。
它可以利用C语言的各种高级特性进行程序设计,同时也支持直接对单片机的硬件进行底层操作。
二、单片机C51语言程序编写1.编译与烧录环境2.基本语法和数据类型C51语言的基本语法与C语言相似。
它支持各种数据类型,包括整数、浮点数、字符等。
同时,C51语言还定义了一些特殊的数据类型和关键字,如sfr(特殊功能寄存器)、xdata(扩展数据存储器)等。
3.控制语句和函数C51语言支持各种控制语句和函数,如条件语句(if-else、switch-case)、循环语句(for、while)、函数定义等。
通过这些语句和函数,我们可以实现复杂的控制逻辑和算法。
4.寄存器和端口操作单片机的核心是CPU和各种寄存器。
C51语言提供了一些特殊的语法和关键字,可以直接访问和操作寄存器。
通过这些操作,我们可以实现对单片机硬件的底层控制。
例如,下面的代码演示了如何使用C51语言对LED灯进行控制:sfr P0 = 0x80; // 特殊功能寄存器,用于控制P0口#define LED_PIN P0_0 // 使用宏定义定义LED的引脚void maiLED_PIN=0;//将LED引脚电平设为低电平while(1)LED_PIN=1;//将LED引脚电平设为高电平delay(1000); // 延时1秒LED_PIN=0;//将LED引脚电平设为低电平delay(1000); // 延时1秒}在上面的代码中,我们通过特殊功能寄存器P0和宏定义LED_PIN,定义了与LED相关的引脚和寄存器。
c51程序课程设计

c51程序课程设计一、课程目标知识目标:1. 掌握C51编程语言的基本语法和结构;2. 理解并掌握C51的寄存器、内存管理及位操作等特性;3. 学会使用C51编写简单的嵌入式程序,实现基础功能;4. 了解C51程序与硬件之间的交互及接口技术。
技能目标:1. 能够运用C51编程语言设计简单的嵌入式系统程序;2. 培养学生分析问题、解决问题的能力,能够针对实际问题进行程序设计和调试;3. 学会使用C51的开发工具和调试方法,提高实际操作能力。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,激发创新意识;2. 培养学生严谨、细致的编程习惯,增强团队协作意识;3. 引导学生认识到编程对于国家科技发展的重要性,树立社会责任感。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合。
课程目标旨在使学生掌握C51程序设计的基本知识和技能,培养学生解决实际问题的能力,同时提高学生的情感态度价值观,为我国嵌入式领域培养优秀人才。
通过对课程目标的分解,教师可进行针对性的教学设计和评估,确保学生达到预期学习成果。
二、教学内容1. C51编程语言基础:- 数据类型、变量、常量- 运算符、表达式和语句- 控制结构(顺序、选择、循环)- 函数的定义和调用2. C51特殊功能及寄存器:- SFR寄存器及其操作- 位操作及位带操作- 中断处理与定时器3. C51内存管理:- 内部RAM和外部RAM的使用- 程序存储器操作- 数据存储器操作4. C51程序设计与实践:- 简单I/O口编程- 系统时钟与串行通信- ADC和DAC编程- 综合项目设计实例5. 课程实践与调试:- 使用开发工具(如Keil uVision)- 程序编译、下载和调试- 常见错误分析和解决方法教学内容按照教学大纲安排,结合教材相关章节,循序渐进地展开。
确保学生在掌握基础知识的同时,能够逐步深入到实际应用。
通过理论与实践相结合的教学内容,使学生在完成本课程学习后,具备基本的C51程序设计能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/12/27
19
4、 bit型位变量的定义
常说的位变量指的就是bit型位变量。 C51的bit型位变量定义的一般格式为: [存储类型] bit 位变量名1[=初值] [,位变量名2[=初值]] [,…] bit位变量被保存在RAM中的位寻址区 域 例如: bit flag_run=0; static bit send_bit;
2、 16位特殊功能寄存器的定义
定义的一般格式为: sfr16 特殊功能寄存器名=地址常数 地址常数范围:0x80~0xff。 例如(见reg51.h、reg52.h等文件): sfr16 DPTR=0x82; sfr16 T2=0xcc; TH2
2018/12/27
//含TL2和
13
几点说明: 1)定义特殊功能寄存器中的地址必须 在0x80~0xff范围内。 2)定义特殊功能寄存器,必须放在函 数外面作为全局变量。 3)用sfr或sfr16每次只能定义一个特 殊功能寄存器。 4)用sfr或sfr16定义的是绝对定位的 变量(因为名字是与确定地址对应的), 具有特定的意义,在应用时不能像一般变 量那样随便使用。
34
4)定义存储在bdata区域的动态unsigned char变量: unsigned char bdata operate, operate1;
5)定义存储在idata区域的动态unsigned char数组: unsigned char idata temp[20]; 6)定义在pdata区域的动态有符号int数组: int pdata send_data[30];
2018/12/27 29
#include<stdio.h> void main() { int max(int,int);//对被调函数的声明 int A=13,B=3;定义外部变量 printf(“%d\n”,max(A,B)); } int max(int x,int y)//定义子函数 { int z; z=x>y?x:y; return(z); }
data 片内RAM,直接寻址,低128字节 bdata 片内RAM,位寻址区0x20~0x2f,可字节访 问 idata 片内RAM,间接寻址,256字节,与 @Ri 对 应 片外RAM,低256字节,与MOVX @Ri 对应 pdata xdata 片外RAM,64KB全空间 code ROM空间,64KB全空间
[存储类型] [存储区域] 数据类型 变量名1[=初值] [,变量名2[=初值]] [,…] static unsigned char data i=0;
2018/12/27
24
2、 C51变量的存储类型
按照ANSI C,C语言的变量有4种存储类 型: (P71) 动态存储(auto) 静态存储(static) 全局存储(extern) 寄存器存储(register)
2018/12/27
35
7)定义存储在xdata区域的动态unsigned int数组: unsigned int xdata receiv_buf[50]; 8)定义存储在code区域的unsigned char 数组: unsigned char code a[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //定义共阴极数码管段码数组
2
本章内容完全是结合单片机来讲解,也就 是补充C语言在单片机方面的概念、数据定 义和函数定义等。 通过本章学习,使读者能够比较顺利地 编写C51程序。
2018/12/27
3
“C51”概念:把“单片机C语言”称 为“C51”,也称为“Keil C”。
用C51编写单片机程序,与用ANSI C 编写程序的不同之处是,需要根据单片 机存储器结构及内部资源,定义相应的 数据类型和变量。 其它的语法规定、程序结构及程序 设计方法,都与ANSI C相同。
2018/12/27
30
(4)寄存器变量
寄存器(存储)变量:用register定义的 变量为寄存器变量。 寄存器变量存放在CPU的寄存器中,这 种变量处理速度快,但数目少。 C51中的寄存器变量: C51的编译器在 编译时,能够自动识别程序中使用频率高的 变量,并将其安排为寄存器变量,用户不用 专门声明,对C51无实际意义。
无符号长整型 unsigned long
有符号长整型 signed long 4字节 -2147483648~ 2147483647 浮点型 float 4字节 ±1.1755E-38~ ±3.40E+38 特殊功能寄 sfr 1字节 0~255 2018/12/27 存器型 sfr16 2字节 0~65535
d、几点说明
1)用sbit定义的位变量,必须能够按位 操作,而不能够对无位操作功能的位定义位 变量。 2)用sbit定义位变量,必须放在函数外 面作为全局位变量,而不能在函数内部定义。 3)用sbit每次只能定义一个位变量。 4)用sbit定义的是一种绝对定位的位变 量(因为名字是与确定位地址对应的),具 有特定的意义,不能随便使用。
2018/12/27 33
4、 C51变量定义举例
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变量: 2018/12/27 static unsigned int data d;
2018/12/27 14
3、 sbit型位变量的定义
特殊功能寄存器的位声明 一般格式为: sbit 位变量名 = 位地址表达式 这里的位地址表达式有三种形式: 直接位地址 特殊功能寄存器名带位号 字节地址带位号
2018/12/27
15
a、用直接位地址定义位变量
定义特殊功能寄存器的位。例如: sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定义PSW的第3 位 sbit ET0=0xa9; //定义IE的第1位
2018/12/27
6
3、 C51扩展的关键字
由于单片机在结构及编程上的特殊要求,C51 有自己的特殊关键字,称之为C51扩展的关键字, 下面给出常用的C51扩展的关键字。 _at_ bdata bit code data idata interrupt pdata reentrant sbit sfr sfr16 xdata 这些关键字在后面会陆续接触到,此处先不给 出它们的含义。
10
补充: C51特殊功能寄存器与位变量 的定义(P82)
主要内容
1、 2、 3、 4、 8位特殊功能寄存器的定义 16位特殊功能寄存器的定义 sbit型位变量的定义 bit型位变量的定义
2018/12/27
11
1、 8位特殊功能寄存器的定义
定义的一般格式为: sfr 特殊功能寄存器名 = 地址常数 地址常数范围:0x80~0xff。 特殊功能寄存器定义例子(见reg51.h、 reg52.h等文件): sfr P0=0x80; //定义P0寄 存器 sfr P1=0x90; //定义P1口 寄存器 2018/12/27 12 sfr PSW=0xd0; //定义PSW
2018/12/27 20
数据类型转换(p56)
1)自动转换 把赋值号右边的类型转换成左边的类型。 A: 实型赋予整型 B: 整型赋予实型 C: 字符型赋予整型 D: 整型赋予字符型
2018/12/27
21
2)强制转换 像ANSI C一样,通过强制类型转换 的方式进行转换。如: unsigned int b; float c; b=(int)c;
2018/12/27
25
(1)动态变量
动态(存储)变量:用auto定义的为动 态变量,也叫自动变量。 作用范围:在定义它的函数内或复合语 句内部。执行时,分配存储空间,结束时释 放存储空间。 定义变量时,auto可以省略
2018/12/27
26
(2)静态变量
静态(存储)变量:用static定义的为静 态变量。函数退出时,变量的值不消失。分 为静态局部和静态全局变量。 静态局部变量:在函数体内定义 静态全局变量:在函数体外部定义
2018/12/27 31
3、 C51变量的存储区域(P57)
变量的存储区属性是单片机扩展的概念, 非常重要,它涉及到6个新的关键字。 MCS-51单片机有四个存储空间,分成 三类,它们是片内RAM、片外RAM和 ROM。
2018/12/27
32
表4.2 C51存储区与存储空间的对应关系
关键字
对应的存储空间及范围
2018/12/27
22
4.2 C51变量存储区域
1、 C51变量的定义 2、 C51变量的存储类型 3、 C51变量的存储区域 4、 C51变量定义举例 5、 C51变量的存储模式
2018/12/27
23
1、 C51变量的定义
C51变量定义的一般格式为: [存储类型] 数据类型 [存储区域] 变量名1[=初值] [,变量名2[=初值]] [,…] 或
2018/12/27
16
b、特殊功能寄存器名带位号定义
定义格式为: sbit 位变量名 = 特殊功能寄存器名^ 位号常数 这里的位号常数为0~7。例如: sbit P0_3=P0^3; sbit P1_4=P1^4; sbit OV=PSW^2; //定义PSW的第2 位 sbit ES=IE^4; //定义IE的第4位
2018/12/27
9
表4-1 C51数据类型、长度和数值范围