C语言基础与C51程序设计电脑

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.特殊功能寄存器型
这是C51扩充的数据类型,用于访问MCS-51单片机中的特 殊功能寄存器数据,它分sfr和sfr16两种类型。其中:
sfr为字节型特殊功能寄存器类型,占一个内存单元,利 用它可以访问MCS-51内部的所有特殊功能寄存器; sfr16为双字节型特殊功能寄存器类型,占用两个字节单 元,利用它可以访问MCS-51内部的所有两个字节的特殊功能 寄存器。 在C51中对特殊功能寄存器的访问必须先用sfr或sfr16进 行声明。
4.float浮点型 float型数据的长度为四个字节,格式符合IEEE-754标 准的单精度浮点型数据,包含指数和尾数两部分,最高位为 符号位,“1”表示负数,“0”表示正数,其次的8位为阶 码,最后的23位为尾数的有效数位,由于尾数的整数部分隐 含为“1”,所以尾数的精度为24位。 5.* 指针型 指针型本身就是一个变量,在这个变量中存放的指向另 一个数据的地址。这个指针变量要占用一定的内存单元,对 不同的处理器其长度不一样,在C51中它的长度一般为1~3个 字节。
7.位类型 这也是C51中扩充的数据类型,用于访问MCS-51单片机 中的可寻址的位单元。在C51中,支持两种位类型:bit型和 sbit型。它们在内存中都只占一个二进制位,其值可以是 “1”或“0”。 区别:用bit定义的位变量在C51编译器编译时,在不同 的时候位地址是可以变化的,而用sbit定义的位变量必须与 MCS-51单片机的一个可以寻址位单元或可位寻址的字节单元 中的某一位联系在一起,在C51编译器编译时,其对应的位 地址是不可变化的。
间接寻址片内数据存储器256B,允许访问片内 全部地址 分页寻址片外数据存储器256B,使用指令 MOVX @Ri访问,需要2个指令周期 寻址片外数据存储器64KB,使用指令MOVX @DPTR访问 寻址程序存储器64KB,使用指令MOVC A, @A+DPTR访问
code
下面对MCS-51单片机各存储区类型的特点加以说明 。 (1)data区 data区的寻址是最快的,所以应该把使用频率高的 变量放在data区。但由于空间有限,必须注意使用 data区,data区除了包含程序变量外,还包含了堆栈 和寄存器组data区。 unsigned char data system_status=0; unsigned int data unit_id[2]; char data inp_string[16]; float data outp_value; mytype data new_var;
3.static:分为局部静态变量和全局静态变量。 在函数体内部定义的静态变量为内部静态变量,它在对应的 函数体内有效,一直存在,但在函数体外不可见,当离开函数 时值不被改变。 外部静态变量作用于仅限于变量被定义的文件中。其它文件 中即使用extern声明也没法使用它。 4.register:
使用register定义的变量称为寄存器变量。它定义的变 量存放在CPU内部的寄存器中,处理速度快,但数目少。C51编 译器编译时能自动识别程序中使用频率最高的变量,并自动将 其作为寄存器变量,用户可以无需专门声明。
★ 汇编语言程序 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 ★查找零的个数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单元中 */ }
2.2 变量的存储种类和存储类型
变量是一种在程序执行过程中,其数值不断 变化的量。C51规定变量必须先定义后使用。C51
对变量定义的格式如下:
[存储种类] 数据类型 [存储器类型] 变量名表
定义变量例:
extern unsigned int data var1; static bit data flags; auto unsigned char code vector[10];
unsigned char
vector[10];
在C51语言程序中,有可能会出现在运算中数据类型 不一致的情况。C51允许任何标准数据类型的隐式转换, 隐式转换的优先级顺序如下: bitcharintlongfloat signedunsigned 也就是说,当char型与int型进行运算时,先自动对 char型扩展为int型,然后与int型进行运算,运算结果 为int型。C51除了支持隐式类型转换外,还可以通过强 制类型转换符“()”对数据类型进行人为的强制转换 。 C5l编译器除了能支持以上这些基本数据类型之外, 还能支持一些复杂的组合型数据类型,如数组类型、指 针类型、结构类型、联合类型等这些复杂的数据类型, 在后面将相继介绍。
2.int整型 分singed int和unsigned int。默认为signed int。 它们的长度均为2个字节,用于存放一个双字节数据。对于 signed int,用于存放两字节带符号数,补码表示,数的 范畴为-32768~+32767。对于unsigned int,用于存放两字 节无符号数,数的范围为0~65535。 3.long长整型 分singed long和unsigned long。默认为signed long 。它们的长度均为四个字节,用于存放一个四字节数据。对 于signed long,用于存放四字节带符号数,补码表示,数 的范畴为-2147483648~+2147483647。对于unsigned long ,用于存放四字节无符号数,数的范围为0~4294967295。
2.2.2
变量的存储类型
说明变量所处单片机的存储区域
名称 data 存储空间位置 直接寻址片内RAM低128B 长度 8位 数据范围 0~255
bdata
idata pdata xdata code
ቤተ መጻሕፍቲ ባይዱ
可位寻址片内RAM(20-2FH)
间接寻址片全部内RAM 片外RAM低256B 片外RAM全部64K 程序ROM64K
1位
8位 8位 16位 16 位
0/1
0~255 0~255 0~65535 0~65535
存储器类型 data bdata


直接寻址的片内数据存储器低128B,访问速度 最快 可位寻址的片内数据存储器(地址20H~2FH共 16B、128位)允许位和字节混合访问
idata
pdata xdata
2.2.1 变量的存储种类
存储种类是指变量在程序执行过程中的作用范围。C51 变量的存储种类有四种,分别是自动(auto)、外部(extern) 、静态(static)和寄存器(register)。 1.auto:作用范围在定义它的函数体或复合语句内 部。所有变量默认为自动(auto)变量。 在定义它的函数体或复合语句被执行时,C51才为该变量 分配内存空间,当函数调用结束返回或复合语句执行结束时 ,自动变量所占用的内存空间被释放,这些内存空间又可被 其他的函数体或复合语句使用。可见使用自动变量能最有效 地使用MCS-51单片机内存。
2. C51语言的基本语法
1.C51数据类型 2.变量的存储种类及存储类型 3.绝对地址访问 4.C51运算符和表达式
2.1 C51的数据类型
基本数据类型
类型 符号 有 整 型 无 有 实 型 有 字 有 符 型 无 关键字 (signed) int (signed) short (signed) long unsigned int unsigned short int unsigned long int float double char unsigned char 数的表示范围 所占位数 16 -32768~32767 16 -32768~32767 32 16 16 32 32 64 8 8 -2147483648~2147483647 0~65535 0~65535 0~4294967295 3.4e-38~3.4e38 1.7e-308~1.7e308 -128~127 0~255
1.C51语言概述
1.1 汇编语言与C51 汇编语言: • 直接操纵系统的硬件资源 • 编写比较复杂的数值计算程序就非常困难 • 可读性不强,修改困难,效率不高 C51语言: • 易于开发复杂的单片机程序 • 易于移植
例:查找零的个数(在2000H--200FH中查出有几个 字 节是零,把个数放在2100H单元中)
1.2 MCS-51与标准C
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准 的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库 函数是按MCS-51单片机相应情况来定义的; (2)C51中的数据类型与标准C的数据类型也有一定的区别,在 C51中还增加了几种针对MCS-51单片机特有的数据类型; (3)C51变量的存储模式与标准C中变量的存储模式不一样,C51 中变量的存储模式是与MCS-51单片机的存储器紧密相关; (4)C51与标准C的输入输出处理不一样,C51中的输入输出是通 过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进 行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中有专门 的中断函数。
第四章 C语言基础与C51程序设计
锐普PPT论坛chinakui转载:www.rapidbbs.cn
主要内容
1 2 C51语言概述 C51语言的基本语法
3
4
C51的程序设计
函数的定义与调用
说明:第4章有以下印刷错误,请给予修正
页码 p98 章节或标题 【例4.2】 分 别使用三种方 法编写下面三 个函数。 原错误 起始地址为 80H的片外RAM 中 更正为 起始地址为80H 的片内RAM中
sfr P0= 0x80; /*因P0口的寄存器是可位寻址的*/ sbit P0_0=P0^0; /*所以P0_0为P0中的P0.0引脚*/ 除了以上定义方式外,还可以用P0.0的地址去写,如: sbit P0_0=0x80;
定义变量例: 数据类型 变量名 var1;
unsigned int bit flags;
C51的数据类型扩充定义
sfr:特殊功能寄存器定义
sfr16:sfr的16位数据定义
sbit:可位寻址字节或sfr中位的定义
bit:位变量定义
数 据 类 型 bit 长 度 位 大 0或1 小
sfr
sfr16 sbit
1字节
2字节 位
0~255
0~65535 0或1
1.字符型char 有signed char和unsigned char之分,默认为signed char。它们的长度均为一个字节,用于存放一个单字节的 数据。 对于signed char,它用于定义带符号字节数据,其 字节的最高位为符号位,“0”表示正数,“1”表示负数 ,补码表示,所能表示的数值范围是-128~+127; 对于unsigned char,它用于定义无符号字节数据或 字符,可以存放一个字节的无符号数,其取值范围为0~255 。unsigned char可以用来存放无符号数,也可以存放西 文字符,一个西文字符占一个字节,在计算机内部用ASCII 码存放。
2.extern:在一个函数体内,要使用一个已在该函数体外 或别的程序中定义过的外部变量时,该变量在该函数体内要 用extern说明。 文件1为file1.c 文件2为file2.c int i,j; //定义全局变量 extern int i,j;//将i char c; ,j从文件1中复制过来 void func1(int k); extern char c;//将c main() 复制过来 { func2 () func1(20); //调用函数 { ... static float k; } i=j*5/100; func1(int k) //用户定义函数 ... { } ...; } //将i,j和c从文件1带 入文件2
相关文档
最新文档