a825563619 发表于 2023-8-11 09:38 只是学习的话,仿真没问题的,学得差不多再搞实际器件 proteus 8.9是支持STC15器件的,其他仿真软件我就不清楚了 |
a825563619 发表于 2023-8-11 09:38 调试AD转换只能实际器件才有意义。 |
while(!(ADC_CONTR & ADC_FLAG)); 这个分号一定需要 |
xuyaqi 发表于 2023-8-10 14:56 只能实际器件吗,在线的可以吗 |
lkc8210 发表于 2023-8-10 17:42 原来如此,强啊,话说如果在线仿真可以采到ad值吗,还是说一定要实物呢 |
sttt300 发表于 2023-8-10 19:21 对的,是我疏忽了,之前试了别的跳出方式忘了加; ![]() |
举个例子: a=2; while(a--); a=1; a=2; 执行结果:a=2 假如少了个分号 a=2; while(a--) a=1; a=2; 程序就执行不下去了,一直while循环 这样可以理解吧 |
while语句后面没有加“;”,这样就会把下一句当成是while的循环体,刚好下一句是清零,就永远在while这里循环了 |
是不是代码有问题呢,清除标志位是不是不该这么写呢 |
本帖最后由 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 ![]() |
直接注释掉 while(!(ADC_CONTR & ADC_FLAG));,调试完后改回来。 |
你应该查查是不是单片机初始化不对?造成一直在等待转换结束,否则ADC不会出现这个问题 |
将本句暂时改成 while(1或0) 调试完成后改回。 |
实际器件会自动返回1,人为返回1调试没有意义。 |