2016年10月9日星期日

单片机中unsigned char 和unsigned int的区别

单片机中unsigned char 与 unsigned int的区别如下:
  unsigned char 是无符号字符,数据长度是8位,表示值范围从0~255
  unsigned int 是无符号整数,数据长度是16位(或者32位,看单片机的型号而定),表示范围从0~65535(或者0~4294967295)
uint 是无符号整型,16位二进制,需要2个字节表达,其值范围为:0到65535。
uchar是无符号字符型,8位二进制,只需要1个字节表达,其值范围为:0到255。
显然,如果delay函数定义为delay(uchar z),你在调用delay函数时,传递的参量不能超过255,否则就会得到意想不到的后果。另外,在delay函数内部,传递的延时量z用unchar型和unint型,即使是用同一个传递数字,例如都是用delay(100),因为运算量的不同,它们之间还是有些差异的。
这里所谓的运算量是指编译成汇编后的运算,从C源程序是看不出来的。

2016年6月2日星期四

单片机编码表 unsigned char code table[] 的理解

 code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面,其实是相当于汇编里面的寻址MOVX,因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。

unsigned char code table[] 用 code 表示代码编译完了,数据会放到程序存储区(ROM)当中.如果不用,数据会放到随机储存器单中(RAM)(寄存器).

一个单片机的随机存储器是有限制的。51单片机的RAM是128个字节。你每定义一个char的变量,它占用的就是RAM中的一个字节。用unint占用的是两个字节。
一个芯片内部的RAM非常宝贵。

51单片机中的ROM有4kb(4千个字节),远远大于RAM中的128b.所以把这个固定的编码数据放在ROM中可以节约宝贵的RAM空间。

数码管静态和动态显示

动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
静态显示通常只有一个数码管的情况下用,直接把段码送到数码管就可以了。阴极直接接地。如果数码管较多一般是不用的,因为IO口不够。动态显示,对于共阴极数码管,把所有数码管的阳极并联后接到单片机IO口上作为段码。把所有阴极顺次接到单片机IO口上作为位码。通过控制位码实现控制单一数码管显示,通过控制段码来控制显示内容。然后通过循环点亮的形式依次点亮各个数码管,并保留一小段时间,只要时间合适就可以让人的视觉看起来都是亮的。


四位数码管引脚图(共阳极)




2016年5月27日星期五

单片机的基本时序

机器周期和指令周期


1:震荡周期:也称时钟周期,是指单片机提供时钟脉冲信号的震荡源的周期;
2:状态周期:每个状态周期为时钟周期的2倍,是震荡周期二分频后得到的。
3:机器周期:一个机器周期包含6个状态周期s1--s6, 也就是12个时钟周期.在一个机器周期内,CPU可以完成一个独立的操作。
4:指令周期:它是指cpu完成一条操作所需要的全部时间。每条指令执行时间都是有一个或几个机器周期组成。