1.数码管的段选表必须会背,推是可以推出来的。但是,在比赛的时候,时间是宝贵的。会的话,会剩下一些时间。
uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xbf,0XFF};
上面这一段是数字0-9,-,清空三部分组成。
uchar code dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x20,0x78,0x00,0x10};
上面这一段是数字0-9加上小数点组成。
一定要会背!一定要会背!一定要会背!
2.使用_nop_函数,必须加上一个头文件:#include<intrins.h>
注:一个_nop_指的是一个机器周期
3.记住两个值: 2^8=256 2^16=65536
4.P0口有8个I/O口,控制LED灯,数码管。
5.15单片机有一个转接板,导致了P0口有些变化。P36→P42,P37→P44.以后,这两个口会时常的用起来。
重点来了!
6.在中断系统中,如何实现精确定时的?
在解释之前,需要区别两个概念:
机器周期:CPU完成一个基本操作所需要的时间。
时钟周期:一个时钟脉冲所需要的时间,即时序中的最小单位。
还需要晓得16位自动重载模式:定时器为16位的,可以从0记到65536.举个栗子:记5秒位 65536-50000=15536.若记满就溢出了,装载15536这个数,就开始计数,记到65536后,就开始自动重载了。
上正菜!
假定定时20ms:
用一个公式:12*(65536-x)/11059200=0.02
即可求得X=47104,此时是十进制的状态,需要转化为16进制为:DB 00.高8位:DB 低8位:00
7.注意code这个关键字,里面的学问很大。像前面的数码管的段选,就用code。这样做的目的在于,为了节约RAM的空间,而直接写入Flash中。它的原因是:段选数码管是不变的值,而Flash中就放一些不发生变化的值。
8.外设访问模式:
一.I/O扩展模式 (常用)
它通过J13条形帽进行配置,比较容易理解。
二.MM存储器映射扩展模式
它是一种可以像操作外部RAM存储器一样,操作LED灯,执行结构(蜂鸣器,继电器等外设资源的扩展模式)
9.逻辑符号:
向左移(>>),一般把最低位设置为高(1)。
向左移(<<),一般把最高位设置为高(1)。
经验总结:左移为:0x80; 右移:0x01;