调试问题记录1.doc_第1页
调试问题记录1.doc_第2页
调试问题记录1.doc_第3页
调试问题记录1.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

调试问题记录一、 KEIL的使用方法1、 安装:将D盘中的“工具(安装版)”目录里的keil7(或keil-7)解压安装到C盘,然后将D盘的keil目录里的uv3直接移到C盘刚刚建立的keil目录中,并按下面的一些提示,将option中选startup.a51及conf_tny.a51进行配置。 2、 先在project中选择新建(或打开旧的project);3、 选CPU;4、 在option中选startup.a51进行配置,并在source group1中选ADD.,在project中选options for Target“Target1”,在device卡中选CPU,在Memery Model中选“Large”; 下面的也选“Large”;再下面的如果不是多任务就选“none”,否则就选“RTX-51 Tiny”;右边的三个单选框选上面的2个;在output卡中选Creat Hex Fi;需要注意的是:在Creat Hex Fi上面的2个单选框“Debug informati”和“Browse informati”必须选,否则,连程序断点都没有办法设置,而且会造成其他问题。在C51卡中的interrupt vector中 选地址0x8000(带板子调试时),0x0000(写程序时);(注意在interrupt vector下面的2个选项:Keep.和Enable.也要选,否则会造成编译死机,原因不详!)在BL51 Locate卡中选Code range中选0X8000-0XfFFF(带板子调试时,如果是写程序则选0x0000-0x7fff)、Xdata range选0X0000-0X03FF;在Debug卡中纯软件调试时选左边的use;当带板子调试时选右边的use(Keil monitor-51 driver),并选中下面的2个单选框,同时通过其右侧的setting设置与微机联络的串行口的参数,波特率通常设在9600左右。5、 “F7”为编译键;6、 “Ctrl+ F5”是调试,F10是执行到光标,F11是单步执行;7、 需要特别注意的是,带板子调试时startup.a51中的CSEG AT 0 应该改成CSEG AT 8000h;而且应该在“startup1:”标号下加入MOV0C4H,#45H (set DME0 to enable the on-chip sram,打开片上1K的外部RAM);8、 使用实时多任务时,需要把keilc51rtxtiny2sourcecodeconf_tny.a51加入到工程中,(即在source group1上点右键,然后选Add files to group source group1),然后将这个文件第270行的CSEGAT0BH 改成CSEGAT800BH,如果是写芯片时还应该改回到0BH;注意:如果需要全局变量,则变量定义应该不包含在任意一个任务中。而定义在任意一个任务中的变量均为局部变量。9、 如果需要调用其他C程序中的函数,则首先需要在程序开头用“include”将这个需要的函数包含在头文件中,同时在工程里还需要把包含那个函数的C程序加入进来,方法与“7”相同。10、 第“8”中最简单的办法:把函数体另存在一个文件里(加上适当的include及参数类型定义没,如uchar等),在原来函数所在位置仅留函数名及其参数,后面加上分号“;”即可。11、 在多任务中,如果在2个或2个以上的任务中都得到调用的函数,必须在属性上加上“可再入”,即reentrant,但遇到的问题无法解决(实际无法再入),因此实际中只好写成2个函数,分别调用。12、 电容C34对测量的稳定性影响很大13、 多任务:如果在任务0中有delete自己的语句,则在各子任务中应该有send 和wait2语句;如果没有delete,则当一个子任务执行完一个循环后,如果遇到 外同则马上交权,如果遇到send则等待结束自己分到的时间片后交权,交权的前提是有人在等信号。二、 看门狗250451、 在对看门狗内部数据存储器进行操作时,必须先读其当前状态,看其状态寄存器的最低位是否为“0”(为“1”则忙),确认后才可以对其数据寄存器进行访问(读/写)。向数据寄存器写数据前必须将WREN命令先写进去。 2、 若要启动看门狗应向状态寄存器写“0”!三、 显示驱动72191、 要显示数据必须先使7219离开上电模式(shutdown模式);2、 本控制器分2行显示,上面一行最左边的为“0”位,下面一行最左边为“ID”显示,从第二个开始为连续的6个显示LED,从“0”位开始,因此,最左边的是第“6”位(即第七位);3、 若显示0-9的数字,在目前的程序中的数组中直接写数字,而在将来的程序中则可以定义一块存储区,专门存储要显示的数据,但应该是经过“位分离”的,即把数据转成10进制的以后,每一位分别存储在不同的单元里,形成每一单元都是“0x01”或“0x08”等;4、 若显示字符,则可以有程序直接向送显单元赋要显示的字符,要加引号,如“a”或“A”;将来在程序中应加上向显示函数发送显示长度,不足6位的则显示“黑”,或直接向其他显示位送“黑”字符 四、 ADC77301、 按照p10的说法,应选用chop模式;2、 在连续读Data regieter时,靠向RW1、RW0写1、1中断连续读;因此,不要误操作,保险的办法是在连续读期间,将DIN置“0”;3、 在读数据前,可能也需要象读写看门狗一样,要先读当前状态;4、 注意各特殊寄存器的缺省值;5、 大多数情况下,连续读的模式比较常用;6、 在单次转换模式下,每次转换完成后,自动复位到同步模式(SYNC),因此,再转换时需要重装mode register;7、 注意mode register中的MR3;8、 Filter register中,skip=0选2个滤波器;skip=1则FIR滤波器被短路,FR5(AC)必须为“0”;FR4(CHP)位是CHOP使能位,直流桥时可以“1”也可以“0”;使用chop模式则系统减去 offset,但如果不做“校正”,则选CHOP也没有意义。9、 如果直接编程(不带chop)时的输出不为0(输入短路时),可用DAC REGISTER进行调整;10、 “burnout”在通常工作状态下需要在BO位写“0”以关掉;11、 p36图。实际调试时:仅对滤波器寄存器和模式寄存器进行设置,但调试时出现程序无法通过RDY等待的问题,注意:在一些必要的地方加入SCLK=1;同时,读数据时一致性不好,怀疑是硬件上存在隐患(如片下不能走线等),下次改板时要处理。五、 注意事项1、 多任务时,操作系统本身用timer0(0Bh),用户用timer1 做SBUF,2、 多任务时,每个子任务必须做成死循环,3、 Conf-tiny.A51 定“Tick”即滴答声; Int-Clock EQU 10000;4、 多任务:首先在Option中选Conf-tiny.A51,然后在main.c中或在Config.h中包含:#include ;六、 功能上:1、 50站只用小投(大投、小投是两个门,大投时两个门全开,到一定的量时,大投门关,当实时称量值大于等于“目标值-落差”时,关闭小投);2、 零位:“d”代表最小分度(即灵敏度);3、 负数:在标定时可能有杂质粘在秤盘上,标定完毕后若杂质掉落则可能会出现负数,但不会太大,且可以消去;4、 OFL超过标定值时(标定一般用80%量程,而OVL则是超过满量程时);5、 F1.5:开始称量时(启动称量)时,把初值清掉,超差应报错(目前无此项功能);6、 F1.3:目的是空秤等待时,有小的漂移时,显示器不应跳字;7、 F3.1:卸料时用,理想情况下可以卸到零,但一般不会,可设定小于等于某值(零区)时认为卸完;8、 配方:只存目标值、大投值、落差值;9、 键盘:“mode”,在“停止”状态下,按此键,功能在停止、配方、参数、校秤四个功能上循环;10、 表通常只控制做一盘,由PLC或按钮发控制信号,启动每一盘;11、 小数点:最多四位;12、 追零范围:自动清零,显示上就是0;13、 F1.4:料落的过程中,两次相邻的测量值比较;七、 解决的问题1、 静态变量:在试图把从7730中的数据读出的程序模块变成外部子程序时,遇到问题,本来在一个主程序段中读得很准确的程序,在放到主程序前,变成一个函数时,返回值就不准了,经常出现返回的前8位不对的现象,后来将子程序中的代表采样值的16位无符号整型值(read_value)定义成静态变量,即static型,就好了。原因应该是在返回过程中变量的地址被破坏了,应该继续仔细分析;2、 外部变量:即全局变量,在主程序中定义了“gb.h”做为存储全局变量的头文件,而且也做了初始化,当试图把显示初始化程序变成外部子程序时,因该子程序用到了xs 、xs1、 point0这3个全局变量,因而编译链接时出现错误提示:这3个变量没有定义,在函数体前面加上定义(带值初始化的)后(无论是否加extern),都提示:重复定义;在函数体内部加上则居然死机了!后来将在外部说明全局变量的初始化值拿掉,仅留引用定义,好了!尝试将“gb.h”中的初始化拿掉,但不行,还要试!3、 指针变量:在显示程序中,几个小的子程序均很容易就实现了外部函数化,而disptotal、disptotal1 却不行,提示错误是:转换过程中,指针被变成了非指针,后来将函数中的形参改成“uchar * rxs”形式,就OK了。4、 在将模块外部函数化的过程中,应注意头文件的包含,且必须把这个扩展名为“.c”的外部函数加到工程中,同时还要在引用程序的头文件里加上这个子程序的名字。5、八、 调7730时,总是遇到一个问题:不相干的语句增加几句、增加几个变量,程序就会死,原因是:project卡option for Target1选项中的C51卡上,优化等级和选重速度还是体积在作怪,后来,选体积,及不同的优化等级。还有,在它下面的“不要使用直接寄存器访问”也有影响(打上钩以后好多了) 九、 当除通信程序都加进去后,project卡option for Target1选项中的C51卡上,选6、speed、“不要使用直接寄存器访问”打上钩以后,可以运行,但数据不是很稳,显示200左右时跳变达0-3,选9 、speed、“不要使用直接寄存器访问”不打钩时,可以运行,稳多了,0-1。打钩效果更好。 选3、.时,不能工作。选0时又可以了。0-1。十、 万利仿真器串口接头:232脚定义颜色连接天蓝色微机电缆对应颜色5地绿色棕色(地)8发送(TX)橙色橙色(接收)9接收(RX)白色绿色(发送) 十一、 为了调通信程序,编了一个tx0306.asm目的是为了证明:系统处于缺省的接收状态,如果没有收到一个完整的字节,则去干别的事情,如果收到则处理完后,干别的。发送时则一直等这个字节发送完毕才干别的。结论:成功。 为测试在发送时是否也可以在没发送完时(即TI=0时)也去干别的,编制了tx0307.asm(本来起的文件名是:tx0306-2.asm结果A51在编译时不认识6和2之间“-”),并特意在干别的时候加了一个延时,经测试,结论:OK。以上是在5103上得到的结论。在KEIL上编制了通信程序后,因无法用串口进行真实调试,因此,在接收程序中模拟了各种情况下主机向表发的数据(包括数据错误和CRC错误)。然后在通信程序中进行接收、回答数据准备等调试。这个办法以后可以用在其他产品的开发上。十二、 要启动狗的复位功能,就要向其状态寄存器中写入数据,只有WD1、WD0可写,如写0x03h(1.4秒复位一次 )、写0x33

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论