Download presentation
Presentation is loading. Please wait.
Published byΛευί Παπακωνσταντίνου Modified 5年之前
1
KEIL C51的应用 C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进和扩充。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。
2
㈠ C-51的特点 C语言作为一种非常方便的语言而得到广泛的支持,国内最通用的是Keil C51.
3
C-51与ASM-51相比,有如下优点: 1. 对单片机的指令系统不要求了解,仅要求对8051 的存贮器结构有初步了解; 2. 寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理; 3. 程序有规范的结构,可分成不同的函数,这种方式可使程序结构化; 4. 具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性; 5. 提供的库包含许多标准子程序,具有较强的数据处理能力; 6. 由于具有方便的模块化编程技术,使已编好程序可容易地移植;
4
C51存储类型 存储类型 寻址空间 数据长度 值域范围 data 片内直接寻址 RAM 8 0~127 idata 片内间接寻址 RAM
0~255 pdata 分页寻址 片外 RAM
5
存储类型 寻址空间 数据长度 值域范围 xdata 片外数据存储 (64K) 16 0~65535 code 片内统一编址ROM(64K) bdata 片内可位寻址的RAM(16byet) 1 0~127
6
C51的数据声明的一般格式如下 [类型说明符][修饰符] 标识符[=初值]…… 例如:unsigned char code Flag = 0x0f; 就是声明一个无符号的char型变量Flag,并给他赋初值为0x0f;并且声明他所在的存储空间在片内统一编址的ROM中。 声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内RAM中。
7
与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。
类型 函数名(参数表) { 数据说明部分 语句执行部分 }
8
㈢ C-51的数据类型 基本数据类型 类型 符号 关键字 所占位数 数的表示范围 (signed) int 16 -32768~32767
有 (signed) short 16 -32768~32767 (signed) long 32 ~ 整型 16 unsigned int 0~65535 无 16 unsigned short int 0~65535 unsigned long int 32 0~ 有 float 32 3.4e-38~3.4e38 实型 有 double 64 1.7e-308~1.7e308 字符型 有 char 8 -128~127 无 unsigned char 8 0~255
9
C语言中的基本数据类型 类型 符号 关键字 所占位数 数的表示范围 (signed) int 16 -32768~32767 有
(signed) short 16 -32768~32767 (signed) long 32 ~ 整型 16 unsigned int 0~65535 无 16 unsigned short int 0~65535 unsigned long int 32 0~ 有 float 32 3.4e-38~3.4e38 实型 有 double 64 1.7e-308~1.7e308 字符型 有 char 8 -128~127 无 unsigned char 8 0~255
10
㈢(续) C-51的数据类型扩充定义 sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明
例:sfr SCON = 0X98; sfr16 T2 = 0xCC; sbit OV = PSW^2;
11
㈣ C-51数据的存储类型 名 存储空间位置 长度 数据范围 data 直接寻址片内RAM 8位 0~255
名 存储空间位置 长度 数据范围 data 直接寻址片内RAM 8位 0~255 bdata 可位寻址片内RAM 1位 0/1 idata 间接寻址片内RAM 8位 0~255 pdata 片外页RAM 位 0~255 xdata 片外RAM 位 0~65535 code 程序ROM 位 0~65535
12
㈣ C-51数据的存储类型 ㈣ C-51数据的存储类型(续) 例: 数据类型 存储类型 变量 char data var1; bit data flags; unsigned char xdata vextor[10];
13
㈤ C-51的包含的头文件 通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h (定义特殊功能寄存器和位寄存器); math.h (定义常用数学运算);
14
㈥ C-51的运算符 与C语言基本相同: + - * / (加 减 乘 除)
* / (加 减 乘 除) > >= < <= (大于 大于等于 小于 小于等于) == != (测试等于 测试不等于) && || ! (逻辑与 逻辑或 逻辑非 ) >> << (位右移 位左移) & | (按位与 按位或) ^ ~ (按位异或 按位取反)
15
㈦ C-51的基本语句 与标准C语言基本相同: if 选择语言 switch/case 多分支选择语言 while 循环语言
do-while 循环语言 for 循环语言
16
㈧ 中断服务程序 函数名()interrupt n { } ㈨ I/O口定义 #include <absacc.h> #define prot xbyte[0x1000] 或 用指针定义
17
CJNE R0,#00H,LOO1 ;不到FF个字节再清 LOOP: SJMP LOOP
例:清零程序 (将2000H—20FFH的内容清零) ★ 汇编语言程序 ORG 0000H SE01: MOV R0,#00H MOV DPTR,#2000H ;(0000H)送DPTR LOO1: CLR A ;0送(DPTR) INC DPTR ;DPTR+1 INC R ;字节数加1 CJNE R0,#00H,LOO1 ;不到FF个字节再清 LOOP: SJMP LOOP
18
清零程序 (将2000H—20FFH的内容清零) ★ C-51程序 #include <reg51.h> main( ) { int i; unsigned char xdata *p=0x2000; /* 指针指向2000H单元 */ for(i=0;i<256;i++) {*p=0; p++;} /*清零2000H-20FFH单元*/ }
19
例:查找零的个数(在2000H--200FH中查出有几个字 节是零,把个数放在2100H单元中)
★ 汇编语言程序 ORG 0000H L00: MOV R0,#10H ;查找16个字节 MOV R1,#00H MOV DPTR,#2000H L11: MOVX CJNE A,#00H,L16 ;取出内容与00H相等吗? INC R ;取出个数加1 L16: INC DPTR DJNZ R0,L ;未完继续 MOV DPTR,#2100H MOV A,R1 ;相同数个数送2100H L1E: SJMP L1E
20
★查找零的个数C-51程序 #include <reg51.h> main ( )
{ unsigned char xdata *p=0x2000;/*指针p指向2000H单元*/ int n=0,i; for(i=0;i<16;i++) { if(*p==0) n++; /* 若该单元内容为零,则n+1 */ p++; /* 指针指向下一单元 */ } p=0x2100; /* 指针p指向2100H单元 */ *p=n; /* 把个数放在2100H单元中 */
21
KEIL的使用 掌握KEIL工程的建立和软件的开发; 掌握KEIL中软件仿真的基本应用;
Similar presentations