#include <at89c51xd2.h> #include <string.h> #include <stdio.h> #include "lcd.h"
#define motor1Cnt1 P0_0 #define motor1Cnt2 P0_1 #define motor2Cnt1 P0_2 #define motor2Cnt2 P0_3
#define forward1Led P1_0 #define forward2Led P1_1 #define forward3Led P1_2 #define stopLed P1_3
unsigned char forward1Flag = 0; unsigned char forward2Flag = 0; unsigned char forward3Flag = 0; unsigned char backwardFlag = 1;
void forward1_Handle( void ); void forward2_Handle( void ); void forward3_Handle( void ); void back_Handle( void ); void stop_Handle( void );
void DelayMs( int );
#define f1key P0_4 #define f2key P0_5 #define f3key P0_6 #define bkey P0_7
int bkeyCnt = 0; void main( void ) { unsigned char index = 0;
unsigned char *myString1 = "**** WELCOME ***"; unsigned char *myString2 = " TO "; unsigned char *myString3 = " RF BASED "; unsigned char *myString4 = " VEHICLE SPEED "; unsigned char *myString5 = " CONTROL "; unsigned char *myString6 = " SPEED 1 ZONE "; unsigned char *myString7 = "****************"; unsigned char *myString8 = " SPEED 2 ZONE "; unsigned char *myString9 = " SPEED 3 ZONE "; unsigned char *myString10 = " STOP ZONE "; unsigned char *myString11= " BACKWARDS ";
Lcd_Init(); SenStringToLcd ( 1, myString1 ); SenStringToLcd ( 2, myString2 ); DelayMs(300); SenStringToLcd ( 1, myString3 ); SenStringToLcd ( 2, myString7 ); DelayMs(300); SenStringToLcd ( 1, myString4 ); SenStringToLcd ( 2, myString5 ); DelayMs(300);
motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0;
forward1Led = 0; forward2Led = 0; forward3Led = 0; stopLed = 0; DelayMs( 300 ); forward1Led = 1; forward2Led = 1; forward3Led = 1; stopLed = 1; DelayMs( 300 );
while( 1 ){
if( f1key == 0 ){
SenStringToLcd ( 1, myString6 ); SenStringToLcd ( 2, myString7 ); DelayMs(100); forward1Led = 0; forward2Led = 1; forward3Led = 1; stopLed = 1; DelayMs( 200 ); forward1Flag = 1; forward2Flag = 0; forward3Flag = 0; backwardFlag = 1;
}
if( forward1Flag == 1){ forward1_Handle(); }
if( f2key == 0 ){ SenStringToLcd ( 1, myString8 ); SenStringToLcd ( 2, myString7 ); DelayMs(100); forward1Led = 1; forward2Led = 0; forward3Led = 1; stopLed = 1; DelayMs( 200 ); forward1Flag = 0; forward2Flag = 1; forward3Flag = 0; backwardFlag = 1;
} if( forward2Flag == 1){ forward2_Handle(); }
if( f3key == 0 ){
SenStringToLcd ( 1, myString9 ); SenStringToLcd ( 2, myString7 ); DelayMs(100); forward1Led = 1; forward2Led = 1; forward3Led = 0; stopLed = 1; DelayMs( 200 ); forward1Flag = 0; forward2Flag = 0; forward3Flag = 1; backwardFlag = 1; }
if( forward3Flag == 1){ forward3_Handle(); }
if( bkey == 0 ){
forward1Flag = 0; forward2Flag = 0; forward3Flag = 0; if( backwardFlag == 1 ){
SenStringToLcd ( 1, myString11 ); SenStringToLcd ( 2, myString7 ); DelayMs(100); forward1Led = 1; forward2Led = 1; forward3Led = 1; stopLed = 0; DelayMs( 200 ); backwardFlag = 0;
} else{ SenStringToLcd ( 1, myString10 ); SenStringToLcd ( 2, myString7 ); DelayMs(100); forward1Led = 1; forward2Led = 1; forward3Led = 1; stopLed = 1; DelayMs( 200 ); stop_Handle(); backwardFlag = 1; } }
if( backwardFlag == 0 ){ back_Handle(); } } } void forward1_Handle( void ){
motor1Cnt1 = 1; motor1Cnt2 = 0; motor2Cnt1 = 1; motor2Cnt2 = 0; return; } void forward2_Handle( void ){ motor1Cnt1 = 1; motor1Cnt2 = 0; motor2Cnt1 = 1; motor2Cnt2 = 0; DelayMs( 40 ); motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0; DelayMs( 10 ); return; }
void forward3_Handle( void ){ motor1Cnt1 = 1; motor1Cnt2 = 0; motor2Cnt1 = 1; motor2Cnt2 = 0; DelayMs( 20 ); motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0; DelayMs( 10 ); return; } void back_Handle( void ){
motor1Cnt1 = 0; motor1Cnt2 = 1; motor2Cnt1 = 0; motor2Cnt2 = 1; DelayMs( 20 ); motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0; DelayMs( 10 ); return; } void stop_Handle( void ){
motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0; DelayMs( 50 ); return; } END }
yet the program keep saying error A41, missing END statement. Where have I gone wrong?
Shame you didn't post your code correctly.
What are you compiling the code with?
What EXACTLY is the error message reported?
What extension does your source file have?
That's enough from me for now.
I am compiling using the Keil software..c51..it is a 89c51 program..
this is the error message
main.s(144): error A9: SYNTAX ERROR main.s(146): error A21: EXPRESSION WITH FORWARD REFERENCE NOT PERMITTED main.s(146): error A45: UNDEFINED SYMBOL (PASS-2) main.s(186): error A56: UNBALANCED IF-END IF CONTROLS main.s(186): warning A41: MISSING 'END' STATEMENT
ooh, here is he correct code; #include <at89c51xd2.h> #include <string.h> #include <stdio.h> #include "lcd.h"
motor1Cnt1 = 0; motor1Cnt2 = 0; motor2Cnt1 = 0; motor2Cnt2 = 0; DelayMs( 50 ); return; }END
This would appear to be C, not assembler. Should be in a .C file, not .S
Note posting instructions, immediately above message window you're typing into, about using PRE tags around source code.
The error message is one from the assembler, not the compiler. Your code is C, so it must be compiled and not assembled.
View all questions in Keil forum