我模仿STM32做了个STC51单片机的程序,为什么一运行就有问题?

tpyedef struct io
{
unsigned char IO_Num;
unsigned char IO_Mode;
unsigned char IO_Pins;
}IO

void IO_Setting(IO io)
{
unsigned char Temp_DataH = 0;
unsigned char Temp_DataL = 0;
unsigned char Temp_Pins = io.IO_Pins;
if(io.IO_Mode == IO_OUTPUT)
{
Temp_DataH = io.IO_Pins;
Temp_DataH = ~io.IO_Pins;
}
else if(io.IO_Mode == IO_INPUT)
{
Temp_DataH = ~io.IO_Pins;
Temp_DataH = o.IO_Pins;
}
else if(io.IO_Mode == IO_BD)
{
Temp_DataH = io.IO_Pins;
Temp_DataH = o.IO_Pins;
}

if(io.IO_Num == PORT0)
{PMOD0H = Temp_DataH;PMOD0L = Temp_DataL}
else if(io.IO_Num == PORT1)
{PMOD1H = Temp_DataH;PMOD1L = Temp_DataL}

}

两个原因,第一,你在修改你要修改的引脚的时候,触动了不允许修改的引脚,你看你的程序:
if(io.IO_Mode == IO_OUTPUT)
{
Temp_DataH = io.IO_Pins;
Temp_DataH = ~io.IO_Pins;
}
else if(io.IO_Mode == IO_INPUT)
{
Temp_DataH = ~io.IO_Pins;
Temp_DataH = o.IO_Pins;
}
else if(io.IO_Mode == IO_BD)
{
Temp_DataH = io.IO_Pins;
Temp_DataH = o.IO_Pins;
}
假如你要修改1,2,3引脚,那么,除了1,2,3引脚可以得到正确的配置外,其他的引脚,本来不需要动的,也可能被你修改了,导致你的程序出错。

第二,不知道你是不是用的大内存容量模式,就是默认把变量放到xdata里,如果是那样的话,你在声明IO结构体类型的变量的时候,要注明,是data类型的,51不支持xdata里的结构体类型。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-10
问题是什么?你把出错提示贴出来。
相似回答