I'm using an AT89S8252 Flash eeprom processor. The question I have is getting my case table to to do a char by char comparison. There are multiple user strings, and what I want to happen is for each letter to be compared and when found in the case table, it outputs the corresponding binary/hex value on port 0. Then move to the next char and repeat until the complete word is sent to the decoder with a an adjustable delay between each char send so the decoder blanking doesn't drop chars. Then move on to the next user string and continue this forever.
I've already got most of the frame work but I'm getting three compiler errors, I'm probably missing something petty, its late.....you know that goes. Can someone offer any recommendation as to what I'm missing ?? If more info is needed, just let me know and I can provide more.......here is framework and error:
VFD_DISPLAY.C(217): error C141: syntax error near 'P0'
#include <reg51.h> void Userstring1(); void Userstring2(); void Userstring3(); void DigitDelay(unsigned int time); void ASCII_convert(z); void main() //core system functionality { Userstring1(); Userstring2(); Userstring3(); } void Userstring1() // User string as needed { unsigned char Turbine [] = "Turbine"; unsigned char z; for(z=0;z<7;z++) ASCII_convert(z) P0=ASCII_convert[z]; // <<<<<<<<<<<<<<< Error DigitDelay(1); } void Userstring2() // User string as needed { unsigned char Boost [] = "Boost"; unsigned char z; for(z=0;z<5;z++) ASCII_convert(z) P0=ASCII_convert[z]; // <<<<<<<<<<<<<<< Error DigitDelay(1); } void Userstring3() // User string as needed { unsigned char Validate [] = "Validate"; unsigned char z; for(z=0;z<8;z++) ASCII_convert(z) P0=ASCII_convert[z]; // <<<<<<<<<<<<<<< Error DigitDelay(1); } void DigitDelay(unsigned int time) //digit shifting delay to allow propogation delay transition between characters { unsigned int i,j; for (i=0;i<time;i++) for (j=0;j<1275;j++); } /*===== Case table to convert hex byte to ASCII char generation ========*/ void ASCII_convert(z) { z=z&40; //Set the write line switch(z) { case('@'): { P0=0x00; //Binary value needed to put this char on display break; } case('A'): { P0=0x01; //Binary value needed to put this char on display break; } case('B'): { P0=0x02; //Binary value needed to put this char on display break; } case('C'): { P0=0x03; //Binary value needed to put this char on display break; } } }
It looks a very cumbersome way of doing it! Why can't you just send the ASCII codes direct?
Anyhow, given
void ASCII_convert(z);
then:
P0 = ASCII_convert[z];
is clearly an error, isn't it?
The 8051 is linking up to an ICM7243BIPL which has its own version of binary needed using a 6 bit bus. Since this project is for a friend of mine, I'm trying to make so the only part of the program he has to adjust is typing in the strings he wants displayed to the 14 segment drivers.
So the 8051 must parse each letter, and then convert it to the binary string value in the datasheet character by character with a delay between each character because it requires 300uS between each write and the data is going in sequentially.
I assigned z as the variable I guess I'll have to look at it more closely.
In the case statements, I was sending P0=0x00 because that would be the correct mask needed for the "@" symbol according to the datasheet. It was also late and had already been an all day event.