第四章C51语法简介.ppt
《第四章C51语法简介.ppt》由会员分享,可在线阅读,更多相关《第四章C51语法简介.ppt(30页珍藏版)》请在三一文库上搜索。
1、第四章 C51语法简介,河工科技 瓮嘉民制作,第四章 C51语法简介,第五节 51单片机SFR中可位寻址的单元的位的定义,第四节 直接对51单片机的SFR的定义,第三节 变量定义的格式,第二节 数据与数据类型,第一节 关键字,第六节 51单片机中可位寻址区(0x200x2f)的访问,第十一节 C51的运算符和表达式,第十节 中断服务函数与寄存器组定义,第九节 函数的递归调用与再入函数,第八节 51单片机外扩I/O的访问,第七节 关键字bit和sbit区别,第十二节 C51流程控制语句,第十三节 C51的指针类型,第一节 关键字,表4-1 ANSI C标准的关键字,表4-1 ANSI C标准的关
2、键字 续表,表4-2 C51编译器的扩展关键字,第二节 数据与数据类型,数据具有一定格式的数字或数值叫做数据。 数据类型数据的不同格式叫做数据类型。 数据结构数据按一定的数据类型进行的排列、组合构架称为数据结构。,表4-3 Keil Vision2 C51编译器能够识别的数据类型,第三节 C51中变量定义的格式,C51中对变量进行定义的格式,表4-4 Keil C51编译器所能识别的存储器类型,存储器模式SMALL、COMPACT或LARGE来规定默认存储器类型, 确定变量的存储器空间,第四节 C51中直接对51单片机的SFR的定义,sfr 特殊功能寄存器名 地址常数; 例如: sfr P0
3、= 0x80 ;/定义I/O口P0,其地址为0x80,注意: (1)sfr后面必须跟一个标识符作为寄存器名,名字可任意选取, 但应符合一般习惯。,(2)等号后面必须是常数,不允许有带运算符的表达式, 而该常数必须在SFR的地址范围之内(0x800xff)。,(3)新一带8051单片机,SFR经常组合成16位来使用。 采用关键字sfr16 来定义。例如对8052的定时器T2, 可采用如下方法定义: sfr16 T2 = 0xcc; /定义TIMER2,其地址为T2L=0xcc,T2H=0xcd,第五节 C51中对51单片机的SFR中可位寻址的单元的位的定义,方法3:sbit 位变量名字节地址位位
4、置; 这种方法以一个整常数作为基地址,该值必须在0x800xff之间。“位位置”是一个0 7之间的常数。 例如:sbit OV=0XD02; sbit CY=0XD07;,定义方法有如下三种:,方法1: sbit 位变量名 位地址 ; 该方法将位的绝对地址赋给位变量, 位地址必须位于0x800xff之间。 例如: sbit OV=0xd2; sbit CY=0xd7;,方法2:sbit 位变量名特殊功能寄存器名位位置; 当可寻址位位于SFR时,可采用这种方法。特殊功能寄存器名必须是已定义的SFR的名字。“位位置”是一个07之间的常数。 例如: sfr PSW=0xd0; /定义特殊功能寄存器名
5、字 sbit OV = PSW2; /定义特殊功能寄存器中的位 sbit CY=PSW7; /定义特殊功能寄存器中的位,第六节 C51对51单片机中可位寻址区(0x200x2f)的访问,C51编译器提供了一个bdata存储器类型,允许将具有bdata类型的对象放入51片内可位寻址区。 例如: int bdata ibase; /在位寻址区定义一个整型变量ibase char bdata bary4;/在位寻址区定义一个数组bary4 使用关键字sbit 可独立访问可位寻址对象中的某一位。 例如: sbit mybit0=ibase0;,第七节 关键字bit 与sbit区别,sbit是一个独立的
6、关键字。 bit是C51编译器的一种扩充数据类型,用来定义一个普通位变量,它的值是二进制数的0或1。 一个函数中可包含bit类型的参数,函数的返回值也可以为bit类型。,例如:static bit direction_bit; /定义一个静态位变量direction_bit extern bit lock_prt_port; /定义一个外部位变量lock_prt_port bit func(bit b0,bit b1) /*语句*/ return (b1); ,不能定义位指针,如不能定义: bit *bit_pointer; 也不能定义位数组,如不能定义:bit b_array;,第八节 51
7、单片机外扩I/O口的访问,访问外部I/O口的方法有三种。 1绝对宏 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE,XBYTE,PWORD,DBYTE,CWORD,XWORD,PBYTE,DWORD 具体使用可看一看Keil C51中的absacc.h头文件便知。例如: rval=CBYTE0x0002; / rval指向程序存储器的0002H地址 rval=XWORD0x0002; / rval指向外RAM的2 sizeof (unsigned int) = 0004H地址 2_at_关键字 直接在数据定义后加上_at_ const 即可,但是注意: (
8、1)绝对变量不能被初始化; (2)bit型函数及变量不能用_at_指定。例如: idata struct link list _at_ 0x40 ; /指定list结构变量从40H开始,其中link 是结构,list是结构变量名 xdata char text256 _at_ 0xE000;/指定text数组从0E000H开始 特别提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述。 3宏定义 例:#include #define rval CBYTE0x0002 / rval 指向程序存储器的0002H地址 #define rval XBYTE0x00
9、02 / rval 指向外RAM的2 sizeof (unsigned int) = 0004H地址.,第九节 函数的递归调用与再入函数,在调用一个函数的过程中又间接或直接地调用该函数本身称为函数的递归调用。,再入函数是一种可以在函数体内不直接或间接调用其自身的一种函数,显然再入函数是可以进行递归调用的。,函数类型 函数名(形式参数表) reentrant 再入函数可被递归调用,无论何时,包括中断服务函数在内的任何函数都可调用再入函数。,中断服务函数的一般形式为: 函数类型 函数名(形式参数表)interrupt n using n,第十节 中断服务函数与寄存器组定义,表4-5 常用中断号与中
10、断向量,编写51单片机中断函数时应遵循以下原则: (1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明,都将导致编译出错。 (2)中断函数没有返回值,如果企图定义一个返回值,将得不到正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。 (3)在任何情况下,都不能直接调用中断函数,否则会产生编译错误。因为中断函数的退出是由51单片机指令RETI完成的,RETI指令影响51单片机的硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,则RETI指令的操作结果会产生一个致命的错误。 (4)如果在中断函数中调用其他函数,则被调用函数所使用的寄存器组必须与
11、中断中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须引起足够的注意。如果定义中断函数时没有使用using选项,则由编译器自动选择一个寄存器组作绝对寄存器组访问。另外,由于中断的产生不可预测,中断函数对其他函数的调用可能形成递规调用,需要时可将被中断函数所调用的其他函数定义成再入函数。 (5)C51编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号。该向量包含一个到中断函数入口地址的绝对跳转。在对源程序编译时,可用编译控制命令NOINTVECTOR抑制中断向量的产生,从而使用户有能力从独立的汇编程序模块中提供中断向量。,一、算术运算符和算术表达式,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 C51 语法 简介
链接地址:https://www.31doc.com/p-3458444.html