第四章单片机的C51语言简介2015.ppt
文本预览下载声明
单片机原理与应用;TOPICS;4.1 C51的程序结构;C51语言特点:;C51与标准C的比较:;C51与标准C程序结构完全相同。;举例:LED灯的闪烁控制功能;预处理命令---------;1. C51的变量 ;【存储种类】 数据类型 【存储类型】 变量名;【存储种类】 数据类型 【存储类型】 变量名;【存储种类】 数据类型 【存储类型】 变量名;C51扩充数据类型:bit、sfr或sfr16、sbit ;sfr或sfr16型; 用关键字“sfr16”来定义
“=”后面的地址必须用16位SFR的低字节地址,即16位SFR的低地址作为“sfr16”的定义地址,其高位地址在定义中没有体现。
sfr16 T2 = 0xCC;
//T2的低8位为0CCH,高8位为0CDH
sfr16 T0 = 0x8A;
//错误,不能这样定义定时器/计数器0;例如:sfr P0 = 0x80; //定义P0口地址80H
sfr PCON = 0x87; //定义PCON地址87H
sfr16 DPTR=0x82;
//定义DPTR,低端地址DPL=82H,高端地址DPH=83H;sbit型;sbit有三种定义方法:;C51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变量。;应用举例:;C51使用#define或typedef语句定义数据类型的别名。;eg:
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int WORD;
这样,在其后的程序就可以用uchar代替unsigned char,用uint或WORD代替unsigned int来定义变量,从而节省书写时间、减少错误和增强可读性。
如:
uchar x; //定义变量x为无符号字符型变量
uint y; //定义变量y为无符号整型变量
WORD z; //定义变量z为无符号整型变量;【存储种类】 数据类型 【存储类型】 变量名;C51存储类型与存储空间的对应关系;存储类型;三种编译模式分别对应于三种缺省(默认)存储类型。; 变量名由字母、数字和下划线三种字符组成;
第一个字符必须为字母或下划线;
变量名长度随编译系统而定。
变量名区分字母大小写。;变量名不得使用标准C语言和C51语言的关键字。;unsigned char data system_status = 0; ;unsigned char bdata status_byte; ;2. C51的指针 ;例1 若ptr是指向idata存储区的指针变量,该存储区将以无符号字符形式存放数据。要求ptr本身位于xdata存储区,值是位于idata存储区里的unsigned char型自动变量a(初值为‘A’)的地址。试据此完成相应变量的定义及初始化。;解:若编译器默认的存储类型为data,则指针pi自身被存放在data区内,它是指向 xdata 存储区的无符号字符型变量。;4.3 C51的绝对地址访问;#include absace.h //必须要,不能少
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
uchar varl;
uint var2;
var1=XBYTE[0x0008];
//访问片外RAM的0008H字节单元
var2=XWORD[0x1002];
//访问片外RAM的1002H字单元
......
while(1);} ;二、通过指针访问;三、使用C51扩展关键字_at_访问;4.4 C51的输入输出;4.4 C51的输入输出;表4?7 C51中的printf( ) 函数的格式字符及功能;转义字符:用来输出特定的不可显示的控制信息和字符。在其前面加反斜杠“\”组成转义字符。;二、输入函数scanf( ) ;#include reg51.h
#include stdio.h //一般I/O函数库,必须有
void main(void){
int x, y;
SCON = 0x52; //串行口工作于方式1
TMOD = 0x20; //定时器/计数器1选择模式2
TH1 = 0xF3; //设定波特率
TL1 = 0xF3;
TR1 = 1;
pri
显示全部