访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
串口通讯
内容导读:

#include <hidef.h>      /* common defines and macros */
#include <mc9s12a64.h>     /* derivative information */


#pragma LINK_INFO DERIVATIVE "mc9s12a64"

Byte DATANUM[23],i;
Byte controlword,timer;
Byte sci_control,realcontrol,number;
Byte A,B,C,AM,BM,CM;

 

void LoadData(void){
  Byte id,kd;
  DATANUM[0]=0xff;
  for(id=1;id<22;id=id+1){
    DATANUM[id]=id;
  };
    DATANUM[17]=AM;
    DATANUM[18]=BM;
    DATANUM[21]=CM;
    DATANUM[22]=0;
  for(kd=0;kd<22;kd=kd+1){
    DATANUM[22]=DATANUM[22]+DATANUM[kd];
  }
}

   


void main(void) {

      REFDV=1;       /*REF FREQUENCY IS 4/(REFDV+1) MHZ*/
    SYNR=0;       /*SYSCLK FREQUENCY IS (SYNR+1)*REF MHZ, 16MHz*/
    //PLLPC=0x67;    /*PLL LOCK INT ENABLE,PLL ON,AUTO MODE,limp mode enable,pseudo-stop enable*/
    PLLCTL=0xE4;  /*clock monitor, PLL is turned on, auto mode*/
    CRGINT=0x80;   /*ENABLE RTI INT*/
    CLKSEL=0x40;   /*system clock come from oscclock bus=osclock/2, all clock go on running in wait mode*/
    RTICTL=0x41;   /*PRESCALE(1000001=2*2**13 1.024MS FREQUENCY SENSITIVE)*/
    COPCTL=0;    /*disable COP*/
   
  SCI1BDL=0x0D;    //baud 38400  
  SCI1CR1=0x00;    //奇偶,11位    
  SCI1CR2=0x2C;       //准许接收发送,禁止mcu发送中断
 
 
    i=0; 
    A=5;
    B=5;
    C=5;
    AM=5;
    BM=5;
    CM=5;
    realcontrol=0xFD;
   
   
  EnableInterrupts;
  for(;;) {
  if(realcontrol!=0xFD){
   if(controlword==1){
   controlword=0;
       switch(realcontrol)
         {
    case 0x74: AM=A;realcontrol=0xFC;break;
    case 0x70: AM=AM+1;realcontrol=0xFC;break;
    case 0x71: AM=AM-1;realcontrol=0xFC;break;
    case 0x75: BM=B;realcontrol=0xFC;break;
    case 0x72: BM=BM+1;realcontrol=0xFC;break;
    case 0x73: BM=BM-1;realcontrol=0xFC;break;
   // case 0x78: CM=C; break;
    case 0x76: CM=CM+1;realcontrol=0xFC;break;
    case 0x77: CM=CM-1;realcontrol=0xFC;break;
          }        
   sci_control=1;
   LoadData();
   i=0;    
   number=SCI1SR1;
   SCI1DRL=0xff; 
   SCI1CR2=0x6C; //open te
   }
   }
    else
    {
   }
  }/* wait forever */
}


interrupt void RTIRTI(void)
{
  CRGFLG=0x80;
  if(timer==8)
   {
     controlword=1;
     timer=0;
   }else
   {
     timer++;
   }
  
}

interrupt void _SCII(void)
{
   number=SCI1SR1;
  if(sci_control!=0)
  {
   
    SCI1DRL=DATANUM[i];
    i++;
    if(i>22)
    {
     SCI1CR2=0x2C;  //close te
     i=0;
      sci_control=0;        //0,MCU RI;1,MCU TI
     }
  }
  else
  {
    realcontrol=SCI1DRL;
  }
}

 
标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐