历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2020年02月13日 | 缺少仿真器时AVR单片机的开发方法

2020-02-13 来源:eefocus

对FLASH存贮器单片机,不要仿真机也能方便快速地开发程序。具体可以从以下几方面入手:

一、尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗? 高级语言的优越性是汇编语言不能比的:

1、程序移植方便

2、程序的坚固性

3、对数学运算的支持

4、条理清晰的结构化编程,程序的可维护性

5、开发周期短


现在的高级语言编译器(如C编译器)已可以产生代码效率很高的机器代码,因此建议大家能用高级语言实现的程序尽可能使用高级语言写,在对速度和时序要求特严的场合可以采用混合编程的方法来解决。


二、更多的使用软件模拟仿真环境 现在许多单片机都提供软件模拟仿真环境,如AVR单片机就可以在ATMEL公司提供的AVR STUDIO开发平台的模拟仿真环境中进行软件的模拟调试。BASCOM-AVR还提供了更加人性化和配合外部图形界面(键盘、标准LCD显示器等)的软件模拟调试环境。 ATMEL的AVR STUDIO是一个开发AVR单片机的集成开发环境,其支持高级语言和汇编语言的源代码级软件模拟调试。在模拟仿真条件下调试算法、程序流程等可以说和硬件仿真机是没有区别的;而调试延时程序、计算一段程序运行所花的时间等方面,可以说比硬件仿真器更方便,因为许多仿真机(如JTAG ICE)是无法提供程序运行时间等调试参数的。 另外,对I/O端口、定时器、UART、中断响应等,在AVR STUDIO中均可实现模拟仿真,用户也可以采用软件的单步运行、设置断点等手段,分析内存和查看AVR中所有的硬件资源的数据以及使用情况。 学会使用和以软件模拟仿真为主、已硬件仿真配合的系统开发调试手段可以大大提高项目的开发效率,缩短开发周期。因为,一旦系统整体设计完成,硬件PCB板的设计和制作同软件系统的开发可同时进行。当硬件系统板完成后,软件总体的架构也已经调试完成,既可进行实际的调试阶段。


三、善用目标板上的硬件资源 在许多系统目标板上均有LED、数码管、RS232等附件和接口,其实利用好这些附件接口,也能实现和完成程序的调试开发。 我们使用仿真器的目的是要观察单片机内部的状态和数据,利用这些附件和FLASH存贮器多次可擦写的特点,完全可以观察到单片机内部的状态。 AVR单片机是支持ISP的FLASH单片机,开发时可以通过下载电缆将其和PC连成一个整体,在程序编译完后立刻下载到目标MCU中运行。在需要观察单片机内部状态时,可以程序的适当位置加入少部分代码,把MCU的内部状态和数据通过LED、数码管等显示出来。在有RS232通信接口的应用中,可以直接将需要观察的MCU内部状态送到PC机,在PC机上用串口调试器等一些超级终端来显示数据。现在大部分的开发环境本身就提供了超级终端,如ICC、CVAVR、BASC0M-AVR等。 由于单片机采用了支持ISP的Flash技术,因此采用高级语言开发系统程序,更多的以软件模拟仿真技术,加上使用串口输出调试数据的开发手段已成为开发单片机和嵌入式系统(如32位ARM的COMMAND调试手段等)的流行和高效的方法。


四、举例

在开发AVR的I2C应用例程时,使用串口输出调试数据的方法介绍。

首先初始化UART。可以看出初始化UART只需要很少的几行代码,在完成程序调试后将可以将其删除。如果你的系统程序本身就需要使用串口,那么初始化UART就没有一行多余的代码了。


void uart_init(void)

{

UCSRB=(1<UBRRL=(fosc/16/(baud+1))%256;

UBRRH=(fosc/16/(baud+1))/256;

UCSRC=(1<}


然后我们可以写一个putchar函数,或直接使用标准输入输出库中的putchar函数。

void putchar(unsigned char c)

{

while (!(UCSRA&(1<UDR=c;

}


接下来只要在需要调试的程序部分调用putchar函数就可以将一些需要查看的

MCU中硬件资源的数据和状态送PC机显示了。如要观察I2C中断程序中TWSR寄存器的值,只要在I2C中断程序中插入两行代码就可以了:

#pragma interrupt_handler TWI_ISR:iv_TWI

void TWI_ISR(void)

{

unsigned char temp = TestAck();

putchar(temp);

switch (temp);//调试完后,本行改为switch(TestAck()),

//删除上面两行就可以了。

{

case SR_SLA_ACK:

{

fill_rece();

TWI_STATE=TWI_RD;

Twi_ACK();

Break;

}

. . .

}

}


在PC机的超级终端软件中,设置波特率、数据格式后打开串口就可以观察TWSR寄存器的状态值了


推荐阅读

史海拾趣

Dau Semiconductor Inc公司的发展小趣事

在市场竞争日益激烈的今天,Dau Semiconductor Inc公司深知只有不断创新和升级技术,才能保持市场竞争力。因此,公司不断加大对研发的投入,引进先进的设备和人才,探索新的技术方向。近年来,公司成功研发出了多款具有创新性的半导体芯片产品,如基于人工智能技术的智能芯片、基于物联网技术的低功耗传感器芯片等。这些产品的推出,不仅为公司带来了更多的商业机会,也为行业的发展注入了新的活力。

AntennaHome公司的发展小趣事

AntennaHome公司深知技术创新是企业持续发展的根本动力。因此,公司始终坚持将研发作为企业的核心战略。公司不断加大对研发的投入力度,引进先进的研发设备和人才,同时积极与高校和研究机构开展合作。这些举措使得公司在天线技术领域始终保持领先地位,为公司的长远发展提供了有力保障。

这五个故事展示了AntennaHome公司在电子行业中的发展历程,从创业初期的技术创新到与国际大厂的合作,再到应对行业变革的挑战、参与国际展会以及持续投入研发,每一步都体现了公司的努力和坚持。

Gemmy Electronics Co Ltd公司的发展小趣事
捕鼠器应放置在干燥通风处,避免潮湿和雨淋,以免损坏电路。
Chemi-Con公司的发展小趣事

在电子行业的发展过程中,Chemi-Con公司意识到单一产品线的局限性,并开始积极探索多元化发展的道路。公司不仅拓展了电容器产品的应用领域,还涉足了光电子机械等新兴产业。此外,Chemi-Con还积极寻求与其他企业的合作,通过技术共享、资源共享等方式实现共赢。这种开放、合作的姿态使得Chemi-Con在行业中树立了良好的形象,也为公司的长远发展奠定了坚实的基础。

Continental公司的发展小趣事

随着汽车电子化的趋势日益明显,大陆集团也开始将业务拓展到汽车电子领域。在新的架构体系中,车身电子部门被纳入“车联网和信息”这个大的业务板块中。大陆集团致力于实现车身电子的更好互联、更好呈现信息和更好的集成。通过互联技术,数据能够在汽车与外界之间进行传递,并将这些信息通过人机交互界面呈现给驾驶者和乘客。同时,大陆集团还致力于确保数据从车辆到云端的顺畅传输和处理。这些举措使得大陆集团在汽车电子领域取得了显著的进展。

淩志比高公司的发展小趣事

在追求经济效益的同时,淩志比高公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,淩志比高还积极参与社会公益事业,为社会做出贡献。这种负责任的态度赢得了社会各界的认可和尊重。

请注意,以上故事仅为虚构示例,并不代表任何真实公司的实际情况。如果您对淩志比高公司有进一步的了解需求,建议直接访问其官方网站或查阅相关新闻报道以获取准确信息。

问答坊 | AI 解惑

关于S3C2410裸机驱动LCD的问题

/************************************************************** 320×240 16Bpp TFT LCD功能模块初始化 **************************************************************/ void Lcd_Init(void) {         rLCDCON1=( ...…

查看全部问答>

别人的导航软件的手写输入在我定制的CE平台上识别不了,为什么?跟平台定制有关没?CE组件没加?

别人的导航软件的手写输入在我定制的CE平台上识别不了,为什么?跟平台定制有关没?CE组件没加?…

查看全部问答>

nand drive 问题

nand cach write/read 命令是自动连续读写nand 如果用这个命令后遇到坏blcok 怎么办?nand 自己会跳过吗? 谢谢…

查看全部问答>

请教KEIL中如何输入“%”,我输入就会出现错误

如题,这问题该怎么解决啊?哪位高手知道指点指点啊!谢谢了!…

查看全部问答>

wince5.0下直接读写内存

想在wince5.0下直接读写内存,往指定的空间读写数据,该怎么实现,忘达人们给点建议!!谢谢!!…

查看全部问答>

分析一个程序错误!

module delay_line(start,stop,up_out,upQ,down_out,downQ,clk,reset);input clk,start,stop,reset;reg [60:0]up_out,down_out,upQ,downQ;integer i,j,m,n;delay_unit du0(start,reset,up_out[0]);delay_unit du2(stop,reset,down_out[0]);always @ ...…

查看全部问答>

LM3S8962学习(四) -- 温度传感器

上次使用学习了一下Timer,每隔1秒钟中断一次,现在准备实现每隔1S钟读取一下内部的温度值,并在LCD上显示出来。   从手册288页上可以看出,LM3S8962的内部温度传感器有两个目的: 1.  防止温度过高或过低,影响系统芯片正常运行 ...…

查看全部问答>

大家来说说用DSP的时候你都遇到过什么样无法解决的问题

大家来说说用DSP的时候你都遇到过什么样无法解决的问题?…

查看全部问答>

超级给力DIY钢铁侠MK3方舟反应堆

从《钢铁侠1》到《复仇者联盟》再到《钢铁侠3》,托尼胸前的反应堆,也更新了好几代。高中刚毕业,放假在家,就有了想自己做一个反应堆的想法,然后就开始实践了。 ◆ 第一步:采购原材料(具体如下)      ● 网上定制的亚 ...…

查看全部问答>

∑ -μ01 HELP2416 入门分享

本帖最后由 DavidZH 于 2014-7-9 00:05 编辑 已经收到的HELP2416开发板,很精致。准备开始学习,按照以往学习其他MCU的经验,先是了解开发板的硬件,然后开始收集相关资料,如下图所示: 一、HELP2416的主芯片是S3C2416 芯片,其内核属于ARMv5 ...…

查看全部问答>