要求: pc向单片机发送321,单片机向电脑发送get321!pc向单片机发送123,单片机向pc发送当前秒数(自敲至接收的时间值) )
#包含
#include 'Config.h '
uchar i=0;
uchar Count=0,second=0,minute; //计数,用于计时器
uchar flag=0;
uchar string[3],j=0; //每次接受时保存文字
voidsend_byte(uchardata )。
{
while (! (IFG1UTXIFG0);
U0TXBUF=data;
}
//发送字符串
voidprint_str(Uchar*s )。
{
wile () s!=' ' )
{
send_byte(*s;
}
}
//端口初始化
void UART_Init ()
{
U0CTL|=SWRST; 复位SWRST,在SWRST=1时开始设定串行端口
U0CTL|=CHAR; //8位数据模式
U0TCTL|=SSEL1; //SMCLK是串行时钟
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //n=UBR(uxmctl )/8
U0MCTL=0x00; //微调寄存器为0,波特率为9600bps
ME1|=UTXE0; //UART1发送使能
ME1|=URXE0; //UART1接收使能
U0CTL=~SWRST;
IE1|=URXIE0; //接收中断使能
P3SEL|=位4; 将//io端口置于正常I/O模式
p3dir|=位4; //io端口方向为输出
P3SEL|=位5;
}
在voidtimera_init(void )//连续计数模式下,计数到0XFFFF后发生中断
{
tactl|=tassel1taclrid0id1MC0taie; //SMCLK建立时钟源,进行8分频,增加计数模式,打开中断
TACCR0=9999;
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void )
{
需要判断sitch(TAIV )//中断的类型
{
case 2:break;
case 4:break;
case 10:Count; 布雷克; //设置标志位Flag
}
if(count==100 )//100次为1秒
{
密码;
计数=0;
if(second==60 ) ) )。
{
微用户;
second=0;
}
}
}
#pragma vector=UART0RX_VECTOR
_ _ interruptvoiduart0_ rx _ ISR (void )
{
uchar data=0;
data=U0RXBUF;
string[j ]=data;
if(j=3) )。
{
j=0;
}
if ((字符串[0]=='3' )字符串[1]=='2' )字符串[2]=='1' ) )
{
send_byte(g );
send_byte(e );
send_byte('t );
send_byte('3);
send_byte('2);
send_byte('1);
Send_Byte ('!' );
Send_Byte (' );
string[0]=' ';
string[1]=' ';
string[2]=' ';
}
if ((字符串[0]=='1' )字符串[1]=='2' )字符串[2]=='3' ) )
{
send_byte(minute/100x30;
send_byte(minute0x30;
send_byte(: );
send_byte(second/100x30;
send_byte(second0x30;
Send_Byte (' );
string[0]=0
string[1]=0
string[2]=0
}
}
语音主(语音) )。
{
WDT_Init (; //看门狗的设置
Clock_Init (; //系统时钟设定
UART_Init (;
TIMERA_Init (;
_EINT (; //插队
while(1)。
{
;
}
}
注意,使用//串行调试助手时,应该关闭十六进制发送和显示,并全部通过ASCLL发送。 所以发送数字时为0x30,发送文字时为正’
//据说单片机接受pc发送的指令是单一接受的,一个字符一个字符接受,所以需要设定存储接受的字符的数组。 否则,每次接受中断时,之前接受的字符就会消失。
单片机发送文字也用一个字发送,但也可以发送字符串