0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机硬件仿真与烧写程序结果同的原因分析

GReq_mcu168 来源:未知 作者:工程师曾玲 2018-10-02 11:45 次阅读

一.配置问题:

实际烧片时单片机的配置字与仿真的时候是不是一样?烧写时是否配置正确?

二.资源问题:

单片机的ROMRAM大小与仿真器的ROM、RAM大小是不一样的!

三.驱动能力问题:

通常仿真器的驱动能力比单片机要强;可以分两步检查,一是分别用仿真器与单片机时对应IO口波形进行对比,二是当仿真器与外设连接与不连接时波形的对比;

要进行基本要素分析:单片机供电正常?起振没有?复位电路正常?芯片损坏?

单片机上电不运行情况的分析

1.单片机是没有运行,还是运行不正确?

2.如果是没有运行,检测单片机的基本参数是否已经满足<工作电压要在芯片的引脚处测量><复位引脚的复位曲线如何><晶振是否已经起振><芯片损坏,或者部分功能损坏>。

3.如果是运行不正确,检测<用了看门狗,没有处理好,芯片上电后处于不停的复位状态,看起来就象没有没有工作起来><是否进入了ISP状态><对单片机写入对所有的IO口以1秒取反一次的程序进行测试>

单片机调试办法

LED进行状态指示,用串口进行数据指示,比用其它外设指示更可靠;

加入断点,烧写时是在不同的语句后面加入WHILE(1);

分模块调试,把每个小功能先调试通过,再进行组合。

Keil C本身就是编译与仿真一体的,当不要外部数据时很方便,当要外部输入时(比如用定时器作计数器用)它提供几个调试输入用的窗口可用它们来摸拟输入,同时Keil C本身提供一种调试函数用来配置摸拟外部输入的功能,这我在学习时看的一本书上讲过如用定时器作外部事件计数,调试函数由自己根据需要按特定的格式来编辑再按KEIL C的要求调入即可。学习时可用这种方法,做产品时最好是用仿真器调试。下面我给出我以前试过的用定时器作外部事件计数时摸拟外部输入的调试函数,并写出Keil C调用的步骤如下:

1、编写如下信号函数:

single void t0_singal(void)

{

while(1)

{

PORT3|=0x10;//pull INT0(P3.4) high again

PORT3&=~0x10;//pull INT0(P3.4) low and generate interruptPORT3|=0x10;//pull INT0(P3.4) high again

twatch(CLOCK);//wait for 1 second

}

}

2、在DEBUG状态下单击DEBUG菜单在下拉菜单中单击“Function Editor(Open Ini File)... "选项, 弹出新屏幕后,将“打开”窗口关闭,这时屏上有Function Edito窗;

3、在Function Editor窗中输入上面的函数;

4、保存(注意:扩展名为.ini),编译该程序,成功后关闭Function Editor窗口;

5、执行用户程序(必须连续执行);

6、在屏幕左下脚的命令窗口中,键入t0_singl()后(必须回车)妈可向P3.4源源不断地提供脉冲信号。

Keil C调试某系统时积累的一些经验1、由于Keil C对中文支持不太好,因而会出现显示的光标与光标实际所在不一致的现象,这会对修改中文注释造成影响。在Windows2000下面,我们可以把字体设置为Courier,这样就可以显示正常。

2、当使用有片外内存的MCU(如W77E58,它有1K片外内存)的时候,肯定要设置标志位,并且编译方式要选择大模式,否则会出错。

3、当使用Keil C跟踪程序运行状态的时候,要把引起Warning的语句屏蔽,否则有可能跟踪语句的时候会出错。

4、在调用数组的时候,Keil C是首先把数组Load进内存。如果要在C中使用长数组的时候,我们可以使用code关键字,这样就实现了汇编的DB的功能,Keil C是不会把标志code的数组Load入内存的,它会直接读取Rom。

5、当编程涉及到有关通信,时序是很重要的。拉高管脚的执行速度远远比检查管脚电平的要快。

6、在等待管脚电平变化的时候,我们需要设置好超时处理,否则程序就会因为一个没有预计的错误而死锁。

7、能用C语言实现的地方,尽量不要用汇编,尤其在算法的实现,用汇编是晦涩难懂。

8、程序的几个参数数组所占篇幅很大,其中液晶背景数组最长,有四千个Byte,因而把那些初始化数组都放在另外一个C文件,在主文件使用使用关键字extern定义,这样就不会对主文件的编写造成干扰。

9、所有函数之间的相关性越低越有利于以后功能的扩展。

10、6.20版在编译带code关键字的数组时,编译通过但是单片机运行结果是错误的,改用6.14版后正常。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620814
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132154

原文标题:总结硬件仿真与烧写程序结果不一样的原因

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于单片机程序的问题

    ,而且软件的绿色指示灯一直亮着下载不成功,当关掉电源时自动加1停止,这时候按键时还是之前的那样不正常显示,为什么会这样呢,是单片机坏了吗?我才写了200多次
    发表于 04-09 22:48

    单片机程序

    请教一下各位。我的电脑只有USB的接口,自己做一个单片机的话用图中的电路图可不可以给单片机程序?谢谢各位
    发表于 10-03 00:03

    单片机

    现在我刚接触单片机,用keil转换为Hex文件,用软件下载进入单片机中测试。我的问题是有没有一种c软件写完程序,一编译直接就load进入
    发表于 12-26 13:07

    单片机程序软件

    单片机程序软件
    发表于 01-07 14:31

    单片机原理

    电脑在通过接口向单片机时(此时单片机 内没有程序),电脑是如何通过接口访问内部rom的??对应p口怎么就会指向
    发表于 05-05 15:09

    硬件仿真程序结果不一样原因总结

    硬件仿真程序结果不一样原因总结一.配置问题:实
    发表于 08-14 10:20

    单片机的四种方式是什么

    JTAG/SWD/ISP/SWIM详解单片机的四种方式单片机是一种可编程控制器,搭好硬件电路后,可以利用
    发表于 07-01 06:40

    51单片机(二)—— 如何51单片机程序 精选资料推荐

    学习单片机很重要的一步就是为单片机程序
    发表于 07-13 07:49

    单片机程序是如何写到单片机内部的

    编程。在学习单片机之前,要先清楚单片机程序是如何写到单片机内部的,在
    发表于 07-13 06:26

    PIC32单片机

    PIC32单片机器,使用Pckit3。如下图2.仿真器端线序如下:注:LVP在板子上连接
    发表于 11-24 06:58

    什么原因导致jlink给单片机不进程序

    不知道什么原因导致jlink给单片机(S32K148)程序,怎么也不进去。猜测是因为
    发表于 01-10 06:37

    详解单片机的四种方式

    JTAG/SWD/ISP/SWIM详解单片机的四种方式单片机是一种可编程控制器,搭好硬件电路后,可以利用
    发表于 01-27 06:57

    说说单片机怎么程序

    单片机入门教程主要讲的51单片机,和其他的单片机编程所涉及的软件会有出入,51单片机是最基
    发表于 01-27 06:18

    单片机仿真器和器有哪些不同之处呢

    程序需要验证的时候都得一次芯片,然后接到板子上,再上电运行,而且不支持多种调试方式。仿真器是通过硬件和相应的软件对单片机进行
    发表于 02-23 06:40

    浅析stm32单片机无法程序原因及其解决办法

    stm32单片机程序时,有时候会出现无法写下载程序的问题。keil报错为 “No Cort
    发表于 03-23 10:45