51与飞思卡尔单片机DG128通信,我用51发送1给DG128,为何加了if语句,里面的程序就不执行了,怎么回事啊

void interrupt 20 sci(void)
{
unsigned char ch;
ch=SCIread();
if(ch==1)
{
DDRB=0XFF;
PORTB=0x00;
}
}

这个很明显是因为你的 SClread(); 函数应该返回的是读取的字符的ASCII 码, 而你发送的 ASCII 码不是 1, 这个条件不成立, 所以就不执行了, 建议你修改接收函数 SClread() 的返回值类型, 或者修改这个 if 条件语句.追问

这怎么修改呢,没搞过啊,这玩意

追答

这个不太好说, 因为你没有贴 SClread() 的源码出来, 也不知道你加 if 条件语句的目的是什么?

追问

unsigned char SCIread() //读SCI数据
{
if(SCI0SR1_RDRF==1)
{
SCI0SR1_RDRF=1;
return SCI0DRL;
}
}
我增加 if 条件语句,就是为了试试串口通信

追答

void interrupt 20 sci(void)
{
unsigned char ch = 0;
ch=SCIread();
if(ch != 0)
{
DDRB=0XFF;
PORTB=0x00;
}
}
你这样该试试看.

追问

这肯定行啊。关键是怎么识别发过来的信息啊。算了,把分给你吧

追答

你可以定义一个全局的数组每次把收到的资料放进去, 这样就可以在其他的程序中处理了. 还有没有相关的资料, 很难帮你或者如果你的电路板上有 LED 灯, 你也可以用 switch case 的方式, 在每个不同 case 中点亮不同的 LED 灯来识别发来的信息. 比如控制你的 PORTB 这个寄存器 (不清楚你的 PORTB 是控制什么的, 只是举个例子, 你可以根据电路的设计具体写相对应的寄存器.)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-27
你确定ch会变成1吗?你可以把他放到全局变量里,在BDM调试窗口观察一下ch的值。
第2个回答  2013-03-27
ch 定义为 字符型
if(ch==1)
这个1 是数字啊
改成'1'或者 "1" 试一下追问

不行,没执行

相似回答
大家正在搜