阅读:2488回复:5
keil c51这个垃圾,真气人!
zlg7289也是用的p2口就可以,这个就不行!而且在zlg7289.c中
可以用sbit zlg17289cs=p2^4;来定义,而这个文件就不行非要用 #define x5045cs P2_0 来定义。定义后编译又出现下面的问题! 请高手指教! 源文件如下: //--------------------------------- //x5045子程序 //--------------------------------- #include <AT89X52.H> #include <INTRINS.H> #define x5045CS P2_0 #define x5045SO P2_1 #define x5045SI P2_2 #define x5045SCK P2_3 void OUTByte(unsigned char Byte) //输出一个定节 { unsigned char TempCyc; for(TempCyc=0;TempCyc<8;TempCyc++) { x5045SCK = 0; x5045SI = Byte & 0x80; Byte = Byte<<1; //左移 x5045SCK = 1; } x5045SI=0; //使SI处于确定的状态 } void WIPCHK(void) void RESWDI(void) //复位看门狗(喂狗) //出问题的地方 { x5045CS=0 ; x5045CS=1 ; } void WREN(void) //写使能锁存 { x5045SCK=0; x5045CS=0; OUTByte(0x06); //发送06H写使能命令字 x5045SCK=0; x5045CS=1; } void WRDI(void) //写使能复位(禁止写) { x5045SCK=0; x5045CS=0; OUTByte(0x04); //发送04H写禁止命令字 x5045SCK=0; x5045CS=1; } void WRSR(void) //写状态寄存器 { x5045SCK=0; x5045CS=0; OUTByte(0x01); //发送01H写寄存器命令字 OUTByte(0x20); //发送寄存器值BL0,BL1为0没写保护,WD0=0 WD1=1看门狗复位时间为200ms x5045SCK=0; x5045CS=1; WIPCHK(); //判断是否写入 } unsigned char RSDR(void) //读状态寄存器 { unsigned char Temp; x5045SCK=0; x5045CS=0; OUTByte(0x05); //发送05H读状态寄存器命令字 Temp=INPUTByte(); //读状态寄存器值 x5045SCK=0; x5045CS=1; return Temp; } void WIPCHK(void) //reentrant //检查WIP位,判断是否写入完成 { unsigned char Temp,TempCyc; for(TempCyc=0;TempCyc<50;TempCyc++) { Temp = RSDR(); //读状态寄存器 if (Temp&0x01==0) TempCyc = 50; } } unsigned char INPUTByte(void) //输入一个字节 { unsigned char Temp=0, TempCyc; for(TempCyc=0;TempCyc<8;TempCyc++) { Temp = Temp<<1; //左移 x5045SCK = 0; if (x5045SO) Temp = Temp|0x01; //SO为1,则最低位为1 x5045SCK = 1; } return Temp; } unsigned char ReadByte(unsigned char ADD) //读地址中的数据这里不做先导字处理,只能读00-FFH { uchar Temp; unsigned char in_temp=0x03; //写指令临时变量 if((ADD>>8)&0x01) in_temp |=8 //判断ADD是否大于八位,即 // 地址是否大于FF,若是则 // 0000A8 011 于1000相或,A8 //置1。 x5045SCK=0; x5045CS=0; OUTByte(in_temp); //发送读指令 OUTByte(ADD); //发送低位地址 Temp = INPUTByte(); x5045SCK=0; x5045CS=1; return Temp; } void WriteByte(unsigned char Byte,ADD) //向地址写入数据 { unsigned char in_temp=0x2; //写指令临时变量 if((ADD>>8)&0x01) in_temp |=8 //判断ADD是否大于八位,即地 //址是否大于FF,若是则 // 0000A8 010 于1000相或,A8 //置1。 WREN(void) ;//写使能 x5045SCK=0; x5045CS=0; OUTByte(in_temp); //发送写指令 OUTByte(ADD); //发送低位地址 OUTByte(Byte); //发送数据 x5045SCK=0; x5045CS=1; WIPCHK(); //判断是否写入 WRDI(); //写关闭 } 错误提示如下:compiling x5045.c... X5045.C(33): error C132: 'RESWDI': not in formal parameter list X5045.C(33): error C141: syntax error near '{' X5045.C(34): error C136: 'P2_0': 'void' on variable X5045.C(34): error C244: 'P2_0': can't initialize, bad type or class X5045.C(34): error C136: 'P2_0': 'void' on variable X5045.C(34): error C132: 'P2_0': not in formal parameter list X5045.C(36): error C244: 'P2_0': can't initialize, bad type or class X5045.C(36): error C132: 'P2_0': not in formal parameter list X5045.C(37): error C141: syntax error near '}' Target not created [url] [/url] |
|
|
沙发#
发布于:2005-01-24 23:36
zlg7289也是用的p2口就可以,这个就不行!而且在zlg7289.c中 void WIPCHK(void) 应该以分号结束吧! |
|
|
板凳#
发布于:2005-01-25 08:00
哎.....上次还没放分呢..... :P
|
|
|
地板#
发布于:2005-01-25 08:06
void RESWDI(void) //复位看门狗(喂狗)
//出问题的地方 { x5045CS=0 ;把0和;得空格去掉试试 x5045CS=1 ;同上 } 别忘了.......那个一下...... :P |
|
|
地下室#
发布于:2005-01-25 10:57
哎.....上次还没放分呢..... :P 嘿嘿,上次你也没给我分.你又没给我解决问题! |
|
|
5楼#
发布于:2005-01-31 13:59
那个编译器确实有点烦人。特别是文件里有中文的话,而且那个分号和冒号特难看。一不小心要找半天。 不过还没找到更好的编译器
|
|