【文档说明】单片机C语言-第2章51单片机硬件及C51编程基础-4课件.ppt,共(12)页,235.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44624.html
以下为本文档部分文字说明:
2.4对单片机主要资源的控制•2.4.1特殊功能寄存器的定义•2.4.2绝对地址的访问•2.4.3位变量的定义1、采用关键字进行定义(1)sfr特殊功能寄存器名字=特殊寄存器地址80C51单片机片内RAM中与idata空间相重叠的高128字节(地址范围
80~FFH)称为特殊功能寄存器(SFR)区,单片机内部集成功能的操作都是通过特殊功能寄存器来实现的。为了能够直接访问80C51系列单片机内部特殊功能寄存器,C51编译器扩充了关键字sfr和sfr16,利用这种扩充关
键字可以在C51源程序中直接定义80C51单片机的特殊功能寄存器。例如:sfrP0=0x80;/*定义P0寄存器,地址为0x80*/sfrSCON=0x90;/*定义串行口控制寄存器,地址为0x90*/2.4.1特殊功能寄存器的定义•(2)sfr16:在80C51单片机中,特殊功能寄存
器经常组合成16位来使用。采用关键字sfr16可以定义这种16位的特殊功能寄存器。当SFR的高端地址直接位于低端地址之后,采用sfr16直接访问。•sfr16T2=oxcc;//定时器T2低8位地址为0xcc,•高8位地址为0xcd•2、通过头文件访问SFR:把头文#i
nclude<reg51.h>加入到程序中。(1)采用sbit定义关键字sbit用于定义可独立寻址访问的位变量,简称可位寻址变量。C51编译器提供一个存储器类型bdata,带有bdata存储器类型的变量定位在80C51单片机片内RAM的可位寻址区,带有bdata存储器类型的变量可以
进行字节寻址也可以进行位寻址,因此对bdata变量可用sbit指定其中任意位为可位寻址变量。3、SFR中位定义(2)定义方法有如下三种:1)sbit位变量名=特殊功能寄存器名^位置当可寻址位位于特殊功能寄存器中时可采用这种方法,“位位置”是一个0~7之间的常数。sfrPSW=0xD0;sb
itOV=PSW^2;2)sbit位变量名=字节地址^位置这种方法以一个常数(字节地址)作为基地址,该常数必须在0x80H~0xFF之间。“位位置”是一个0~7之间的常数。sbitOV=0XD0^2;3
)sbit位变量名=位地址这种方法将位的绝对地址赋给位变量,位地址必须位于0x80~0xFF之间。sbitOV=0XD0;2.4.2绝对地址的访问•两种方法:•1、绝对宏:采用头文件#include<absacc.h>,即可
使用其中的宏来访问绝对地址例题:•#include<absacc.h>•#definePAXBYTE[0xffec]•#defineNRAMDBYTE[0x40]•voidmain(void)•{PA=0x3A;•NRAM=0x01;•}2、_at_关键字•[存储类型]数据类型
变量名_at_地址常数;•例题:•dataunsignedcharx1_at_0x40;•xdataunsignedintx2_at_0x2000;•voidmain(void)•{x1=0xff;•x2=0x1234;•while(1);•}2.4.3SFR中的位及位变量的C51定义•
1、SFR的位定义•sbit位名=SFR名^位置;•如:sbitLED0=P1^0;•2、位变量的C51定义•(1)采用关键字bit进行定义•biti1;在C51程序中可以定义bit类型的变量、函数、函数参数及返回值。例如:staticbitdone_flag=0;/*bit类型变量*/bit
testfunc(/*bit类型函数*/bitflag1,/*bit类型函数参数*/bitflag2){……;return(0);/*bit类型返回值*/}所有bit类型的变量都被定位在80C51片内RAM的可位寻址区。(2)可位寻址对象:位变量的存
储类型只能是bdata,使用时先说明字节变量的数据类型和存储类型,然后采用bit定义可寻址访问的对象位。例如,可先定义变量的数据类型和存储器类型如下:intbdataibase;/*定义ibase为bdata整型变量*/charbdatabar
y[4];/*定义bary[4]为bdata字符型数组*/然后使用sbit定义可位寻址变量如下:sbitmybit0=ibase^0;/*定义mybit0为ibase第0位*/sbitmybit15=ibase^15;/*定义mybit15为ibase第15位*/sbit
Ary07=bary[0]^7;/*定义Ary07为bary[0]第7位*/sbitAry37=bary[3]^7;/*定义Ary37为bary[3]第7位*/•(3)对位变量定义的限制•1)位变量不能定义为指针,•例如,不能定义bit*bitpoi
nter•2)不存在位数组,•例如,不能定义bitb_array[]