忙半天了,只因为中断前及中断中改变标志出错。
串口使用中断来发送一个数组,需要使用一个全局标志来索引当前进入中断后填入UxDBUF的元素。错误的写法(不一定会出错的):
U0DBUF = arr[0]; //arr为已经初始化的数组,内容是"abcd"
sendIndex = 1; //发送索引,中断里发送arr[sendIndex++] .
结果会在串口助手接收到"aabcd"这样字串。
为了保证功能正常,应该写为
sendIndex = 1;
U0DBUF = arr[0];
这样就会接收到"abcd"这一正常的数据。
分析错误原因,是因为中断抢先于sendIndex = 1执行,所以会在发送'a'以后,在中断里再次发送arr[0],之后执行到sendIndex = 1,然后发送arr[1];因此收到两个'a'。
这样一想,所有的中断程序中用到并可能改变的标志应该在触发中断(如U0DUBF = n;)或打开中断(如EA = 1;)这样的语句之前。写下来,希望自己养成此习惯。
文章评论(0条评论)
登录后参与讨论