📄 usb_main.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 + -