Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 120

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

 switch(move) {

 case UP:

  if ((row-1 >=0) && (array[row-1][col] == 0))

   swap(row, col, row-1, col, array);

  else display_error(UP);

  break;

 case DOWN:

  if ((row+1 <= SIZE) && (array[row+1][col] == 0))

   swap(row, col, row+1, col, array);

  else display_error(DOWN);

  break;

 case LEFT:

  if ((col-1 >=0) && (array[row][col-1] == 0))

   swap(row, col, row, col-1, array);

  else display_error(LEFT);

  break;

 case RIGHT:

  if ((col+1 < = SIZE) && (array[row][col+1] == 0))

   swap(row, col, row, col+1, array);

  else display_error(RIGHT);

  break;

 }

}

//********************************************************************


//********************************************************************

//Swap: Π­Ρ‚Π° функция замСняСт Π΄Π²Π° значСния Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом.

//********************************************************************

void swap(int row, int col, int new_row, int new_col, int array[SIZE][SIZE]) {

 int temp;

 temp = array[row][col];

 array[row][col] = array[new_row][new_col];

 array[new_row][new_col] = temp;

}


//********************************************************************

//Swap2: Π­Ρ‚Π° функция замСняСт Π΄Π²Π° значСния ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом.

//********************************************************************

void swap2(int from, int to, int array[ARRAY_MAX+1]) {

 int temp = array[from];

 array[from] = array[to];

 array[to] - temp;

}


//********************************************************************

//ERROR: Π­Ρ‚Π° функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСния ΠΎΠ± ошибкС

//********************************************************************

void display_error(int n) {

 LCD_Output("ERROR: ");

 switch(n) {

 case LEFT:

  LCD_output("no move L");

  break;

 case RIGHT:

  LCD_output("no move R");

  break;

 case UP:

  LCD_output("no move U");

  break;

 case DOWN:

  LCD_output("no move D");

  break;

 }

 pause();

}

//********************************************************************


//********************************************************************

//LCD_output: Π­Ρ‚Π° функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° дисплСй строку

//********************************************************************

void LCD_output(char s[]) {

 int n = 0;

 while (s[n] != '\0') {

  LCD_char(s[n]);

  ++n;

 }

}


//********************************************************************

//Pause: Ѐункция Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ

// "Π’Ρ‹Π±ΠΎΡ€"

//********************************************************************

void pause() {

 unsigned char с = ZERO;

 LCD_output("(Please press X)");

 while (c != S_BUTTON) {

  c = PORTS;

  с = c & 0x7C;

 }

 Clearscreen();

 Reset_cursor();

}


//********************************************************************

//Delay: Π­Ρ‚Π° функция Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π° n мкс, Ссли входная

// Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Ρ€Π°Π²Π½Π° n

//********************************************************************

void delay(int usec) {

 int i,j;

 for (i=0;i<usec; i++) {

  for (j=0; j < 7; j++) {}

 }

}


//********************************************************************

//Initialize_LCD: Ѐункция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π–ΠšΠ”

//********************************************************************

void initialize_LCD(void) {

 char temp = 0x00;

 PORTDLC = 0xFF;

 PORTDLC = PORTDLC & 0xEF; // сброс экрана (RESET = 0)

 delay(2000); // Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π² 2 мс

 PORTDLC = 0x7F; // Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сброса

 write(); //Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ записи

 command(0x80);

 //установка тСкстового Ρ€Π΅ΠΆΠΈΠΌΠ°

 data(0x0); //ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° установки слова

 data(0x10);

 command(0x40);

 data(0x10); // устанавливаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ области тСкста (1E)

 data(0x00); // - 0x1000

 command(0x41);

 //Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ дисплСй тСкста, курсор, Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΌΠΈΠ³Π°Π½ΠΈΠ΅

 command(0x94);

 command(0xA7); //курсор 8Γ—8 Ρ‚ΠΎΡ‡Π΅ΠΊ

}


//********************************************************************

//Enable: Ѐункция Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ИБ

//********************************************************************

void enable(void) {

 PORTDLC = PORTDLC | 0x04; // Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ 1 Π½Π° Π»ΠΈΠ½ΠΈΠΈ enable

 PORTDLC = PORTDLC & 0xFB; // Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ 0 Π½Π° Π»ΠΈΠ½ΠΈΠΈ enable

}


//********************************************************************

//Disable: Ѐункция Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ИБ

//********************************************************************

void disable(void) {

 PORTDLC = PORTDLC | 0x04;

}


//********************************************************************

//Command: Ѐункция посылаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° Π–ΠšΠ”

//********************************************************************

void command(unsigned char n) {

 status_wait();

 PORTP = n;

 PORTDLC = 0xFF;

 PORTDLC = PORTDLC & 0xFE; // сброс записи

 enable(); // сброс Ρ„Π»Π°Π³Π° CE

 delay(10); // Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 80 нс

 disable(); // Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° CE

}


//********************************************************************

//Data: Ѐункция пСрСсылаСт Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π–ΠšΠ”

//********************************************************************

void data(unsigned char n) {

 status_wait();

 PORTP = n;

 PORTDLC = 0xFF;

 PORTDLC = PORTDLC & 0xF7; // пСрСвСсти C/D Π½Π° Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

 PORTDLC = PORTDLC & 0xFE; // пСрСвСсти WR Π½Π° Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

 PORTDLC = PORTDLC & 0xFB;

 delay(10);

 disable();

}


//********************************************************************

//Write: Ѐункция ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ€Ρ‚ P ΠΊΠ°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ

//********************************************************************

void write() {

 DDRP = 0xFF;

}


//********************************************************************

//Read: Ѐункция ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ€Ρ‚ P ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ

//********************************************************************

void read() {

 DDRP = 0x00;

}


//********************************************************************

//Status_wait: Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π–ΠšΠ”

//********************************************************************

void status_wait() {

 char temp = 0x00;

 DDRP = 0x00;

 PORTDLC = PORTDLC | 0x0F; // ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ всС

 PORTDLC = PORTDLC & 0xFD; // сброс Ρ„Π»Π°Π³Π° RD

 enable();

 delay(10);

 while ((temp & 0x03) != 0x03) {

  temp = PORTP;

 }

 disable();

 DDRP = 0xFF;

}


//********************************************************************

//LCD_char: Ѐункция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ASCII ΠΊΠΎΠ΄ Π½Π° экран Π–ΠšΠ”

//********************************************************************

void LCD_char(unsigned char n) {

 data(n-0x20);

 command(0xC0);

}


//********************************************************************

//Clearscreen: Ѐункция ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ экран Π–ΠšΠ”

//********************************************************************

void Clearscreen() {

 int i,j;

 Reset_cursor();

 for (i=0; i < 16; i++) for (j=0; j<16; j++) LCD_char(' ');

 Reset_cursor();

}


//********************************************************************

//Newline: Ѐункция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку Π½Π° экран Π–ΠšΠ”

//********************************************************************

void newline() {

 int i;

 for (i=0; i < 16; i++)

 LCD_char(' ');

}


//********************************************************************

//Reset_cursor: Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ курсор Π–ΠšΠ” Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ

//********************************************************************

void Reset_cursor() {

 data(0x00);

 data(0x10);

 command(0x24);

}

//********************************************************************

7.7.7. НСкоторыС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

БистСма для ΠΈΠ³Ρ€Ρ‹ Π² Β«15Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ„ΠΈΡˆΠΊΠΈ: стрСлку Β«Π’Π²Π΅Ρ€Ρ…Β», стрСлку Β«Π’Π½ΠΈΠ·Β», стрСлку Β«Π’ΠΏΡ€Π°Π²ΠΎΒ», стрСлку Β«Π’Π»Π΅Π²ΠΎΒ» ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π’Ρ‹Π±ΠΎΡ€Β». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, располоТСниС Ρ„ΠΈΡˆΠΊΠΈ опрСдСляСтся Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строки ΠΈ столбца. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ сформированная, систСма ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΈΠ³Ρ€Ρ‹ взрослыми ΠΈ Π΄Π΅Ρ‚ΡŒΠΌΠΈ.

7.8. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ Flash ΠŸΠ—Π£ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° B32 Π² составС ΠΏΠ»Π°Ρ‚Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ MC68HC912B32EVB

Π’ Π³Π»Π°Π²Π΅ 4 ΠΌΡ‹ обсуТдали ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ памяти МК B32 сСмСйства 68HC12. Как Π±Ρ‹Π»ΠΎ упомянуто, Π² состав МК B32 Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚ΠΈΠΏΠ° Flash объСмом 32Кб. Π’ установлСнном Π½Π° ΠΏΠ»Π°Ρ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ MC68HC912B32EVB ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π² области Flash ΠŸΠ—Π£ записана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° D-Bug12. Если Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ Π½Π΅Π΅ объСм для записи части Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° D-Bug12. Но Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ снова Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΈ нСобходимости.