首先,现在接触的单片机是89C51,用的是89C52,内核是以51做的。只是52的内部程序空间是8kb。51为4kb。这些信息也包含在他们的名字里。
数字8表示该芯片为8051内核芯片。
9表示内部含Flash E^2PROM储存器。(其他数字代表啥并不能记住。。)
C表示CMOS
5固定不变
1代表该芯片内部程序储存空间的大小,1为4kb,2为8kb。
RC-STC单片机内部RAM(很熟悉吧)为512B,RD+ 表示内部RAM为1280B(真小。)
感觉上面的参数可能会用到,详细的就不写了,毕竟它的全名是STC 89C51RC 40C-PDIP 0707CU8138.00D(说真的,脑残才记全名)
详细的看图吧
开始用Keil来编程,至于为什么要用它呢,我也不知道,猜想的原因是它能够生成hex文件(十六进制文件hexadecimal)吧。而单片机只能下载hex或者bin文件(二进制文件 binary)。
下面列举关于编程时注意到的内容:
1.sfr关键字和sbit关键字
sfr 特殊功能寄存器的数据声明,声明一个8位的寄存器,声明16位的时要用sfr16。
例 sfr P0 = 0x80;表示把单片机内部地址0x80处的这个寄存器重新起名叫P0,我们就可以用P0来直接操作寄存器了。简单说就是给单片机内部的东西起个名字,方便我们访问它。
sbit 特殊功能位声明,也就是声明某一个特殊功能寄存器中的某一位。
例 sbit led = P1^0;表示把P1口的最低位定义为led。感觉也像是起个名字拿来用的,和上面的不同之处是sfr声明的是一个寄存器,sbit声明的是一个功能位,是个位。
另还有一个bit,它是用来定义一个位变量的,虽然我一次也没用到,不过我也没见到啊。。
2.位操作和总线操作(点亮led灯的时候)
位操作 在控制led灯亮的时候见到过,一条语句只能控制一个I/O口。形如led1 = 0;(点亮第一个灯)。
总线操作 不用定义位了,因为在reg52.h这个头文件里P1被sfr定义过了。单片机知道P1是什么东西。这时候就用十六进制数来表示灯的状态了。
点亮1,3,5,7就写P1 = 0xaa;。
3.无符号数uint(16位)和无符号字符(8位)
uint是宏定义来的,这个就不解释了,原称是unsigned int。
uint 是无符号整型,16位二进制,需要2个字节表达,其值范围为:0到65535。
uchar是无符号字符型,8位二进制,只需要1个字节表达,其值范围为:0到255。
4.数码管的位选和段选
位选来控制哪个数码管亮,段选控制数码管输出什么,例 P0 = 0x7F;。表示数码管显示数字8,0x7F的二进制是01111111。
书上的程序位选和段选都是由P0这个口来传输信号的,不知道其他是不是。(有点搞不清的感觉)
5.键盘
这个貌似最简单,直接几个if去判断键有没有按下去,按下去干什么,松开干什么,自己就随意玩去吧(可是并没啥好玩的)
6.中断啊,LCD啊,其他的下次再总结吧。