zhxiufan 发表于 2022-9-4 08:05
如果仅仅是这些代码的话,估计应该是程序跑飞了,因为你中断打开了,但是并没有写中断服务程序,所以很可能 ...
wulin 发表于 2022-9-4 09:02
void UARTSendString(char *p)在没有注释掉的情况下,虽然没有被你调用,但不代表后台不能运用。当你强制TI ...
void UARTSendString(char *p)在没有注释掉的情况下,虽然没有被你调用,但不代表后台不能运用。当你强制TI = 1;后,只要开了中断,CPU必须响应,跳转到while (TI!=1);TI=0;。后面的这句if(TI == 1) P2_1 = 0;已经没有意义了。TI是由硬件自动置1,软件清0。不是不可以人为置1,是在某些特殊运用方式时才采用。在不了解其内在因果关系的情况下盲目使用当然达不到目的。楼主可以在编辑器里走单步就一目了然了。 |
censv 发表于 2022-9-4 09:32
谢谢解惑,但还是有疑问,cpu为什么会跳转到「while (TI!=1);TI=0;」处呢?
当我把UARTSendString函 ...
wulin 发表于 2022-9-4 10:30
改函数名导致出错的形式变化并没有改变出错的本质。在编辑器里走单步!走单步!走单步!重要的事情说3遍 ...
censv 发表于 2022-9-4 10:57
你可能没有仔细看我的回复,修改的并不只是函数名,而且也和函数名无关。
修改的内容包括:函数参数(由 ...
xxxevery 发表于 2022-9-4 15:07
楼主提出这个问题其实还是很有意思的,但我觉得已经超出了你目前的知识范围,这已经涉及到硬件底层操作和编 ...
censv 发表于 2022-9-4 09:32
谢谢解惑,但还是有疑问,cpu为什么会跳转到「while (TI!=1);TI=0;」处呢?
当我把UARTSendString函 ...
188610329 发表于 2022-9-4 18:31
void UARTInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特 ...
censv 发表于 2022-9-4 18:56
多谢回复
写了中断处理函数,TI也不一定变0,比如空的处理函数。没写中断函数,跑飞能理解。
但这种处 ...
188610329 发表于 2022-9-4 19:04
没中断处理函数, 只要你开了中断, 中断请求标志位被置位,程序 100% 跑飞,至于跑飞后,是否能再跑回原 ...
censv 发表于 2022-9-4 18:56
多谢回复
写了中断处理函数,TI也不一定变0,比如空的处理函数。没写中断函数,跑飞能理解。
但这种处 ...
censv 发表于 2022-9-4 19:13
理解了,多谢,没仿真器debug不了
串口中断触发时程序计数器必定跳到 C:0023,这是人为规定的?
188610329 发表于 2022-9-4 18:52
谁说 printf 必须TI 为1 才可以的?
printf 调用的是 putchar
188610329 发表于 2022-9-4 19:26
你觉得不合理,是因为你的知识储备不够,如果,你对单片机运作原理有足够的了解,你就不会有这种想法了。 ...
censv 发表于 2022-9-4 20:45
keil还是知道的,比如在新建工程时,会让选择芯片类型
censv 发表于 2022-9-4 20:09
直接修改lib文件夹中的putchar.c文件就可以吗?还需要重新编译吗?
btw,TIbusy是什么?变量吗?
188610329 发表于 2022-9-4 21:46
自定的标志, 你随便找几个 开串口中断的 范例,或者STC的范例就可以。就会看到 TIbusy, T1busy , Uartb ...
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |