14402|6

55

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】为什么会出现 Error[Pe065] & Warning[Pe012] [复制链接]

我的程序:

#include<msp430x14x.h>
unsigned char DispBuf[]={0,1,2,3};
unsigned char seg[]={0x60,0x01,0x0c,0x80};
void DELAY(unsigned int DTime)
{
while(DTime!=0)
DTime--;
}

void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
unsigned char SelSeg=0;
unsigned int i,LedCycle;
P1DIR=0XFF;
P2DIR=0xFF;
P5DIR=0XFF;
P4DIR=0XFF;
while(1)
{
for(SelSeg=0;SelSeg<4;SelSeg++)
{
for(i=0,LedCycle=0x01;i<8;i++,LedCycle<<=1)
{
P4OUT=LedCycle;
P1OUT=seg[DispBuf[SelSeg]];
P2OUT=seg[DispBuf[SelSeg]];
P5OUT=seg[DispBuf[SelSeg]];
DELAY(100);
}
}
}
}




错误和警告指向void DELAY(unsigned int DTime)和最后一行,下面是Massages,,我在网上查了一下,说的都是中断的程序才会出现这种情况,但是我这里并没有中断,请帮我看看为什么会这样错误和警告,期望高手能指出究竟哪些情况下会出现这样的错误和警告



Compiling



LED.C
icc430.exe -I D:\Program Files\IAR Systems\Embedded Workbench 3.2\430\INC\ -I D:\
Program Files\IAR Systems\Embedded Workbench 3.2\430\INC\CLIB\ -o F:\学习资料\单片机\
My_WorKs\Msp430\12-21\Debug\Obj\ -z2 --no_cse --no_unroll --no_inline --no_code_motion
--debug -e F:\学习资料\单片机\My_WorKs\Msp430\12-21\LED.C



IAR MSP430 C/EC++ Compiler V2.10A/W32
Copyright 1996-2003 IAR Systems. All rights reserved.
Error[Pe065]: expected a ";"
Warning[Pe012]: parsing restarts here after previous syntax error



Errors: 1
Warnings: 1



Done. 1 error(s), 1 warning(s)

最新回复

请问你是怎么解决的?   详情 回复 发表于 2014-8-6 21:23
 
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我用的编译器是:IAR Embedded Workbench IDE 3.0 (3.0.0.4)
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
问题解决了,呵呵

点评

请问你是怎么解决的?  详情 回复 发表于 2014-8-6 21:23
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
请问楼上的你是怎么解决的?我也碰到这种问题了,请指教!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 

IAR EW430 Error[Pe065]: 编译错误信息

#include <msp430x14x.h>

#define uchar unsigned char
#define WRC 0x00 //W_RF_CONFIG
#define uint unsigned int

#define RRC 0x10 //R_RF_CONFIG
#define WTP 0x20 //W_TX_PAYLOAD
#define RTP 0x21 //R_TX_PAYLOAD
#define WTA 0x22 //W_TX_ADDRESS
#define RTA 0x23 //R_TX_ADDRESS
#define RRP 0x24 //R_RX_PAYLOAD

#define TXEN_0 P6OUT &=~BIT2 //使能接收模式
#define TXEN_1 P6OUT |= BIT2 //发射模式
#define TRX_CE_0 P6OUT &=~BIT1 //禁止TX/RX
#define TRX_CE_1 P6OUT |= BIT1 //使能TX/RX
#define PWR_0 P2OUT &=~BIT2 //未上电
#define PWR_1 P2OUT |= BIT2 //芯片瑕电
#define MISO_0 P5OUT &=~BIT2 //从NRF905读0
#define MISO_1 P5OUT |= BIT2 // 读1
#define MOSI_0 P5OUT &=~BIT1 //MCU写0至NRF905
#define MOSI_1 P5OUT |= BIT1 // 写1
#define SCK_0 P5OUT &=~BIT3 //SCK为0
#define SCK_1 P5OUT |= BIT3 // 为1
#define CSN_0 P5OUT &=~BIT0 //使能SPI
#define CSN_1 P5OUT |= BIT0 //禁止

#define AM_0 P2OUT &=~BIT6 //AM为0未检测到地址匹配
#define AM_1 P2OUT |= BIT6 // 为1地址匹配
#define DR_0 P2OUT &=~BIT7 //DR为0数据未就绪
#define DR_1 P2OUT |= BIT7 //为1 就绪
#define CD_0 P2OUT &=~BIT5 //CD为0未收载波
#define CD_1 P2OUT |= BIT5 // 为1收到载波

uchar RFConfig[10] = { //配置寄存器的10个配置字节第0至第9字节
0x01, //频道设置
0x08, //自动重发关,正常模式,输出功率6dB,422.5MHZ
0x44, //收发地址长度都为4字节
0x20, //接收数据长度,32字节
0x20, //发送数据长度,32字节
0x88,
0x88,
0x88,
0x88, //4个字节的地址
0x88, //使能8位校验,16M晶振,输出外部时钟使能500KHZ
};
uchar TxAddress[4]={0x88,0x88,0x88,0x88}; // 4个字节的发送地址
uchar RFRxBuf[32]; //射频接收缓冲区32个字节
uchar RFTxBuf[32]; //射频接收缓冲区32个字节
uchar DATA_BUF;

void NRF905_IO_init(void)
{
P6SEL &= ~(BIT2|BIT1|BIT0); //p6.0, p6.1 ,p6.2为普通IO且都作输出 //
P6DIR |= (BIT2|BIT1|BIT0); //p6.0--PWR_UP,P6.1-TRX_CE,p6.2--TX_EN//

P2SEL &= ~(BIT7|BIT6|BIT5); //P2.5,P2.6,P2.7为普通IO且作输入 //
P2DIR &= ~(BIT7|BIT6|BIT5); //p2.5--CD, p2.6--AM ,p2.7--DR //

P5SEL &= ~(BIT3|BIT2|BIT1|BIT0); //P5.0--CSN P5.2--MISO//
P5DIR |= (BIT3|BIT1|BIT0); //P5.1--MOSI P5.3--SCK//
P5DIR &= ~BIT2;

CSN_1; // SPI禁止
SCK_0; // SCK初始状态为低
PWR_1; // nRF905上电
TRX_CE_0; // nRF905进入待机模式
TXEN_0; // 接收模式
}

void Init_Sys() //系统初始化
{
BCSCTL1 &=~XT2OFF; //启用XT2高速晶体振荡器
do { IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (uint i = 0xFF; i > 0; i--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振,为0时振荡转换完成
BCSCTL2 =SELM1+SELS; // MCLK,SMCLK时钟为XT2
//串口初始设置
P3SEL |=( BIT6|BIT7); // 串口端口--P3.6TX,P3.7RX
P3DIR |= (BIT6|BIT5); // P3.5为485TX/RX使能
P3OUT &= ~BIT5; // 使485初始为接收状态
ME2 = UTXE1 + URXE1; // 使能串口模块1的TX/RX
UCTL1 |= CHAR; //8位字符格式
UTCTL1 |= SSEL1; //时钟源用SMCLK
UBR01 = 0x41; //
UBR11 = 0x03; //波特率为 9.6K
UMCTL1 = 0x49; //平均分布安插3个位,即第0,3,6位(小数*8后约为3)
IE2 |= URXIE1; //使能RX中断
UCTL1 &= ~SWRST; //初始化USART状态机(注意用法)

//=========================NRF905 SPI读函数(IO模拟SPI时序)==================
uchar SpiRead (void)
{
uchar i;
for (i=0;i<8;i++)
{
DATA_BUF=DATA_BUF<<1; // 先读取最高位,保存至最末尾,再通过左移位完成整个字节
SCK_1; // 数据传一位,SPI时钟跳一下(注意读写时的不同用法)
if ((P5IN&BIT2)) // 如果P3.2为高 ,则DATA_BUF的0位为1;否则为0。
{
DATA_BUF |= 0x01;
}
else
{
DATA_BUF &= ~(0x01);
}
SCK_0;
}
return DATA_BUF; // 读完一个字节的值即返给函数SpiRead(void)
}

//=========================NRF905 SPI读写函数(IO模拟SPI时序)==================
void SpiWrite(uchar send)
{
uchar i;
DATA_BUF = 0x00;
DATA_BUF=send; // 把要写的字先送给缓存
for (i=0;i<8;i++)
{
if (((DATA_BUF&0x80) != 0))// 总是发送最高位
{
MOSI_1; // 如果DATA_BUF的最高位为1,则写1;否则写0。
}
else
{
MOSI_0;
}
SCK_1; // 时钟跳一下(注间读与写的不同用法)
DATA_BUF=DATA_BUF<<1; // *DATA_BUF按位左移1位,这时原DATA_BUF的后7位的值均向左
SCK_0; // *移一位,即原第6位成了现在的最高位,以此类推。
}
}

void Delay_ms(uint ms) //毫秒为单位,8MHz为主时钟
{
uint i;
uint j;
for(i = ms;i > 0;i--)
{
for(j = 2667;j > 0;j--);
}
// return;
}

void Delay_us(uint us)//微秒为单位,8MHz为主时钟
{
uint i;
uint j;
nCount = 3;
for(i = us;i > 0;i--)
{
for(j =3;j > 0;j--);
}
//return;
}

void delay(uint s) //
{
uint i;
for(i=0; i<s; i++);
}

//==================================写RF配置寄存器的配置参数================================
void Config905(void)
{
uchar i;
CSN_0; // 使能SPI
SpiWrite(WRC); // 先写写配置寄存器命令
for (i=0;i<10;i++) // 写放配置字,一共要写完配置寄存器里的11个字配置字
{
SpiWrite(RFConfig[i]); // 注:一定是从第0字节写至10字节,这是由NRF905芯片决定的
}
CSN_1; //关闭SPI
}

//=========================NRF905装载地址+数据打包+数据发送=====================
void TxPacket(void)
{
uchar i;
TXEN_1; //TX_EN=1
CSN_0; // 使能SPI
//delay(1000);
SpiWrite(WTP); // 写装载TX有效数据命令
for (i=0;i<32;i++) // 写TX有效数据,从第0字写至31字
{
SpiWrite(RFTxBuf[i]);
}
CSN_1; // 写完后关闭SPI
Delay(1); // 延时
CSN_0; // 再打开SPI
SpiWrite(WTA); // 写入地址要和接收方地址一样(本例中是4个字都是0X88)
for (i=0;i<4;i++) // 4字节地址
{
SpiWrite(TxAddress[i]);
}
CSN_1; // 再关闭SPI
TRX_CE_1; // 开始发射
void Delay_us(12); // while (DR!=1);发射延时12uS以确保发送完毕
TRX_CE_0; // 关闭芯片TX/RX
}



//=========================NRF905接收数据=====================
void RxPacket(void)
{
TXEN_0; //接收模式
TRX_CE_1; //使能接收
//Delay_us(650);
while ((P2IN&BIT7)) //当DR为1
{
TRX_CE_0;
CSN_0; // SPI使能
// Delay(1);
SpiWrite(RRP); // 写读SPI数据命令
for (uchar i = 0 ;i < 32 ;i++)
{
RFRxBuf[i]=SpiRead(); // 读取数据送到RX缓存
}
CSN_1; //禁止SPI
Delay(10);
//TRX_CE_1;
}
}

void main()
{
WDTCTL = WDTPW + WDTHOLD; //禁止看门狗
Init_Sys();
NRF905_IO_init();
_EINT();
while(1)
{
while(!(IFG2&UTXIFG1)) // 若发送缓存为空
{
P3OUT |= BIT5; //(485TX)
RxPacket();
for (uchar i = 0 ;i < 32 ;i++)
{
TXBUF1 = RFRxBuf[i];
}
P3OUT &= ~ BIT5;
}

}

}

#pragma vector = USART1RX_VECTOR
__interrupt void Usart1RX()
{
TxPacket();
P3OUT &= ~ BIT5;
for ( uchar i = 0 ;i < 32 ;i++)
{
RFRxBuf[i] = RXBUF1;
}

}


IAR EW430版本是V4.1的,错误信息是这样的
main.c
Error[Pe065]: expected a ";" J:\自编程NRF905\main.c 95
Warning[Pe012]: parsing restarts here after previous syntax error J:\自编程NRF905\main.c 201
Warning[Pe223]: function "SpiWrite" declared implicitly J:\自编程NRF905\main.c 217
Warning[Pe676]: using out-of-scope declaration of function "SpiRead" (declared at line 94) J:\自编程NRF905\main.c 220
Warning[Pe223]: function "Delay" declared implicitly J:\自编程NRF905\main.c 223
Warning[Pe223]: function "TxPacket" declared implicitly J:\自编程NRF905\main.c 254
Error while running C/C++ compiler

Done. 1 error(s), 5 warning(s)
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼主,程序经常出现这个问题
 
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

7
 

请问你是怎么解决的?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表