Стенд для прозвонки 210 цепей на микроконтроллерах AT89C52

    Стенд для прозвонки 210 цепей состоит, в основном, из 4 плат (1 Плата-А и 3 Плата-Б), блока питания +5В, разъемов подключения тестируемых устройств, тумблера включения питания и кнопки сброса. Плата-А имеет 30 контрольных цепей и интерфейс RS-232 для связи с управляющей программой на компьютере. Плата-В имеет 60 контрольных цепей. Все платы соединены последовательно цепями TX, RX контроллеров и имеют одинаковую прошивку, которая написана на C и может быть портирована на контроллер другого типа с учетом корректировки периферии.

     Компьютерная программа ConnTest написана на C# Visual Studio. DEPLOY Reliase содержит папку DotNetFX 26,5 Мб для поддержки Visual Studio и два файла setup.exe 473 Кб и Setup1.msi 488 Кб.

Загрузить архив проекта STAND_K210_PROJECT.rar можно здесь:

STAND_K210_PROJECT.rar (184 Загрузки)

Программа устанавливается легко, даже под Win 11.

Но, COM-port?

     Между прочим, в пульте-имитаторе используется микросхема FT232RL, которая через разъем мини-USB X21 открывает на компьютере COM3: Управление матричной клавиатурой и светодиодами

ComUSB-STLabs (85 Загрузок)

Плата А

Плата Б 

Скачать схемы в формате P-CAD 2006 можно здесь:

Схемы стенда К210 P-CAD 2006 (70 Загрузок)

P-CAD 2006, помнится, последняя версия до Altium Designer, (337 Мб) можно скачать здесь:

PCAD_2006 (74 Загрузки)

Может понадобится P-CAD 2004, так он здесь:  

INSTALL (79 Загрузок)

Программа на C для всех 7-ми контроллеров



#include <reg52.h>
#include <stdio.h>

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;

sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;

sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;

sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;

bit pin0(char io) {if (io==0) P0_0=0 ; else P0_0=1; return P0_0;}
bit pin1(char io) {if (io==0) P0_1=0 ; else P0_1=1; return P0_1;}
bit pin2(char io) {if (io==0) P0_2=0 ; else P0_2=1; return P0_2;}
bit pin3(char io) {if (io==0) P0_3=0 ; else P0_3=1; return P0_3;}
bit pin4(char io) {if (io==0) P0_4=0 ; else P0_4=1; return P0_4;}
bit pin5(char io) {if (io==0) P0_5=0 ; else P0_5=1; return P0_5;}
bit pin6(char io) {if (io==0) P0_6=0 ; else P0_6=1; return P0_6;}
bit pin7(char io) {if (io==0) P0_7=0 ; else P0_7=1; return P0_7;}

bit pin8(char io) {if (io==0) P1_0=0 ; else P1_0=1; return P1_0;}
bit pin9(char io) {if (io==0) P1_1=0 ; else P1_1=1; return P1_1;}
bit pin10(char io) {if (io==0) P1_2=0 ; else P1_2=1; return P1_2;}
bit pin11(char io) {if (io==0) P1_3=0 ; else P1_3=1; return P1_3;}
bit pin12(char io) {if (io==0) P1_4=0 ; else P1_4=1; return P1_4;}
bit pin13(char io) {if (io==0) P1_5=0 ; else P1_5=1; return P1_5;}
bit pin14(char io) {if (io==0) P1_6=0 ; else P1_6=1; return P1_6;}
bit pin15(char io) {if (io==0) P1_7=0 ; else P1_7=1; return P1_7;}

bit pin16(char io) {if (io==0) P2_7=0 ; else P2_7=1; return P2_7;}
bit pin17(char io) {if (io==0) P2_6=0 ; else P2_6=1; return P2_6;}
bit pin18(char io) {if (io==0) P2_5=0 ; else P2_5=1; return P2_5;}
bit pin19(char io) {if (io==0) P2_4=0 ; else P2_4=1; return P2_4;}
bit pin20(char io) {if (io==0) P2_3=0 ; else P2_3=1; return P2_3;}
bit pin21(char io) {if (io==0) P2_2=0 ; else P2_2=1; return P2_2;}
bit pin22(char io) {if (io==0) P2_1=0 ; else P2_1=1; return P2_1;}
bit pin23(char io) {if (io==0) P2_0=0 ; else P2_0=1; return P2_0;}

bit pin24(char io) {if (io==0) P3_2=0 ; else P3_2=1; return P3_2;}
bit pin25(char io) {if (io==0) P3_3=0 ; else P3_3=1; return P3_3;}
bit pin26(char io) {if (io==0) P3_4=0 ; else P3_4=1; return P3_4;}
bit pin27(char io) {if (io==0) P3_5=0 ; else P3_5=1; return P3_5;}
bit pin28(char io) {if (io==0) P3_6=0 ; else P3_6=1; return P3_6;}
bit pin29(char io) {if (io==0) P3_7=0 ; else P3_7=1; return P3_7;}


code bit (code *arpin[])(char)={pin0, pin1, pin2, pin3, pin4, pin5, pin6, pin7,
				pin8, pin9, pin10, pin11, pin12, pin13, pin14,	
				pin15, pin16, pin17, pin18, pin19, pin20, pin21,
				pin22, pin23, pin24, pin25, pin26, pin27, pin28,
				pin29};

#define ini      248 		 //0xF8 11111000
#define dataread 250		 //0xFA 11111010


data unsigned char i, receive = 255, num, mynum, prev, j, k, l, m;
data unsigned char buftrans[10];
bdata unsigned char buf[5];
sbit b2 = buf[2]^0;
sbit b3 = buf[3]^0;
static unsigned long overflow_count = 0;

// TIMER_0 INTERRUPT ROUTINE   ********************************************

static void timer_0 (void) interrupt 1 //using 2
	{
		overflow_count++;
	}

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

void crc()        //счётчик CRC8
  {
	 l = 0;												
	 for (j = 0; j < 4; j++)
	 	{ 
		 m = buf[j];
		 	for (k = 0; k < 8; k++)
		   {
		  	if ((m ^ l) & 1) {l ^= 0x18; l >>= 1; l |= 0x80;}  
		   	else l >>= 1; 
			m >>= 1;
		   }
		} 
	 buf[4] = l;
  }

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

void delay(unsigned long ticks)
{
 	 while(ticks--);
}

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

 char putch (char c)  {
  while (!TI);
  TI = 0;
  return (SBUF = c);
}

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


void main(void)

{
		TMOD  = 0x20 | 2; // Baud rate for timer_1 | timer_0 with reload
		TH1   = 0xFD;	  // Baud rate
		PCON ^= 0x80;	  // 0x0D0H for AT89C51
		SCON  = 0x50;

	        TR1 = 1;	  // start timer_1

		TH0 = 256 - 184;
		TL0 = TH0;

		TI = 1;
		
		buftrans[j++] = 7;		
		TR0 = 1;
		
		ET0 = 1;
  		EA = 1
		
		
		while (overflow_count < 10000)// ES = 1;

		{
		 if (RI)
	    	{
		     RI = 0;
		     buftrans[j] = SBUF;
		     --buftrans[j];
		     if (j < 9) j++; else j = 0;
		    }

		 delay(1000);

	     if (TI && (i != j) && !RI)
		    {
	    	 TI = 0;
		 	
			 SBUF = buftrans[i];
			 if (i < 9) i++; else i = 0;
	    	}
	    }

		EA = 0;
		ET0 = 0;
		TR0 = 0;
	        TI = 1;

  while(1)			
	{
			receive = _getkey();
			if (receive == dataread) 
				{
				  putch(receive); prev = mynum*5;
				  buf[0] = P0; buf[1] = P1; 

				  buf[2] = P2; b3 = b2; 
				  for (i=0; i < 7; i++) {buf[2] >>= 1; buf[3] <<= 1; b3 = b2;}
				  buf[2] = buf[3];

				  buf[3] = (P3 >> 2) | 0xC0; crc(); 

				  while (prev) {putch(_getkey()); prev--;}
				  for (i = 0; i < 5; i++) putch(buf[i]);
				}
			else
				{
					 if (receive < 210) 
						{
				  		  putch(receive);
				 		  P0 = 0xFF;
						  P1 = 0xFF;
				 		  P2 = 0xFF;
			      		  P3 = 0xFF;
				  		  num = receive/30;
				  		  if (num == mynum) {num = receive % 30; arpin[num](0);}

			    		}
						  else if (receive == ini)
						{
				  			putch(receive); 
				  			mynum = _getkey(); putch(mynum + 1);
						}
   				}
				receive = 255;
	}		
}

HELP компьютерной программы ConnTest

МЕНЮ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *