(共22张PPT)
KEIL C51的应用
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进和扩充。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。
C语言作为一种非常方便的语言而得到广泛的支持,国内最通用的是Keil C51.
C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。
C提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。
㈠ C-51的特点
C-51与ASM-51相比,有如下优点:
1. 对单片机的指令系统不要求了解,仅要求对8051 的存贮器结构有初步了解;
2. 寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;
3. 程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;
4. 具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;
5. 提供的库包含许多标准子程序,具有较强的数据处理能力;
6. 由于具有方便的模块化编程技术,使已编好程序可容易地移植;
C51存储类型
存储类型 寻址空间 数据长度 值域范围
data 片内直接寻址 RAM 8 0~127
idata 片内间接寻址 RAM 8 0~255
pdata 分页寻址
片外 RAM 8 0~255
存储类型 寻址空间 数据长度 值域范围
xdata 片外数据存储 (64K) 16 0~65535
code 片内统一编址ROM(64K) 16 0~65535
bdata 片内可位寻址的RAM(16byet) 1 0~127
C51的数据声明的一般格式如下
[类型说明符][修饰符] 标识符[=初值]……
例如:unsigned char code Flag = 0x0f;
就是声明一个无符号的char型变量Flag,并给他赋初值为0x0f;并且声明他所在的存储空间在片内统一编址的ROM中。
声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内RAM中。
㈡ C-51的程序结构
与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。
C-51函数的一般格式
类型 函数名(参数表)
{
数据说明部分
语句执行部分
}
㈢ C-51的数据类型
基本数据类型
类型
符号
关键字
数的表示范围
所占位数
整型
字符型
实型
有
无
(signed) int
16
-32768~32767
(signed) short
16
-32768~32767
(signed) long
32
-2147483648~2147483647
16
unsigned int
0~65535
32
0~4294967295
unsigned long int
unsigned short int
16
0~65535
有
float
32
3.4e-38~3.4e38
有
double
64
1.7e-308~1.7e308
有
char
8
-128~127
无
unsigned char
8
0~255
C语言中的基本数据类型
类型
符号
关键字
数的表示范围
所占位数
整型
字符型
实型
有
无
(signed) int
16
-32768~32767
(signed) short
16
-32768~32767
(signed) long
32
-2147483648~2147483647
16
unsigned int
0~65535
32
0~4294967295
unsigned long int
unsigned short int
16
0~65535
有
float
32
3.4e-38~3.4e38
有
double
64
1.7e-308~1.7e308
有
char
8
-128~127
无
unsigned char
8
0~255
㈢(续) C-51的数据类型扩充定义
sfr:特殊功能寄存器声明
sfr16:sfr的16位数据声明
sbit:特殊功能位声明
bit:位变量声明
例:sfr SCON = 0X98;
sfr16 T2 = 0xCC;
sbit OV = PSW^2;
㈣ C-51数据的存储类型
名 存储空间位置 长度 数据范围
data 直接寻址片内RAM 8位 0~255
bdata 可位寻址片内RAM 1位 0/1
idata 间接寻址片内RAM 8位 0~255
pdata 片外页RAM 8位 0~255
xdata 片外RAM 16位 0~65535
code 程序ROM 16位 0~65535
㈣ C-51数据的存储类型(续)
例:
数据类型 存储类型 变量
char data var1;
bit data flags;
unsigned char xdata vextor[10];
㈣ C-51数据的存储类型
㈤ C-51的包含的头文件
通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h
常用有:reg51.h (定义特殊功能寄存器和位寄存器);
math.h (定义常用数学运算);
㈥ C-51的运算符
与C语言基本相同:
+ - * / (加 减 乘 除)
> >= < <= (大于 大于等于 小于 小于等于)
== != (测试等于 测试不等于)
&& || ! (逻辑与 逻辑或 逻辑非 )
>> << (位右移 位左移)
& | (按位与 按位或)
^ ~ (按位异或 按位取反)
㈦ C-51的基本语句
与标准C语言基本相同:
if 选择语言
switch/case 多分支选择语言
while 循环语言
do-while 循环语言
for 循环语言
㈧ 中断服务程序
函数名()interrupt n
{ }
㈨ I/O口定义
#include
#define prot xbyte[0x1000]
或
用指针定义
例:清零程序 (将2000H—20FFH的内容清零)
★ 汇编语言程序
ORG 0000H
SE01: MOV R0,#00H
MOV DPTR,#2000H ;(0000H)送DPTR
LOO1: CLR A
MOVX @DPTR,A ;0送(DPTR)
INC DPTR ;DPTR+1
INC R0 ;字节数加1
CJNE R0,#00H,LOO1 ;不到FF个字节再清
LOOP: SJMP LOOP
清零程序 (将2000H—20FFH的内容清零)
★ C-51程序
#include
main( )
{
int i;
unsigned char xdata *p=0x2000;
for(i=0;i<256;i++)
{*p=0; p++;}
}
★ 汇编语言程序
ORG 0000H
L00: MOV R0,#10H ;查找16个字节
MOV R1,#00H
MOV DPTR,#2000H
L11: MOVX A,@DPTR
CJNE A,#00H,L16 ;取出内容与00H相等吗
INC R1 ;取出个数加1
L16: INC DPTR
DJNZ R0,L11 ;未完继续
MOV DPTR,#2100H
MOV A,R1
MOVX @DPTR,A ;相同数个数送2100H
L1E: SJMP L1E
例:查找零的个数(在2000H--200FH中查出有几个字 节是零,把个数放在2100H单元中)
★查找零的个数C-51程序
#include
main ( )
{ unsigned char xdata *p=0x2000;
int n=0,i;
for(i=0;i<16;i++)
{ if(*p==0) n++;
p++;
}
p=0x2100;
*p=n;
}
KEIL的使用
掌握KEIL工程的建立和软件的开发;
掌握KEIL中软件仿真的基本应用;一、打印技巧
1.本资料页面设置为:
页边距:上边距2厘米、下边距1.5厘米、左右边距2.42厘米。
纸 张:16开、
分 栏:一栏
2.如果你是家庭用户,用A4打印机打印。请选用16开纸,直接打印就可以
3.如果你是教师用A3打印机打印制作学生试卷。请将页面设置为:
页边距:上边距2厘米、下边距1.5厘米、左右边距2.42厘米、横向。
纸 张:8开
分 栏:两栏、宽度40字符。
二、欢迎来我的首页,在这里您可以很方便地查询到我上传的所有作品,欢迎交换意见。
1.我的首页:http://www.21cnjy.com/user/72weihong/
2.精品资料:http://www.21cnjy.com/user/home_list.asp username=72weihong&flag=J&softType=0
3.普通资料:http://www.21cnjy.com/user/72weihong/home_list.asp
温馨提示:请你将上述网址复制到地址栏敲回车,就可以访问到我的主页、精品资料、普通资料。