找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3320|回复: 0
收起左侧

单片机学习札记3

[复制链接]
ID:3721 发表于 2015-1-5 14:17 | 显示全部楼层 |阅读模式
                                                                                                单片机C51语言基础
1.变量
C51支持的变量通常有如下类型:
bit定位在CPU片内数据存储区(RAM)的可位寻址空间中,char(unsigned char 8位):两者直接支持机器指令。
int(8051系列CPU将整形变量的msb存放在低地址字节)、long int、float
2.变量的存储
8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开。
3.8051片内资源及位变量
①特殊功能寄存器
sfr,sfr16(直接寻址)
sfr P1=0x90;//定义P1口,地址90H
sfr P2=0xA0;//定义P2口,地址A0H
sfr16 T2=0xcc;这里定义8052定时器2,地址为T2L=CCH,T2H=CDH
(用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要卫浴物理低位地址之上)
sbit可以访问位寻址对象,可单独访问SFR中的位。
㈠sbit 位变量名=位地址
sbit P1_1=0x91;sbit位地址同sfr一样,位于80H~FFH间
㈡sbit 位变量名=特殊功能寄存器名位位置
  sfr P3=0xB0;
  sbit P3_1=P3^1;(将P3_1定义为P3口的P3.1引脚)
㈢sbit 位变量名=字节地址^位位置
sbit P3_1=0xB0^1;
②位寻址区及位变量定义
C51提供一个bdata的存储器类型,用于访问单片机的可位寻址区的数据。
(bdata:可位寻址内部数据寄存器(16B),允许位与字节混合访问)
unsigned char bdata age;//在位寻址区定义unsigned char,int bdata score[i];//在可位寻址区定义数组score【 i】
sbit flag=age^1;//用关键字sbit定义位变量来独立访问可寻址位对象其中的一位。
C51提供关键字“bit”实现位变量的定义及访问bit flag;//将flag定义为位变量
注意事项:1.位变量不能定义成一个指针
2.不能定义位数组
3.bit与sbit的不同(bit不能指定位变量的绝对地址,当需要指定位变量的绝对地址时,需要使用sbit来定义)
例2 sbit flag=P1^0;
sbit定义要求基址对象的存储类型为bdata,否则只有绝对的特殊位定义(sbit)是合法的。位置(^操作符)后的最大值依赖于指定的访问对象型,对于char,uchar而言是0-7,对于int、uint而言是0~15。
typedef(通常定义变量的数据类型时都是使用标准的关键字,方便别人阅读程序。使用typedef可以方便程序的移植和简化较长的数据类型定义)
注:typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型
C51支持的主要编译模式:
SMALL:函数参数及局部变量放大片内RAM,另外所有对象包括栈都优先放置于片内RAM,片内用满再向片外RAM放置。
COMPACT:参数及局部变量放在片外RAM,通过R0,R1间接寻址,栈位于8051片内RAM。
LARGE:参数及局部变量直接放入片外RAM,使用数据指针DPTR间接寻址。

例:定义一个可位寻址变量flag,该变量位于23H单元,用sbit指令定义该变量的八个位,变量名为flag0……flag7。运用以上知识就不难写出来了。呵呵。


相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表