51单片机学习C语言 下载本文

第二课 C51的数据和数据类型(P55)

2.1 KEIL51数据类型 数 据 类 型 位型(bit) 字符型(char) 基本类型 整型(int) 长整型(long) 浮点型(float) 数组类型(array) 构造类型 结构类型(struct) 共同体(union) 枚举(enum) 指针类型 空类型

2.2 KEIL51数据类型 数据类型 char int 长度 长度 /bit /byte 1 1 2 2 4 4 4 8 1~3 1 2 0 ~ 255 -128~+127 0 ~ 65535 -32768~+32767 0 ~ 4 294 967 295 -2 147 483 648~+2 147 483 647 ±1.175494E-38~±3.402823E+38(6位数字) ±1.175494E-38~±3.402823E+38(10位数字) 0或1 0或1 0 ~ 255 0 ~ 65535 8 16 16 32 32 32 64 * 1 1 8 16 值 域 有符号(signed char) 无符号(unsigned char) 有符号(signed int) 无符号(unsigned int) 有符号(signed long) 无符号(unsigned long) 双精度浮点型(double) unsigned char 8 signed char unsigned int signed int long unsigned long signed long float double 一般指针 bit sbit sfr sfr16

2.3 KEIL51数据的存储类型与存储空间的对应关系 数据存储器 存储 类型 长度 byte 1 1 1 与存储空间的对应关系 片内RAM区低128字节,访问速度快 片内RAM位寻址区(20H~2FH),允许位与字节混合访问 片内间接寻址区,可访问片内所有RAM地址空间(256字节) data 片内数据存储器 bdata idata 片外数据存储器 xdata pdata 片外程序存储器 code

2 2 片外数据存储区(64KB字节)空间, 由MOVX @DPTR访问 分页寻址片外数据存储区(256字节) 由MOVX @R0访问 代码存储区(64KB字节) 由MOVC @DPTR访问 第三课 KEIL51数据的存储类型与存储器结构(P59)

3.1 Cx51系列单片机在物理上有四个存储空间(见图3-1) 片内程序存储器空间 片外程序存储器空间 片内数据存储器空间 片外数据存储器空间

注:使用片外程序存储器时,单片机引脚EA接地。即

3.2 通用寄存器区:地址(00H ~1FH) (P60) 组号 0 1 2 3 PSW.4/RS1 PSW.3/RS0 0 0 1 1 0 1 0 1 地址 00H~07H 08H~0FH 10H~17H 18H~1FH 3.3 可位寻址区(20H~2FH)位地址:00H~7FH 共128位(P61)

RAM地址 位 地 址 2F 2E 2D 2C 2B 2A 29 7F 77 6F 67 5F 57 4F 7E 76 6E 66 5E 56 4E 7D 75 6D 65 5D 55 4D 7C 74 6C 64 5C 54 4C 7B 73 6B 63 5B 53 4B 7A 79 72 71 6A 69 62 61 5A 59 52 51 4A 49 78 70 68 60 58 50 48 28 27 26 25 24 23 22 21 20

47 3F 37 2F 27 1F 17 0F 07 46 3E 36 2E 26 1E 16 0E 06 45 3D 35 2D 25 1D 15 0D 05 44 3C 34 2C 24 1C 14 0C 04 43 3B 33 2B 23 1B 13 0B 03 42 41 3A 39 32 31 2A 29 22 21 1A 19 12 11 0A 09 02 01 40 38 30 28 20 18 10 08 00 3.4、用户RAM区

Cx51单片机用户RAM区(30H~7FH); Cx52单片机用户RAM区(30H~FFH)。

注:上电复位时,堆栈指针SP指向07H,C51单片机的栈顶和栈底是从小到大 在使用汇编语言时,通常将栈顶定位在30H(MOV SP,#30H),在使用C语言编程时堆栈是系统自动分配的,不需用户考虑。

3.5 特殊功能寄存器(SFR)(P64) SFR *B *ACC *PSW MSB 位地址/位定义 LSB D7 CY *T2CON CF TF2 *IP *P3 BF - B7 P3.7/ RD *IE *P2 SBUF *SCON *P1 TH1 TH0 AF EA A7 P2.7 9F SM0 97 P1.7 D6 AC CE BE - B6 P3.6/ WR AE - A6 P2.6 9E SM1 96 P1.6 D5 F0 CD BD - B5 P3.5/ T1 AD - A5 P2.5 9D SM2 95 P1.5 D4 RS1 CC BC PS B4 P3.4/ T0 AC ES A4 P2.4 9C REN 94 P1.4 D3 RS0 CB BB PT1 B3 P3.3/ INT1 AB ET1 A3 P2.3 9B TB8 93 P1.3 D2 OV CA BA PX1 B2 P3.2/ INT0 AA EX1 A2 P2.2 9A RB8 92 P1.2 D1 F1 C9 B9 PT0 B1 P3.1/ TXD A9 ET0 A1 P2.1 99 TI 91 P1.1 D0 P C8H CP/RL2 B8 B8H PX0 B0 P3.0/ RXD A8 EX0 A0 P2.0 98 RI 90 P1.0 8DH 8CH 90H 99H 98H A0H A8H B0H C8 字节地址 F0H E0H D0H EXF2 RCLK TCLK EXEN2 TR2 TL1 TL0 TMOD *TCON PCON DPH DPL SP *P0 GATE 8F TF1 87 P0.7 8E TR1 86 P0.6 M1 8D TF0 85 P0.5 M0 8C TR0 84 P0.4 GATE 8B IE1 83 P0.3 8A IT1 82 P0.2 M1 89 IE0 81 P0.1 M0 88 IT0 80 P0.0 8BH 8AH 89H 88H 87H 83H 82H 81H 80H 注1:* 表示可以进行位操作

注2:KEIL Cx51提供了一种自主形式的定义方法。这种定义引入关键字“sfr”,语法如下: sfr SCON = 0x98;

sfr TMOD = 0x89; /*见头文件reg51.h*/

注3:定义 data char x 与定义 char data x是等价的,但应该尽量使用后一种方法。

第四课 常量和变量(P56)

4.1、 常量---在程序运行的过程中,其值不能改变的量。

与变量一样,常量可以有不同的数据类型,可以用一个标识符代表一个常量,习惯上常量标识符用大写字母,例:

#define CONST 60 /*即: CONST = 60 */ #define PAI 3.1416 /*即: PAI = 3.1416 */

4.2、 变量---在程序运行的过程中,其值可以改变的量。 例: #define CONST 60

main()

{ int var1,result; var1=2;

result= var1 * CONST; while(1) }

运行结果result=120

4.3、变量在存储器中的物理排列(图4-1) 1)、位变量 2)、整型变量

3)、浮点型变量(1位符号位,8位指数位,23位尾数位)

地址 内容 +0 +1 +2 +3 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 其中,S符号位,1表示负,0表示正;

E:阶码(在两个字节中)偏移为127; M:23位尾数,最高位为“1”。

一个整型变量值为0x1234, 一个长整型变量值为0x12345678,

一个浮点变量值为-12.5的十六进制为0xC1480000,它们在内存的排列分别表示在4-1中 (书2 P52)