目录

背景知识

数据类型总结

1、位变量——bit

2、特殊功能寄存器——sfr

3、16位特殊功能寄存器——sfr16

4、可寻址位——sbit

5、指针类型

类型转换


背景知识

Keil C51是美国Keil Software公司开发的51系列兼容单片机的C语言软件开发系统。

(1)编译器C51:美国标准优化C交叉编译器C51可以把C源代码转换成可重定位的目标文件

(2)汇编器A51 :汇编器A51把MCS-51汇编源代码转换成可重定位的目标文件

(3)连接/重定位器BL51:BL51组合由C51和A51产生的可重定位的目标文件生成绝对目标文件。

(4)库管理器LIB51:LIB51组合目标文件生成可以被连接器使用的库文件。

(5)转换器OH51:OH51将绝对目标文件转换成Intel HEX 格式的可执行文件。

(6)监控程序Monitor-51:用Monitor-51进行目标板调试时,此监控程序驻留在目标板的存储器里。

(7)实时操作系统RTX-51:实时操作系统RTX-51简化了复杂和对时间要求敏感的软件项目的开发。

数据类型总结

KEIL C51 编译器所支持的数据类型如下表所示:

1、位变量——bit

bit 位变量是C51 编译器的一种扩充数据类型,它的值是一个二进制位,不是0 就是1。

(1) 位变量的C51定义

位变量的C51定义的一般语法格式如下:

位类型标识符(bit)  位变量名;

例如:

bit  direction; /* 把direction定义为位变量 */

bit  allright ; /* 把allright定义为位变量 */

(2) 函数可包含类型为"bit"的参数,也可以将其作为返回值。

例如:

bit func(bit b0, bit b1) /*变量b0,b1作为函数的参数*/

{

return (b1);     /* 变量b1作为函数的返回值 */

}

(3) 对位变量定义的限制。

位变量不能定义成一个指针,如不能定义:

bit  * bit_point。

不存在位数组,如不能定义:

bit  b_array[ ]

2、特殊功能寄存器——sfr

sfr 也是一种扩充数据类型,值域为0~255用于访问51单片机内部的所有特殊功能寄存器。特殊功能寄存器C51定义的一般语法格式如下:

sfr  sfr-name =  int  constant

其中“sfr”是定义语句的关键字,其后必须跟一个MSC-51单片机真实存在的特殊功能寄存器名,“=”后面必须是一个整型常数,不允许是带有运算符的表达式,是特殊功能寄存器“sfr-name”的字节地址,这个常数值的范围必须在SFR地址范围内,位于0x80-0xFF。

如用:sfr P1 = 0x90 定义P1为P1端口在片内的寄存器,在程序中我们用P1 = 255(对P1 端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。

C51对常用的特殊功能寄存器都在reg51.h或reg52.h中作了定义。

3、16位特殊功能寄存器——sfr16

同sfr一样,sfr16为C51的扩充数据类型,只不过是用来定义单片机的内部16位特殊功能寄存器,并且占用两个内存单元例如:DPTR、定时器T0 和T1。

sfr16定义语句的语法格式与8位SFR相同,只是"="后面的地址必须用16位SFR的低字节地址,即低字节地址作为"sfr16"的定义地址。

例如:

sfr16  T2 = 0xCC /*定时器/计数器2:T2低8位地址为0CCH,T2高8位地址为0CDH*/

4、可寻址位——sbit

sbit 也是C51 中的一种扩充数据类型,利用它可以访问芯片内部的RAM 中的可寻址位或特殊功能寄存器中的可寻址位。它有三种定义格式:

第一种格式

        sbit  bit-name = sfr-name^int constant

寻址位符号名bit-name(必须是MCS-51单片机中规定的位名称),“=”后的“sfr-name”必须是已定义过的SFR的名字,“^”后的int constant(整常数)是寻址位在特殊功能寄存器“sfr-name”中的位号,必须是0~7范围中的数。

例如:

sfr   PSW=0xD0 ; /* 定义PSW寄存器地址为D0H */

sbit  OV=PSW^2 ; /* 定义OV位为PSW.2,地址为D2H */

sbit  CY=PSW^7 ;/* 定义CY位为PSW.7,地址为D7H */

第二种格式:

      sbit  bit-name = int constant^int constant;

“=”后的int constant为寻址地址位所在的特殊功能寄存器的字节地址,“^”符号后的int constant为寻址位在特殊功能寄存器中的位号。例如:

sbit OV=0XD0^2 ;/* 定义OV位地址是D0H字节中的第2位 */

sbit CY=0XD0^7 ;/* 定义CY位地址是D0H字节中的第7位 */

第三种格式:

        sbit  bit-name = int constant

“=”后的int constant为寻址位的绝对位地址。例如:

sbit  OV=0XD2 ;           /* 定义OV位地址为D2H */

sbit  CY=0XD7 ;             /* 定义CY位地址为D7H */

注意sbit和bit区别:bit和其他普通变量类型(如int)类似,只不过是定义的是一个位普通变量,而sbit定义的位必需是特殊功能寄存器或内部RAM区中的可寻址位。

5、指针类型

指针型数据本身就是一个变量,存放的是指向另一个数据的地址。对于指针的定义和标准C语言相似,例:char * pt;定义一个指向字符型变量的指针。指针变量同样要占据一定的内存单元,在C51 中它的长度一般为1-3个字节。3个字节的指针包括:1个字节存储类型和2个字节偏移地址如下表所示:

关于C51的变量,这里补充两点:

(1)除了使用上述数据类型外,程序员还可以根据自己的习惯或爱好对数据类型进行重新定义,定义格式如下:

typedef  已有的数据类型  新的数据类型;

例如:

typedef unsigned char uchar  ;将数据类型unsigned

;char用uchar代替。

uchar  c   ;定义一个unsigned char数据变量c

注意:这里并没有增加新的数据类型,只是对已有的某种数据类型用另一种符号表示而已。

(2)C语言是一种强类型语言。在进行表达式求值或运算时,必须使各个变量的数据类型一致。

类型转换

一、用强制类型转换符“()”对数据类型进行显式转换

二、隐式转换顺序如下:

     bit→char → int → long → float

     signed → unsigned

如果有几个不同数据类型的数据同时参与运算,先将低级别的数据类型隐式转换为高级别类型后再做运算,并且运算结果为高级别数据类型。

C51 常见数据类型详解相关推荐

  1. chisel常见数据类型详解(更新)

    主体内容摘自:https://blog.csdn.net/qq_34291505/article/details/87570908 一.Chisel的数据类型 Chisel定义了自己的一套数据类型,读 ...

  2. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  3. python六大数据类型详解

    python 六大数据类型详解 文章目录 python 六大数据类型详解 数据类型简介 Number(数值) String(字符串) Python字符串的45个方法详解 一.大小写转换 01.capi ...

  4. mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别

    mysql用户权限管理(Grant,Revoke) MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL 指令Grant(分配权限)和Revoke(回收权限)来实现. Gran ...

  5. Redis入门 - 数据类型:5种基础数据类型详解

    Redis所有的key(键)都是字符串.我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String.List.Set.Zset.Hash Redis入门 - 数 ...

  6. MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解

    MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...

  7. SQL Server 2005 常用数据类型详解

    SQL Server 2005 常用数据类型详解 [b]1. 字符串数据类型[/b] char 此数据类型可存储1~8000个定长字符串,字符串长度在创建时指定:如未指定,默认为char(1).每个字 ...

  8. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  9. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

最新文章

  1. Mysql与Oracle区别
  2. 使用舵机PWM信号控制直流电机的转动
  3. 简单几步制作软raid
  4. PaaS case study
  5. spring-boot-autoconfigure-xx.jar核心注解
  6. servlet实现用户登录
  7. 【pyqt5】配置Qt Designer之【designer.exe的保存位置及ui文件转py文件及no Qt platform plugin could be initialized 问题解决】
  8. 线程并发库和线程池的作用_并发–顺序线程和原始线程
  9. 【Elasticsearch】Elasticsearch的IndexSorting:一种查询性能优化利器
  10. 计算两经纬度坐标间的距离
  11. 进程间通信方式有哪些?各自有哪些优缺点?
  12. 工控机与arm主板有什么不同
  13. 股票模拟交易日志(一)
  14. PRODUCT_CHARACTERISTICS 详解
  15. link2SD的原理以及开启方法
  16. JSP-java服务器端页面【学习笔记】
  17. postman点击一次连续发送多个请求
  18. 查找和排序算法的js实现
  19. SQLSever期末考试作业复习卷一
  20. Subtext3 - 安装配置

热门文章

  1. AMRP高级物料需求计划是什么?
  2. python语言的编程模式是什么意思_编程语言Python,可以用来干什么
  3. GLSL常见函数[转]
  4. 【Python-分布式】MPI集群环境搭建
  5. 如何制作动画视频,用它准没错 | 万彩动画大师
  6. Luminar 4:比以往任何时候都更加清晰
  7. X86架构与Arm架构的主要区别分析
  8. vue2笔记(尚硅谷)
  9. 来,让携程技术人带你“看”世界——2020携程技术年度盛典侧记
  10. 【计算机动画】实验 路径曲线与运动物体控制/FFD/关键帧动画