单片机串口通信控制步进电机

发布者:RainbowGarden最新更新时间:2015-04-29 来源: 51hei关键字:单片机  串口通信  步进电机 手机看文章 扫描二维码
随时随地手机看文章
这是一个来自单片机开发板的源程序,原理图的下载地址: http://www.51hei.com/f/ks51.pdf

下面是源代码:
/**
  *************************************************************************************************
  * @file     main.c
  * @author   xr
  * @date     2014年3月18日20:00:03
  * @note     步进电机的参数:减速比:1:64  步进角:5.625/64  启动频率:>=550  启动时间最小:1.08ms
  * @brief    串口通信控制步进电机     单片机STC89C52RC MCU  晶振 11.0592MHZ
  *************************************************************************************************
  */
  
#include

typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;

//步进电机八拍模式相值编码 A-AB-B-BC-C-CD-D-DA
uchar code table[] = {
0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
};
uint tmp = 0;
bit dir = 0;
ulong beats = 0;//拍数
uchar angle = 0;//圈数

void timer0_Config();
void motor_Config(ulong angle);
void Uart_Config(uint baud);

void main()
{
timer0_Config();//启动时间设定为2ms
Uart_Config(9600);
while (1)
{
switch (angle)
{
case 2:
{
motor_Config(2*360);
angle = 0;
break;
}
case 3:
{
motor_Config(3*360);
angle = 0;
break;
}
case 4:
{
motor_Config(4*360);
angle = 0;
break;
}
case 5:
{
motor_Config(5*360);
angle = 0;
break;
}
case 6:
{
motor_Config(6*360);
angle = 0;
break;
}
case 7:
{
motor_Config(7*360);
angle = 0;
break;
}
case 8:
{
motor_Config(8*360);
angle = 0;
break;
}
case 9:
{
P1 |= 0x0F;
beats = 0;
angle = 0;
break;
}
default:
break;
}
}
}[page]

/**
  * @brief    步进电机配置(根据输出轴转的圈数来确定转子的拍数beats)
  * @param    无
  * @retval   无
  */
void motor_Config(ulong angle)
{
//在计算之前先关闭中断
EA = 0;
beats = (angle*64*8*8)/360;
EA = 1;
}

/**
  * @brief    定时器T0定时配置
  * @param    uint xms
  * @retval   无
  */
void timer0_Config()
{
TMOD &= 0xF0;//清零T0控制位
TMOD |= 0x01;//T1方式1
TH0 = 0xF8;
TL0 = 0xCC;//2ms
TR0 = 1;
ET0 = 1;
EA  = 1;
}

/**
  * @brief    串口通信配置
  * @param    无
  * @retval   无
  */
void Uart_Config(uint baud)
{
SCON |= 0x50;//SM0-SM2 REN TB8 RB8 TI RI
TMOD &= 0x0F;//清零T1控制位
TMOD |= 0x20;//设定定时器T1八位自动重装模式,计数设定串口波特率
TH1 = 256-(11059200/12/32/baud);//波特率 = 2^SMOD/32 * T1(溢出率) T1(溢出率) = 1/[(256-X)*(12/11059200)]
TL1 = TH1;
TR1 = 1;
ET1 = 0;//关闭T1的定时中断
ES = 1;//打开串口中断
EA = 1;//开总中断
}

/**
  * @brief    T0中断服务子程序
  * @param    无
  * @retval   无
  */
void timer0_Int() interrupt 1 using 3
{
static uchar step = 0;
uchar buf = 0;//存放相值
TH0 = 0xF8;
TL0 = 0xCC;
if (beats)
{
if (!dir)
{
buf = (P1 & 0xF0);//buf暂存P1的高字节,清零低字节
buf |= table[step++];//将相值存入buf
step &= 0x07;//与方式实现到8归零
P1 = buf;
beats--;
}
else
{
buf = (P1 & 0xF0);
buf |= table[step--];
if (step <= 0)
{
step = 7;
}
P1 = buf;
beats--;
}
}
else
{
P1 |= 0x0F;//关闭所有的相,即步进电机停止转动
}
}

/**
  * @brief    串口中断服务子程序
  * @param    无
  * @retval   无
  */
void Uart_Int() interrupt 4 using 0
{
if (RI)
{
RI = 0;
if (SBUF > 1)
{
angle = SBUF;
}
else
{
dir = SBUF;
}
}
}

关键字:单片机  串口通信  步进电机 引用地址:单片机串口通信控制步进电机

上一篇:数码管动态扫描三种实现方法
下一篇:单片机矩阵按键定时器消抖程序源码

推荐阅读最新更新时间:2024-03-16 14:00

HOLTEK推出HT45F4MA Power Flash MCU
Holtek针对Power Bank领域,推出Power Bank Flash版本的MCU HT45F4MA、HT45FH4MA、HT45FH4MA-1,与没有带A的版本相比,加大了外部PMOS及NMOS的驱动电流。 HT45F4MA、HT45FH4MA、HT45FH4MA-1具备2K × 16 Flash Program ROM、128 Byte Data RAM、64 Byte Data EEPROM、工作电压2.55V ~ 5.50V、系统频率可选最佳为30MHz/4,内建精准RC Oscillator (HIRC 30MHz),内建8个通道12-bit ADC、1个10-bit PTM用于产生互补式PWM输出,可
[单片机]
avr单片机mega32之ADC程序
查手册,写程序,有问题再讨论 ***************************************************************** //CPU:mega32 //编译器:iar #include ioavr.h #include adc.h int main(void) { int m; adc_init(); m = adc_get(0); m=m; while(1); } void adc_init(void) { ADMUX = 1 REFS0 | 0 ADLAR ;//参考电源:AVcc 右对齐 ADCSRA = 1 ADEN | 7;//adc使能 1
[单片机]
AVR单片机熔丝位设置
对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。 (1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态, Unprogrammed 表示熔丝状态为 1 (禁止); Programmed 表示熔丝状态为 0 (允许)。因此,配置熔丝位的过程实际上是 配置熔丝位成为未编程状态 1 或成为已编程状态 0 。 (2)在使用通过选择打钩 方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚 表示设置熔丝位状态为 0 还是为 1 。 (3)使用C
[单片机]
stc12c单片机pwn控制
程序: #include stc52.h #include state_key.h //p1.3和p1.4两个口...进行控制 bit flag,flag1,flag2; void init_pwm() { //第一个pwn设置 CMOD=0X02; //定时器0的溢出,可以实现可以跳频率的pwm输出 CL=0; CH=0; CCAP0L=0XC0; CCAP0H=0X40; CCAPM0=0X42; //8为pwn输出,无中断 //第二个pwn设置 CCAP1L=0XC0; CCAP1H=0X40; CCAPM1=0X42; //8为pwn输出,无中断 CR=1; //启动pca计数器阵列运行控制位
[单片机]
51单片机双机通信硬件电路图及C程序
双机通信的硬件电路 需要注意的是,两单片机要保证正确通信,主机的RXD连接从机的TXD,从机的RXD连接主机的TXD。 双机通信C语言程序 (1)主机程序 #include #include #define _READY_ 0x06//主机握手信号 #define _BUSY_ 0x15//从机忙应答 #define_OK_ 0x00//从机准备好 #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Bu
[单片机]
51<font color='red'>单片机</font>双机通信硬件电路图及C程序
单片机+UA741放大整形1~10K频率计
设计要求 (1)可测正弦波、方波信号的频率,频率范围:1 Hz~10 kHz。 (2)信号Vpp为0.1 ~3 V。 (3)测试结果显示于液晶。 1.2设计总体方案 用一个定时器来定时1秒,用一个计数器来数在定时1秒内有多少次外部中断,定时器和计数器定时工作在方式1,即16位定时器/计数器。然后定时1S结束后,把计数器里面的高8位和低8位的数值取出来,换算成10进制数赋值给频率,刚好数值变化多少,频率就是多少Hz. 1.3系统结构框图 2系统硬件电路设计 2.1总体电路图 图2、总体电路图 2.2各单元模块功能 ①STC89C52RC: 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I
[单片机]
<font color='red'>单片机</font>+UA741放大整形1~10K频率计
单片机PWM直流电机调速显示转速
PWM直流电机调速仿真原理图如下 Altium Designer画的PWM直流电机调速原理图和PCB图如下: PWM直流电机调速单片机程序如下 #include reg51.h #include intrins.h #include LCD1602.h #define uchar unsigned char #define uint unsigned int /**********端口分配*******************************/ sbit add_key=P1^0; //占空比加 sbit dec_key=P1^1; //占空比减 sbit z_key=P1^2; //正转键 sbit f_
[单片机]
<font color='red'>单片机</font>PWM直流电机调速显示转速
微控制器的FSMC到底是咋回事?(下)
摘要:上一篇文章我们具体讲解了FSMC的原理配置,这一章主要是关于使用FSMC的SRAM初始化流程,以及使用STM32CubeMX对FSMC进行配置。 一、SRAM初始化流程 通过上面的讲解,通过对 FSMC 相关的寄存器的描述,大家对 FSMC 的原理有了一个初步的认识,如果还不熟悉的朋友,请一定要搜索网络资料理解FSMC的原理。只有理解了原理,使用库函数才可以得心应手。那么在库函数中是怎么实现FSMC的配置的呢?FSMC_BCRx,FSMC_BTRx 寄存器在库函数是通过什么函数来配置的呢?下面我们来讲解一下 FSMC 相关的库函数: 1.1 使能FSMC时钟 要使用FSMC,当然首先得开启其时钟。然后需要把
[单片机]
<font color='red'>微控制器</font>的FSMC到底是咋回事?(下)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved