单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:7184|回复:6
打印上一主题下一主题

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

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

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

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

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

评分

黑币 +50
收起理由
+ 50
共享资料的积分奖励!

查看全部评分

沙发
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 单片机教程网