由于单片机编程与硬件联系紧密,所以每一种单片机以及同种单片机不同的C语言编译器的语法可能稍有不同。它是HP Info Tech专门为AVR系列单片机设计的C语言编译器。下面是一个最简单的单片机C语言程序,通过这个例子,可以学习和了解单片机编程的特点及与PC机C语言编程的区别。不管是计算机还是单片机,程序代码都是由CPU来执行的。计算机上有操作系统,某一程序运行时只是暂时取得了CPU的控制权,程序结束后要把控制权返还给操作系统。......
2023-11-26
单片机程序在编译时,程序中的语法错误通常可以由编译器检查并给出错误信息,但程序中的逻辑错误则需要用户自己来控制和排除。当程序编译通过并在单片机上加载运行时,有时程序运行的结果和用户预想的并不一样,而单纯的阅读和检查C程序源代码并不容易发现错误在那里,此时,就需要对C源程序进行调试和跟踪。通过程序断点或单步执行等方法,检查程序中关键点的运行结果,这样可以很容易发现错误之处。
要想在Proteus中对单片机的C程序进行调试与跟踪,单片机加载的程序必须要有可供调试的信息。Proteus软件支持的单片机仿真调试程序的格式有很多种,如ELF/DWARF、COFF、UBROF格式等,HEX格式的文件可以加载运行,但不能单步执行。CVAVR编译器支持COFF文件格式,其编译输出的“.cof”扩展名文件被仿真电路的单片机加载后,可以进行C源程序调试与跟踪。在ISIS仿真电路中调试程序时,可以做C程序调试所需要的三个主要工作:设置断点,单步执行,观察变量与寄存器值。
ISIS用户界面上4个运行控制按钮分别是“Play”“Step”“Pause”和“Stop”。当单片机加载了“.cof”文件后,可以单击“Play”按钮全速运行。此时若要调试程序,可以按下“Pause”按钮,全速运行的程序将停止在某一行代码上,同时会弹出“AVR Source Code”和“AVR Variables”等几个窗口。如果要从头开始单步调试程序,可以在初始时按“Step”按钮执行程序。若想要的窗口没有弹出,可以通过主菜单“Debug”→“AVR”→“...”命令选择并显示需要的窗口,或者在电路图上右键单击单片机芯片,在弹出的菜单下面“AVR...”中也可进行选择。这些窗口中显示的信息对程序调试非常重要,AVR单片机可供查看的窗口一共有7个,它们分别如下。
1.“AVR Source Code”窗口
这是最重要的一个窗口,带有编译地址的C源程序在这个窗口中显示。在任意一行可执行的代码上双击,可设置此行代码为程序执行断点。断点设置后,断点指令行的最左面会有一个棕色圆点指示。全速执行的程序遇到断点后,将停止在断点指令行上。此时,可以按代码窗口上面的单步执行按钮,并配合查看相应的寄存器或变量值,以检查程序执行结果是否正确。再次双击断点指令行,可以取消断点。
2.“AVR Variables”窗口
这个窗口中显示的是程序中定义的变量,变量的名称、地址、值等属性都有显示,右键单击某一变量,还可更改显示属性。单步执行时,程序中某一变量值被更改,立刻在此窗口中就会有所体现,这对程序调试是非常重要的。在程序调试阶段,最好用“volatile”关键字强制变量存储在RAM中,否则变量值有时不能正常显示。
3.“AVR CPU Registers”窗口
程序指针、CPU状态寄存器、32个通用工作寄存器以及堆栈指针都在这个窗口中显示,随着程序的执行,这些寄存器值都会跟着进行相应的变化,这不仅可以帮助调试程序,还有益于初学者理解AVR单片机的结构和原理。
4.“AVR Data Memory”窗口
AVR单片机的内存数据信息在这个窗口中显示。ATmega8A单片机前96个内存地址分配给了32个通用工作寄存器和64个I/O寄存器,所以窗口中显示的1 024个字节的内存地址是从0x0060开始,到0x45F结束。(www.chuimin.cn)
5.“AVR EEPROM Memory”窗口
AVR单片机的EEPROM中存储的数据在这个窗口中显示。
6.“AVR Program Memory”窗口
Flash程序存储器中,经编译后生成的机器指令,在这个窗口中以十六进制数据显示。
7.“AVR I/O Registers”窗口
AVR单片机的64个I/O寄存器的数据在这个窗口中显示。
此外,主菜单“Debug”下面还有一个“Watch Window”,选中后可以用来集中显示某些特定的寄存器和变量的值,在调试程序时也很有帮助。有时,float类型变量在“AVR Variables”窗口中显示出现问题时,可在这个窗口中进行特定设置而正常显示。向窗口中添加要观察的寄存器时,应右键单击“Watch Window”窗口,在弹出的菜单中选择“Add Items(By Name...)”,然后双击要显示的寄存器名称即可。如果向窗口中添加要观察的变量,则应右键单击窗口,在弹出的菜单中选择“Add Items(By Address...)”,然后在弹出的窗口中设置正确的变量参数。若变量在内存中,“Memory”项应选“AVR SRAM...”或“AVR Data Memory...”,“Name”项为程序中定义的变量名,“Address”值可根据“AVR Variables”窗口中给出的对应变量地址填入。数据类型要根据变量的定义选择,如果定义的是float类型,应选“IEEE Float(4 bytes)”。变量的显示格式,可根据需要选择。
程序调试是编程工作的一个重要方面,可以用来快速定位程序中存在的问题,并具有针对性地分析代码,实现快速解决问题的目的。对于初学者,调试中可以很清晰地看到程序的执行过程以及每一步产生的变化,这样直观的体验不仅比读代码更有益于学习,而且还有益于初学者对AVR单片机的结构和原理的理解。
请以上节中的仿真练习为例,初步学习Proteus中AVR单片机的C程序调试与跟踪,并在后面的编程学习过程中,能主动地通过C程序调试与跟踪来发现和解决程序中的问题。
有关AVR单片机与传感器基础的文章
由于单片机编程与硬件联系紧密,所以每一种单片机以及同种单片机不同的C语言编译器的语法可能稍有不同。它是HP Info Tech专门为AVR系列单片机设计的C语言编译器。下面是一个最简单的单片机C语言程序,通过这个例子,可以学习和了解单片机编程的特点及与PC机C语言编程的区别。不管是计算机还是单片机,程序代码都是由CPU来执行的。计算机上有操作系统,某一程序运行时只是暂时取得了CPU的控制权,程序结束后要把控制权返还给操作系统。......
2023-11-26
Divice Monitoring Studio该软件也是从驱动层抓取数据包,而且反馈的数据包之间的时间间隔也较为准确,可以用在BACnet网关开发的后期,用来调试系统性能。......
2023-08-30
系统调试是硬件和软件设计过程中及之后非常重要的工作,以便排除软硬件故障,使软/硬件能协调工作。目的是检查电路板。调试对象不同应编制专门的测试程序,运行后检查输出是否一致。其次,脱机调试。插上CPU芯片,用示波器检查CPU的主要信号引脚是否正常。5)符号化调试。调试的步骤1)调试的顺序。3)中断模块的调试。仿真调试运行正常后,将软件固化到ROM中,则可脱机运行,系统研制完成。......
2023-11-17
Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。如果找到Proteus支持的编译器,Proteus 将自动进行配置并在Proteus 中调用这些编译器编译源代码。图2-40 仿真控制面板2.3.4 Proteus8.0与Keil连接调试Keil 是德国Keil 公司开发的 8051单片机软件开发平台,经过不断升级,现已经成为一个重要的单片机开发平台。......
2023-11-17
流程控制语句不论对汇编语言还是C51都是程序设计中最重要的部分,C51同C语言一样是结构化程序设计语言。C51的结构化程序由若干个函数构成,函数由若干个基本结构构成,基本结构由若干条语句构成。结构化的C51程序设计语言有3种基本结构,即顺序结构、选择结构和循环结构。另外,在C51中还支持多分支结构,多分支结构既可以通过if和else if语句嵌套实现,也可用switch/case语句实现。......
2023-11-17
双分支if语句的执行过程如图3.5所示。任意输入3个整数,求出它们中的最大值。从键盘上输入一个英文字母,若输入的是大写字母则转换为小写字母输出;若输入的是小写字母则转换为大写字母输出。......
2023-11-20
程序编译通过是进入仿真运行的必要条件,请注意C语言程序的编辑格式,C语言程序对大小写的编译是有区别的,一般均用英语小写字符。C语言程序为什么能与8051系列单片机的硬件联系起来呢?3)第3行,一般在主程序开始前要空出一行,可以加强注意。4)第4行,主程序名要用main表示。对于每一个函数必须成对出现大括号。C语言中规定可连续定义常量和变量,中间可用逗号隔开。8)第8行,作为C语言,到第7行语句就已经结束了。......
2023-11-07
相关推荐