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

📄 serial.c

📁 一个应用89C52
💻 C
字号:
/*------------------------------------------------
Setup the serial port for 115200 baud at 11.0592MHz.  8052
------------------------------------------------*/
void beep (void){
    unsigned  char data j;
    unsigned  int  data i;
                FNC=1;
    for(j=5;j>0;j--){
           for(i=10000;i>0;i--){
                               }
                      }
                 FNC=0;
                 }

void init(void){
               PSW=0;
               IP=1;
               IE=0;                //开 IT1,IT0
               TCON=0;
               TMOD=0x16;         //t1 16 inter time, t0 exter 8reload
               SCON=0xE0;
               PCON=0x80;
               TL0=0xff;
               TH0=0xff;
               P1=0x0;                        //关
               status =0;
               TCON=0;
               on2500us= 0;
               flashbit = 0;
               serbit =0;
               errbit =0;
               t1_500ms = 0;
               //beep();
               //EA=1;
                }
void initserial(void){
    SCON  = 0xe0;		  /* SCON: mode 1, 8-bit UART, enable rcvr      */
    T2CON = 0x30;                 /* TMOD: timer 2, mode 3, 16-bit reload        */
    //T2MOD = 0x00;
    //PCON  = 0x80;
    //TH1   = 255;                  /* TH1:  reload value for 1200 baud @ 16MHz   */
    //TL1   = 255;
    RCAP2H = 0x0ff;           //57600   FA   115200 Fd
    RCAP2L = 0x0fd;           // t1 :bps=2[smod]/32 *fosc/12 * (2[n]-x)
    TH2    = 0x0ff;           //t2:  bps=fosc/32 / (65536-x)  RCAP2L=0xfa
    TR2    = 1;               /* TR1:  timer 1 run                          */
    REN    = 1;
    TI     = 0;                /* TI:   set TI to send first char of UART    */
    // P13    = 1;                //  enable DE
    ES     = 1;               //
    addres =  TXADR;
    addres &=0x0f;
    addres +=0xc0;
}
/*
 * putchar (mini version): outputs charcter only
 */
void sendchar (unsigned char c)  {
  //while (!TI);
  TI = 0;
  //return (SBUF = c);
  SBUF = c;
  while (!TI);
  TI = 0;
}
void sendstring(unsigned char *p,unsigned char data lenth)   // idata *p
{
  unsigned char *ip;
  unsigned char data i;
  ip=p;
  for(i=0;i<lenth;i++){
       sendchar(*ip);
        ip++;
                       }
 }
unsigned char getchar ()  {
  unsigned char data c=150;
  while(!RI)  { if(--c==0){ serbit=1;
                            return (0);  }
              }           //serbit=1,
  c = SBUF;
  RI = 0;
  return (c);
}
void getstring(unsigned char data *p,unsigned char data lenth)
{
  unsigned char data *ip;
  unsigned char data i;
  ip=p;
  for(i=0;i<lenth;i++){
       *ip=getchar();
        ip++;
    if(serbit)  break;
                           }
}
void PSerialInt(void) interrupt 4
{
    unsigned char c[2],i;
if(_testbit_(RI)&&_testbit_(RB8)){

       c[0]=SBUF;
       //c[1]=getchar();
    if(c[0]==addres){
           P10 =1;
           TB8 = 1;
           sendchar(addres+1);
           SM2 = 0;
           TB8 = 0;
  //get order
          c[1]=getchar();
          if(serbit)  goto backser;
          //ser[1]=getchar();
          //ser[2]=getchar();
          //ser[3]=getchar();
    switch(c[1]){
        case 0xf0: getstring(&GET[0],6);
                   if(GET[8]!=0x5a) serbit=1;
                   else   {  abc = 0;
                             for(i=0;i<32;i++){
                                 GET[i] = 0;
                                 LD[i]  = 0;  }

                            }
                   break;
        case 0xf1: //ser[1]=getchar();
                   sendstring(&TT[0],32);
                   break;
        case 0xf2: abc = getchar();
                   getstring(&GET[0],32);
                   for(i=0;i<32;i++){
                             TEMP[i] = TT[i];
                                     }
                   break;
                  }                  //add code
        if(serbit) sendchar(0x44);
        else       sendchar(0x88);

                        }

                                   }
if(TI)   TI=0;
backser:
         P10 = 0;
         SM2 = 1;
         serbit =0;
 }

void timego(void) interrupt 3
{    //定时   t1
            //unsigned  char data i;
            TL1=_tl1;
            TH1=_th1;
            on2500us = 1;
            if(++hang==16) hang=0;
   if(onbeep) {
    if(++beeptime>=200) FNC = ~FNC,beeptime =0;

               }

 if(++t1_500ms==200)  { flashbit=~flashbit;
                        t1_500ms=0;

                           }
}


void getbattery(unsigned char data channel)
{
     unsigned char data i,pm,pn,pl;
     i=channel;
     pm=i/128;
     pn=(i%128)%8;
     pl=(i%128)/8;
     if(pm) {   XBYTE[GD0]= gd_off;
                XBYTE[GD1]=and1[pn];
             }
     else   {
                XBYTE[GD1]= gd_off;
                XBYTE[GD0]=and1[pn];
              }
    XBYTE[VSEL] = V[pl];
    REDGET = REDGET;                               //P1.7
    REDGET = REDGET;
#ifdef battest
      if(channel==0&&REDGET==1) {
        REDGET = REDGET;
        REDGET = REDGET;
                                 }
#endif
    if(REDGET)   hasbattery = 1;
    else         hasbattery = 0;
    XBYTE[VSEL] = v_off;
}

void getttstatus(unsigned char data channel)
{
   unsigned char data i,m,n;
   i = channel;
   m = i/8;
   n = i%8;
   if(hasbattery)  TT[m] |= or1[n];
   else            TT[m] &= and0[n];

}

void getttstatus(unsigned char data channel)
{
     unsigned char data i,pm,pn,pl,m,n;
     i=channel;
     pm=i/128;
     pn=(i%128)%8;
     pl=(i%128)/8;
     if(pm) {   XBYTE[GD0]= gd_off;
                XBYTE[GD1]=and1[pn];
             }
     else   {
                XBYTE[GD1]= gd_off;
                XBYTE[GD0]=and1[pn];
              }
    XBYTE[VSEL] = V[pl];
    REDGET = REDGET;                               //P1.7
    REDGET = REDGET;
#ifdef battest
      if(channel==0&&REDGET==1) {
        REDGET = REDGET;
        REDGET = REDGET;
                                 }
#endif
    if(REDGET)   hasbattery = 1,TT[m] |= or1[n];
    else         hasbattery = 0,TT[m] &= and0[n];
    XBYTE[VSEL] = v_off;
}


if(abc!=0){
        if(hasbattery)  {
               if(GET[pm]&and1[pn])  LD[pm] |= and1[pn];
               else                 LD[pm] &= and0[pn];
                        }
        else             {
               if(TEMP[pm]&and1[pn])  {
                 errbit = 1;
                 if(flashbit)  LD[pm] |= and1[pn];
                 else          LD[pm] &= and0[pn];
                                     }
                          }
               }

 /*
void getttstatus(unsigned char data channel)
{
     unsigned char data i,pm,pn,pl;
     unsigned int data l=500;
     i=channel;
     pm=i/128;
     pn=(i%128)%8;
     pl=(i%128)/8;
     //delay_char(250);
     REDGET = REDGET;
//#ifdef battest
     if(i==156) {              //&&REDGET==1
         pm=0;
     if(REDGET){
        //while(REDGET) {pm++;}
        REDGET = REDGET;
        REDGET = REDGET;
                 }
                        }
//#endif
     pm = i/8;
     pn = i%8;
    if(REDGET)   hasbattery = 1,TT[pm] |= or1[pn];
    else         hasbattery = 0,TT[pm] &= and0[pn];
    //XBYTE[VSEL] = v_off;
}*/
/*
void getledstatus(unsigned char data channel)
{
   unsigned char data i,m,n;
   i = channel;
   m = i/8;
   n = i%8;
   if(TT[m]&and1[n])  {
       if(GET[m]&and1[n])  LD[m] |= and1[n];
       else                LD[m] &= and0[n];
                    }
   else  {
       if(TEMP[m]&and1[n])  {
                if(GET[m]&and1[n]){
                     LD[m] &= and0[n];
                                   }
                else{
                 errbit = 1;
                 FNC    = 1;
                 if(flashbit)  LD[m] |= and1[n];
                 else          LD[m] &= and0[n];
                     }
                              }
        //else      errbit = 0;
         }
}
*/

⌨️ 快捷键说明

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