第1章 C51程序设计基础

合集下载

C51语言入门

C51语言入门

MCS-51单片机--C51基础陈茜茹Email:vickychenqian@ Email:vickychenqian@163com¾C51与标准C¾C51的数据类型和运算量¾C51的运算符¾程序结构¾函数¾其它数据类型•C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言了多种高级语言的特点并具备汇编语言的功能针对的语言日趋成熟成为的功能。

针对8051C语言日趋成熟,成为了专业化的实用高级语言。

很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等。

(1)C51中定义的库函数和标准C语言定义的库函数不同。

标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机相应情况来定义的;(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS51单片机特有的数据类型;MCS-51(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器紧密相关;MCS51)与标准的输入输出处理不一样,中的输入输出是(4C51C C51通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。

基本数据类型类型符号关键字数的表示范围所占位数(signed)int 3276832767有(signed) int 16-32768~32767(signed) short 16-32768~32767(i d)l 3221474836482147483647整型(signed) long -2147483648~214748364716unsigned int 0~65535065535无320~4294967295unsigned long int unsigned short int 160~65535fl t 34383438实型有float 32 3.4e-38~3.4e38有double 64 1.7e-308~1.7e308h128127字符型有char 8-128~127无unsigned char80~255¾长度根据其所指向的变量有所变化,1~3字节¾存放的是另外一个数据的地址g¾定义方法:unsigned int *da;sfr:特殊功能寄存器定义sfr16:sfr的16位数据定义sbit:可位寻址字节或sfr中位的定义bit:位变量定义例:sfr SCON = 0X98;sfr16 T2 = 0xCC;sbit OV = PSW^2;sbit OV=PSW^2;定义变量例:数据类型变量名unsigned int var1; unsigned intbit flags;unsigned char vector[10];用typedef或#define定义数据类型别名例1:typedef unsigned int uint;typedef unsigned int uint;uint var;uint var;例2:#define uchar unsigned char;uchar temp;说明变量所处单片机的存储区域名存储空间位置长度数据范围data直接寻址片内RAM低128B8位0~255 data 直接寻址片内RAM低128B 8位0~255bdata 可位寻址片内RAM(20-2FH) 1位0/1idata 间接寻址片全部内RAM 8位0~255pdata片外RAM低256B8位pdata 片外RAM低256B 8位0~255xdata片外RAM全部64K16位0~65535 xdata 片外RAM全部64K 16位code 程序ROM64K 16位0~65535定义变量例:数据类型[存储类型]变量名unsigned int data var1; unsigned intbit bdata flags;unsigned char code vector[10];不同的存储模式对变量默认的存储器类型不一样1.SMALL模式:小编译模式。

C51单片机的基础知识

C51单片机的基础知识
4、灵活性:系统应支持多种广播方式,如定时广播、实时广播、点播等, 以满足不同场景的需求。
5、可扩展性:系统应具备良好的扩展性,方便未来进行设备升级或扩容。
三、系统设计方案
1、硬件设备:包括服务器、网络交换机、音源设备、功放设备、扬声器等。 服务器应采用高性能、稳定的品牌服务器,以保证系统的稳定性和可靠性。网络 交换机应选择支持大带宽、低延时的产品,以保证广播信号的传输质量。音源设 备可选用数字音
首先应该从其内部结构及各部件关系入手,清楚其内部资源及怎样使用,然 后通过自己动手制作实践来加深印象,之后通过学习语言来掌握编程方法及技巧。 切记不要一开始就试图记忆太多的内容,这样只会增加你的负担,要知道“贪多 嚼不烂”。
先搞懂最基本的原理后再试着看懂其它扩展资料就会容易多了。之后要付诸 实践进行调试练习。在理解的基础上进行记忆,切勿死记硬背。
二、中断结构
C51单片机的中断系统主要包括以下几个部分:
1、中断源:C51单片机支持多个中断源,包括定时器/计数器,串行通信口, 外部中断等。每个中断源都有相应的中断标志,用于指示该中断源是否产生了中 断。
2、中断控制器:中断控制器是中断系统的核心部件,它负责管理各个中断 源的中断请求,根据优先级判断并处理。
二、系统需求分析
1、稳定性:系统应具备高度的稳定性,能够保证长时间的连续运行,避免 因设备故障或网络问题导致的广播中断。
2、可靠性:系统应具备可靠的备份机制,确保在主设备出现问题时,备份 设备能够迅速接管,保证广播的连续性。
3、易用性:系统应具备良好的用户界面,操作简单易懂,方便管理员进行 配置和管理。
五、C51与8051的区别
C51单片机是指一系列基于8051内核的单片机,各个生产厂商根据需要都会 在其基础上增加一些功能,但这与8051内核是相同的。所以很多人都习惯称其为 8051单片机。现在流行的很多开发板都是基于8051内核的。

教学课件PPT 89C51单片机的C51程序设计

教学课件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语言(模块一)

单片机C语言(模块一)

《单片机原理及应用(二)》模块一C51程序设计基础任务1:实例导航第二章C与80512.1 8051的编程语言1、8051的编程语言(四种):(1)BASIC语言(2)PL/M√(3)汇编语言√(4)C语言目前,汇编语言和C语言是广泛使用的两种单片机编程语言。

在未来的一段时间内,汇编语言和C语言还将同时存在,但从发展趋势看,C语言有逐渐取代汇编语言的可能。

最好的单片机编程者应是具有汇编语言基础,又精通C语言的。

2、C语言的优点(与汇编语言相比):(P41)(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有所了解(2)寄存器的分配、不同存储器的寻址及数据类型等细节由编译器管理(3)程序有规范的结构,由不同的函数组成,这种方式可使程序结构化(4)编程及程序调试时间显著缩短,从而提高效率(5)提供库函数,具有较强的数据处理能力3、8051单片机C语言(单片机C51语言)了解一下单片机的种类:(查资料)2.2 Cx51编译器编译:C语言源程序转换成机器语言目标程序的过程,叫做编译。

编译器:能自动完成编译过程的一种计算机软件。

(1)C语言编译器(标准C)(2)C51编译器(经典8051单片机)(3)C x51编译器(经典8051单片机及派生产品)Cx51编译器完全遵照ANSI C语言标准,支持C语言的所有标准特征。

另外,还增加了可以直接支持8051结构的特征。

典型产品:KILE套装工具软件----------uVision2 集成开发环境的使用(P 302)例2-1:用uVision2软件编译调试一个C51程序(HELLO.C)基本步骤:(1)创建一个新项目(建在一个新文件夹下)并为项目选择一个CPU(此时会自动加入启动文件)(2)创建新程序文件(或打开旧程序文件)此例中,打开c:\kile\c51\examples\hello(3)将源文件添加到项目中此时还可修改工具选项(4)编译和链接项目(Build Target命令):翻译和链接源文件,并生成一个可以载入到uvision2调试器进行调试的绝对目标模块。

单片机技术及C51程序设计教学设计

单片机技术及C51程序设计教学设计

单片机技术及C51程序设计教学设计一、前言单片机技术是现代电子技术领域的重要分支,广泛应用于各种电子设备和系统中。

本文旨在介绍单片机技术相关知识,并以C51为例探讨如何进行C51程序设计教学设计。

二、单片机技术概述单片机技术是指将CPU、ROM、RAM、I/O口和各种外设集成在一块芯片内,形成一种具有特定功能的微型计算机系统。

单片机技术的主要特点包括:1.模块化结构:各个功能模块紧密集成,简化了系统结构设计,提高了系统可靠性和稳定性。

2.体积小、功耗低:单片机本身结构简化,芯片体积小,功耗低,适用于电池供电系统。

3.可编程:单片机的芯片内集成了程序存储器(ROM)、数据存储器(RAM)和计时器等,可以通过程序的编程完成各种功能应用。

4.价格低廉:随着技术的进步和生产规模的扩大,单片机价格不断下降,已经成为现代电子产品的必备芯片之一。

单片机应用领域非常广泛,比如工控系统、医疗设备、家用电器、汽车电子、玩具等。

由于单片机技术比较复杂,因此需要深入学习。

三、基于C51的程序设计教学设计C51是一种基于8位单片机的嵌入式系统开发语言,它是一种高级汇编语言,提高了程序设计效率和可读性,支持结构化程序设计,适合于掌握控制流程和程序结构的初学者。

下面是基于C51的程序设计教学设计:1.设计目标本教学设计旨在帮助学生掌握C51程序设计语言,了解单片机内部结构和工作原理,从而熟悉单片机应用开发过程,提高实践能力和创新思维能力。

2.教学内容本教学设计的基本内容包括:1.单片机基础知识:单片机工作原理、单片机体系结构、单片机芯片类型、单片机系统开发环境和开发工具等。

2.C51程序设计语言:C51汇编语言的基本语法、关键字、标识符、数据类型和变量定义等。

3.C51程序设计实践:C51程序设计实例,包括流程控制、IO口控制、定时器控制、串口通信和EEPROM存储等。

3.教学方法本教学设计采用“理论讲解+实验实践”的教学方法,同时注重发挥学生的主观能动性,在理论讲解的同时引导学生亲自完成实验操作和程序设计。

单片机c51介绍

单片机c51介绍

3.2 单片机的C51程序设计3.2.1 C51基础知识C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。

用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。

而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。

一、C51的特点C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等。

C语言程序本身不依赖于机器硬件系统,基本上不作修改或仅做简单修改就可将程序从不同的单片机中移植过来直接使用。

C语言提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。

二. 单片机的C51与汇编ASM—51相比,有如下优点:(1)对单片机的指令系统不要求了解,仅要求对8051的存储器结构有初步了解;(2)寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;(3)程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;(4)提供的库包含许多标准子程序,具有较强的数据处理能力;(5)由于具有方便的模块化编程技术,使已编好程序容易移植;3.2.2 C51的基本数据类型当给单片机编程时,单片机也要运算,而在单片机的运算中,这个“变量”数据的大小是有限制的,不能随意给一个变量赋任意的值,因为变量在单片机的内存中是要占据空间的,变量大小不同,所占据的空间就不同。

所以在设定一个变量之前,必须要给编译器声明这个变量的类型,以便让编译3.2.3 C51的基本运算C语言的运算符分以下几种:1、算术运算符顾名思义,算术运算符就是执行算术运算的操作符号。

除了一般人所熟悉的程序范例:main(){int A,B,C,D,E,x,y;x=8;y=3;A=x+y;B=x-y;C=x*y;D=x/y;E=x%y;}程序结果A=11、B=5、C=24、D=2、E=22、关系运算符程序范例:main(){Int A,B,C,D,E,F,x,y;x=9;y=4;A=(x==y);B=(x!=y);C=(x>y);D=(x<y);E=(x>=y);F=(x<=y);}程序结果:A=0、B=1、C=1、D=0、E=1、F=0 3、逻辑运算符程序范例:main(){int A,B,C,x,y,z;x=9;y=8;z=10;A=(x>y)&&(y<z);B=(x==y)||(y<=z);C=!(x>z);}程序结果:A=0、B=1、C=14、位运算符位运算符与逻辑运算符非常相似,它们之间的差异在于位运算符针对变量中的每一位,逻辑运算符则程序范例:main(){char A,B,C,D,E,F,x,y;x=0x25;/*即0010 0101*/y=0x62; /*即0110 0010*/A=x&y;B=x|y;C=x^y;D=x~E=x<<3;F=x>>2}程序结果:0010 0101x: 0010 0101 x: 0010 0101 x: 0010 0101 x:~y: &0110 0010 y: |0110 0010 y: ^0110 0010 1101 1010 0010 0000 0110 0111 0100 0111即A=0x20 即B=0x67 即C=0x47 即D=0xda将x的值左移三位的结果为:0 0 1 0 0 1 0 10 0 1 0 0 1 0 1 0 0 0移出的三位“001”丢失,后面三位用0填充,因此运算后的结果是00101000B,即E=0x28。

C51基本语法

C51基本语法

最新课件
8
1.2.2 变量 1.2.2.1变量类型 在程序运行中,其值可以改变的量称为变量
一个变量主要由两部分构成:一个是变量名, 一个是变量值。
每个变量都有一个变量名,在内存中占据一 定的存储单元(地址),并在该内存单元中存 放该变量的值。
最新课件
9
C51支持的变量通常有如下类型:
1. 位变量(bit)——位变量的值可以是1(true)或0(false)。与 805l硬件特性操作有关的位变量必须定位在8051CPU片内 存储区(RAM)的可位寻址空间中。
LARGE
参数及局部变量直接放入片外RAM(默认的存储类型是XDATA, 最大64KB);使用数据指针DPTR间接寻址。因此访问效率较低 且直接影响代码长度.
最新课件
16
1.2. 3 8051片内资源及位变量
1.2.3.1 特殊功能寄存器的C51定义
8051单片机的内部高128个字节为专用寄 存器区,其中51子系列有21个(52子系列 有26个)特殊功能寄存器(SFR),它们 离散的分布在这个区中,分别用于CPU并 行口、串行口、中断系统、定时/计数器等 功能单元及控制和状态寄存器。
2.浮点型常量。分为十进制和指数表示形式。十进制由数字 和小数点组成,如0.888,3345.345,0.0等,整数或小数部 分为0时可以省略0但必须有小数点。指数表示形式为: [±]数字[.数字]e[±]数字 [ ]中的内容为可选项,其中内容根据具体情况可有可无, 但其余部分必须有,如123e3,5e6,-1.0e-3。而e3,5e4.0则是 非法的表示形式。
4. 浮点型变量(float)——浮点型变量占4个字节(byte),许多 复杂的数学表达式都采用浮点变量数据类型。它用符号位 表示数的符号,用阶码和尾数表示数的大小。用它们进行 任何数学运算都需要使用由编译器决定的各种不同效率等 级的库函数。(补充存储格式)

单片机C51语言及程序设计

单片机C51语言及程序设计
1)将SFR的绝对位地址定义为位变量名



C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句

C51程序设计------数组

C51程序设计------数组

while(con_key=='\x20') { printf("输入第%2d个学生的成绩\n", i++); printf("平时 实习 测验 期末成绩\n"); score[4]=0; /* score[4]:存储总评成绩*/\ for(j=0; j<4; j++) {scanf("%f",&score[j]); score[4] += score[j] * ratio[j]; } printf("总评成绩为:%6.1f\n", score[4]); getchar(); } }
for(j=0;j<NUM_course;j++) score[NUM_std][j] /= NUM_std; /*求第j门课的平均成绩*/ /*输出表头*/ printf("学生编号 课程1 课程2 课程3 课程4 个人平均\n"); /*输出每个学生的各科成绩和平均成绩*/ for(i=0;i<NUM_std;i++) { printf("学生%d\t",i+1); for(j=0;j<NUM_course+1;j++) printf("%6.1f\t",score[i][j]); printf("\n"); } /*输出1条短划线*/ for(j=0;j<8*(NUM_course+2);j++) printf("-"); printf("\n课程平均"); /*输出每门课程的平均成绩*/ for(j=0;j<NUM_course;j++) printf("%6.1f\t",score[NUM_std][j]); printf("\n"); }

51系列单片机教程(共15章)_第1章

51系列单片机教程(共15章)_第1章

• 嵌入式控制器 EMCU(Embedded icroController
Unit)。 我国,习惯使用“单片机”这一名称。 按用途可分为通用型和专用型两大类:
(1)通用型
可开发的内部资源:RAM、ROM、I/O等功能部件, 全部提供给用户。用户根据需要,设计一个以通用单 片机芯片为核心的测控系统。
(2)专用型
(1)基本型
典型产品:8031/8051/8751 (2)增强型
典型产品:8032/8052/8752 内部RAM增到256字节,8052、8752的内部程序存储器 扩展到8KB,16位定时器/计数器增至3个。 (3)低功耗型 典型产品:80C31/87C51/80C51。采用CMOS工艺
适于电池供电或其它要求低功耗的场合。
思考题及习题
1.微处理器、微计算机、微处理机、CPU、单片机 它们之间有何区别? 2.除了单片机这一名称之外,单片机还可称为 ( )和( )。
3.单片机与普通计算机的不同之处在于其将( )、 ( )、和( )三部分集成于一块芯片上。
4.单片机的发展大致分为哪几个阶段?
5. 单片机根据其基本操作处理的位数可分为哪 几种类型? 6.MCS-51系列单片机的基本型芯片分别为哪几种? 它们的差别是什么? 7.MCS-51系列单片机与80C51系列单片机的异同点是 什么?
专门针对某些产品的特定用途而制作的单片机 , 针对性强且数量巨大。 对系统结构的最简化、可靠性和成本的最佳化等 方面都作了全面的考虑 。
“专用”单片机具有十分明显的综合优势。
1.2 单片机的历史及发展概况
四个阶段:
第一阶段(1974年~1976年):单片机初级阶段。双片 的形式,且功能比较简单。 第二阶段(1976年~1978年):低性能单片机阶段。 以Intel 公司制造的MCS-48单片机为代表。

c51程序课程设计

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程序设计能力。

单片机原理与C51语言程序设计与基础教程课后习题答案

单片机原理与C51语言程序设计与基础教程课后习题答案

单片机原理与C51语言程序设计与基础教程课后习题答案习题填空题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-51 Flash ROM4.民用级(商业级) 工业级军用级5.在线仿真器选择题1.A2.ABCD3.B4.C5.D问答题1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:(1)在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。

51单片机C语言程序设计-图文

51单片机C语言程序设计-图文
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) {
case 2: //东西向黄灯闪烁,绿灯关闭 DelayMS(300); YELLOW_A=~YELLOW_A;GREEN_A=1; if(++Flash_Count!=10) return; //闪烁 5 次 Flash_Count=0; Operation_Type=3; break;
case 3: //东西向红灯,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); Operation_Type=4; break;
3 Ykcsh 呈献
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; //延时 void DelayMS(uint x) {
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; while(1) { //从数组中读取数据送至 P0 和 P2 口显示
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) {

爆闪灯C51程序知识讲解

爆闪灯C51程序知识讲解

爆闪灯C5 1 程序爆闪灯一,电子1,灯闪模式,灯闪模式可调,4个输出端口蓝—红一蓝一红1 2 3 4a, 四路轮流闪烁,频率可调,每路间隔可调,可一路闪,两路闪,三路闪,四路闪可调节例如(12—34—1234)b, 四路变换工作,每路间隔可调,例如(1—2—3—4黄闪灯模式)c, 四路组合变换闪烁,每路间隔可调,例如(1 —2—3—4—12—34—1234)2,输出,电池板,蓄电池,开关的端口采用接线槽(路灯控制器那种接线端子)3,LED—种颜色的数量在45—60PCS之间,电流控制在150mA-600mA 4,电池板在15W 10W 6W5,电池在20Ah,14Ah,8Ah二,结构1,开一套LED反光杯,以提高亮度,2,电池板的方向可灵活调动3, 电池需固定好,不能左右,上下晃动4, 灯板和透明罩可采用插槽式的,以便好组装5, 控制器可以固定在灯壳里面,不能有漏水到上面6, 外壳设计成插槽拼接的,减少螺丝的使用率#in elude <reg51.h>#i nclude vintrin s.h>typedef un sig ned char uchar;typedef un sig ned int uint;sbit P1_0=P1A0;sbit P1_仁 P1A1;sbit P1_4=P1A4;sbit P1_5=P1A5;sbit P1_6=P1A6;sbit P1_7=PM7;sfr P0M0=0X94;sfr P0M仁 0X93;sfr P2M0=0X96;sfr P2M仁 0X95;sfr P1M0=0X92;sfr P1M 1=0X91;sfr IAP_DATA=0XC2;sfr IAP_ADDRH=0XC3;sfr IAP_ADDRL=0XC4;sfr IAP_CMD=0xc5;sfr IAP_TRIG=0XC6;sfr IAP_CONTR=0XC7;un sig ned char lia ng_temp=1;un sig ned char an _temp=1;un sig ned char R_to_B_temp=1;un sig ned char stop_temp=1;un sig ned char mode=1;un sig ned char time_key=0;un sig ned char time_temp=0;un sig ned char mode1_temp=0;uchar ajs,ljs;uchar rtobjs,stopjs,js3c=1;uchar rba=0;bit la=1;ksj=0;void delay20(void) // 误差-0.000000000002usun sig ned char codezhifu0[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x 7C,0x39,0x5E,0x79,0x71};un sig ned char codezhifu2[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0XFe,0Xf6,0Xee,0X 3e,0X9c,0X7a,0X9e,0X8e};〃********************************************************* {un sig ned char a,b,c; for(c=2;c>0;c--) for(b=95;b>0;b--) for(a=209;a>0;a--); }〃*********************************************************void delay500(void) // 误差0us 500ms{un sig ned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}〃*********************************************************void eeprom_erase( un sig ned char a){ _un sig ned int add=512;un sig ned int add1=0;add1=add*a;IAP_ADDRH=add1/255;IAP_ADDRL=add1%255;IAP_CONTR=0X8C;IAP_CMD=0X03;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();〃*********************************************************void eeprom_writer( un sig ned int add, un sig ned char date) { _IAP_DATA=date;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=OX8C;IAP_CMD=2;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();}//*********************************************************** un sig ned char eeprom_read( un sig ned int add) {un sig ned char date=0;IAP_ADDRH=add/255;IAP_ADDRL=add%255;IAP_CONTR=0X8C;//IAP_CMD=0X01;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();date=IAP_DATA; return(date);}//********************************************************* void show( un sig ned char a){un sig ned char shi;un sig ned char ge;un sig ned char *p;un sig ned char *p1;p=zhifu0;p仁 zhifu2;shi=a/10;shi=*(p+shi);// 得到编码值ge=a%10;ge=*(p1+ge);P0=shi;P2=ge;}〃********************************************************** void lia ng_key(){ _if(!P1_0){delay20();if(!P1_0){lia ng_temp++;if(lia ng_temp>99){lia ng_temp=1;} show(lia ng_temp); while(!P1_0){while(ksj){lia ng_temp++;delay20();if(lia ng_temp>99)lia ng_temp=1;show(lia ng_temp);}_ }}delay20();}}〃***********************************************************void an_ key(){ _if(P1_0==0){delay20();if(P1_0==0){an _temp++;if(an_temp>99){an _temp=1;}show(a n_temp);while(!P1_0){while(ksj){a n_temp++;delay20();if(a n_temp>99)a n_temp=1;show(a n_temp);}}}delay20();}}〃***********************************************************void R_to_B_key(){if(P1_0==0){delay20();if(P1_O==O){R_to_B_temp++;if(R_to_B_temp>99){R_to_B_temp=1;}show(R_to_B_temp);while(!P1_0){while(ksj){R_to_B_temp++;delay20();if(R_to_B_temp>99)R_to_B_temp=1;sh ow(R_to_B_temp);}}}delay20();}}〃***********************************************************void stop_key(){ _if(P1_0==0){delay20();if(P1_0==0){stop_temp++;if(stop_temp>99){stop_temp=1;} show(stop_temp);while(!P1_0){while(ksj){stop_temp++;delay20();if(stop_temp>99)stop_temp=1;show(stoP_temp);}}}delay20();}}〃************************************************************void show_mode( un sig ned char a){ _un sig ned char ge=0;un sig ned char *p1;p仁 zhifu2;ge=*(p1+a);// P0=0x00;P2=ge;}〃************************************************************ void set_mode(){ _if(!P1_0){delay20();TR1=1;〃开定时器if(!P1_0){show_mode(mode);} _while(time_key==0){ _if(!P1_0){delay20();if(!P1_0){mode++;if(mode>5){mode=1;time_temp=0;} _4个步骤第show_mode(mode); delay20();}}TR1=0;〃 关定时器time_key=0;time_temp=0;TH1 = 0x3C;TL1 = 0xB0;eeprom_erase(1);eeprom_writer(0,mode);P0=0;P2=0;rtobjs= R_to_B_temp;stopjs=stop_temp;ajs=a n_temp;ljs=lia ng_temp;rba=0;}}〃*********************************************************** void set_fu n()〃 设置时间的顺序是从亮,暗,红到蓝,停, 个模式{un sig ned char pan dua n=0;if(!P1_1){delay20();if(!P1_1){P0=zhifu0[15];P2=zhifu2[1];delay500();delay500();panduan=1;while(pa ndua n){lia ng_key();show(lia ng_temp);if(!P1_1){delay20();panduan=0;ljs=lia ng_temp; delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[2];delay500();delay500();while(pa ndua n){an_key();show(a n_temp);if(!P1_1){delay20();panduan=0; ajs=a n_temp;delay20();}}panduan=1;P0=zhifu0[15];P2=zhifu2[3]; delay500(); delay500();while(pa ndua n){ R_to_B_key();show(R_to_B_temp);if(!P1_1){delay20();panduan=0; rtobjs=R_to_B_temp;delay20();}panduan=1;P0=zhifu0[15];P2=zhifu2[4]; delay500(); delay500();while(pa ndua n){stop_key(); show(stop_temp); if(!P1_1) { delay20();panduan=0; stopjs=stop_temp; delay20();}}eeprom_erase(0);eeprom_writer(0,lia ng_temp); eeprom_writer(1,a n_temp);eeprom_writer(2,R_to_B_temp); eeprom_writer(3,stop_temp);P0=0X0;P2=0X0;// red=1;// blue=0;// yq=yq2=0;rtobjs = R_to_B_temp;stopjs = stop_temp;ajs = an _temp;ljs = lia ng_temp;rba=0;}}}〃***********************************************************void mode_out(bit a1,bit a2,bit a3,bit a4)//a 为停留时间,各位为输出值{P1_4=a1;P1_5=a2;P1_6=a3;P1_7=a4;}void redf un(v oid){if(js3c<4){if(la) mode_out(1,0,1,0);else mode_out(0,0,0,0);} _else{mode_out(0,0,0,0);} _}void bluef un(v oid)if(js3c<4){if(la) mode_out(0,1,0,1);else mode_out(0,0,0,0);} _else mode_out(0,0,0,0);} _void allf un(v oid){if(js3c<4){if(la) mode_out(1,1,1,1);else mode_out(0,0,0,0);}else mode_out(0,0,0,0);} _〃***********************************************************void mode1()〃模式1{〃un sig ned char a=0;switch(rba){case 0: redf un() ;break;case 1: bluef un() ;break; case 2: allf un( );break; default:break;}}void mode_work( un sig ned char a)// 参数为模式{ switch(a){case 1: mode1(); break; // 第一种模式case 2: mode1(); break; case 3: mode1(); break; case 4: mode1(); break; case 5: mode1(); break; }}/*void decipherme nt_dog()〃解密完后才能使用本控制器if((P1_O==O)&(P1_1==0)){}} */〃***********************************************************void Ini tTimerl(void){TMOD = 0x11;TH1 = 0x3C;TL1 = OxBO;EA = 1;ET1 = 1;}〃***********************************************************void In itTimerO(void){THO = Oxf2;TLO = Oxfb;ET0 = 1;TRO = 1;}〃***********************************************************mai n(){Ini tTimer1();Ini tTimerO();P0M0=0XFF;〃配成强上拉POM仁0X00;P2M0=0XFF;P2M仁0X00;P1M 仁0X00;P1M0=0XF0;P0=0;P2=0;P1_4=0;P1_5=0;P1_6=0;P1_7=0;lia ng_temp=eeprom_read(0); an _temp=eeprom_read(1);R_to_B_temp=eeprom_read(2); stop_temp=eeprom_read(3); rtobjs= R_to_B_temp; stopjs=stop_temp;ajs=a n_temp; ljs=lia ng_temp;while(1){set_fu n();set_mode(); mode_work(mode);} _}〃********************************************************** void Timer1Interrupt(void) interrupt 3 {TH1 = 0x7d;TL1 = Oxcb;time_temp++;if(time_temp>30){ _time_key=1;} _}〃************************************************************ void TimerOI nterrupt(void) in terrupt 1{// TR0=0;static uchar i=0;static uchar kj=0;TH0 = 0xf2;TL0 = 0xfb;if(js3c<4){if(la) // {Ijs--;if(ljs==0){la=0;ajs=a n_temp;}}else{ajs--;if(ajs==0){la=1;ljs=lia ng_temp;js3c++;}〃10 ms如果在亮计时// 亮计数自减// 亮的时间到// 置0亮暗计数// 还原暗计数值// 如果在暗计时// 晚计数自减// 保持暗的时间到// 点亮// 还原亮计数初值//else P1&=OxOf;if(rba==O && js3c>=3){i++;if(i>5){i=0;rtobjs--; // 红到蓝时间自减}if(rtobjs==0) // 时间到进入到蓝亮{js3c=1;rba=1;rtobjs=R_to_B_temp;}}if(rba==1 && js3c>=3){i++;if(i>5){i=0;rtobjs--;} //if(rtobjs==0){js3c=1;rba=2;stopjs=stop_temp; } _}// 红到蓝时间自减红到蓝时间自减//时间到进入到蓝亮if(rba==2 && js3c>=3){ i++;if(i>5){i=0;stopjs--; // 红到蓝时间自减}//时间到进入到蓝亮if(stopjs==0){ js3c=1;rba=0; rtobjs=R_to_B_temp;}}if(!P1_0) 〃ksj 为长按标记。

单片机原理及接口技术-C51编程-习题答案

单片机原理及接口技术-C51编程-习题答案

单片机答案第1章单片机概述思考题及习题1 参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为()或()。

答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将()、()和()三部分,通过内部()连接在一起,集成于一块芯片上。

答:CPU、存储器、I/O口、总线3. AT89S51单片机工作频率上限为()MHz。

答:24MHz。

4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低()和提高()。

答:成本,可靠性。

二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便 B.受器件的物理性能限制C.为了通用性 D.为了提高运算数度答:B2. 在家用电器中使用单片机应属于微计算机的。

A.辅助设计应用 B.测量、控制应用C.数值计算应用 D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。

A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。

对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。

对3. 单片机是一种CPU。

错4. AT89S52单片机是微处理器。

错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。

对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。

对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。

对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。

对第2章 AT89S51单片机片内硬件结构思考题及习题2 参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为()。

C51程序设计语言

C51程序设计语言

C51程序设计语言C语言是一种中级编程语言,常用于系统程序设计和应用程序编写。

C语言具有高效的执行速度、丰富的数据类型和强大的功能,是开发底层系统软件和性能敏感的应用程序的首选语言之一C语言的历史可以追溯到20世纪70年代,由贝尔实验室的Dennis Ritchie开发。

最初用于Unix操作系统的开发,后来逐渐流行起来并影响了整个计算机领域。

C语言的设计目标是提供一种简单、高效、可移植的编程语言,以便开发者能够更方便地编写系统级的软件。

C语言的语法与许多后来的编程语言相似,因此学会C语言可以为学习其他编程语言打下坚实的基础。

C语言的特点包括以下几个方面:1.高效的执行速度:C语言是一种编译型语言,其源代码会被编译为机器码,执行速度较快。

这使得C语言非常适合开发对性能要求较高的应用程序。

2.丰富的数据类型:C语言提供了丰富的数据类型,包括整型、浮点型、字符型、数组、结构体、指针等等。

这些数据类型可以满足编程中各种不同的需要。

3.强大的指针操作:C语言具有强大的指针操作能力,允许程序员直接操作内存地址。

指针在C语言中是一项非常重要的概念,它可以用于动态分配内存、访问数组元素、实现数据结构等。

4.低级的控制:C语言提供了低级的控制结构,如条件语句、循环语句和跳转语句。

这使得程序员可以更精确地控制程序的执行流程,提高程序的灵活性和效率。

5.可移植性:C语言具有很高的可移植性,可以在不同的计算机平台上编写并运行。

这是因为C语言的代码可以通过编译器将源代码转化为特定机器的机器码。

通过使用C语言,开发者可以编写各种不同类型的应用程序,如操作系统、嵌入式系统、网络应用程序、图形用户界面等。

C语言也成为了其他高级语言的基础,如C++、Java和Python等。

尽管C语言具有很多优点,但它也存在一些缺点。

首先,C语言的代码相对较长,编写起来比较繁琐。

其次,C语言的指针操作容易引发许多低级的错误,如内存泄漏、越界访问等。

C51语言编程基础

C51语言编程基础

图6 完成新建工程文件
21
KEIL C51快速入门
下面可以编写程序。 5、在图2-7中,单击“File”菜 单,再在下拉菜单中单击“New”选 项。
新建文件后屏幕如图8所示。
图7 新建文档
图8 完成 新建文档
22
KEIL C51快速入门
此时光标在编辑窗口里闪烁,这时可以键入应用程序了,建议首先保 存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As” 选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使 用的文件名,用C语言编写扩展名为(.c)如果用汇编语言编写扩展名必须 为(.asm)。然后,单击“保存”按钮。 如图8所示。
图10 添加文档
25
KEIL C51快速入门
选中main.c,然后单击“Add ”屏幕如下图所示。
图10 完成添加文档
注意到“Source Group 1”文件夹中多了一个子项“main.c”子 项的多少与所增加的源程序的多少相同。
7、现在便可输入程序了,输入完毕进行调试便可运行。
26
Proteus 快速入门
一些例程来介绍C51的程序设计思想。
1
单片机入门主要掌握以下知识和应用
最小系统能够运行起来的必要条件。 1.电源 2.晶振3.复位电路
对单片机任意IO口的随意操作
1.输出控制电平高低2.输入检测电平高低。 定时器:重点掌握最常用的方式2 中断:外部中断、定时器中断、串口中断 串口通信:单片机之间、单片机与计算机间
3
使用C语言的优点
C 语言具有结构化和模块化特点,便于阅读和维 护。
C 语言可移植性好,很多微控制器都支持C 编译 器。功能化的代码能够很方便的从一个工程移植 到另一个工程,从而减少了开发时间。 提供的库函数包含许多标准子程序,具有较强的 数据处理能力。

C51语言编程基础

C51语言编程基础
第 3章
C51语言编程基础与 Keil µVision3的使用
1
3.1 C51编程语言简介
3.1.1 C51语言与汇编语言的比较
与8051汇编语言相比, C51有如下优点。
(1)可读性好。 (2)模块化开发与资源共享。 (3)可移植性好。 (4)生成的代码效率高。
3.1.2
C51语言与标准C语言的比较
标准C语言相比增加了位类型。
3
(3)C51语言变量存储模式ቤተ መጻሕፍቲ ባይዱ标准C语言中变量存储模式数
据不一样。标准C最初是为通用计算机设计的,在通用计算机 中只有一个程序和数据统一寻址的内存空间,而C51语言中变 量的存储模式与8051单片机的各种存储器区紧密相关。 (4)数据存储类型不同。8051存储区可分为内部数据存储 区、外部数据存储区以及程序存储区。内部数据存储区可分 为3个不同的C51存储类型:data、idata和bdata。外部数据
储器,相当于用@DPTR寻址。通过数据指针访问外部数据存储
器的效率较低,特别是当变量为2字节或更多字节时,该模式 要比SMALL和COMPACT产生更多的代码。
15
3.2.2
C51语言的特殊功能寄存器及位变量定义
1.特殊功能寄存器的C51定义
C51语言允许通过使用关键字sfr、sbit或直接引用编译
bit *ptr;
bit array[ ] ;
// 错误,不能用位变量来定义指针
// 错误,不能用位变量来定义数组array[ ]
定义位变量时,允许定义存储类型,位变量都被放入一个 位段,此段总是位于8051的片内RAM中,因此其存储类型限制 为DATA或IDATA,如果将位变量定义成其他类型,将会导致编
② sbit 位名=字节地址^位置;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由此可见,在C51程序设计过程中,在满足数据要求的情况 下,应尽可能使用unsigned char变量和bit变量。signed char变 量虽然也只占用一个字节,但需要进行额外的操作来测试代 码的符号位,因此会降低代码执行效率。
14
江 阴 职 业 技 术 学 院 电 子 工 程 系
五、常量和变量
江 阴 职 业 技 术 学 院 电 子 工 程 系
第1章 C51 程序设计基础
江 阴 职 业 技 术 学 院 电 子 工 程 系
主要内容
一、C51概述 二、数据类型 三、常量和变量 四、运算符和表达式 五、C程序的基本结构 六、函数
2
江 阴 职 业 技 术 学 院 电 子 工 程 系
一、C51概述
常量是在程序运行过程中不能改 变值的量,常量的数据类型有整型、 浮点型、字符型、字符串型和位标量。
常量可用在不必改变值的场合,如固 定的数据表,字库等。
15
江 阴 职 业 技 术 学 院 电 子 工 程 系
常量的定义方式有几种:
#difine False 0x0; //用预定义语句可以定义常量 #difine True 0x1; //这里定义False为0,True为1 在程序中用到False编译时自动用0替换,同理True替换为1 unsigned int code a=100; //这一句用code把a定义在程序 存储器中并赋值 const unsigned int c=100; //用const定义c为无符号int常量 并赋值
8
江 阴 职 业 技 术 学 院 电 子 工 程 系
数据类型 unsigned char signed char unsigned int signed int unsigned long signed long




单字节 单字节 双字节 双字节 四字节 四字节
0~255 -128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647
(3)sbit 位变量名=字节地址^位位置 sbit P1_1 = 0x90 ^ 1;
13
江 阴 职 业 技 术 学 院 电 子 工 程 系
变量数据类型的选择
在C51程序设计中,变量数据类型的定义极其重要,因为在 所有数据类型中只有bit和unsigned char两种数据类型可以直接 支持机器指令,对于其他的数据类型C51编译器都要进行一系 列复杂的变量数据和变量类型的处理,而这种处理将会对应 很长一段机器指令,最终会使程序变得复杂、庞大,运行速 度降低。
用 位标量声明 位标量声明



声明一个位标量或位类型的函数 声明一个可位寻址变量 声明一个特殊功能寄存器 声明一个16位的特殊功能寄存器 直接寻址的内部数据存储器 可位寻址的内部数据存储器
特殊功能寄存器声明 特殊功能寄存器声明 存储器类型说明 存储器类型说明
idata
pdata xdata code interrupt reentrant using
(一)C语言的特点



C语言简洁、紧凑,方便、灵活。一共只有32个关键字 运算符丰富,共有34种。 数据结构类型丰富(struct、union、enum 等)。 具有结构化的控制语句(if、for、switch、while 等)。 语法限制不太严格,程序设计自由度大。 生成目标代码质量高,程序执行效率高。 与汇编语言相比,用C语言写的程序可移植性好 C语言允许直接访问物理地址,能进行位(bit)操作,能 实现汇编语言的大部分功能,可以直接对硬件进行操作。 因此有人把它称为中级语言。
例1-1 流水灯
#include "REG51.H" main() {
int i,w;
TMOD=0x10; while(1) { w=0x01; // 灯的位置初值为01h // 置定时器1为方式1
for(i=0;i<8;i++)
{ P1=~w; w<<=1; delay(); // 循环点亮灯 // 点亮灯的位置移动 // 调用1 s延时
指针型本身就是一个变量,在这个变量中存放的指 向另一个数据的地址。这个指针变量要占据一定的 内存单元,对不同的处理器长度也不尽相同,在 C51中它的长度一般为1~3个字节。指针变量也具 有类型。
2. bit位标量
bit位标量是C51编译器的一种扩充数据类型,利用 它可定义一个位标量,但不能定义位指针,也不能 定义位数组。它的值是一个二进制位,不是0就是1, 类似一些高级语言中的Boolean类型中的True和 False。
}
} } 7
江 阴 职 业 技 术 学 院 电 子 工 程 系
二、数据类型



C语言的标识符和关键字 在C51编译器中,只支持标识符的前32位为有效标识, 故用户标识符不宜过长。 关键字则是编程语言保留的特殊标识符,它们具有固 定名称和含义,在程序编写中不允许标识符与关键字 相同。在KEIL uVision2中的关键字除了有ANSI C标 准的32个关键字外还根据51单片机的特点扩展了相关 的关键字。 表4-1,表中列出了KEIL uVision2 C51编译器所支 持的数据类型。
中断服务程序的现场保护和恢复,中断向量表的填写,是直接 与单片机相关的,都由C编译器代办;
提供常用的标准函数库,以供用户直接使用;
头文件中定义宏、说明复杂数据类型和函数原型,有利于程 序的移植和支持单片机的系列化产品的开发;
有严格的句法检查,错误很少,可容易地在高级语言的水平上 5 迅速地被排掉;
11
江 阴 职 业 技 术 学 院 电 子 工 程 系
3、 sfr特殊功能寄存器



sfr也是一种扩充数据类型,点用一个内存单元,值域为 0~255。利用它可以访问51单片机内部的所有特殊功能寄 存器。 如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器, 在后面的语句中我们用以用P1 = 255(对P1端口的所有引 脚置高电平)之类的语句来操作特殊功能寄存器。 sfr关键子后面是一个要定义的名字,可任意选取,但要符 合标识符的命名规则,最好有一定的含义,如P1口可以用 P1。等号后面必须是常数(特殊寄存器直接地址),不允 许有带运算符的表达式,而且该常数必须在特殊功能寄存 器的地址范围之内(80H-FFH),具体可查看教材8051 内部RAM地址表。
19
江 阴 职 业 技 术 学 院 电 子 工 程 系
SMALL存储模式
所有缺省变量参数均装入内部RAM(与使用显 式的data关键字来定义结果相同)。使用该模比较少,遇到函数嵌套调用和函数
递归调用时必须小心,该模式适用于较小的程序。
20
江 阴 职 业 技 术 学 院 电 子 工 程 系
12
江 阴 职 业 技 术 学 院 电 子 工 程 系
4、sbit

sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中 的可寻址位或特殊功能寄存器中的可寻址位。

如要访问P1.1,定义方法有三: (1)sbit 位变量名=位地址 sbit P1_1 = Ox91; //把位的绝对地址赋给位变量。 同sfr一样sbit的位地址必须位于80H-FFH之间。 (2)Sbit 位变量名=特殊功能寄存器名^位位置 sfr P1 = 0x90; sbit P1_1 = P1 ^ 1; 当可寻址位位于特殊功能寄存器中时可采用这种方法
18
江 阴 职 业 技 术 学 院 电 子 工 程 系
存储器类型


data bdata idata pdata xdata code
直接访问内部数据存储器(128字节),访问速度最快 可位寻址内部数据存储器(16字节),允许位与字节混合访问 间接访问内部数据存储器(256字节),允许访问全部内部地址 分页访问外部数据存储器(256字节),用MOVX @Ri指令访问 外部数据存储器(64KB),用MOVX @DPTR指令访问 程序存储器(64KB),用MOVC @A+DPTR指令访问
LARGE存储模式
所有缺省变量可放在多达64 K字节的外部
以上两句它们的值都保存在程序存储器中,而程序存储器 在运行中是不允许被修改的,所以如果在这两句后面用了 类似a=110,a++这样的赋值语句,编译时将会出错。
16
江 阴 职 业 技 术 学 院 电 子 工 程 系
变量

变量就是一种在程序执行过程中其值能不断变化的量。变量必须 先定义后使用 标准C 定义一个变量的格式如下: [存储种类] 数据类型 变量名表 如auto int a;//存储种类分:auto,static,register,extern C 51定义一个变量的格式如下: [存储种类] 数据类型 [存储器类型] 变量名表 可选 必选 可选 必选 存储器类型的说明就是指定该变量在C51硬件系统中所使用的存 储区域,并在编译时准确的定位。
存储器类型说明
存储器类型说明 存储器类型说明 存储器类型说明 中断函数说明 再入函数说明 寄存器组定义
间接寻址的内部数据存储器
分页寻址的外部数据存储器 外部数据存储器 程序存储器 定义一个中断函数 定义一个再入函数 定义芯片的工作寄存器
10
江 阴 职 业 技 术 学 院 电 子 工 程 系
1.* 指针型
float *
bit sfr sfr16 sbit
四字节 1~3字节
位 单字节 双字节 位
±1.175494E-38~±3.402823E+38 对象的地址
0或1 0~255 0~65535 0或1
相关文档
最新文档