//-------------------------------------------------------------------------*
// 工 程 名: SCIIntRe                                                      *
// 硬件连接: (1)MCU的串口与PC方的COM1相连                                  *  
//           (2)PTBD口接测试小灯
// 程序描述: 通过PC机发送一个命令以控制接在PTA0~PTA7口的8个小灯亮暗状态，各*
//           个小灯初始状态都为暗，首先进行通信测试，PC机发送"A"（65），若 *
//           单片机接收到则8个小灯全亮，并回送字符"A"（65），虽然单片机接收*
//           到但有问题，不是"A"（65），说明有误码，则4个小灯全亮，并回送字*
//           符"0"（48），否则8个小灯全暗无反应，通信测试成功后进入控制状态*
//           PC机发送字符串"11"，PTA0口灯亮；发送"10"，PTA0口灯暗；发送"21"*
//           PTA1口灯亮；发送"20"，PTA1口灯暗；依此类推，当给PTA口发送"01"，*
//           8个小灯全亮，发送"00"，全暗。                                  *
// 目    的: 初步掌握利用查询方式进行串行通信的基本知识                    *
// 说    明: 波特率为9600,使用SCI1口                                       *
//----------------苏州大学飞思卡尔嵌入式系统实验室2009年-------------------*

#include "Includes.h"

//在此添加全局变量定义

//extern void SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud);
void main(void)
{
    uint8 SerialBuff[2];//存放接受数据的数组
    uint8 i,j,savPTB;
    uint8 P[1];
    //uint8 *P;
    i=0x00;
    *P=0x02;
    MCUInit();    //芯片初始化
    SCIInit(1,SYSTEM_CLOCK,9600);  //调用串行口初始化子程序
    PTBDD=0xff;
    PTBD=0xff;
    savPTB=0xff;
    SerialBuff[0]=0;
    SerialBuff[1]=0;
    while(1) 
    {
      for(j=0;j<110;j++);
      i = SCIRe1(1,P);          //等待接收1个数据                                                                                                                                                                                                        
      if(*P==0x00) 
      {
        if(SerialBuff[0]==0) 
        {
           SerialBuff[0]=i;
        } 
        else
        {
           SerialBuff[1]=i; 
        }                                                                                                                                                                                                                                                                            
        //进行通信前连线测试
         if(SerialBuff[0]=='A')
	      {
	      	PTBD=0x00;					//通信测试成功,小灯全亮
	      	savPTB=0x00;
	      	SCISend1(1,i);				//回送'A',表示成功
	      	SerialBuff[0]=0;
	      }
	      //进行通信
	       if(SerialBuff[0]!=0&&SerialBuff[1]!=0)
	      {
	      	SerialBuff[0]-=0x30;     //把字符（1-8）变成数字（1-8）
	      	SerialBuff[1]-=0x30;     
	      	if(SerialBuff[1])
	      	{//亮
	      	  if(SerialBuff[0]!=0)
	      		{
	      			SerialBuff[0]-=0x01;  //把数字（1-8）-1变成数字（0-7）
		      		savPTB&=~(1<<SerialBuff[0]); //PTB0-PTB7中一个接口的小灯亮
		      		PTBD=savPTB;
		      	}
		      	else
		      	{
		      		savPTB=0x00;           
		      		PTBD=0x00;                 //PTB口的所有小灯都亮
		      	}
	      	}
	      	else
	      	{//暗
	      		if(SerialBuff[0]!=0)
	      		{
	      			SerialBuff[0]-=0x01;  //把数字（1-8）-1变成数字（0-7）
		      		savPTB|=1<<SerialBuff[0];  //PTB0-PTB7中一个接口的小灯暗
		      		PTBD=savPTB;
		      	}
		      	else
		      	{
		      		savPTB=0xFF;        
		      		PTBD=0xFF;          //PTB口的所有小灯都暗
		      	}
	      	}
	      SerialBuff[0]=0;
	      SerialBuff[1]=0;
	      }
	      *P=0x02;  
      } 
     }  
      
    }   
    
    