⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_main.c

📁 USB9602 source code for C 8051
💻 C
字号:
/************************************************************************/
/* PSI  1999							                          St醔l Robert */
/*                                                                      */
/*			               ADuC812 12MHz                                   */
/* USB_MAIN.c (Test ovladacu pro USBN9602 )                  19.10.1999 */
/************************************************************************/

/* !!! Pozor Predpoklada se adresace typu int Hi Lo pro promenne !!! */

#pragma CODE DEBUG SYMBOLS LISTINCLUDE
#pragma REGISTERBANK (0)

#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#include "USB_9602.H"
#include "serialr.H"
#include "USB_Main.H"

bit  CisloB;
unsigned char PrikLo,PrikHi;
unsigned char pomLo,pomHi;
unsigned int PrikInt;

/************ Zasobnik pro seriak ****************/
xdata unsigned char PoleCh[200];
xdata unsigned char PointCh;

/***************** beepre ************************/

sbit beepr = P1^7;         /* repro */

void beep(unsigned char frek,unsigned char delka)   /* Podprogram Beep */
{                                                   /* Kratce Pipne */
unsigned char bi,bq;

  for (bi=0;bi<delka;bi++)                   /* frek .. frekvence */
   {                                         /* delka .. delka tonu */
    beepr = 1; for(bq=0;bq<frek;bq++);
    beepr = 0; for(bq=0;bq<frek;bq++);
   }
}

/*********** seriovakomunikace *******************/

void serial (void) interrupt 4 using 2 	/* Prerusovaci rutina pro seriak */
{
  serial_int();
}

void serial_init (void)              	   /* Nutna inicializace seriove linky */
{ PCON  = 0x00;     SCON  = 0x52;  			   /*(0x53) mode 1: 8-bit UART, enable receiver   */
  TCON  = 0x69;     TMOD  = 0x20;  			   /* timer 1 mode 2: 8-Bit reload          */
  TH1   = 0xFC;              		  			   /* 0xf3 reload value 2400 baud           */
  init_Bafr();      ES    = 1;  	  			   /* enable serial port interrupt          */
  EA	  = 1;
  TR0  = 1;
}

void _printfR(char *s)						   /* Vysle string na seriovoulinku */
{
char i;
  i=0;
  while(s[i]) putkeyR(s[i++]);
}

void getLInt(unsigned char *Uk)		      /* Precte long int a ulozi jej ne misto pointru */
{
unsigned char i,d;
  Uk=Uk+3;
  for(i=0;i<4;i++)
   {
    d=getCharR();
    *Uk=d;					Uk--;
   }
}

void PrikSerKom(void)								/* Obsluha seriove linky */
{
  if(!CisloB)
	{																/* Cti dolni B */
	 PrikLo=getCharR();				CisloB=1;
	}
  else
	{																/* Cti horni B */
	 PrikHi=getCharR();
	 PrikInt=PrikLo;					PrikInt=PrikInt<<8;
	 PrikInt=PrikInt+PrikHi;
	 CisloB=0;
	 switch(PrikInt)											/* Plneni prikazu */
	  {
/*................................*/
		case 0x5645:											/* Prikaz VE(R) */
			 pomLo=getCharR();
			 switch(pomLo)
			  {
				case 'R':
               putkeyR(VER_konst_1);
               putkeyR(VER_konst_2);
               putkeyR(VER_konst_3);
               putkeyR(VER_konst_4);
				  break;
			  }
		  break;
/*................................*/
		case 0x5748:	_printfR(JmenoWH);		break;   /* Prikaz WH kdo je ? */
/*................................*/
		case 0x5744:   _printfR("ND");         break;   /* Prikaz WD co se dela */
/*................................*/
		case 0x5454:											/* Prikaz TT vypsani statusu */
          for(pomLo=0;pomLo<=PointCh;pomLo++)
           {
            putkeyR(PoleCh[pomLo]);
           }
          PointCh=0;
        break;
/*................................*/
		case 0x5400:											/* Prikaz T0 Start mereni */
          XBYTE[0xC001]=0x01;       /* set Adr 01 */
          XBYTE[0xC000]=0x87;       /* Zapis 0x87 */

          XBYTE[0xC001]=0x01;       /* set Adr 01 */
          pomLo=XBYTE[0xC000];      /* Cteni Adr  */
          pomHi=XBYTE[0xC000];
          putkeyR(pomLo);
          putkeyR(pomHi);
        break;
/*................................*/
		case 0x5401:											/* Prikaz T1 Start mereni */
          while(!RxCount)
           {
            XBYTE[0xc001]=0x01;       /* set Adr 01 */
            pomLo=XBYTE[0xc000];      /* Cteni Adr  */
           }
//          putkeyR(XBYTE[0xc001]);
        break;
/*................................*/
		case 0x5402:											/* Prikaz T2 Start mereni */
          XBYTE[0xc001]=0x01;       /* set Adr 01 */
          pomLo=XBYTE[0xc000];
          putkeyR(pomLo);
        break;
/*................................*/
//		case 0x5403:											/* Prikaz T3 Start mereni */
//        break;
/*................................*/

		default    :
			{
			 CisloB=1;                             		/* Nebyl zadny prikaz */
			 PrikLo=PrikHi;
			}
	  }
	}
}


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

void main(void)
{
  beep(40,20);                           /* vykopni pouze nedbal */
  serial_init ();
  PointCh=255;
  _printfR("USB_ON");
  init_usb();
  while(1)
   {
    if(RxCount)	PrikSerKom();								/* Seriova komunikace */
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -