- char ii; uchar jj;
- void send(uchar data)
- {
- for (ii=7;ii>=0;ii--)
- {
- //scl=0;
- //aa();
- jj=(data>>ii);
- //sda=(j&0x01);
- //aa();
- //scl=1;
- //aa();
- //aa();
- }
复制代码
一个子程序 ,注释掉的内容是为了调试方便画掉的 。
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了试过了,没有问题 。谢谢各位了
此帖出自
小平头技术问答
typedef unsigned char uchar;
{
//scl=0;
//aa();
jj=(data>>ii);
//sda=(j&0x01);
//aa();
//scl=1;
//aa();
//aa();
}
被编译器优化这个理由是说得过去的,因为JJ的值最将会是最后的值,编译器可能帮你直接算出来了
加volatile声明JJ看看
你改下这个uchar,改为有符号类型的,有时候编译器处理是相反的。
按照下面写吧..
还jj=(data>>ii); 这么也要考虑下效率 ^_^ ^_^ o(∩_∩)o.
char ii; uchar jj;
void send(uchar data)
{
for (ii=7;ii>=0;ii--)
{
scl=0;
aa();
sda=(data&0x01);
data >>= 1;
aa();
scl=1;
aa();
aa();
}
一周热门 更多>