单片机C语言-程序结构

  先来复杂说说C言语的标识符和关键字。 标识符是用来标识源顺序中某个对象的名字的, 如果我们要定义一个定时器1, 可以写做“Timer1”, 那么这两个是完全不同定义的标识符。 标识符由字符串, 注意的是第一个字符必须是字母或下划线, 如“1Timer”是错误的, 有些编译系统专用的标识符是以下划线开头, 所以普通不要以下划线开头命名标识符。 含义清晰, 这样有助于阅读理解顺序。 在C51编译器中, 只支持标识符的前32位为有效标识, 普通情况下也足够用了。

  关键字则是编程言语保存的特殊标识符, 在顺序编写中不允许标识符与关键字相反。 在KEILuVision2中的关键字除了有ANSIC标准的32个关键字外还根据51单片机的特点扩展了相关的关键字(比方for, if, while等标准的还有sbit, 详细列表可以在网上查到)。 其真实KEILuVision2的文本编辑器中编写C顺序,

  char类型的长度是一个字节, 通常用于定义处置字符数据的变量或常量。 分无符号字符类型unsignedchar和有符号字符类型signedchar, unsignedchar类型用字节中一切的位来表示数值, 所可以表达的数值范围是0~255。 signedchar类型用字节中最高位字节表示数据的符号, 正数用补码表示。 所能表示的数值范围是-128~+127。

  ?牟孤胗朐胂喾矗?负二进制数的补码等于它的相对值按位取反后加1。 用于存放一个双字节数据。 是符合IEEE-754标准的单精度浮点型数据, 占用四个字节。 因浮点数的结构较复杂在当前再做详细的讨论。 在这个变量中存放的指向另一个数据的地址。 这个指针变量要占据一定的内存单元, 对不同的处置器长度也不尽相反, 在当前专门讨论。

  bit位标量是C51编译器的一种扩大数据类型, 利用它可定义一个位标量, 也不能定义位数组。 它的值是一个二进制位, 不是0就是1, 类似一些高级言语中的Boolean类型中的True和False。 如用sfrP1=0x90这一句定P1为P1端口在片内的寄存器, 在后面的语句中我们用以用P1=255(对P1端口的一切引脚置高电平)之类的语句来操作特殊功能寄存器。 所不同的是它用于操作占两个字节的寄存器,

  sbit是C51中的一种扩大数据类型, 利用它可以拜访芯片外部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。 如先前我们定义了sfrP1=0x90;, 意思是定义P1_1为P1中的P1. 同样我们可以用P1. 如sbitP1_1=0x91;, 这样我们在当前的顺序语句中就可以用P1_1来对P1. 1引脚进行读写操作了。 通常这些可以直接运用系统提供的预处置文件(如reg51. AT89X51. h), 里面已定义好各特殊功能寄存器的复杂名字, 当然你也可以自己写自己的定义文件, 用你认为好记的名字。

  以上就是Keil51中常用的数据类型, 下面我们来看一个跑马灯的顺序, #####include//预处置文件里面定义了特殊寄存器的称号, 因这里我们的LED要AT89C51的P1引脚为低电平才会点亮, 所以我们要向P1口的各引脚写数据0, 对应连接的LED才会被点亮, P1口的八个引脚刚好对应P1口特殊寄存器的八个二进位, 如向P1口定数据0xFE, 转成二进制就是11111110, 最C言语低位D0为0, 这里P1. 0引脚输入低电平, LED1被点亮。 如此类推, 效果就出来, 不要超过变量类型的值域就行了。 还记得Keil的I/O口仿真功能吗?看看这里就知道该怎么办了。

  回到顺序中来, 第一句的#include跟C言语里面的引用是一样的, 所以P1可以直接运用不会出错啦。 do-while循环保证单片机不时循环工作。

  下面我们把顺序换一种方式写, 以加深对寄存器的理解。

你可能感兴趣的:(单片机C语言-程序结构)