knight-long 发表于 2010-4-29 17:56:55

我非常紧急,熬了好个通宵,试着去看懂程序,但是编译上还是有错误,请高手指点,我悉心去领悟

一下面是DS1302时钟的编程程序,但是出现了非法语句,由于自己也是刚刚刚涉及,真的是想去尝试着做出来,现在一直研究着,心里犯难了,想请大家给我帮个忙,指点下这是什么情况,应该怎么编才对,在下万分感谢(这些程序是我下载整个文件包里的,打开来是可以编译的,也能够进行仿真,但是等到我自己去把它输进去是就出现了非法字符)

#include <REGX52.H>
#include "LCD1602.h"
#include "DS1302.h"

void Delay1ms(unsigned int count)
{
        unsigned int i,j;
        for(i=0;i<count;i++)
        for(j=0;j<120;j++);
}

main()
{
        SYSTEMTIME CurrentTime;
        LCD_Initial();
        Initial_DS1302();

        GotoXY(0,0);
        Print("Date: ");
        GotoXY(0,1);
        Print("Time: ");
        while(1)
        {
                DS1302_GetTime(&CurrentTime);
                DateToStr(&CurrentTime);
                TimeToStr(&CurrentTime);
                GotoXY(6,0);
                Print(CurrentTime.DateString);
                GotoXY(6,1);
                Print(CurrentTime.TimeString);

                Delay1ms(300);
        }
}
/*--------------------------------------------------------------------------
AT89X52.H

Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __AT89X52_H__
#define __AT89X52_H__

/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr P1      = 0x90;
sfr SCON    = 0x98;
sfr SBUF    = 0x99;
sfr P2      = 0xA0;
sfr IE      = 0xA8;
sfr P3      = 0xB0;
sfr IP      = 0xB8;
sfr T2CON   = 0xC8;
sfr T2MOD   = 0xC9;
sfr RCAP2L= 0xCA;
sfr RCAP2H= 0xCB;
sfr TL2   = 0xCC;
sfr TH2   = 0xCD;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B       = 0xF0;

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01

#define STOP_   0x02
#define PD_   0x02    /* Alternate definition */

#define GF0_    0x04
#define GF1_    0x08
#define SMOD_   0x80

/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0= 0x88;
sbit IE0= 0x89;
sbit IT1= 0x8A;
sbit IE1= 0x8B;
sbit TR0= 0x8C;
sbit TF0= 0x8D;
sbit TR1= 0x8E;
sbit TF1= 0x8F;

/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_   0x01
#define T0_M1_   0x02
#define T0_CT_   0x04
#define T0_GATE_ 0x08
#define T1_M0_   0x10
#define T1_M1_   0x20
#define T1_CT_   0x40
#define T1_GATE_ 0x80

#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F

/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;

sbit T2   = 0x90;       /* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91;       /* Timer/Counter 2 capture/reload trigger & dir ctl */

/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI   = 0x98;
sbit TI   = 0x99;
sbit RB8= 0x9A;
sbit TB8= 0x9B;
sbit REN= 0x9C;
sbit SM2= 0x9D;
sbit SM1= 0x9E;
sbit SM0= 0x9F;

/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;

/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0= 0xA8;       /* 1=Enable External interrupt 0 */
sbit ET0= 0xA9;       /* 1=Enable Timer 0 interrupt */
sbit EX1= 0xAA;       /* 1=Enable External interrupt 1 */
sbit ET1= 0xAB;       /* 1=Enable Timer 1 interrupt */
sbit ES   = 0xAC;       /* 1=Enable Serial port interrupt */
sbit ET2= 0xAD;       /* 1=Enable Timer 2 interrupt */

sbit EA   = 0xAF;       /* 0=Disable all interrupts */

/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;

sbit RXD= 0xB0;       /* Serial data input */
sbit TXD= 0xB1;       /* Serial data output */
sbit INT0 = 0xB2;       /* External interrupt 0 */
sbit INT1 = 0xB3;       /* External interrupt 1 */
sbit T0   = 0xB4;       /* Timer 0 external input */
sbit T1   = 0xB5;       /* Timer 1 external input */
sbit WR   = 0xB6;       /* External data memory write strobe */
sbit RD   = 0xB7;       /* External data memory read strobe */

/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0= 0xB8;
sbit PT0= 0xB9;
sbit PX1= 0xBA;
sbit PT1= 0xBB;
sbit PS   = 0xBC;
sbit PT2= 0xBD;

/*------------------------------------------------
T2CON Bit Registers
------------------------------------------------*/
sbit CP_RL2= 0xC8;      /* 0=Reload, 1=Capture select */
sbit C_T2 = 0xC9;       /* 0=Timer, 1=Counter */
sbit TR2= 0xCA;       /* 0=Stop timer, 1=Start timer */
sbit EXEN2= 0xCB;       /* Timer 2 external enable */
sbit TCLK = 0xCC;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit RCLK = 0xCD;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit EXF2 = 0xCE;       /* Timer 2 external flag */
sbit TF2= 0xCF;       /* Timer 2 overflow flag */

/*------------------------------------------------
T2MOD Bit Values
------------------------------------------------*/
#define DCEN_   0x01    /* 1=Timer 2 can be configured as up/down counter */
#define T2OE_   0x02    /* Timer 2 output enable */

/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P    = 0xD0;
sbit FL   = 0xD1;
sbit OV   = 0xD2;
sbit RS0= 0xD3;
sbit RS1= 0xD4;
sbit F0   = 0xD5;
sbit AC   = 0xD6;
sbit CY   = 0xD7;

/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR        0/* 0x03 External Interrupt 0 */
#define TF0_VECTOR        1/* 0x0B Timer 0 */
#define IE1_VECTOR        2/* 0x13 External Interrupt 1 */
#define TF1_VECTOR        3/* 0x1B Timer 1 */
#define SIO_VECTOR        4/* 0x23 Serial port */

#define TF2_VECTOR        5/* 0x2B Timer 2 */
#define EX2_VECTOR        5/* 0x2B External Interrupt 2 */

#endif



/**************************************************************************

                                   THE 1602 CHAR LCD LIB

                             COPYRIGHT (c)   2005 BY JJJ.
                                     --ALL RIGHTS RESERVED--

   File Name:       LCD.h
   Author:          Jiang Jian Jun
   Created:         2005/4/3
   Modified:                NO
   Revision:                 1.0

***************************************************************************/

#ifndef LCD_CHAR_1602_2005_4_9
#define LCD_CHAR_1602_2005_4_9

#include <intrins.h>

//Port Definitions**********************************************************
sbit LcdRs                = P2^0;
sbit LcdRw                = P2^1;
sbit LcdEn        = P2^2;
sfrDBPort         = 0x80;                //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数**************************************************************************
unsigned char LCD_Wait(void)
{
        LcdRs=0;
        LcdRw=1;        _nop_();
        LcdEn=1;        _nop_();
        //while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
                                               //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
                                               //实际硬件时打开此语句
        LcdEn=0;
        return DBPort;               
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND                        0      // Command
#define LCD_DATA                        1      // Data
#define LCD_CLEAR_SCREEN        0x01      // 清屏
#define LCD_HOMING                0x02      // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
        LcdEn=0;
        LcdRs=style;
        LcdRw=0;                _nop_();
        DBPort=input;        _nop_();//注意顺序
        LcdEn=1;                _nop_();//注意顺序
        LcdEn=0;                _nop_();
        LCD_Wait();       
}

//设置显示模式************************************************************
#define LCD_SHOW                        0x04    //显示开
#define LCD_HIDE                        0x00    //显示关          

#define LCD_CURSOR                        0x02         //显示光标
#define LCD_NO_CURSOR                0x00    //无光标                     

#define LCD_FLASH                        0x01    //光标闪动
#define LCD_NO_FLASH                0x00    //光标不闪动

void LCD_SetDisplay(unsigned char DisplayMode)
{
        LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
}

//设置输入模式************************************************************
#define LCD_AC_UP                        0x02
#define LCD_AC_DOWN                        0x00      // default

#define LCD_MOVE                        0x01      // 画面可平移
#define LCD_NO_MOVE                        0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
        LCD_Write(LCD_COMMAND, 0x04|InputMode);
}

//移动光标或屏幕************************************************************
/*
#define LCD_CURSOR                0x02      
#define LCD_SCREEN                0x08
#define LCD_LEFT                0x00
#define LCD_RIGHT                0x04
void LCD_Move(unsigned char object, unsigned char direction)
{
        if(object==LCD_CURSOR)
                LCD_Write(LCD_COMMAND,0x10|direction);
        if(object==LCD_SCREEN)
                LCD_Write(LCD_COMMAND,0x18|direction);
}
*/
//初始化LCD************************************************************
void LCD_Initial()
{
        LcdEn=0;
        LCD_Write(LCD_COMMAND,0x38);         //8位数据端口,2行显示,5*7点阵
        LCD_Write(LCD_COMMAND,0x38);
        LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
        LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
}

//************************************************************************
void GotoXY(unsigned char x, unsigned char y)
{
        if(y==0)
                LCD_Write(LCD_COMMAND,0x80|x);
        if(y==1)
                LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
void Print(unsigned char *str)
{
        while(*str!='\0')
        {
                LCD_Write(LCD_DATA,*str);
                str++;
        }
}
/*
void LCD_LoadChar(unsigned char user, unsigned char place)
{
        unsigned char i;
        LCD_Write(LCD_COMMAND,0x40|(place*8));
        for(i=0; i<8; i++)
                LCD_Write(LCD_DATA,user);
}
*/
//************************************************************************
#endif
/*--------------------------------------------------------------------------
INTRINS.H

Intrinsic functions for C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __INTRINS_H__
#define __INTRINS_H__

extern void          _nop_   (void);
extern bit         _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int_iror_    (unsigned int,unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int_irol_    (unsigned int,unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void          _push_    (unsigned char _sfr);
extern void          _pop_   (unsigned char _sfr);

#endif
/**************************************************************************

                                   THE REAL TIMER DS1302 DRIVER LIB

                             COPYRIGHT (c)   2005 BY JJJ.
                                     --ALL RIGHTS RESERVED--

   File Name:       DS1302.h
   Author:          Jiang Jian Jun
   Created:         2003/7/21
   Modified:                NO
   Revision:                 1.0

***************************************************************************/
#ifndef _REAL_TIMER_DS1302_2003_7_21_
#define _REAL_TIMER_DS1302_2003_7_21_

sbitDS1302_CLK = P1^6;            //实时时钟时钟线引脚
sbitDS1302_IO= P1^7;            //实时时钟数据线引脚
sbitDS1302_RST = P1^5;            //实时时钟复位线引脚
sbitACC0 = ACC^0;
sbitACC7 = ACC^7;

typedef struct __SYSTEMTIME__
{
        unsigned char Second;
        unsigned char Minute;
        unsigned char Hour;
        unsigned char Week;
        unsigned char Day;
        unsigned char Month;
        unsigned charYear;
        unsigned char DateString;
        unsigned char TimeString;
}SYSTEMTIME;        //定义的时间类型

#define AM(X)        X
#define PM(X)        (X+12)                      // 转成24小时制
#define DS1302_SECOND        0x80
#define DS1302_MINUTE        0x82
#define DS1302_HOUR                0x84
#define DS1302_WEEK                0x8A
#define DS1302_DAY                0x86
#define DS1302_MONTH        0x88
#define DS1302_YEAR                0x8C
#define DS1302_RAM(X)        (0xC0+(X)*2)           //用于计算 DS1302_RAM 地址的宏

void DS1302InputByte(unsigned char d)         //实时时钟写入一字节(内部函数)
{
    unsigned char i;
    ACC = d;
    for(i=8; i>0; i--)
    {
      DS1302_IO = ACC0;                 //相当于汇编中的 RRC
      DS1302_CLK = 1;
      DS1302_CLK = 0;
      ACC = ACC >> 1;
    }
}

unsigned char DS1302OutputByte(void)         //实时时钟读取一字节(内部函数)
{
    unsigned char i;
    for(i=8; i>0; i--)
    {
      ACC = ACC >>1;                                 //相当于汇编中的 RRC
      ACC7 = DS1302_IO;
      DS1302_CLK = 1;
      DS1302_CLK = 0;
    }
    return(ACC);
}

void Write1302(unsigned char ucAddr, unsigned char ucDa)        //ucAddr: DS1302地址, ucData: 要写的数据
{
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;
    DS1302InputByte(ucAddr);               // 地址,命令
    DS1302InputByte(ucDa);               // 写1Byte数据
    DS1302_CLK = 1;
    DS1302_RST = 0;
}

unsigned char Read1302(unsigned char ucAddr)        //读取DS1302某地址的数据
{
    unsigned char ucData;
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;
    DS1302InputByte(ucAddr|0x01);      // 地址,命令
    ucData = DS1302OutputByte();         // 读1Byte数据
    DS1302_CLK = 1;
    DS1302_RST = 0;
    return(ucData);
}

void DS1302_SetProtect(bit flag)      //是否写保护
{
        if(flag)
                Write1302(0x8E,0x10);
        else
                Write1302(0x8E,0x00);
}

void DS1302_SetTime(unsigned char Address, unsigned char Value)      // 设置时间函数
{
        DS1302_SetProtect(0);
        Write1302(Address, ((Value/10)<<4 | (Value%10)));
}

void DS1302_GetTime(SYSTEMTIME *Time)
{
        unsigned char ReadValue;
        ReadValue = Read1302(DS1302_SECOND);
        Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
        ReadValue = Read1302(DS1302_MINUTE);
        Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
        ReadValue = Read1302(DS1302_HOUR);
        Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
        ReadValue = Read1302(DS1302_DAY);
        Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);       
        ReadValue = Read1302(DS1302_WEEK);
        Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
        ReadValue = Read1302(DS1302_MONTH);
        Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
        ReadValue = Read1302(DS1302_YEAR);
        Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);       
}

void DateToStr(SYSTEMTIME *Time)
{
        Time->DateString = Time->Year/10 + '0';
        Time->DateString = Time->Year%10 + '0';
        Time->DateString = '-';
        Time->DateString = Time->Month/10 + '0';
        Time->DateString = Time->Month%10 + '0';
        Time->DateString = '-';
        Time->DateString = Time->Day/10 + '0';
        Time->DateString = Time->Day%10 + '0';
        Time->DateString = '\0';
}

void TimeToStr(SYSTEMTIME *Time)
{
        Time->TimeString = Time->Hour/10 + '0';
        Time->TimeString = Time->Hour%10 + '0';
        Time->TimeString = ':';
        Time->TimeString = Time->Minute/10 + '0';
        Time->TimeString = Time->Minute%10 + '0';
        Time->TimeString = ':';
        Time->TimeString = Time->Second/10 + '0';
        Time->TimeString = Time->Second%10 + '0';
        Time->DateString = '\0';
}

void Initial_DS1302(void)
{
        unsigned char Second=Read1302(DS1302_SECOND);
        if(Second&0x80)                  
                DS1302_SetTime(DS1302_SECOND,0);
}

/********************************************************************************
void BurstWrite1302(unsigned char *pWClock)        //往DS1302写入时钟数据(多字节方式)
{
    unsigned char i;
    Write1302(0x8e,0x00);                 // 控制命令,WP=0,写操作?
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;
    DS1302InputByte(0xbe);              // 0xbe:时钟多字节写命令
    for (i = 8; i>0; i--)                   //8Byte = 7Byte 时钟数据 + 1Byte 控制
    {
      DS1302InputByte(*pWClock);         // 写1Byte数据
      pWClock++;
    }
    DS1302_CLK = 1;
    DS1302_RST = 0;
}

void BurstRead1302(unsigned char *pRClock)        //读取DS1302时钟数据(时钟多字节方式)
{
    unsigned char i;
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;
    DS1302InputByte(0xbf);                     // 0xbf:时钟多字节读命令
    for (i=8; i>0; i--)
    {
       *pRClock = DS1302OutputByte();   // 读1Byte数据
       pRClock++;
    }
    DS1302_CLK = 1;
    DS1302_RST = 0;
}

void DS1302_TimeStop(bit flag)         // 是否将时钟停止
{
        unsigned char Data;
        Data=Read1302(DS1302_SECOND);
        DS1302_SetProtect(0);
        if(flag)
                Write1302(DS1302_SECOND, Data|0x80);
        else
                Write1302(DS1302_SECOND, Data&0x7F);
}
********************************************************************************/
#endif


*******************************************************************************
下面是 我编译出现的问题
Building DS1302.C
ASEM51 DS1302.C /INCLUDES:"C:\Program Files\Labcenter Electronics\Proteus 7 Professional\TOOLS\ASEM51"
DS1302.C(1):illegal statement syntax
DS1302.C(2):illegal statement syntax
DS1302.C(3):illegal statement syntax
DS1302.C(5):illegal statement syntax
DS1302.C(6):illegal character
DS1302.C(7):illegal statement syntax
DS1302.C(8):illegal statement syntax
DS1302.C(9):illegal statement syntax
DS1302.C(10):illegal character
DS1302.C(12):illegal statement syntax
DS1302.C(13):illegal character
DS1302.C(14):illegal statement syntax
DS1302.C(15):illegal statement syntax
DS1302.C(16):illegal statement syntax
DS1302.C(17):illegal statement syntax
DS1302.C(18):illegal statement syntax
DS1302.C(19):illegal statement syntax
DS1302.C(2):illegal statement syntax
DS1302.C(21):illegal statement syntax
DS1302.C(22):illegal statement syntax
DS1302.C(23):illegal character
DS1302.C(24):illegal statement syntax
DS1302.C(25):illegal statement syntax
DS1302.C(26):illegal statement syntax
DS1302.C(27):illegal statement syntax
DS1302.C(28):illegal statement syntax
DS1302.C(29):illegal statement syntax
DS1302.C(30):illegal statement syntax
DS1302.C(32):illegal statement syntax
DS1302.C(33):illegal character
DS1302.C(34):illegal character
DS1302.C(34):no END statement found
            31 errors detected
ASM.EXE reported error code(1L).
Extracting debug data from DS1302.LST...
1;                                 #include <REGX52.H>
                                     ^
                           @@@@@ illegal statement syntax @@@@@
2:                                 #include "LCD1602.h"
                                     ^
                            @@@@@ illegal statement syntax @@@@@
3:                                 #include "DS1302.h"
                                     ^
                           @@@@@ illegal statement syntax @@@@@
5:                                 void Delay1ms(unsigned int count)
                                          ^
                           @@@@@ illegal statement syntax @@@@@
6:                           {
                               ^
                           @@@@@ illegal statement syntax @@@@@
7:                            unsigned int i,j;
                                          ^
                           @@@@@ illegal statement syntax @@@@@
8:                            for(i=0;i<count;i++)
                                    ^
                           @@@@@ illegal statement syntax @@@@@
   9:                            for(j=0;j<120;j++);
                                    ^
                           @@@@@ illegal statement syntax @@@@@
    10:                               }
                                    ^
                           @@@@@ illegal statement syntax @@@@@
    12:                              main()
                                       ^
                           @@@@@ illegal statement syntax @@@@@
                                 ^
                           @@@@@ illegal statement syntax @@@@@
    14:                               SYSTEMTIME CurrentTime;
                                             ^
                           @@@@@ illegal statement syntax @@@@@
   15:                                 LCD_Initial();
                              @@@@@ illegal statement syntax @@@@@                      ^
                           
      16:                                     Initial_DS1302();
                                                      ^
                               @@@@@ illegal statement syntax @@@@@
      
       18:                                  GotoXY(0,0);
                                                ^
                                  @@@@@ illegal statement syntax @@@@@
      19:                                 Print("Date: ");
                                                 ^
                                  @@@@@ illegal statement syntax @@@@@
       20:                                     GotoXY(0,1);
                                                   ^
                                 @@@@@ illegal statement syntax @@@@@
       21:                                     Print(Date:");
                                                    ^
                                 @@@@@ illegal statement syntax @@@@@
      22:                                       while(1)   
                                                       ^
                                  @@@@@ illegal statement syntax @@@@@                     
      23:                                 {
                                          ^
                                 @@@@@ illegal statement syntax @@@@@
         24:                            DS1302_GetTime(&CurrentTime);
                                                      ^
                                 @@@@@ illegal statement syntax @@@@@
          25:                           DateToStr(&CurrentTime);
                                                   ^
                                 @@@@@ illegal statement syntax @@@@@

        26:                            TimeToStr(&CurrentTime);
                                                   ^
                                    @@@@@ illegal statement syntax @@@@@
         27:                                  GotoXY(6,0);
                                                      ^
                                    @@@@@ illegal statement syntax @@@@@
         28:                           Print(CurrentTime.DateString);
                                                ^
                                       @@@@@ illegal statement syntax @@@@@
   29:                                             GotoXY(6,1);
                                                         ^
                                       @@@@@ illegal statement syntax @@@@@
   30:                                        Print(CurrentTime.TimeString);
                                                ^
                                    @@@@@ illegal statement syntax @@@@@
   32:                                              Delay1ms(300);
                                                            ^
                                        @@@@@ illegal statement syntax @@@@@
      33:                                           }
                                                      ^
                                        @@@@@ illegal statement syntax @@@@@
         34:                                       }
                                                   ^
                                        @@@@@ illegal statement syntax @@@@@                        
                                              ^
                                           }
                                                      ^
                                        @@@@@ no END statement found @@@@@
   Processed 183 lines.
Source code build FAILED with 1 error(s)


**********************************************************************************************
上面就是我编译出现的问题,我是个新手请高手指点一二,拜托!                               
               
                                                       

                        }


DS1302.C(3):illegal statement syntax
DS1302.C(3):illegal statement syntax
DS1302.C(3):illegal statement syntax
DS1302.C(3):illegal statement syntax

knight-long 发表于 2010-4-29 18:01:31

回复【楼主位】knight-long
-----------------------------------------------------------------------
最后的五行是我错打上去了。本人正在做这个时钟,我有个疑惑,怎么原本的文件编译是可以的,但是我自己重新复制过来放到keil中怎么就出现了这些问题呢

eaststream 发表于 2010-4-30 01:11:48

回复【1楼】knight-long
-----------------------------------------------------------------------

下面是 我编译出现的问题
Building DS1302.C
ASEM51 DS1302.C /INCLUDES:"C:\Program Files\Labcenter Electronics\Proteus 7 Professional\TOOLS\ASEM51"
--------------------------------------------------------------------------------

我看到你好像是使用Proteus的汇编‘编译器’编译的C文件,呵呵!

knight-long 发表于 2010-4-30 20:33:47

回复【2楼】eaststream
-----------------------------------------------------------------------

是的,我第二次重新创建项目将程序复制到keil中之后编译显示的正确的,但是却不能创建hex文件,以至于最后的Proteus仿真中,无法实现。(我在keil中编译文件的的时候已经是将创建hex文件那个勾打了的,当我编译成功的时候,文字提示说hex文件已经是创建了的,但是在我新建项目的文件夹中却没有,想问问这是怎么回事,同时我将先前的hex文件复制到我重新创建的文件夹当的时候,就能够顺利仿真,显示也正确,就是这么个情况,我想问这种情况会不会在我烧制程序的时候有影响。

scltd 发表于 2011-6-23 20:10:19

keil中需要在项目中加载文件及设定环境,编译出现的问题均指示源编译目的有错误,重新创建项目时注意目录和文件均在同一目录中。hex文件的路径有错。
页: [1]
查看完整版本: 我非常紧急,熬了好个通宵,试着去看懂程序,但是编译上还是有错误,请高手指点,我悉心去领悟