我想通过串口通信控制led灯的闪烁。可是感觉行不通,不知道哪里出问题了。
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
uchar flag;
uchar receiver;
sbit led1=P2^0;
sbit led2=P2^1;
void delay(uint i)
{
uint x,y;
for(x=0;x<i;x++)
{
for(y=0;y<110;y++);
}
}
void Usartinit()
{
TMOD=0x20; //工作方式2
TH1=0xf3;
TL1=0xf3; //波特率为4800
PCON=0x80; //SMOD=1 波特率倍增 1000 0000
TR1=1; //T1运行控制位,TR1=1时T1工作,TR1=0时T1停止,TR1由软件置1或清0
SCON=0x50; //特殊功能寄存器,设定串行口的工作方式、接受/发送控制以及状态
//此次使用方式1,即SM0=0,SM1=1,
//REN,允许串行接收位,由软件置1,则启动串行口接收数据
ES=1; //打开接收中断
EA=1; //打开总中断
}
void main()
{
Usartinit();
flag=receiver;
while(1)
{
switch(flag)
{
case 2: led1=~led1;
delay(10);
break;
case 3:
led2=~led2;
delay(10);
break;
}
}
}
void Usart() interrupt 4
{
receiver=SBUF;
RI=0;
SBUF=receiver;
while(!TI)
TI=0;
}
小白求助。
此帖出自
小平头技术问答
一周热门 更多>