Version:0.9 StartHTML:0000000105 EndHTML:0000066265 StartFragment:0000001197 EndFragment:0000066249
//--------------------Глобальные переменные-------------------------------------
unsigned char const chip[]={" SCX-4200 SCX-4520 SCX-4720 SCX-5330 SCX-6320 ML-2150 ML-2250 ML-2550 ML-2850 ML-3470 ML-3560 PE-120 PE-220 WC-3119 WC-4118 Pha-3150 Pha-3420 Pha-3450 Pha-3500 M-20i "};
unsigned char const txt_PROGRAMMED_OK[16] = "PROGRAMMED OK";
unsigned char const txt_WARNING[16] = " WARNING ";
char uart_rd;
char txt[16];
volatile unsigned short ByteRS, BUF; //входной байт для приема с com-порта
volatile unsigned short N=1;
//volatile unsigned short BUFfrom[64];
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
//----------------------------Функции-------------------------------------------
void ReadEEPROM_24C256(char adr_h, char adr_l) //ЧТЕНИЕ ДАННЫХ ИЗ 24С256 0-256 байт
{
I2C1_Start();
I2C1_Wr(0xA2);
I2C1_Wr(adr_h);
I2C1_Wr(adr_l);
I2C1_Repeated_Start();
I2C1_Wr(0xA3);
BUF = I2C1_Rd(1);
UART1_Write(BUF);
Delay_ms(1);
I2C1_Stop();
Delay_ms(1); // issue I2C stop signal
ByteRS=0; //Очистка байта
}
void ReadEEPROM_FULL_24C02(void) //ЧТЕНИЕ ДАННЫХ ИЗ 24С02 0-256 байт
{
unsigned int i;
for (i = 0; i<=255; i++)
{
I2C1_Start(); // issue I2C start signal
I2C1_Wr(0xA0); // send byte via I2C (device address + RE)
I2C1_Wr(i); // send byte (data address)
I2C1_Repeated_Start(); // issue I2C signal repeated start
I2C1_Wr(0xA1); // send byte (device address + R)
BUF = I2C1_Rd(1); //
while (!I2C1_Is_Idle())
asm nop;
I2C1_Stop();
Delay_ms(1);
UART1_Write(BUF);
}
ByteRS=0;
}
void WriteEEPROM_0_bank(char adr) //ЗАПИСЬ ДАННЫХ В 24С04 0-256 байт
{
I2C1_Start(); //
I2C1_Wr(0xA0); //
I2C1_Wr(adr); //
I2C1_Wr(BUF); //
I2C1_Stop(); //
Delay_ms(5); //
ByteRS=0;
}
void WriteEEPROM_1_bank(char adr) //ЗАПИСЬ ДАННЫХ В 24С04 257-512 байт
{
I2C1_Start();
I2C1_Wr(0xA2);
I2C1_Wr(adr);
I2C1_Wr(BUF);
I2C1_Stop();
Delay_ms(1);
ByteRS=0;
}
void CopyEEPROM(char adr_h, char adr_l, unsigned short N) // копироание еепром из 24с512 в 24с04 512байт инфы
{
unsigned int i, q, y = 0;
unsigned short BUF_1;
char out[8];
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(2,2,"WRITING START");
Delay_ms(50);
for (i = 0; i<=255; i++)
{
ReadEEPROM_24C256(adr_h, i);
WriteEEPROM_0_bank(i);
if (!(i%32)) Lcd_Chr(1,y++,'-');
}
ByteRS=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
for (q=0; q<=9; q++)
out[q] = chip[N*10 + q];
for (q=0; q<=9; q++)
UART1_Write(out[q]);
Lcd_Out(1,3,out);
Lcd_Out(1,11," ");
Lcd_Out(2,2,"WRATING OK");
Delay_ms(1);
}
void FormatEEPROM(void) // Полное стирание 24с04
{
unsigned int i, y = 0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(2,3,"FORMAT START");
for (i = 0; i<=255; i++)
{
I2C1_Start();
I2C1_Wr(0xA0);
I2C1_Wr(i);
I2C1_Wr(0xFF);
I2C1_Stop();
if (!(i%32)) Lcd_Chr(1,y++,'-');
Delay_ms(5);
}
ByteRS=0;
UART1_Write_Text("FORMAT END");
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
//Lcd_Out(1,4,txt);
Lcd_Out(2,2,"FORMAT END");
Delay_ms(1);
}
//----------------------------Прерывания----------------------------------------
void interrupt() {
if (PIR1.F5) {
ByteRS=RCREG;
PIR1.F5 = 0;
}
}//~
//---------------------------Главная функция------------------------------------
void main()
{
bit oldstate, oldstate0, oldstate1, oldstate2, oldstate3, oldstate4, oldstate5;
unsigned short k;
unsigned char out[10]; //вывод названия прошивки на ЛСД
TRISB=0b00000011; //0 и 1 пин портА на вход, остальное на выход
OPTION_REG.F7 = 0; //подключение подтягивающих резисторов на портВ
TRISC=0b11111111; //
TRISA=0b11111111; //
PORTA=0b00111111; //
ADCON1 = 0x06; //выводы PORTA цифровые
INTCON.F6 = 1; //разрешение прерываний от периферийных модулей
OPTION_REG.F6 = 1; //прерывание по переднему фронту сигнала на INT
INTCON.F4 = 0; //запрещение внешнего прерывания на INT __________________
PIE1.F5 = 1; //разрешение прерывания от приемника USART
INTCON.F7 = 1; //разрешение всех прерываний
UART1_Init(9600); //Инициализация UART module на 9600 bps
Delay_ms(100); //Ожидаие пока UART module стабилизируется
UART1_Write_Text("Start\n"); //Индикация работы Usart
ADCON1 = 0x06; //выводы PORTA цифровые
I2C1_Init(100000); // initialize I2C communication
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,"RUSSO_TURISTO"); // Write text in first row
Lcd_Out(2,4,"COPY EEPROM"); // Write text in second row
Delay_ms(100);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
for (k=0; k<=9; k++)
{
out[k]=chip[N*10+k];
}
Lcd_Chr(1,8,N/10+0x30);
Lcd_Chr(1,9,N%10+0x30);
Lcd_Out(2,4,out);
Lcd_Out(2,13," ");
while (1) {
if (Button(&PORTA, 0, 10, 0)) oldstate0 = 1; //увеличение меню
if (oldstate0 && Button(&PORTA, 0, 10, 1))
{
N=N+1;
if (N>19) N=1;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
for (k=0; k<=9; k++)
{
out[k]=chip[N*10+k];
}
Lcd_Chr(1,8,N/10+0x30);
Lcd_Chr(1,9,N%10+0x30);
Lcd_Out(2,4,out);
Lcd_Out(2,13," ");
oldstate0 = 0;
}
if (Button(&PORTA, 1, 10, 0)) oldstate1 = 1; //уменьшение меню
if (oldstate1 && Button(&PORTA, 1, 10, 1))
{
N=N-1;
if (N<1) N=19;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
for (k=0; k<=9; k++)
{
out[k]=chip[N*10+k];
}
Lcd_Chr(1,8,N/10+0x30);
Lcd_Chr(1,9,N%10+0x30);
Lcd_Out(2,4,out);
Lcd_Out(2,13," ");
oldstate1 = 0;
}
if (Button(&PORTA, 2, 10, 0)) oldstate2 = 1; //копирование с 24с256 в 24с02 I2C
if (oldstate2 && Button(&PORTA, 2, 10, 1))
{
CopyEEPROM(2*(N-1), 0x00, N);
oldstate2 = 0;
}
if (Button(&PORTA, 3, 10, 0)) oldstate3 = 1; //стирание 24с02 I2C
if (oldstate3 && Button(&PORTA, 3, 10, 1))
{
FormatEEPROM();
oldstate3 = 0;
}
switch (ByteRS)
{
case '1': CopyEEPROM(0x00,0x00,0 ); break; //
case '2': CopyEEPROM(0x02,0x00,1 ); break; //
case '3': CopyEEPROM(0x04,0x00,2 ); break; //
case '4': CopyEEPROM(0x06,0x00,3 ); break; //
case '5': CopyEEPROM(0x08,0x00,4 ); break; //
case '6': CopyEEPROM(0x0A,0x00,5 ); break; //
case '7': CopyEEPROM(0x0C,0x00,6 ); break; //
case '8': CopyEEPROM(0x0E,0x00,7 ); break; //
case '9': CopyEEPROM(0x10,0x00,8 ); break; //
case 'A': CopyEEPROM(0x12,0x00,9 ); break; //
case 'B': CopyEEPROM(0x14,0x00,10); break; //
case 'R': ReadEEPROM_FULL_24C02() ; break;
case 'F': FormatEEPROM(); break; //стирание еепром
default : break; //обработка другий команд
}
} //конец основного бесконечного цикла
}