我从别人那里拿到一块带有新华龙单片机的实验板,准备试一些小程序.单片机型号是C8051F005,由于我知道它也是51内核,所以我也没太细看数据手册,就开始写个小程序做实验.
我看到单片机的I/O口接有一个发光二极管,我就寻思着先从这里开始吧,先写个小程序,把发光二极管点亮再说.然后我就写了一条CLR指令(发光二极管负极接的I/O口),然后就让把程序输到芯片中,结果发光二极管一直不亮!我想了想,有两个可能,一个是一开始没加延时程序,一个是可能单片机复位后电流驱动能力太差。然后我就加了个延时程序,又看了下数据手册,将对应的I/O口改成了推挽输出。可是程序运行后,发光二极管还是不亮。我想不出为什么来,单步调了半天,程序执行了CLR指令后,对应的I/O口却还是高电平!哎,没办法,只好再慢慢看数据手册。从手册中得知,在使用I/O口之前,还需要使能交叉开关,我在程序里再加了这样一条指令后,可发光二极管还是不亮!!这下怎么办呢?单步调试下吧,结果发现好象前边的延时太长,总也执行不完。我就把延时时间改少了好多,这下,谢天谢地,发光二极管终于亮了。
在点亮发光二极管后,我就打算做个循环,让它闪亮。结果我又写一段程序,延时点亮,再延时后熄灭,如此循环。可是就这么简单的一个小程序,还是有毛病!我看着发光二极管亮的时间长,灭的时间很短。进一步的实验发现,延时周期短的话正常,延时时间长的话就不正常了,甚至发光二极管基本不灭了。那我只好重新单步调试了,可是这样太慢了,IDE里边的多步配置的修改不起作用,而且新华龙的IDE也不能观察程序段运行的时间。后来我发现IDE里边有个“watchpoints”的变量监视的功能还是挺好用的,然后我再设置一些断点(真奇怪为什么在新华龙的IDE里边最多只能设四个断点),研究了半天后发现,程序会在延时程序中一段程序后突然跳转到程序开始处,也就是程序总会自己复位。为什么会自己复位呢?电源不稳?但那样的话不可能总是在那个程序位置电源电压不稳啊,其它的外设也没开,看门狗应该也启动。我只好去看数据手册的复位源部分,结果让我吃了一惊,复位后看门狗居然就是开着的!我就写了一条MOV WDTCN,0xA5指令,然后程序一运行,发光二极管又不亮了!!这次的错误很明显,把0xA5改成00A5H就可以了,但我不明白为什么这样的程序也编译通过。而在运行程序时,程序到这一行程序就复位了。
总结,新华龙单片机不像STC单片机那样,可以一开始当成8051那样用的。总得拿单片机数据手册反复看的。它跟一般的8051单片机区别还是挺大的!所以我为了让将一个发光二极管闪亮,花了一天的时间。
用户120037 2009-8-6 12:51
用户205653 2009-8-5 10:09
用户1393282 2009-8-4 09:35
tengjingshu_112148725 2009-7-30 17:01
tengjingshu_112148725 2009-7-30 17:00