这几天我放弃我们学校那边的电赛培训而跟李老师做项目,因为那边的培训越来越觉得是一个幌子。这个项目的基本思路其实很简单,相信会单片机的人应该很容易明白。他其实就是一对多的相互通信,通过红外传输,刚开始李老师选的红外通信是用的IRDA协议,发送接收管用ZH1810,可是它里面没有IRDA的协议,需要自己写,我们花了一个晚上,也没找到什么可靠的资料,我们也实验过,没有成功。于是李老师决定换方案,采用现成的模块,直接通过串口发送,这样就不需要我们软件来解码,基本上就相当于一个一对的串口通信,采用分时的思维来实现。先前没用过51做项目,自己应付考试也是临时把51的基本功能所对应的寄存器地址熟悉下,可惜的是我记这玩意的记忆力细胞实在少得可怜。都是通过边翻书边解决所遇到的问题的。呵呵,我花了一天的时间把液晶【128*64】显示做出来【ST7920】,这个芯片驱动很扯蛋,汉字是16*16的很正常,字母都16*8,太可恶啦,还有没有与,或,异或,同或的功能,而我们这个项目要显示一行汉字——中南民族大学,接下来显示6行温度测量的度数,而且每一行一个实测温度,一个与之对应的报警温度,也就是说一行对应一个从机所测的温度,如果超过我们认为设【通过按键实现】的温度时,就报警,好在我4月份用ARM 写过6960【驱动芯片】的液晶,看ST7920的资料没费什么劲,可是这个界面写下来还是花了我一天时间。呵呵,笨啊,菜鸟一个。
第二天,即昨天我开始写串口通信的协议,呵呵,这玩意我最痛苦啦,由于我用的是仿真器,而且只有一个仿真器,另一个不知道为啥罢工啦,李老师说另一个就用烧录器,呵呵,这个问题也花了我好几个小时,主要是电脑的并口也罢工啦,好在找到原因并解决啦,怎么解决的,换台电脑。呵呵,然后开始调试程序,真是奇了怪了,我分别主机自发自收没问题,从机自发自收没问题,联机就是不听话,然后我通过示波器一一把问题解决,到最后显示时,已经是晚上7点啦,真是奇怪,他怎么一会显示是正确的,复位后又不正确,再复位又可以,当时实在费解,我主机里面专门有校验的程序的,怎么可能会出现这样的情况呢,如果是接收不是我要的数据,他压根就不会显示,呵呵,别急,会有办法的,当时我一步一步的的运行,呵呵,怎么单步运行怎么没问题,难道是波特率快啦,2400不快吧,先改小点看看,于是把它改为1200,得了,集体罢工,无论我怎么弄都不行啦,改回2400也不行啦,一直找到晚上10点,还没找到,当时真不想走啊,可是宿舍10点就要关门了的,还是走吧,今天早上一来,我随意的看了一下仿真器,发现仿真器上面有个晶振,仔细一看是我的板子上的一半大,于是我马上想到难道是它在作怪,先试试看,呵呵,果然是它,真要我命。可是主机我一复位,接收的不是温度,我单步运行【这篇所说的单步运行就是设一个断点,在哪设,网友们自己想想看】却又可以,真笨啊我,刚开始我以为我主机的校验程序有问题,怎么看也没有发现,突然灵光一想,为什么我中断一下可以,中断一下有什么影响,延迟,马上就想到了它,呵呵,搞定,然后我又把一个从机分别扮演6个从机的角色,主机发送数据命令那个从机发送温度,主机校验后把温度显示出来。就这样这么个小玩意弄了我2天半,不过收获还算很大的,至少里面所遇到的问题以后有良策啦。
不过我还么有把红外的模块添上去,不知道添了后有没有影响,不过我敢肯定会有,因为我还没有玩过这红外,呵呵,不过我相信我能解决,毕竟我旁边还有个老师呢,李老师真的肯教东西,比起我们的小危不知道强哪去啦,一提起他,让我白白花费了5、6 月份时间,真想揍他。
|