|
|
| 脱离仿真器玩单片机(一)~(五) |
| | 脱离仿真器玩单片机(一) 编者按单片机在现代电子系统设计中的重要性非常突出。许多爱好者都意识到学会应用单片机将使自己电子设计能力得到极大提高,也对单片机学习抱以很大热情。价格不菲的硬件仿真器往往是初学者学习单片机过程中的一个障碍;同时,一些与时间关系密切的程序往往是不能使用仿真器判断调试的。本专题将讨论如何在没有仿真器的情况下开发代码量一定的单片机程序。 本文所讨论的编程方法是基于采用FLASH作为程序存储器,可重复编写程序的单片机而言的.并且单片机在组装到电路板上之后.仍然能够方便地多次下栽程序(即所谓的ISP功能)。现代单片机中.很多型号都能满足这样的开发要求,例如ATMEL公司的AvR系列单片机、SST的51内核系列单片机、MIcROCHIP公司的部分PIC单片机等。 在没有仿真器的情况下,要求软件编写者将整个工程“化整为零”,具体来说需要经历如下几个步骤:确认单片机可以正确运行程序:做好软件模块化规划;调通输入/输出通道:查找错误并完成程序测试。 1.确认单片机可以正确运行程序 单片机能够正确运行FLASH中的程序代码是调试的基础。对于新组装好的电路板,最方便的方法是在某个输出口线上产生高低交叉变化的信号,用示波器观察以确认程序能够运行。以标准的51单片机为例,可以写入如下测试程序: MOVA,#0xFF//初始化 Testloop: MOVPl,A//假设以P1口作为输出 XRLA,#0xFF//取反数据以生成方波 AJMPTest_loop 2.做好软件模块化规划 模块化不仅是脱离仿真器开发时的要求,更是一种非常重要的软件方法。在开发模式下.这种方法显得格外重要。模块间的接口应清晰明了.入口和出口条件简单易懂.各模块所使用的资源互不冲突,以利于模块的组装和程序调试。 后面例子中将会出现的软件I2C主机接口为例,典型的模块划分为:总线启动i2c_start;总线停止i2c—stop;传送1字节i2c_trans;接收1字节12c—receive;读从机应答位i2e_get_ack;向从机发送应答位i2cgenfaek共6个模块,涵盖了I2C:总线上所有的时序情况.它们之间的接口是模块之间的时钟线保持为低电平状态,在后面的例子中可以看到它们是如何组成一个完整的I2C总线通讯程序的。 3.调通输入/输出通道 在程序调试过程中,可能需要通过外部条件控制程序流向,希望观查某个变量或寄存器的值,这时就需要输入输出通道作为基础。这里所指的“输入/输出通道”的含义很广泛.典型的包括串口、键盘、LCD/LED/VFD显示屏、蜂鸣器等。对于显示屏来说,只要能显示数字,都可以怍为调试中的数据观察“窗口”来使用。 4.查找错误并完成程序测试工作 在不仿真的情况下.错误的查找主要依赖于编写者清晰的模块化思路、缜密的逻辑推理能力和输入输出通道对程序的控制和查看作用。不难发现,这种要求和提高程序编写质量时对编写者的要求是相同的,这就是习惯于不仿真的程序编写者往往能够写出质量更高代码的原因。 在后续文章中,将通过4个实例说明在不使用仿真器的情况下如何学习单片机、编写程序和查找程序错误。 | |
|
|
|
|