最详细C51单片机简介
华中科技大学文华学院
二、指针
指针是用来存放存储器地址的变量,既然是变量, 使用前当然要声明,其格式如下: [存储器类型1] 数据类型 [存储器类型2] *变量名称
• 存储器类型1:指针变量自身的存储类型,声明 时无此项则默认为data型
• 数据类型:指针指向的存储区的数据类型,即被 指向的存储器以多少个单元作为一个数据单位 • 存储器类型2:指针指向的存储类型,即指向哪 个存储区,声明时无此项则默认为通用型 • 指针变量名前面冠以“*”,表示该变量为指针 型变量 华中科技大学文华学院
华中科技大学文华学院
4.2 C51的数据类型
在C语言里,常数(constant)与变量(variables)都 是为某个数据指定存储器空间,其中常数是固定不变 的,而变量是可变的。声明常数或变量的格式如下:
int x=50 ;
int x ;
int x,y,z ;
符号型常量需用宏定义指令(#define)对其进行 定义,如下: #define PI 3.1415
a=a|0x80;
while(1);
}
“|”可以将一个数中的 某些特定位置1
华中科技大学文华学院
eg:将a=0x43的低四位取反,其它位不变 void main( )
{
unsigned char a;
a=0x43;
a=a^0x0f;
while(1);
}
“^”可以将一个数中的 某些特定位取反
华中科技大学文华学院
华中科技大学文华学院
一、数据类型
1、通用数据类型
字符型(char)、整型(int)和长整型(long), 如果不是必需的,尽可能选择 unsigned 型。
华中科技大学文华学院
2、8051特有数据类型
程序编译时,C51编译器会自动进行类型转换。 低级的数据类型转换为高级的数据类型 运算结果为高级数据类型 51单片机内部RAM的位可寻址区(20H-2FH)定 义为bit型或sbit型,而SFR的位可寻址区,只能定义 为sbit型。 华中科技大学文华学院
{
unsigned int x;
unsigned char output;
x=tab[0]+tab[1]+tab[2] +tab[3] +tab[4]; output=x/5; while(1); }
华中科技大学文华学院
例 3 :编程实现外部 RAM 地址 0000H中的内容与地 址0002H中的内容相加,结果送给变量pt。 #include<absacc.h> void main() 直 接 地 址 法
unsigned long xdata array[100];
unsigned int pdata sion;
华中科技大学文华学院
• 程序存储器 char code SEG[3]={ 0x0a,0x13,0xbf }; • 内部数据存储器 char data x; char idata x; char bdata x;
• 外部数据存储器 char xdata x; char pdata x; //直接寻址 //间接寻址 //可位寻址 //外部存储器64k bytes //外部存储器256 bytes
华中科技大学文华学院
4.4 数组与指针
数组(array)是一种将同类型数据集合管理 的数据结构。
指针(Pointer)是存放存储器地址的变量。
eg:将a=0x93右移3位 void main( ) { void main( )
{
char a,b; a=0x93; b=a>>3; while(1); }
华中科技大学文华学院
unsigned char a,b;
a=0x93;
b=a>>3;
while(1);
}
eg:将a=0x43右移3位 void main( ) { void main( ) {
void
INT(void)
interrut0
using 1
华中科技大学文华学院
4.7 C51编程实例
一、顺序程序设计 例1:编程实现297FH+379AH
void main( )
{ int x; x=0x297F+0x379A; while(1); }
华中科技大学文华学院
例 2 :编程实现某数组中的内容相加,然后求平均 值。 unsigned char data tab[]={0x29,0x37,0x9a,0xd6,0xf7}; void main()
从参数形式上,函数可分为无参函数和有参函数
库函数是编译系统为用户设计的一系列标准函数,要 使用这些函数,必须用#include语句将对应头文件包 含到程序中。 有参函数在调用时,可将所要处理的数据传递给该函 数里,称为形式参数;也可将函数处理完成后的结果 返回调用它的程序,称为返回值。 华中科技大学文华学院
五、赋值运算符
华中科技大学文华学院
void main() eg:阅读下列程序,写出执行结果 {
unsigned char a1=0x52, a2=0x3a, a3=0x01, a4=0x01;
unsigned char a5=0xaa, a6=0x11, a7=0xf0; a8=0x1f;
unsigned char a9=0x55, a10=0x68, a11=0x75, x=0x96;
{
unsigned int pt;
XBYTE[0x0000]=0x49;
XBYTE[0x0002]=0xd7; pt=XBYTE[0x0000]+XBYTE[0x0002]; while(1); }
如果函数在主程序之后,则使用前需要声明;如果函 数在主程序之前,则使用前不需要声明。
华中科技大学文华学院
eg:无参数函数的定义 void delay1ms() {
unsigned char i;
for(i=0;i<120;i++);
}
华中科技大学文华学院
eg:有参数函数的定义(无返回值) void delay (int x) {
数组与指针可说是数据管理的好搭挡。
华中科技大学文华学院
一、数组
数组也是一种变量,将一堆相同数据形态的 变量,以一个相同的变量名称来表示。既然是一 种变量,使用之前就得声明,其格式如下:
• 字符串数组范例: char LCM[9]; 这个数组包括LCM[0]~LCM[8]等9个字符 • 声明数组的时候,也可以给它初始值 ,如下: char LCM[9]=“Testing.”;
a1=x;
a2+=x;
a3-=x;
a4*=x;
a5/=x;
华中科技大学文华学院
a6%=x;
a7&=x;
a8|=x;
a9^=x;
a10<<=2;
a11>>=3;
while(1); }
华中科技大学文华学院
六、运算符的优先级
华中科技大学文华学院
4.6 函数与中断函数
一、函数 从用户角度上,函数可分为库函数和用户自定义函数
4.3 存储器形式与模式
一、存储器形式
华中科技大学文华学院
二、存储器模式
• 小型模式 (SMALL)…data • 精简模式 (COMPACT)…pdata • 大型模式 (LARGE)…xdata
华中科技大学文华学院
三、变量说明举例
data char var; float idata x, y, z; char bdata flags; char code MSG[ ]=“PARAMETER”;
第 4章 C51简介
4.1 4.2 4.3 4.4 4.5 4.6 4.7 C51程序结构 C51的数据类型 数据的存储形式与模式 数组与指针 C51运算符 函数与中断函数 C51编程实例
华中科技大学文华学院
4.1 C51程序结构
• #include 包括式注释:以“/*”为注释开始、以 是一个预处理命令,其功能是将 “头文件 */”为注释结束 (*.h)包含到程序里。 ,其间注释文字可以包括 几个字或几行文字,例如: • #include <xxx.h>:以<xxx.h>所包括的头 #include“my.h” /*=包含 my.h头文件=*/ 文件,编译程序将从 (C:\KEIL\C51\INC) • 里查找所指定的头文件。 单列式注释:以“//”为注释的开始符 号,而其右边整行都是注释。例如: • #include “xxx.h”:以“xxx.h”所包括的头 //===== 主程序 ===== 文件,编译程序将从源程序所在文件夹里 查找所指定的头文件。
unsigned int i;
for(i=0; i<x; i ++);
}
华中科技大学文华学院
eg:有参数函数的定义(有返回值) int max (int a, int b, int c) void main()
{
int temp; temp=a>b?a:b; temp=temp>c?temp:c; return temp; }
3、8051特有数据类型范例
华中科技大学文华学院
二、变量名称
可使用大/小写字母、数字或下划线(即_)。 第一个字符不可为数字。 不可使用保留字。 (1) 传统C的保留字
华中科技大学文华学院
(2) Keil C保留字
华中科技大学文华学院
全局变量、局部变量 (自动变量 )
华中科技大学文华学院
华中科技大学文华学院
4.5 C51运算符
一、算术运算符
华中科技大学文华学院