//主程序 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中存放当前秒值 } } }
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); //发送接到的数据 } }
//主函数 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(); } }
//主函数 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; } } } }
//主函数 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; } } } }
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 */ }