虽然好像是说省赛不考,但也得复习一下呀,万一考了呢。。
首先是串口初始化
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1;
EA = 1;
}
void ServiceUart() interrupt 4
{
if(RI == 1)
{
RI = 0;
command = SBUF;
// SBUF += 1;
}
}
发送一个字节和字符串函数
void SendByte(uchar dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(uchar *str)
{
while(*str != '\0')
{
SendByte(*str++);
}
}
主函数
uchar command;
void main()
{
InitSystem();
UartInit();
SendString("hello danpianji! \n");
while(1)
{
}
}
当然也可以通过串口控制单片机。。
void SendByte(unsigned char dat);
void SendString(unsigned char *str);
void Function();
uchar command;
void main()
{
InitSystem();
UartInit();
SendString("hello danpianji! \n");
while(1)
{
Function();
}
}
void Function()
{
switch(command)
{
case 1: SendString(" hello \n\r"); command = 0; break;
case 2: SendString("\n\r world \n\r"); command = 0; break;
case 3: OperateLed(1,0); command = 0; break;
case 4: Operatews(0x10,1); command = 0; break;
case 5: OperateLed(1,1); Operatews(0x10,0); break;
}
}