在Keil中,玩过51的朋友都知道,调试时编译器给出了寄存器窗口(Register)、中断系统窗口(InterruptSystem)、I/O口查看窗口(I/Oports)、串口和定时器设置窗口(serial、Timer)但是如何查看某一块内存区域的内容呢?在Memory窗口中输入址值,得到的结果是程序代码区的内容,由于51是采用的是哈佛结构,程序指令存储和数据存储分开。要查看各种内存区域的内容,只要在Address框内输入“字母:地址”即可显示相应的内存值。其中字母可以是C、D、I、X,分别代表的意义是:
CH375是一个国产USB转接芯片,集成了U盘 *** 作固件,可以直接把U盘当做一个一个的扇区来读写,加上一个文件系统,你就可以在U盘上拷贝,粘贴,新建等Windos下具备的文件 *** 作功能了。
另外其还支持从机模式,可以让单片机或DSP通过它连接到电脑上实现一个自制的USB鼠标/键盘或U盘等。其兼容USB20协议,最大传输速度为USB11的12Mbps。对于一般的嵌入式应用来说,速度已经能满足需求。
更可贵的是,这时一片民族芯片,意味着你面对将是中文PDF和一个完善的网络技术支持氛围。使用CH375将让你学习USB协议不再枯燥,不再是纸上谈兵。下面具体阐述一下这两天自己恢复调试该芯片的“艰辛”,其实该芯片并不脆弱,我焊了又拆,拆了又焊上,还是可以用。主要是制造这个芯片南京那家公司技术支持资料太丰富了,太详细了,以至于让我在做电路时也是小心翼翼,最后反而吃了大亏。
一、CH375分为A和B两个系列,A系列支持5V供电,B系列不仅支持5V还支持33V。
二、B系列中,如果使用5V供电,则V3引脚通过001uF电容接地,如果是33V,则V3接33V,这点很重要;
三、CH375资料上说对于电源VCC引脚端应该接001uF的电容到地,该电容功能为退耦电容,同时,晶振必须为12MHZ,晶振引脚和电容引脚尽量近CH375的Xi和Xo引脚。如果硬件连接正确,上电时,在Xo端应该可以检测到12MHZ的波形,在没有示波器的情况下,可以用万用表检测Xi和Xo引脚是否为电源电压的一半,即如果是5V供电,此时两个引脚的电压应该接近25V,我在自己制作的腐蚀板中变遇到了晶振无法起振的情况,开始怀疑是引脚离得有点远,于是改变了电容的放置位置,使之更近ch375两个引脚,也没有起振。然后怀疑是CH375坏了,前后一共换了3片还是没有起振,最后在反复检测电路后,换了一颗晶振,我把所有的怀疑都用完后,最后目光聚焦在了两个0603封装的22P电容上,当然开始我还不是怀疑电容有问题,而是ch375应用资料上给的电容是15p的,但手上又没有这个容值的电容,电容都焊下来了,因为太小,掉哪去也不知道,于是重新换了两个22p的,结果却“奇迹般”的起振了。
难道困扰了我两天的竟然是两颗坏了的晶振电容?因为那两个小东西也不知道躲哪去了,我不能再揪出来拷问,那就认为是人品问题吧,遇到了两个坏了电容,或者是自己焊接的时候不小心焊坏了,罪过。。。后来我还原了电路,一层一层验证,取下了VCC的退耦电容,可以工作;再把两个电容移回原来离CH375较远的位置,还是可以起振。仅以此调试经验警醒自己,我怀疑的逻辑,相信大多数人也是这样,越大的,越复杂的,越脆弱,呵呵,这种逻辑有问题么?调试是一个痛苦的过程,调试又是一个快乐的过程,恭喜你,嵌入式工程师,尝尽人间苦乐!
四、当上电后CH375能起振了,这时还可以测一下25和26脚的电平,26为高,25为低,说明硬件复位时成功的,否则你就要看下RST连接的一个到VCC的047uF电容那是否有问题了。另外就是,在晶振没有起振的情况下,往CH375写数据,那个指示灯会不停的闪,写一此,闪一次,这是不正常德。
五、当硬件能起振了,复位也完成了,请将8位数据口接到你的微控制器(单片机或DSP等),然后你还要接A0,WR,RD,INT,最后保证在软件 *** 作芯片的时候CS为低。如此,通过往CH375写命令CMD_CHECK_EXIST(0x06),接着写一个任意8位数据,稍微延时几个毫秒,CH375会返回你一个数据,这个数据是你写的数据的取反,如果你收到了这样一个取反的数据,恭喜你,你的硬件和底层软件读写 *** 作成功了,接下了便可以开始自己的USB协议解析之旅。如果你收到的数据不是正确的取反数据,那么请仔细检查在没有任何线连接的情况下,晶振是否起振,复位是否成功,如果晶振已经起振,你已经成功了一大半,至于读写的时序,网上到处都是,51的,AVR的,找一个可以用的,稍作移植便可以使用。底层 *** 作成功,是后续分析和学习USB协议的关键。
这要看测试哪些方面了,虽然单片机程序可以用C语言写,但单片机程序都是针对硬电路的,针对不路的电路,程序也不同,所以,从这个意义上说,单片机程序不通用。但仅仅从语法上说,遵循的是C语言的语法,所以,语法上的错误可以检测。而重要的是,电脑上的C语言写的程序是要生成
EXE文件
,所以,那些工具是检测EXE文件。可单片机程序只编译成HEX代码文件,那检测工具就无能为力了。
proteus这个软件,比较好用,根据你的实际,在proteus软件上画出你用单片机设计电路图,然后根据这个电路图,在keil软件中编写程序,写好后,在编译生成hex格式的文件,然后再proteus软件中双击你画的单片机,出现一个对话框,有个路径,这个路径就是你编译好的hex文件路径,找到它,确定!然后点proteus的播放按钮,如果实现你程序中编的现象就说明程序编写成功,如果出现不是你想实现的现象,那就程序有问题了!祝你好运啊!
……你自己把逻辑锁死了。收到一回4字节序列后,flag1置位,之后发送数据。可是在发送数据的时候又会进入中断的,由于接收缓冲区中还是那4字节的序列,于是flag1再次被置位……于是乎进入永不停歇的死循环。
你的串口中断应当判断一下是发送还是接收……
以上就是关于如何测试单片机程序负载率/内存占有率测试全部的内容,包括:如何测试单片机程序负载率/内存占有率测试、求助51单片机+CH375B读写U盘测试程序的问题、单片机程序有适用的软件测试工具吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)