Exemple #1
0
//主程序
int main()
{
    INT8U remember;
 	DISABLE_INTERRUPTS;            //禁止总中断
 	//1. 芯片初始化
 	MCUInit();
    //2. 模块初始化
	SCIInit();                     //(1) 串口初始化
 	TimerInit();                   //(2) 定时器1初始化
    //3. 内存初始化
    //(1) "时分秒"缓存初始化(00:00:00)
	time[0] = 0;
	time[1] = 0;
	time[2] = 0;
	//(2) 临时变量remember初始化
    remember = time[2];
    //(3) 全局变量TimInterCount初始化
 	TimInterCount = 0;
 	//4. 开放各模块中断
    EnableSCIReInt;                //(1) 开放SCI0接收中断
    EnableT1OVInt;                 //(2) 开放定时器1溢出中断
    //5. 开放总中断
	ENABLE_INTERRUPTS;             //开总中断
	while (1)
	{
        if (time[2] != remember)
        {
            SCISendN(3, time);     //发送当前"时分秒"
            remember = time[2];    //remember中存放当前秒值
        }
    }
}
Exemple #2
0
void main(void) 
{      
    INT8U i;
    
    DISABLE_INTERRUPTS;    //关总中断    
    //1.芯片初始化
    MCUInit();
    //2. 模块初始化    
    SCIInit();    //(1) 串口初始化

    while (1)
    {     
        i = SCIReN(1,SerialBuff);              //等待接收1个数据
        if (i == 0) SCISendN(1,SerialBuff);    //发送接到的数据
    }
}
Exemple #3
0
//主函数
int  main()
{
    INT8U i, j;
    INT16U value[2];
    
    MCUInit();    //系统初始化
    SCIInit();    //串行口初始化
    SPIInit();    //SPI通信初始化
    //程序总循环入口
    while (1)
    {
       ADCP(3, 1, 2, value);    //取33路AD转换16次平均值放入ADValue[33]
       SCISendN(4,(INT8U *)value);
       for (i=0; i<100; i++)
           for (j=0; j<200; j++)
               Delay();
    }
}
Exemple #4
0
//主函数
int main()
{
    INT8U i;
    INT8U j;
    INT8U k;
    INT8U flag;    //写字节奇偶个数标志
    
    DISABLE_INTERRUPTS;    //禁止总中断
    //1. 芯片初始化
    MCUInit();
    //2. 模块初始化 
    SCIInit();    //串行口初始化
    //3.内存初始化
    //把存放在RAM区的机器码赋值给数组PrgOfRam,供Flash擦写函数调用
    for (i=0; i<18; i++)
        PrgOfRam[i] = P[i];
    
    //主循环
    while (1)
    {
        i = SCIReN(1,SerialBuff);
        if (i != 0) continue;
        switch (SerialBuff[0])
        {
        //收到提问信号
        case '?' :
            {
                SCISendN(11,"E:PAGE:ADDR",0x00);           //擦除命令格式
                SCISendN(2, (void *)Line_end,0x00);
                SCISendN(18,"W:PAGE:ADDR:N:DATA",0x00);    //写入命令格式
                SCISendN(2, (void *)Line_end,0x00);
                SCISendN(13,"R:PAGE:ADDR:N",0x00);         //读取命令格式
                SCISendN(2,(void *)Line_end,0x00);
                break;
            }
        //收到擦除信号
        case 'E' :
            {
                j = SCIReN(8,SerialBuff);
                if (j == 0)
                {
                    //将收到的字符数据转换成十六进制数据
                    for (k=1; k<8; k++)
                        if((SerialBuff[k]>='0') && (SerialBuff[k]<='9'))
                            SerialBuff[k] = SerialBuff[k]-'0';
                         else SerialBuff[k] = SerialBuff[k]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //擦除指定的扇区
                    Flash_Erase_Sector(page,addr);
                    //发送擦除结果
                    SCISendN(250,(void *)addr,page);
                }
                break;
            }
        //收到写入信号
        case 'W' :
            {
                j = SCIReN(11,SerialBuff);
                if (j == 0)
                {
                    //将收到的字符数据转换成十六进制数据
                    for (k=1; k<10; k++)
                        if ((SerialBuff[k]>='0') && (SerialBuff[k]<='9'))
                            SerialBuff[k] = SerialBuff[k]-'0';
                        else SerialBuff[k] = SerialBuff[k]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //接收写入的数据个数
                    N = SerialBuff[9];
                    //接收写入的数据
                    k = SCIReN(N,SerialBuff);
                    //对数据的奇偶个数进行处理
                    if (k == 0) 
                    {
                        flag = 0;
                        if(1 == N%2)
                        {
                            SerialBuff[N] = 0xFF;
                            N += 1;
                            flag = 1;
                        }
                        //写入数据
                        Flash_Write_Nword(page,addr,(INT16U)SerialBuff,N/2);
                        if(1 == flag)
                        {
                            N -= 1;
                        }
                        //发送写入到Flash的数据
                        SCISendN(N,(void *)addr,page);
                    }
                }  
                break;
            }
        //收到读取信号
        case 'R' :
            {
                i = SCIReN(10,SerialBuff);
                if (i == 0)
                {
                    //将收到的字符数据转换成十六进制数据
                    for (i=1; i<10; i++)
                        if((SerialBuff[i]>='0') && (SerialBuff[i]<='9'))
                            SerialBuff[i] = SerialBuff[i]-'0';
                         else   SerialBuff[i] = SerialBuff[i]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //接收要读取的数据个数
                    N = SerialBuff[9];
                    //发送要读取的数据
                    SCISendN(N,(void *)addr,page);
                }
                break;
            }
        }
    }
}
Exemple #5
0
//主函数
int main()
{
    INT8U i;
    INT8U j;
    INT8U k;
    INT8U flag;    //读写字节奇偶个数标志    
    INT8U Line_end[2];
    INT8U Convert(INT8U ASC1,INT8U ASC2);
    
    DISABLE_INTERRUPTS;    //禁止总中断
    //1. 芯片初始化
    MCUInit();
    //2. 模块初始化 
    SCIInit();    //(1) 串行口初始化
    //3.内存初始化
    //ASCII码换行符    
    Line_end[0]=13;
    Line_end[1]=10;    
    //把存放在RAM区的机器码赋值给数组PrgOfRam,供Flash擦写函数调用
    for (i=0; i<18; i++)
        PrgOfRam[i] = P[i];    
    //后门机制密码
    for(i=0;i<8;i++)
        BackdoorKey[i]=0xFF;
    //安全字节
    SecureByte[0]=0xFF;
    SecureByte[1]=0xFE;
    //主循环
    while (1)
    {
        i = SCIReN(1,SerialBuff);
        if (i != 0) continue;
        switch (SerialBuff[0])
        {
        //收到提问信号
        case '?' :
            {
                SCISendN(11,"E:PAGE:ADDR");           //擦除命令格式
                SCISendN(2, (void *)Line_end);
                SCISendN(18,"W:PAGE:ADDR:N:DATA");    //写入命令格式
                SCISendN(2, (void *)Line_end);
                SCISendN(13,"R:PAGE:ADDR:N");         //读取命令格式
                SCISendN(2,(void *)Line_end);
                SCISendN(13,"S:BackdoorKey");         //设置密码命令格式
                SCISendN(2,(void *)Line_end);
                SCISendN(12,"C:SecureByte");          //设置安全状态命令格式
                SCISendN(2,(void *)Line_end);
                SCISendN(24,"U:BackdoorKey");         //解除安全模式命令格式
                SCISendN(2,(void *)Line_end);
                break;
            }
        //收到擦除信号
        case 'E' :
            {
                j = SCIReN(8,SerialBuff);
                if (j == 0)
                {
                    //将收到的字符数据转换成十六进制数据
                    for (k=1; k<8; k++)
                        if((SerialBuff[k]>='0') && (SerialBuff[k]<='9'))
                            SerialBuff[k] = SerialBuff[k]-'0';
                         else SerialBuff[k] = SerialBuff[k]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //擦除指定的扇区
                    Flash_Erase_Sector(page,addr);
                    //发送擦除结果
                    SCISendN(250,(void *)addr);
                }
                break;
            }
        //收到写入信号
        case 'W' :
            {
                j = SCIReN(11,SerialBuff);
                if (j == 0)
                {
                    //将收到的字符数据转换成十六进制数据
                    for (k=1; k<10; k++)
                        if ((SerialBuff[k]>='0') && (SerialBuff[k]<='9'))
                            SerialBuff[k] = SerialBuff[k]-'0';
                        else SerialBuff[k] = SerialBuff[k]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //接收写入的数据个数
                    N = SerialBuff[9];
                    //接收写入的数据
                    k = SCIReN(N,SerialBuff);
                    //对数据的奇偶个数进行处理
                    if (k == 0) 
                    {
                        flag = 0;
                        if(1 == N%2)
                        {
                            SerialBuff[N] = 0xFF;
                            N += 1;
                            flag = 1;
                        }
                        //写入数据
                        Flash_Write_Nword(page,addr,(INT16U)SerialBuff,N/2);
                        if(1 == flag)
                        {
                            N -= 1;
                        }
                        //发送写入到Flash的数据
                        SCISendN(N,(void *)addr);
                    }
                }  
                break;
            }
        //收到读取信号
        case 'R' :
            {
                i = SCIReN(10,SerialBuff);
                if (i == 0)
                {
                    //将收到的字符数据转换成十六进制数据                    
                    for (i=1; i<10; i++)
                        if((SerialBuff[i]>='0') && (SerialBuff[i]<='9'))
                            SerialBuff[i] = SerialBuff[i]-'0';
                         else   SerialBuff[i] = SerialBuff[i]-'A'+0x0A;
                    //对页号和地址处理
                    page=CvtPage(SerialBuff);
                    addr=CvtAddr(SerialBuff);
                    //接收要读取的数据个数
                    N = SerialBuff[9];
                    //发送要读取的数据
                    SCISendN(N,(void *)addr);                   
                }
                break;
            }
        //设置后门机制进入密码
        case 'S' :
            {
                i = SCIReN(17,SerialBuff);
                if (i == 0)
                {
                    for(i=0; i<8; i++)
                        BackdoorKey[i]=Convert(SerialBuff[i*2+1],SerialBuff[i*2+2]);
                    Flash_SetKey(BackdoorKey);
                    SCISendN(8,(void *)0xFF00);
                }  
                break;
            }
         //改变安全状态
         case 'C' :
            {
                i = SCIReN(3,SerialBuff);
                if (i == 0)
                {
                    SecureByte[1]=Convert(SerialBuff[1],SerialBuff[2]);
                    Flash_SetStatus(SecureByte);
                    SCISendN(1,(void *)0xFF0F);
                }  
                break;
            }
        //使用后门机制解密
        case 'U' :
            {
                i = SCIReN(17,SerialBuff);
                if (i == 0)
                {
                    for(i=0; i<8; i++)
                        BackdoorKey[i]=Convert(SerialBuff[i*2+1],SerialBuff[i*2+2]);
                    Flash_unsecured(BackdoorKey);
                    SCISendN(20,"Unsercured Success !");
                    SCISendN(2,(void *)Line_end);
                }  
                break;
            }
        } 
    }  
}
Exemple #6
0
void main(void) {
  
  INIT_SLK_PBs;
  INIT_SLK_LEDs;
  INIT_APSLK_LEDs;
  INIT_SLK_POT;
  INIT_SLK_BUZZER; //Only Available when interfaced to Project Board
  INIT_SLK_FRTimer;
  LCDInit();       //Only Available when interfaced to Project Board
  SCIInit();
  
  EnableInterrupts;
  
   LCDPutString("  FSL\n");
   LCDPutString(" HCS12\n");
   SCITransmitStr("\r\rFreescale HCS12 Demo\n\r");     
  for(;;) {
    
    /* PB1 = LED1 */
    if (SLK_PB1 == 0)
    {
      SLK_LED1 = ON;	       //LED 1 Active
      APSLK_LED1 = !SLK_LED1;  //Follow the Project Board LEDs
      LCDPutString(" LED 1\n");
      LCDPutString("ENABLED\n");
    } 
    /* PB2 = LED2 */
    else if(SLK_PB2 == 0)
    {
      SLK_LED2 = ON;         //LED 2 Active
      APSLK_LED2 = !SLK_LED2;  //Follow the Project Board LEDs
      LCDPutString(" LED 2\n");
      LCDPutString("ENABLED\n");
      }
      /*Buzzer and PWM */ 
    else if(SLK_PB3 == 0)
    {
      LCDPutString("BUZZER\n");
      LCDPutString("ENABLED\n");
      TCTL2_OM0 = 1;
      SLK_BUZZER_VOLUME = SLK_POT +1;      
      } 
      /*The Bouncing Switch*/
    else if(SLK_PB4 == 0)
    {
     SCITransmitStr("\r\rHello World!!  \r");
     LCDPutString(" Hello\n");
     LCDPutString(" World\n");
      }
      /*The Blinking LED*/ 
    else if(PAFLG_PAOVF == 1)    //Polling Free Timer Overflow flag   
      {
      SLK_LED3 = !SLK_LED3;
      APSLK_LED3 = SLK_LED3;      
      PAFLG_PAOVF = 1;              //Clearing the Overflow flag
      TIMER_COUNT = 0x7fff;         //Setting count to 0x7FFF to increase flash rate.
     }
    else{   
      TCTL2_OM0 = 0;
      SLK_LED4 = ON;
      SLK_LED2 = OFF;
      SLK_LED1 = OFF;
      APSLK_LED4 = !SLK_LED4;
      APSLK_LED2 = !SLK_LED2;
      APSLK_LED1 = !SLK_LED1;
      LCDPutString("  FSL\n");
      LCDPutString(" HCS12\n");
   
    }
       } /* wait forever */
}