因为资料比较少,
只有自己用一下,写一个自己的应用笔记吧,
LCD:注意频率,在几k 就好,不要太高, 针频率 和 对比度是成比例的,需要自己调解看看;
ADC:ADC定义之后,当转换之后,需要再一次定义一下ADC通道ADCH,ADCON可能被串改;
查询模式就是 不把中断打开,照样进行转换,启动转换后,不停查询ADCIF是否变成1,
变成1则表示转换完成。读取AD DATA后,请将ADCIF清0,再次开始转换。
GO/DONE表示ADC开始与结束,如果写1,则转换开始,如果被清0,
则转换结束在结束的同时,ADCIF置1,如果同时中断允许打开,则会同时产生中断。
ADCIF表示中断请求,置1表示中断请求已经有了,这个是中断系统的。
10位AD 用法 :
adl=ADDL; //读取低8位转换数据
adh=ADDH; //读取高2位转换数据
ADCH=1; //重设置通道
advalue=(adh<<2)+(adl&0x03); //将高低位数据进行合并
看门狗: 看门狗是长开的状态,需要我们软件不停的清标志位:RSTSTAT = Bin(00000000);//最长时间2048ms
Flash: 0x000H-0x3FFFH 是16k Flash区,
前面的EEPROM是在独立区,EEPROM无法在Memory窗口下看到的,所以用起来不是很方便,
所以直接从Flash区划分出最后一个区作为存储比较好用,0x3c00-0x3fff,1k空间;
f166的Flash操作的时候,不用设置读写时钟,方便了一些,
不过操作的时候注意关掉没有用的操作和中断,防止写坏flash,
其他用法和带Flash的其他单片机是一样。
调试经验:第一次擦除芯片,下载程序到芯片,硬件仿真,ok,退出硬件仿真,
第二次,直接硬件仿真,看你写的Flash数据ok。
Timer: 我们用timer2,我搞了2天,才发现,大家要注意变量,TF2 必须清0,要不Timer2会不停的进入中断,
出现这种错误,用示波器看大约237us的周期。
Timer4,工作在Bank1,必须定义T4CON之前要开启Bank1,
#define Enter_Bank0 INSCON&=0x3f
#define Enter_Bank1 {INSCON&=0x3f;INSCON|=0x40;}
默认状态是Bank0,进行切换Band1的时候,要关闭中断;最好每次都要定义一下Bank0。
Keill 应用:注意:每次都要,编译,生成hex,擦芯片,下载程序,硬件仿真,按照这个顺序就不会有错误了;
这个芯片很怪异,有的时候程序没有下载进去,就开始仿真了,所以要注意顺序。
仿真器:仿真器io 和 lcd io是复用的, 如果用lcd,就必须每次都要拔掉仿真器看结果,
用74hc4066做一个隔离,就不用每次都拔插仿真器了,隔离效果一般,不过可以用,廉价。(cd4066不可用)
如果io够用,可以避开哪几个复用io,就可以正常仿真了。
Ram: 内部256 字节,外部256字节,lcd 19字节,用着让人闹心;定义的上限data128, idata 128, xdata256