本帖最后由 qiangtech 于 2018-10-17 09:47 编辑
1. 项目要求:接收无线信号,并进行解码。解码正确后,LED闪烁提示,蜂鸣器鸣叫一声提示。1604 LCD显示无线信号的信息。用途是对指定的无线发射部分进行测试,如遥控器等,用途比较单一,功能比较简单。 2. 使用的工具: 软件:keil uV4 硬件板:把官方配发的硬件板上的IC焊下来,直接焊到以前准备的硬件板上。就不用接那么多的线了。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF855.tmp.jpg 还需要一个433MHz的接收模块。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF866.tmp.jpg 按图纸连接好硬件后,开始做软件。 3. 软件调试: 项目的功能要求比较简单,只需要用到了单片机的IO功能和一个定时器。 关于IO口功能,DEMO中初始化的写法是: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF877.tmp.jpg 我个人不太喜欢这种一位一位的计算,然后计总的写法,所以我在头文件中做了一些修改,类似于新唐写的那样。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF887.tmp.jpg 改完后,就可以单独对每个脚进行初始化了。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF888.tmp.jpg 个人觉得这样对照原理图检查的时候会方便一些。看个人喜好,其它外设也可以这样做一些预定义,写主程序的时候就会更新晰一点。 定时器:8003的定时器除了BTM之外,还有3个标准定时器。TIMER0,1,2. TIMER2与另两个定时器有很大不同,主要体现在两处: 1. TIMER0,1定时器不能自动重加载,而TIMER2可以。 2. TIMER0,1定时器不需要软件清除中断标志位,进入中断后硬件自动清除。而TIMER2是需要软件清除标志位的。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF899.tmp.jpg 大家可以看到,TIMER0,1与TIMER2的中断里面的处理是不一样的,这一点在需要定时器的替换代用的时候要注意。 另外:在DEMO CODE中关于定时器初始化部分写出来的令人费解的注释: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF89A.tmp.jpg 这注释和代码是怎么关联起来的?还是没看懂。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF8D9.tmp.jpg 自已改的。 关于定时器计算中的Fsys,是在KEIL选项中设置的,如: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF8DA.tmp.jpg Fosc是固定的16MHz.调节这个SYSTEM CLOCK可以直接影响到定时器的时钟,从而影响时长。 前面设置定时器时长为50uS,用逻辑分析仪实测: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF8EB.tmp.jpg 逻辑分析仪设置的采样率为2M,误差就应该是0.5uS.这样看起来定时器的误差最少有2uS.这个是时钟的误差造成的吗? 把IO口和定时器调试完成后,1604 LCD和无线编码接收都是比较通用的程序,按照时序要求很顺利完成了项目目标。 附原理图。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF8EC.tmp.png
|