• 大小: 22KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: 步进电机  串口  

资源简介

程序提供了,步进电机的完美控制,通过串口接收到的数据,来控制步进电机的左右移动

资源截图

代码片段和文件信息

/********************************************************************
* 文件名  : 串口接收试验.c
* 描述    :  该文件实现通过单片机从电脑接收数据。通过数码管显示
 该试验使用的晶振是11.0592如果使用12M晶振,会出现串口接收
 不正常的情况。原因是用12M晶振,波特率9600时的误差率达 8%
 当下载这个程序到单片机时,单片机的最高为为乱码,是正常现象,
 按一下复位键便可。是由于单片机下载也是通过串口下载引起的。
* 创建人  : 东流,2009年4月8日
* 版本号  : 2.0
* 感谢“中国自动化资讯网”对本工作室的大力支持。
***********************************************************************/
#include
#include

#define uchar unsigned char
#define uint  unsigned int


//unsigned char code F_Rotation[4]={0x010x020x040x08};//正转表格 
//unsigned char code B_Rotation[4]={0x080x040x020x01};//反转表格

unsigned char code F_Rotation[4]={0x080x040x020x01};//反转表格 
unsigned char code B_Rotation[4]={0x010x020x040x08};//正转表格

unsigned char code L_led[9]={0x000x010x030x070x0f0x1f0x3f0x7f0xff};//二极管静态变量

sbit Key1 = P2^0;    
sbit Key2 = P2^1;

uchar LED_Buffer ;      //从串口接收的数据

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar xj;
for(j=0;j for(x=0;x<=148;x++);
}

void Delay(unsigned int i)//延时
{
 while(--i);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
//static uchar i = 7;    //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
EA = 0;
if(RI == 1)   //当硬件接收到一个数据时,RI会置位
{
LED_Buffer = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;  
//if(i==0) i = 8;  
//i--;
}
EA = 1;
}

/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;
     TH1 = 0xFd;    //设置波特率 9600
     TL1 = 0xFd;
     TR1 = 1; //启动定时器1
 ES = 1; //开串口中断
 EA = 1; //开总中断
}


void Key()
{
    uchar l; 
    if(Key1==0||Key2==0)
  {
     while(Key1==0)
   {
      for(l=0;l<4;l++)      
                {
                  P1=F_Rotation[l];  
                  Delay(500);        
            }
   }
 while(Key2==0)
   {
       for(l=0;l<4;l++)      
                {
                  P1=B_Rotation[l];  
                  Delay(500);        
            }
   }
  }

}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
uchar i = 4jk;
Delay_1ms(100);
Com_Init();
P0 = L_led[i];
//P2 = 0x80;  //这里把P2口的最高为置1,进入循环后 循环左移 一位正好是P2 最低为置1
whil

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-06-10 18:22  科研训练计划程序\
     文件        5115  2002-04-16 14:32  科研训练计划程序\STARTUP.A51
     文件       11665  2012-06-10 18:21  科研训练计划程序\STARTUP.LST
     文件         749  2012-06-10 18:21  科研训练计划程序\STARTUP.OBJ
     文件        5900  2012-06-10 18:21  科研训练计划程序\串口接收试验
     文件        4189  2012-06-10 18:21  科研训练计划程序\串口接收试验.c
     文件         900  2012-06-10 18:21  科研训练计划程序\串口接收试验.hex
     文件          72  2012-06-10 18:21  科研训练计划程序\串口接收试验.lnp
     文件        8584  2012-06-10 18:21  科研训练计划程序\串口接收试验.LST
     文件       10083  2012-06-10 18:21  科研训练计划程序\串口接收试验.M51
     文件        6050  2012-06-10 18:21  科研训练计划程序\串口接收试验.OBJ
     文件        1289  2012-06-10 18:22  科研训练计划程序\串口接收试验.Opt
     文件        2411  2012-06-10 18:22  科研训练计划程序\串口接收试验.plg
     文件        2059  2012-03-11 14:00  科研训练计划程序\串口接收试验.Uv2
     文件        1287  2012-06-10 17:15  科研训练计划程序\串口接收试验_Opt.Bak
     文件        2046  2010-04-20 00:43  科研训练计划程序\串口接收试验_Uv2.Bak

评论

共有 条评论