找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

keil的单片机AD转换程序调试

查看数: 2569 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-8-10 10:30

正文摘要:

想问一下大家,在keil在线调试的过程中,怎么手动把ADC_CONTR寄存器里的ADC_FLAG位置1呢,或者说,怎么模拟一个ad值给它,运行时一直卡在标蓝处不动了

回复

ID:647261 发表于 2023-8-11 11:16
a825563619 发表于 2023-8-11 09:38
只能实际器件吗,在线的可以吗

只是学习的话,仿真没问题的,学得差不多再搞实际器件
proteus 8.9是支持STC15器件的,其他仿真软件我就不清楚了
ID:94031 发表于 2023-8-11 10:29
a825563619 发表于 2023-8-11 09:38
只能实际器件吗,在线的可以吗

调试AD转换只能实际器件才有意义。
ID:1040201 发表于 2023-8-11 10:20
while(!(ADC_CONTR & ADC_FLAG));   这个分号一定需要
ID:1089588 发表于 2023-8-11 09:38
xuyaqi 发表于 2023-8-10 14:56
实际器件会自动返回1,人为返回1调试没有意义。

只能实际器件吗,在线的可以吗
ID:1089588 发表于 2023-8-11 09:37
lkc8210 发表于 2023-8-10 17:42
1.在while行打断点
2.在Memory1窗口输入D:0xBC(ADC_CONTR的地址)
3.按运行,会停在while行

原来如此,强啊,话说如果在线仿真可以采到ad值吗,还是说一定要实物呢
ID:1089588 发表于 2023-8-11 09:31
sttt300 发表于 2023-8-10 19:21
while语句后面没有加“;”,这样就会把下一句当成是while的循环体,刚好下一句是清零,就永远在while这里 ...

对的,是我疏忽了,之前试了别的跳出方式忘了加;
ID:647261 发表于 2023-8-10 19:30
举个例子:
a=2;
while(a--);
a=1;
a=2;
执行结果:a=2
假如少了个分号
a=2;
while(a--)
a=1;
a=2;
程序就执行不下去了,一直while循环
这样可以理解吧
ID:647261 发表于 2023-8-10 19:21
while语句后面没有加“;”,这样就会把下一句当成是while的循环体,刚好下一句是清零,就永远在while这里循环了
ID:1089588 发表于 2023-8-10 18:42
是不是代码有问题呢,清除标志位是不是不该这么写呢
ID:161164 发表于 2023-8-10 17:42
本帖最后由 lkc8210 于 2023-8-10 17:53 编辑

1.在while行打断点
2.在Memory1窗口输入D:0xBC(ADC_CONTR的地址)
3.按运行,会停在while行
4.在0xBC位置的值加0x10
如现在看到89(即0x89) 0x89+0x10 = 0x99



5.在0xBC位置输入99
6.再按运行就会跳出while



ID:213173 发表于 2023-8-10 17:20
直接注释掉 while(!(ADC_CONTR & ADC_FLAG));,调试完后改回来。
ID:1085441 发表于 2023-8-10 16:28
你应该查查是不是单片机初始化不对?造成一直在等待转换结束,否则ADC不会出现这个问题
ID:123289 发表于 2023-8-10 16:10
将本句暂时改成 while(1或0)
调试完成后改回。
ID:94031 发表于 2023-8-10 14:56
实际器件会自动返回1,人为返回1调试没有意义。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表