想写一个遥控小车的程序,void serial() interrupt 4 跳不进去

qq_42063649 2018-04-25 11:01:29
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar buf;
unsigned char jd;
unsigned char count;
sbit pwm =P1^7 ;
sbit motor_control_1 = P2^7;// 动力电机控制
sbit motor_control_2 = P2^6;//

void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
IE = 0x82;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0=1; //定时器开始
}
void main(void)
{
jd=3;
count=0;
Time0_Init();
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增

TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
while(1);
}

/*********************************************************

串行中断服务函数

*********************************************************/

void serial() interrupt 4
{
ES = 0; //关闭串行中断
RI = 0; //清除串行接受标志位
buf = SBUF; //从串口缓冲区取得数据
if(buf==0X31)//前进
{
motor_control_1 = 0;
motor_control_2 = 1;
}
if(buf==0x30)//刹车
{
motor_control_1 = 0;
motor_control_2 = 0;
}
if(buf==0x33)//后退
{
motor_control_1 = 1;
motor_control_2 = 0;
}
if(buf==0x32)//左转
{
jd=5;
}
if(buf==0x34)//右转
{
jd=1;
}



ES = 1; //允许串口中断
}


void Time0_Int() interrupt 1 //中断程序
{
TH0 = 0xfe; //重新赋值
TL0 = 0x33;
if(count< jd) //判断0.5ms次数是否小于角度标识
pwm=1; //确实小于,PWM输出高电平
else
pwm=0; //大于则输出低电平
count=(count+1); //0.5ms次数加1
count=count%40; //次数始终保持为40 即保持周期为20ms
}
...全文
704 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
輝丶 2019-03-14
  • 打赏
  • 举报
回复
楼主,你可以把第二个改成tmod|=0x20,这样应该就行了
輝丶 2019-03-14
  • 打赏
  • 举报
回复
引用 2 楼 weixin_42565113的回复:
会不会是第二次对TMOD赋值把第一次赋值覆盖掉了。
我也觉得是这样的
球星闪电 2019-03-13
  • 打赏
  • 举报
回复
会不会是第二次对TMOD赋值把第一次赋值覆盖掉了。

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧