找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 745|回复: 1
打印 上一主题 下一主题
收起左侧

这是我写的蓝牙模块二驱小车,但程序响应一次就不能在响应了,希望大佬可以帮我 求...

[复制链接]
跳转到指定楼层
楼主
ID:444353 发表于 2018-12-11 19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg52.h"            
typedef unsigned int u16;
typedef unsigned char u8;
sbit B1B=P3^7;
sbit B1A=P3^6;
sbit A1B=P3^5;
sbit A1A=P3^4;
sbit led=P2^4;
void GO()
{
A1A=1;
    A1B=0;
B1A=1;
B1B=0;
}
void RIGHT()
{
A1A=1;
A1B=0;
B1A=0;
B1B=0;
}
void LEFT()
{
A1A=0;
A1B=0;
B1A=1;
B1B=0;
}
void BACK()
{
A1A=0;
A1B=1;
B1A=0;
B1B=1;
}
void STOP()
{
A1A=0;
A1B=0;
B1A=0;
B1B=0;
}
/*******************************************************************************
* ??????         :UsartInit()
* ????????     :???????
* ????           : ??
* ???           : ??
*******************************************************************************/
void UsartInit()
{
SCON=0X50;   //????????????1
TMOD=0X20;   //???ü????????????2
PCON=0X80;   //????????
TH1=0XF3;    //????????????????????????4800??
TL1=0XF3;
ES=1;      //???????ж?
EA=1;      //?????ж?
TR1=1;     //????????
}

void main()
{
  UsartInit();
while(1);

   
  
}

void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//??????????????
RI = 0;//????????ж???λ
switch(receiveData)
{
  case 'A':RIGHT();break;
  case 'B':GO();break;
  case 'C':LEFT();break;
  case 'D':BACK();break;
  case 'E':STOP();break;
}
TI=0;       //????????????λ
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2018-12-12 08:31 | 只看该作者
我做过这个,你的程序和我的程序不同之处是:
你的程序,在串口中断程序中使用了控制小车的函数。
我的做法是:在串口中断程序中,只记录蓝牙发来的数据,这个数据的判断,留在main()中去判断。

我的思路是:在中断中调用其它函数,就不好判断程序执行到哪里去了——若出现上次中断服务程序没执行完,又来了一次中断,就只能等待,这次中断没法执行,程序就卡住了。而中断最麻烦的,就是不知道程序执行到哪里了出现中断。
这是高手教我的哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表