电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
单片机串口接受数据问题:怎么让串口只接受数字1 才做出响应?
已解决
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)
最佳答案
hehung
我没有记错的话,51单片机的串口数据会存储在一个名字叫做SBUF的寄存器里面,你定义一个全局变量uart_data,然后在串口中断中写uart_data = SBUF;应该就可以了,然后这个数据就是你收到的串口数据,直接判断这个标志是不是1就行了
发布于
2020-07-22
举报
评论 0
0
0
其他答案
数量:
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
单片机串口接受数据问题:怎么让串口只接受数字1 才做出响应?
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: