• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机串口接受数据问题:怎么让串口只接受数字1 才做出响应?

822e5d1f5aabbd6b 2020-07-17 浏览量:586
#include <reg52.h>
unsigned char timer1;
sbit DIR = P1^2;//位定义DIR为P1.0口,控制步进电机转向
sbit ENA=P1^1; //位定义ENA为P1.1,控制步进电机的使能
sbit PWM=P1^0;//控制输出脉冲
void Delay(unsigned int t);

void system_Ini()   //调用子函数初始化定时器T1
{
   TMOD &= 0xF0;  //设置定时器模式
   TMOD |= 0x01; //设置定时器模式
   TL0 = 0x33;  //设置定时初值
   TH0 = 0xFE; //设置定时初值
   TF0 = 0;   //清除TF0标志
   TR0 = 1;  //定时器0开始计时
}

void UsartInit()
{
SCON=0X50;      //设置为工作方式1
TMOD &= 0x0F;  //设置定时器模式
TMOD|=0X20;   //设置计数器工作方式2
PCON=0X80;   //波特率加倍
TH1=0XF3;   //计数器初始值设置,注意波特率是4800的
TL1=0XF3;    
ES=1;     //打开接收中断
EA=1;    //打开总中断
TR1=1;  //打开计数器
}

bit receiveFlag = 0;

main()                                                  
{
int count = 0;
system_Ini();  //调用子函数初始化定时器 T1
UsartInit();
IE = 0X92;//开T0串口中断,开总中断10010010

while(1)
{
    if(receiveFlag)
  {
    count = 0;
    receiveFlag = 0;
    while(count < 205)
    {
        if (timer1>10)         //决定这一个脉冲的周期时间,此处为0.5ms*10=5ms
            {
                 timer1=0;
                 count ++;
            }
         if (timer1<3)
            {
                 PWM=0;
            }
        else
            {
                 PWM = 1;
            }
     } 
   }    

}
void T1zd(void) interrupt 1 //开定时器0中断     T0中断   
{
TH0 = 0xfe;
TL0 = 0x33;
timer1++;//计数+1
}
void Usart() interrupt 4   //串口相应中断
{
  RI = 0;//清除接收中断标志位 
   receiveFlag = 1;
}
void Delay(unsigned int t)//延时
{                           
        while(t--)
        {           
      ;
        }
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 我没有记错的话,51单片机的串口数据会存储在一个名字叫做SBUF的寄存器里面,你定义一个全局变量uart_data,然后在串口中断中写uart_data = SBUF;应该就可以了,然后这个数据就是你收到的串口数据,直接判断这个标志是不是1就行了
    • 发布于 2020-07-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:0

相关问题

问题达人换一批

单片机串口接受数据问题:怎么让串口只接受数字1 才做出响应?