hi there,
i just started to use the µVision compiler. when i try to use my old programs there is one big problem. i cant give hex values written in a unsigned char to other functions... i got an example:
/*** Einbinden von Include-Dateien ***/ #include <stdio.h> // Standard Ein-/Ausgabefunktionen #include <at89c51cc03.h> // CC03er-Register #include <stdlib.h> /******************************************************************************************/ /*** CC03er-SFR´s und SFR-Bits besonders für dieses Projekt ***/ /*** Beachten: diese Festlegungen überschreiben die Festlegungen aus ´at89c51cc03.h´ ***/ /*** Das ergibt aber keine Probleme ! ***/ /******************************************************************************************/ /******************************************************/ /*** CS\-Adressen der externen Peripherie-Bausteine ***/ /******************************************************/ unsigned char xdata DIN _at_ 0xB3; unsigned char xdata CLK _at_ 0xB4; //Portpin P3.5, serielle Freigabeleitung unsigned char xdata LOAD _at_ 0xB5; /********************************************************************************/ /* Funktion void init_seri(void) initialisiert die serielle Schnittstelle */ /* */ /* Schnittstellenparameter: 9600Baud, 8 Datenbit, 1 Stopp Bit */ /* asynchroner Betrieb */ /* */ /********************************************************************************/ void init_seri(void) { SCON=0x52; TMOD |=0x20; TH1=0xfd; // Reloadwert 0xfd bei 11,0592MHz TR1=1; TI=1; } /******************************************************************************************/ /*** Löschen des Terminal-Bildschirms ***/ void clear_screen(void) { printf("\x1b\x48\x1b\x4a"); } /*******************************************************************************************/ void _wait_ms(unsigned int multiplikator) { unsigned int i,j; for(i=0;i<multiplikator;i++) { for(j=0;j<123;j++); } } void send_2_byte (signed char adresse, signed char daten) // Funktion für Serielle Datenübertragung über { unsigned char teiler; int i; LOAD=0; teiler = 0x80; for(i=1;i<9;i++) //Ausgabe der Adresse { if (adresse & teiler!=0) { DIN=1; // Datenleitung setzen } else { DIN=0; } CLK=1; //Takt CLK=0; //Ausgeben teiler=teiler/2; //nächstes Bit } teiler = 0x80; for(i=1;i<9;i++) //Ausgabe der Adresse { if (daten&teiler!=0) { DIN=1; // Datenleitung setzen } else { DIN=0; } CLK=1; //Takt CLK=0; //Ausgeben teiler=teiler/2; //nächstes Bit } LOAD=1; // Datenübertragung abgeschlossen } void init_MAX7219(void) { int i; send_2_byte(0x09, 0xff); // BCD Code B Decode-Mode für alle 8 Display-Stellen! send_2_byte(0x0a, 0x0f); // Maximale Lichtintensität gewählt! send_2_byte(0x0b, 0x07); // Alle 8 Display-Stellen aktiviert! send_2_byte(0x0c, 0x01); // LED-Display eingeschaltet, shut down aufgehoben! for (i=1; i<9; i++) // Schleife zum Löschen der alten Displayinhalte! send_2_byte(i, 0x0f); send_2_byte(0x0f, 0x01); // Displaytest eingeschaltet! _wait_ms(1000); // 1 Sekunde warten, dann send_2_byte(0x0f, 0x00); // Displaytest wieder ausschalten! } /********************************************************************************/ void main(void) { char WAT_NU; init_seri(); // Initialisierung der seriellen Schnittstelle! // Löschen des Terminal-Bildschirms clear_screen(); init_MAX7219(); // Grundinitialisierung des MAX7219 durchführen LOAD = 1; // Grundzustand auf den seriellen Bus einstellen! CLK = 0; printf("Das Arbeiten mit dem seriellen LED-Treiber-Baustein MAX7219\n"); while(1); // Endlosschleife }
it doesnt init the MAX7219... althought the function usualy works... i hope someone can give me hint!
greetings from berlin... jens
as Dan noted is declaring ports pins as xdata and as char such as unsigned char xdata CLK _at_ 0xB4; //Portpin P3.5
till that is corrected all other issues are moot
to the OP: look up sbit in the documentation
Erik