找回密码
 立即注册

QQ登录

只需一步,快速开始

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

串口通信_遥控小车(有线)

[复制链接]
跳转到指定楼层
楼主
ID:69304 发表于 2014-11-23 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口通信_遥控小车(有线),,蛮不错的

带仿真文件,主机程序 和从机程序

串口通信_遥控小车(有线).zip

146.77 KB, 下载次数: 66, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2014-11-23 22:02 | 只看该作者
主机程序:
#include "reg51.h"
#include "intrins.h"
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int

sbit P10=P1^0; //前进
sbit P11=P1^1; //后退
sbit P12=P1^2; //左转
sbit P13=P1^3; //右转

uchar Temp[8]={1,2,3,4,5,6};         //运动编码。数字型

/********************************************************************
函数功能:定时器及串口初始化函数
入口参数:
出口参数:
********************************************************************/
void Timer_init() {
        TMOD = 0x20;            //定时器1工作方式2(8位自动重装定时器)
        TH1  = 0xf4;            //波特率2400b/s。
        TL1  = 0xf4;                //定时器初值必须同时装入TH0和TL0
        PCON = 0;                        //波特率不加倍
        SCON = 0X50;                //串口方式1(10位帧,其中8位数据,异步)。TI和RI清零,允许接收
        TR1  = 1;                        //启动T1
}

/********************************************************************
函数功能:发送一个字节
入口参数:  dat
出口参数:
********************************************************************/
void Send(uchar dat)
{
  SBUF=dat;
  while(TI==0);
  TI=0;
}

/********************************************************************
函数功能:主函数
入口参数:
出口参数:
********************************************************************/
void main()
{
        Timer_init();
        while(1)
        {
                                                    /*P13  P12  P11  P10*/
          if(P1==0xfe) Send(Temp[0]);           //前进直行           1        1         1          0
          if(P1==0xfd) Send(Temp[1]);           //后退直行           1        1         0          1
          if(P1==0xfa) Send(Temp[2]);           //前进左转           1        0         1          0
          if(P1==0xf6) Send(Temp[3]);           //前进右转           0        1         1          0
          if(P1==0xf9) Send(Temp[4]);           //后退左转           1        0         0          1
          if(P1==0xf5) Send(Temp[5]);           //后退右转           0        1         0          1
    }
}
回复

使用道具 举报

板凳
ID:1 发表于 2014-11-23 22:03 | 只看该作者
从机程序:

#include<reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define MotorData P2                    //步进电机控制接口定义

sbit P10=P1^0;          //前进显示
sbit P11=P1^1;          //后退显示
sbit P12=P1^2;          //左转显示
sbit P13=P1^3;          //右转显示
sbit P24=P2^4;    //
sbit P25=P2^5;    //
sbit P26=P2^6;    //
sbit P27=P2^7;          //

uchar code turn[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};   //旋转编码

/********************************************************************
函数功能:延时x毫秒函数
入口参数: x
出口参数:
********************************************************************/
void delay(uchar x)                //设晶体振荡器的频率为12MHz
{
   uchar k;
   while(x--)                      //延时大约x毫秒      
   for(k=0;k<125;k++){}
}

/********************************************************************
函数功能:定时器及串口初始化函数
入口参数:
出口参数:
********************************************************************/
void Timer_init() {
        TMOD = 0x20;            //定时器1工作方式2(8位自动重装定时器);定时器0工作方式1(16位计数器)
        TH1  = 0xf4;            //波特率2400b/s。
        TL1  = 0xf4;                //定时器初值必须同时装入TH0和TL0
        PCON = 0;                        //波特率不加倍
        SCON = 0X50;                //串口方式1(10位帧,其中8位数据,异步)。TI和RI清零,允许接收
        TR1  = 1;                        //启动T1
}

/********************************************************************
函数功能:接收一个字节
入口参数:
出口参数: dat
********************************************************************/
uchar Get(void)
{
  uchar dat;
  while(RI==0);
  RI=0;
  dat=SBUF;
  return dat;
}

/********************************************************************
函数功能:顺时针转动(前进)
入口参数:
出口参数:
********************************************************************/
void MotorCW(void)
{
uchar i;
for(i=0;i<8;i++)
  {
   MotorData=turn[i];   
   delay(30);    //转速调节
  }
}

/********************************************************************
函数功能:逆时针转动(后退)
入口参数:
出口参数:
********************************************************************/
void MotorCCW(void)
{
uchar i;
for(i=0;i<8;i++)
  {
   MotorData=turn[8-i];
   delay(30);   //转速调节
  }
}


/********************************************************************
函数功能:主函数
入口参数:
出口参数:
********************************************************************/
void main(void)
{
        uchar Temp;
        Timer_init();
        while(1)
        {
          P1=0xff;
          Temp=Get();
     
         switch(Temp)
         {
          case 1: {P10=0; MotorCW();}         break;   //前进直行
          case 2: {P11=0; MotorCCW();}        break;   //后退直行
          case 3: {P10=0; P12=0; MotorCW();}  break;   //前进左转
          case 4: {P10=0; P13=0; MotorCW();}  break;   //前进右转
          case 5: {P11=0; P12=0; MotorCCW();} break;   //后退左转
          case 6: {P11=0; P13=0; MotorCCW();} break;   //后退右转
         }
        }                 
}
回复

使用道具 举报

地板
ID:79544 发表于 2015-8-6 17:36 | 只看该作者
很好的双机通信程序谢谢分享!赞!!!!
回复

使用道具 举报

5#
ID:79544 发表于 2015-8-6 17:41 | 只看该作者
这个程序没有中断服务函数不知道好用不好用。
回复

使用道具 举报

6#
ID:101305 发表于 2016-1-18 13:55 | 只看该作者
不错学习下,呵呵
回复

使用道具 举报

7#
ID:646809 发表于 2023-11-9 01:25 | 只看该作者
有没有电路图,控制通道能不能加多一些
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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