السلام عليكم و جزاكم الله الخير
أريد السؤال عن بعض التعليمات في المايكرو سي
وسبب المشاكل عند ربط الmmcعن طريق البروتس
وكل تعليمة تحوي كلمة FAT وكيفية إزالة خطأ الريال تايم في البروتس
char filename[] = "TEMPERTRTXT";
unsigned short character;
unsigned long file_size,i,rec_size;
unsigned char ch1,ch2,flag,ret_status,choice;
unsigned char temperature[10],txt[12];
//
// This function sends carriage-return and line-feed to USART
//
void Newline()
{
Usart_Write(0x0D); // Send carriage-return
Usart_Write(0x0A); // Send line-feed
}
//
// This function sends a space character to USART
//
void Space()
{
Usart_Write(0x20);
}
//
// This function sends a text to serial port
//
void Text_To_Usart(unsigned char ∗m)
{
unsigned char i;
i = 0;
while(m[i] != 0)
{ // Send TEXT to serial port
Usart_Write(m[i]);
i++;
}
}
//
// This function reads the temperature from analog input AN0
//
void Get_Temperature()
{
unsigned long Vin, Vdec,Vfrac;
unsigned char op[12];
unsigned char i,j;
Vin = Adc_Read(0); // Read from channel 0 (AN0)
Vin = 488∗Vin; // Scale up the result
Vin = Vin /10; // Convert to temperature in C
Vdec = Vin / 100; // Decimal part
Vfrac = Vin % 100; // Fractional part
LongToStr(Vdec,op); // Convert Vdec to string in "op"
//
// Remove leading blanks
//
j=0;
for(i=0;i<=11;i++)
{
if(op[i] != ' ') // If a blank
{
temperature[j]=op[i];
j++;
}
}
temperature[j] = '.'; // Add “.”
ch1 = Vfrac / 10; // fractional part
ch2 = Vfrac % 10;
j++;
temperature[j] = 48+ch1; // Add fractional part
j++;
temperature[j] = 48+ch2;
j++;
temperature[j] = 0x0D; // Add carriage-return
j++;
temperature[j] = 0x0A; // Add line-feed
j++;
temperature[j]='\0';
}
//
// Start of MAIN program
//
void main()
{
rec_size = 0;
//
// Configure A/D converter
//
TRISA = 0xFF;
ADCON1 = 0x80; // Use AN0, Vref = +5V
//
// Configure the serial port
//
Usart_Init(2400);
//
// Initialise the SPI bus
//
Spi_Init_Advanced(MASTER_OSC_DIV16,DATA_SAMPLE_MID DLE,
CLK_IDLE_LOW, LOW_2_HIGH);
//
// Initialise the SD card bus
//
while(Mmc_Init(&PORTC,2));
//
// Initialise the FAT file system
//
while(
Mmc_Fat_Init(&PORTC,2));
//
// Display the MENU and get user choice
//
Newline();
Text_To_Usart("TEMPERATURE DATA LOGGER");
Newline();
Newline();
Text_To_Usart("1. Send temperature data to the PC");
Newline();
Text_To_Usart("2. Save temperature data in a new file");
Newline();
Text_To_Usart("3. Append temperature data to an existing file");
Newline();
Newline();
Text_To_Usart("Choice ? ");
//
// Read a character from the PC keyboard
//
flag = 0;
do {
if (Usart_Data_Ready()) // If data received
{
choice = Usart_Read(); // Read the received data
Usart_Write(choice); // Echo received data
flag = 1;
}
} while (!flag);
Newline();
Newline();
//
// Now process user choice
//
switch(choice)
{
case '1':
ret_status = Mmc_Fat_Assign(&filename,1);
if(!ret_status)
{
Text_To_Usart("File does not exist..No saved data...");
Newline();
Text_To_Usart("Restart the program and save data to the file...");
Newline();
for(;

;
}
else
{
//
// Read the data and send to UART
//
Text_To_Usart("Sending saved data to the PC...");
Newline();
Mmc_Fat_Reset(&file_size);
for(i=0; i<file_size; i++)
{
Mmc_Fat_Read(&character);
Usart_Write(character);
}
Newline();
text_To_Usart("End of data...");
Newline();
for(;

;
}
case '2':
//
// Start the A/D converter, get temperature readings every
// 10 seconds, and then save in a NEW file
//
Text_To_Usart("Saving data in a NEW file...");
Newline();
Mmc_Fat_Assign(&filename,0x80); // Assign the file
Mmc_Fat_Rewrite(); // Clear
Mmc_Fat_Write("TEMPERATURE DATA - SAVED EVERY 10
SECONDS\r\n",43);
//
// Read the temperature from A/D converter, format and save
//
for(;

{
Mmc_Fat_Append();
Get_Temperature();
Mmc_Fat_Write(temperature,9);
rec_size++;
LongToStr(rec_size,txt);
Newline();
Text_To_Usart("Saving record:");
Text_To_Usart(txt);
Delay_ms(10000);
}
break;
case '3':
//
// Start the A/D converter, get temperature readings every
// 10 seconds, and then APPEND to the existing file
//
Text_To_Usart("Appending data to the existing file...");
Newline();
ret_status = Mmc_Fat_Assign(&filename,1); // Assign the file
if(!ret_status)
{
Text_To_Usart("File does not exist - can not append...");
Newline();
Text_To_Usart("Restart the program and choose option 2...");
Newline();
for(;

;
}
else
{
//
// Read the temperature from A/D converter, format and save
//
for(;

{
Mmc_Fat_Append();
Get_Temperature();
Mmc_Fat_Write(temperature,9);
rec_size++;
LongToStr(rec_size,txt);
Newline();
Text_To_Usart("Appending new record:");
Text_To_Usart(txt);
Delay_ms(10000);
}
}
default:
Text_To_Usart("Wrong choice...Restart the program and try again...");
Newline();
for(;

;
}
}