📄 rs232.c
字号:
/*=============================================================================
*
* Copyright (C) 2000 Acer Labs, Inc. All Rights Reserved.
*
* File: RS232.C
*
* Contents: -
*
******************************************************************************/
#include <reg52.h>
#include "typedef.h"
#include "function.h"
//1901s01m***
#ifdef _rs232
#include "extern.h"
#include "macro.h"
#include "defs.h"
#define _XTAL 34
extern BYTE idata bBurnInTimes;
extern BYTE code VerTBL[24];
#define RectTimes bBurnInTimes
BYTE idata buf[4];
/*-----------------------------------------------------------------------------
Function Name: InitUART
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void InitUART(void)
{
TMOD = 0x21; //TM1MODE2 + TM1GATE_ENABLE + TM0MODE1 + TM0GATE_ENABLE;
TF1 = 0; //Clear Timer1 PreINT Request
#if(_XTAL==34) //BaudRate=9600
TH1=0xF7; //33.8688Mhz/32/12/(256-247)=9800
TL1=0xF7; //33.8688Mhz/32/12/(256-247)=9800
#elif(_XTAL==24) //BaudRate=9600
TH1=0xFA; //(33.8688Mhz*2/3)/32/12/(256-250)=9800
TL1=0xFA; //(33.8688Mhz*2/3)/32/12/(256-250)=9800
#elif(_XTAL==16) //BaudRate=4800
TH1=0xF7; //(33.8688Mhz/2)/32/12/(256-247)=9900
TL1=0xF7; //(33.8688Mhz/2)/32/12/(256-247)=9900
#endif
TR1=1; //enable Timer1 Count
TI=0;
RI=0;
//SCON=0xD0; //TXMODE1 + RXENABLE;
SCON=0xD0;
ES=0; //dosable Serial Interrupt
XfString("\nM5705 UART Test OK!",CR);
for(TP_BYTE_0=0;TP_BYTE_0<24;TP_BYTE_0++)
{
if(TP_BYTE_0==23)
XfByte(VerTBL[TP_BYTE_0],ASCII,CR);
else
XfByte(VerTBL[TP_BYTE_0],ASCII,NONE);
}
//XfString("X",1);
//XfWord(0x5abd,HEX,SPACE);
//XfWord(0xa95c,HEX,SPACE);
//XfByte(0x46,HEX,SPACE);
//XfByte(0x1a,HEX,SPACE);
//XfByte(0x33,ASCII,CR);
//XfByte(0x26,ASCII,CR);
//XfByte(0x0d,ASCII,CR);
}
/*-----------------------------------------------------------------------------
Function Name: XfString
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void XfString(signed char *str,BYTE cl)
{
BYTE i=0;
//TR1=1;
TI=0;
while(*(str+i))
{
TI=0;
SBUF=*(str+i);
i++;
while(!TI);
}
TI=0;
if(cl==SPACE)
{
SBUF=0x20;//space
while(!TI);
}
else if(cl==CR)
{
SBUF=0x0a;//retrun and new line.
while(!TI);
TI=0;
SBUF=0x0D;
while(!TI);
}
//while(!TI);
//TR1=0;
}
/*-----------------------------------------------------------------------------
Function Name: XfWord
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
/*
void XfWord(WORD dat,bit tp,BYTE cl)
{
BYTE i;
//TR1=1;
TI=0;
TP_WORD_0=dat;
if(tp)
{
SBUF=TP_BYTE_0; //direct trans data value.
while(!TI);
TI=0;
SBUF=TP_BYTE_1;
while(!TI);
}
else
{
buf[0]=TP_BYTE_0>>4;
buf[1]=TP_BYTE_0&0x0f;
buf[2]=TP_BYTE_1>>4;
buf[3]=TP_BYTE_1&0x0f;
for(i=0;i<4;i++)
{
if(buf[i]>9)
buf[i]+=0x37;
else
buf[i]+=0x30;
TI=0;
SBUF=buf[i];
while(!TI);
}
}
TI=0;
if(cl==SPACE)
{
SBUF=0x20;//space
while(!TI);
}
else if(cl==CR)
{
SBUF=0x0a;//retrun and new line.
while(!TI);
TI=0;
SBUF=0x0D;
while(!TI);
}
}
*/
/*-----------------------------------------------------------------------------
Function Name: XfByte
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void XfByte(BYTE dat,bit tp,BYTE cl)
{
//TR1=1;
TI=0;
if(tp)
SBUF=dat; //direct trans data value.
else
{
buf[0]=dat>>4;
if(buf[0]>9)
buf[0]+=0x37;
else
buf[0]+=0x30;
buf[1]=dat&0x0f;
if(buf[1]>9)
buf[1]+=0x37;
else
buf[1]+=0x30;
SBUF=buf[0];
while(!TI);
TI=0;
SBUF=buf[1];
}
while(!TI);
TI=0;
if(cl==SPACE)
{
SBUF=0x20;//space
while(!TI);
}
else if(cl==CR)
{
SBUF=0x0a;//retrun and new line.
while(!TI);
TI=0;
SBUF=0x0D;
while(!TI);
}
//while(!TI);
//TI=1;
}
/*-----------------------------------------------------------------------------
Function Name: ReData
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void ReData(void)
{
if(RI)
{
buf[RectTimes]=SBUF;
RectTimes++;
RI=0;
}
if(RectTimes==4)
{
RectTimes=0;
/*
if( (buf[0]=='C')&&(buf[1]=='O')&&(buf[2]=='D')&&(buf[3]=='E') )
{
fRs232Flash=1;
bDecoderState=NORMAL;
bReseekFlowNo=CHECK_RESEEK;
bStateFlowNo=DEFAULT;
iwMaxTOCCount=0;
fTOC=0;
}
else
{
if(fRs232Flash)
{
LED=~LED;
TP_DWORD_2=iwMaxTOCCount*4+4;
SetAddressReg(TP_DWORD_2);
WriteDataToRAM(buf[0],buf[1]);
WriteDataToRAM(buf[2],buf[3]);
iwMaxTOCCount++;
}
else
{ */
switch(buf[0])
{
case 'W': //writer register
case 'w':
if(buf[1]==0xDD)//writer PreAmp.
{
WrSSI(buf[2],buf[3]);
buf[3]=RdSSI(buf[2]);
}
else
{
TP_WORD_0=(buf[1]&0x0f)*0x100+buf[2];
WrReg(TP_WORD_0,buf[3]);
buf[3]=RdReg(TP_WORD_0);
}
break;
case 'R': //read register
case 'r':
if( (buf[1]==0xff)||(buf[1]==0xEE))//read Coeff.
{
if(buf[1]==0xff)
WrDSP(0x3F,buf[2]);//read coeff.
else
WrDSP(0x3C,buf[2]);//read dsp value.
buf[1]=buf[2];
while(RdStatus(CMD_READY,100)==BUSY);//read value
buf[2]=RdReg(0x07A);
buf[3]=RdReg(0x07B);
}
else if(buf[1]==0xDD)//read PreAmp Value.
{
buf[3]=RdSSI(buf[2]);
}
else
{
TP_WORD_0=(buf[1]&0x0f)*0x100+buf[2];
buf[3]=RdReg(TP_WORD_0);
}
break;
case 'D': //writer DSP command
case 'd':
WrDSP(buf[1],buf[2]);
break;
case 'C': //writer Coeff
case 'c':
TP_WORD_0=buf[2]*0x100+buf[3];
WrCoeff(buf[1],TP_WORD_0);
WrDSP(0x3F,buf[1]);//read coeff.
while(RdStatus(CMD_READY,100)==BUSY);//read value
buf[2]=RdReg(0x07A);
buf[3]=RdReg(0x07B);
break;
}
/* }
}
if(fRs232Flash)
{
XfByte(buf[0],ASCII,NONE);
XfByte(buf[1],ASCII,NONE);
XfByte(buf[2],ASCII,NONE);
XfByte(buf[3],ASCII,NONE);
}
else
{ */
//XfByte(buf[0],ASCII,NONE);
//XfByte(buf[1],HEX,NONE);
//XfByte(buf[2],HEX,NONE);
//XfByte(buf[3],HEX,CR);
//}
}
}
/*-----------------------------------------------------------------------------
Function Name: Timer1_INT
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void Timer1_INT(void) interrupt 3 using 2
{
TH1=0;
TL1=0;
}
/*-----------------------------------------------------------------------------
Function Name: UART_INT
Description: -
Input: -
Output: -
-----------------------------------------------------------------------------*/
void UART_INT(void) interrupt 4 using 2
{
if(TI)
{
TI=0; //Clear TI --> rs232 into preparing stage for output data to PC...
ES=0;
}
}
#endif
//1901s01m&&&
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -