利用SCI做的一个足球答题系统

时间:2024-01-09 23:03:14

  SCI,异步串行通信接口,内置独立的波特率产生电路和SCI收发器,可以选择发送8或9个数据位(其中一位可以指定为奇或偶校验位)。

  SCI是全双工异步串行通信接口,主要用于MCU与其他计算机或设备之间的通信,几个独立的MCU也能通过SCI实现串行通信,形成网络。

  MC12里有两个SCI(SCI0和SCI1)。设计SCI串口通信程序,主要是掌握八个寄存器,设置好初始化。

利用SCI做的一个足球答题系统   ,代码如下:

 /*******************************************************/
/* 利用SCI做的一个足球答题系统 */
/*******************************************************/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
byte sci_data; //中断初始化
void SCI_Init(void)
{
SCI0BDL=0x34; // 波特率控制寄存器 0011 0100
SCI0CR2=0X2C; // 控制寄存器2 0010 1100
} //发送子函数
void SCI_Transmit(byte data)
{
while(!SCI0SR1_TDRE) ;
SCI0DRL=data; //数据寄存器
} //接收子函数
void SCI_Receive(byte *data)
{
*data=SCI0DRL;
} //特定输出子函数
void printf(char *str)
{
while(*str!='\r')
{
SCI_Transmit(*str);
*str++;
}
} N0Choose(byte data)
{
switch(data)
{
case '':
NO1();
break;
case '':
NO2();
break ;
case '':
NO3();
break;
case '':
NO4();
break;
case '':
NO5();
break;
default:
break;
}
} /********************************************************/
/* 主函数 */
/********************************************************/
void main(void)
{
SCI_Init();
printf("welcome to lipu's football-quiz system!\n\r");
printf("choose the problem number(1to5)\n\r"); //选择正确的问题号码1~5
while()
{
while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
N0Choose(sci_data);
}
} void Right(void)
{
printf("\nyou are RIGHT.\nchoose the next question\n\r");}
void Wrong(void){
printf("\nyou are WRONG.\nchoose the next question\n\r");}
int NO1(void)
{
printf(".which country is the champion of World Cup at 2006?\n\r") ;
printf("A:Brazil B:Italy\n\r"); while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
switch(sci_data)
{
case 'A':
Wrong();
break;
case 'B':
Right();
break;
default:
break;
}
} int NO2(void)
{
printf(".which country have the most champions of World Cup?\n\r") ;
printf("A:Brazil B:Italy\n\r");
while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
switch(sci_data)
{
case 'B':
Wrong();
break;
case 'A':
Right();
break;
default:
break;
}
} int NO3(void)
{
printf(".which club is the champion of Spanish Prinera Divison at 06-07\n\r") ;
printf("A:Barcelona B:Real Madrid\n\r");
while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
switch(sci_data)
{
case 'A':
Wrong();
break;
case 'B':
Right();
break;
default:
break;
}
} int NO4(void)
{
printf(".which club is the champion of Italian Serie A at 06-07\n\r") ;
printf("A:Inter Milan B:AC.Milan\n\r");
while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
switch(sci_data)
{
case 'B':
Wrong();
break;
case 'A':
Right();
break;
default:
break;
}
} int NO5(void)
{
printf(".who is the FIFA World Player at 2006\n\r") ;
printf("A:Henry B:Ronaldiaho\n\r");
while(!SCI0SR1_RDRF);
SCI_Receive(&sci_data);
SCI_Transmit(sci_data);
switch(sci_data)
{
case 'B':
Wrong();
break;
case 'A':
Right();
break;
default:
break;
}
}

zuqiu_dati.c