请教一个PIC单片机的问题,

2019-03-25 19:47发布

  1. char ii; uchar jj;

  2. void send(uchar data)
  3. {
  4. for (ii=7;ii>=0;ii--)
  5. {
  6. //scl=0;
  7. //aa();
  8. jj=(data>>ii);
  9. //sda=(j&0x01);
  10. //aa();
  11. //scl=1;
  12. //aa();
  13. //aa();
  14. }
复制代码
一个子程序 ,注释掉的内容是为了调试方便画掉的 。
data传来的数据位A0,通过单步运行看到,没有错误,但是在第一次循环时,jj=(data>>ii);后 ,jj成了1A ,后面再循环也是1A。

ii跟jj本来是send内定义了,后来会怕这出问题,换成了全局变量定义,结果也不对 。开始ii jj在 send函数内定义时 ,循环时jj为18,而且每次循环都是这个值。

编译器为MPLAB IDE v8.46和 PICC8.05,仿真器ICD2,单片机为PIC16F877A。
而且上面的程序我在VC了试过了,没有问题 。谢谢各位了

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
gaowei821029
2019-03-26 04:16
for (ii=7;ii>=0;ii--)
{
//scl=0;
//aa();
jj=(data>>ii);
//sda=(j&0x01);
//aa();
//scl=1;
//aa();
//aa();
}
被编译器优化这个理由是说得过去的,因为JJ的值最将会是最后的值,编译器可能帮你直接算出来了

加volatile声明JJ看看

一周热门 更多>