久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機串口通信控制步進電機

作者:寒竹子   來源:本站原創   點擊數:  更新時間:2014年03月20日   【字體:

這是一個來自單片機開發板的源程序,原理圖的下載地址: http://www.zg4o1577.cn/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 <reg52.h>

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;
}
}
}

/**
  * @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;
}
}
}

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲精品91 | 亚洲精品日韩在线 | 日日干夜夜操 | 三级成人在线 | 中文字幕欧美一区二区 | www.久草.com| 日韩一区欧美一区 | 精品久久久久久久久久久 | 国产一区 | 免费午夜视频 | 91精品国产综合久久久久久 | 日韩精品在线免费 | 中文字幕国产视频 | 午夜av在线 | 久久精品国产99国产精品亚洲 | 亚洲人在线 | www.99精品 | 9porny九色视频自拍 | 中文字幕视频在线观看 | 亚洲一区免费视频 | 男人天堂社区 | 国产精品久久 | 国产精品2区 | 黄色一级在线播放 | 久久精品小视频 | 日韩毛片视频 | 久久久精品久 | 日本黄色影片在线观看 | 亚洲精品久久久 | 翔田千里一区二区 | 国产情侣久久 | 亚洲一二三在线 | 激情六月丁香 | 欧美精品一区二区三区在线 | 亚洲va欧美va天堂v国产综合 | 亚洲日韩中文字幕一区 | 特级一级黄色片 | 成人午夜网站 | 久久精品视频91 | 高清成人免费视频 | 欧美一级毛片在线播放 |