调试问题记录1

上传人:wm****3 文档编号:42745095 上传时间:2018-06-03 格式:DOC 页数:4 大小:43.50KB
返回 下载 相关 举报
调试问题记录1_第1页
第1页 / 共4页
调试问题记录1_第2页
第2页 / 共4页
调试问题记录1_第3页
第3页 / 共4页
调试问题记录1_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《调试问题记录1》由会员分享,可在线阅读,更多相关《调试问题记录1(4页珍藏版)》请在金锄头文库上搜索。

1、调试问题记录 一、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

2、 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 中 选地

3、址 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 个单 选框,同时通过其右侧的 sett

4、ing 设置与微机联络的串行口的参数,波特率通常设 在 9600 左右。5、 “F7”为编译键; 6、 “Ctrl+ F5”是调试,F10 是执行到光标,F11 是单步执行; 7、 需要特别注意的是,带板子调试时 startup.a51 中的 CSEG AT 0 应该改 成 CSEG AT 8000h;而且应该在“startup1:”标号下加入 MOV 0C4H,#45H (set DME0 to enable the on-chip sram,打开片上 1K 的外部 RAM) ; 8、 使用实时多任务时,需要把 keilc51rtxtiny2sourcecodeconf_tny.a51 加入

5、到工程中, (即在 source group1 上点右键,然后选 Add files to group source group1),然后 将这个文件第 270 行的 CSEGAT 0BH 改成 CSEGAT 800BH,如果是 写芯片时还应该改回到 0BH;注意:如果需要全局变量,则变量定义应该不包含 在任意一个任务中。而定义在任意一个任务中的变量均为局部变量。 9、 如果需要调用其他 C 程序中的函数,则首先需要在程序开头用“include”将这个 需要的函数包含在头文件中,同时在工程里还需要把包含那个函数的 C 程序加入 进来,方法与“7”相同。 10、第“8”中最简单的办法:把函数体另

6、存在一个文件里(加上适当的 include 及参数类型定义没,如 uchar 等) ,在原来函数所在位置仅留函数名及其参数,后 面加上分号“;”即可。 11、在多任务中,如果在 2 个或 2 个以上的任务中都得到调用的函数,必须在属 性上加上“可再入” ,即 reentrant,但遇到的问题无法解决(实际无法再入) ,因此 实际中只好写成 2 个函数,分别调用。 12、电容 C34 对测量的稳定性影响很大 13、多任务:如果在任务 0 中有 delete 自己的语句,则在各子任务中应该有 send 和 wait2 语句;如果没有 delete,则当一个子任务执行完一个循环后,如果遇到 外同则马

7、上交权,如果遇到 send 则等待结束自己分到的时间片后交权,交权的前提是有人在等信号。 二、看门狗 25045 1、 在对看门狗内部数据存储器进行操作时,必须先读其当前状态,看其状态寄存器 的最低位是否为“0” (为“1”则忙) ,确认后才可以对其数据寄存器进行访问 (读/写) 。向数据寄存器写数据前必须将 WREN 命令先写进去。 2、 若要启动看门狗应向状态寄存器写“0”! 三、显示驱动 7219 1、 要显示数据必须先使 7219 离开上电模式(shutdown 模式) ; 2、 本控制器分 2 行显示,上面一行最左边的为“0”位,下面一行最左边为“ID”显 示,从第二个开始为连续的

8、6 个显示 LED,从“0”位开始,因此,最左边的是第“6”位(即第七位) ; 3、 若显示 0-9 的数字,在目前的程序中的数组中直接写数字,而在将来的程序中则可 以定义一块存储区,专门存储要显示的数据,但应该是经过“位分离”的,即把 数据转成 10 进制的以后,每一位分别存储在不同的单元里,形成每一单元都是“0x01”或“0x08”等; 4、 若显示字符,则可以有程序直接向送显单元赋要显示的字符,要加引号,如“a” 或“A” ;将来在程序中应加上向显示函数发送显示长度,不足 6 位的则显示“黑” , 或直接向其他显示位送“黑”字符 四、ADC7730 1、 按照 p10 的说法,应选用 c

9、hop 模式; 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 则

10、 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;同时,读数据时一致性不好

11、,怀疑是硬件上存在 隐患(如片下不能走线等) ,下次改板时要处理。五、注意事项 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 站只用小投(大投、小投是两个门,大投时两个门全开,到一定的量时,大投 门关,当实时称量值大于等于“目标值

12、-落差”时,关闭小投) ; 2、 零位:“d”代表最小分度(即灵敏度) ; 3、 负数:在标定时可能有杂质粘在秤盘上,标定完毕后若杂质掉落则可能会出现负 数,但不会太大,且可以消去; 4、 OFL 超过标定值时(标定一般用 80%量程,而 OVL 则是超过满量程时) ; 5、 F1.5:开始称量时(启动称量)时,把初值清掉,超差应报错(目前无此项功能) ;6、 F1.3:目的是空秤等待时,有小的漂移时,显示器不应跳字; 7、 F3.1:卸料时用,理想情况下可以卸到零,但一般不会,可设定小于等于某值(零 区)时认为卸完; 8、 配方:只存目标值、大投值、落差值; 9、 键盘:“mode” ,在“

13、停止”状态下,按此键,功能在停止、配方、参数、校秤四 个功能上循环; 10、 表通常只控制做一盘,由 PLC 或按钮发控制信号,启动每一盘; 11、 小数点:最多四位; 12、 追零范围:自动清零,显示上就是 0; 13、 F1.4:料落的过程中,两次相邻的测量值比较; 七、解决的问题 1、 静态变量:在试图把从 7730 中的数据读出的程序模块变成外部子程序时,遇到问 题,本来在一个主程序段中读得很准确的程序,在放到主程序前,变成一个函数 时,返回值就不准了,经常出现返回的前 8 位不对的现象,后来将子程序中的代 表采样值的 16 位无符号整型值(read_value)定义成静态变量,即 s

14、tatic 型,就好 了。原因应该是在返回过程中变量的地址被破坏了,应该继续仔细分析; 2、 外部变量:即全局变量,在主程序中定义了“gb.h”做为存储全局变量的头文件, 而且也做了初始化,当试图把显示初始化程序变成外部子程序时,因该子程序用 到了 xs 、xs1、 point0 这 3 个全局变量,因而编译链接时出现错误提示:这 3 个 变量没有定义,在函数体前面加上定义(带值初始化的)后(无论是否加 extern) , 都提示:重复定义;在函数体内部加上则居然死机了!后来将在外部说明全局 变量的初始化值拿掉,仅留引用定义,好了!尝试将“gb.h”中的初始化拿掉,但 不行,还要试! 3、 指

15、针变量:在显示程序中,几个小的子程序均很容易就实现了外部函数化,而 disptotal、disptotal1 却不行,提示错误是:转换过程中,指针被变成了非指针, 后来将函数中的形参改成“uchar * rxs”形式,就 OK 了。 4、 在将模块外部函数化的过程中,应注意头文件的包含,且必须把这个扩展名为“.c”的外部函数加到工程中,同时还要在引用程序的头文件里加上这个子程序的 名字。5、 八、调 7730 时,总是遇到一个问题:不相干的语句增加几句、增加几个变量,程序就会死, 原因是:project 卡 option for Target1 选项中的 C51 卡上,优化等级和选重速度还是体

16、积在作怪,后来,选体积,及不同的优化等级。还有,在它下面的“不要使用直接寄 存器访问”也有影响(打上钩以后好多了) 九、当除通信程序都加进去后,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 目的是为了证明: 系统处于缺省的接收状态,如果没有收到一个完整的字节,则去干别的事情,如果 收到则处理完后,干别的。发送时则一直等这个字节发送完毕才干别的。 结论:成功。 为测试在发送时是否也可以在没发

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号