完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
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--) { ; } } |
|
相关推荐
1个回答
|
|
我没有记错的话,51单片机的串口数据会存储在一个名字叫做SBUF的寄存器里面,你定义一个全局变量uart_data,然后在串口中断中写uart_data = SBUF;应该就可以了,然后这个数据就是你收到的串口数据,直接判断这个标志是不是1就行了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之FLEXCAN
801 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之ADC
752 浏览 0 评论
北京君正X系列案例代理商:乐图 PAW GT2支持 PCM 与 DSD 互转
661 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之电阻屏触摸
1201 浏览 0 评论
1880 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12450 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-4 21:16 , Processed in 0.343824 second(s), Total 38, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191