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

📄 rs232.c

📁 一个完整DVDROM代码(使用日立PICKUP)
💻 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 + -