问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁能帮我写一个51单片机控制制步进电机的程序

发布网友 发布时间:2022-12-26 09:00

我来回答

1个回答

热心网友 时间:2023-10-15 07:26

#include "reg52.h"
#include "INTRINS.H"
#include <absacc.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char

void check_addr(void); /*
地址核对
*/

uchar code slave_addr[4]={00, 01, 02, 255};

/*
从机地址
*/
uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval;
uchar sent_ok,speed_change,start_up,start_end,address_true,i;

uint y1;

uint
code
add[100]={60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651
11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331
,65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6
5404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654
37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457
,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6
5471,65472,65472,65473,65474,65475,65475,65476,65477,65477,65478,65478,65479,65480,654
80,65481};

sbit P2_0=P2^0;

/*
作输入步进电机的脉冲信号发送口
*/
sbit P2_2=P2^2;

/*
作输入步进电机的旋转方向信号发送口
*/
sbit P1_0=P1^0;

/*
作串口输出信号的使能口
, P1_0=0
时接通串口
,
输出信号
*/
sbit WD=P1^7;

/*
看门狗
*/

main()
{

P2_0=0;

P2_2=0;

/*
步进电机的旋转方向待试验后确定
*/

P1_0=1;
/*
开机时需要关断
,
串口发送功能
,
需要时再接通
*/

WD=1;

/*
看门狗先为
1
,电平翻转为喂狗
*/

i=0;

common_count=0;

cmd_in_permit=0;

input_order=0;

interval=0;

address_true=1;

speed_change=0;

start_up=0;

2

start_end=0;

sent_ok=0;

//
允许发送

EA=1;
/*
开放总中断
*/

TMOD=0x21;

TH1 = 0xFD;

//
波特率
9600

TL1 = 0xFD;

SCON = 0xd0;

//
设定串行口工作方式

PCON &= 0x00;

//
波特率不倍增

SM2=1;

TR1 = 1;

ES=1;

//
启动定时器
1

T2MOD=00;

T2CON=0x00;

RCAP2H
=0xEE;

//

T2
的预置值
0xA600,25MS

0xB800

20MS,0xCA00

15MS,0xDC00

10MS

0xEE00

5MS

RCAP2L =0x00;

TR2=1;

//
启动定时器

ET2=1;

//
打开定时器
2
中断

do
{

if(address_true==1)

{

address_true=0;

check_addr();

}

if(start_up==1&&start_end==0)

//
第一次启动

{

y1=add[common_count];

T0high = (uchar)(y1>>8)

/*

y1
的高
8

*/

T0low = (uchar)(y1&0x00ff);

/*

y1
的低
8

*/

TR0 = 1;

ET0=1;
/*
允许
T/C0
中断
*/

start_end=1;

}

if(speed_change==1)

{

if(interval>=0&&interval<=0x63)

{

if(interval>common_count)

{common_count=common_count+1; }

if(interval<common_count)

{common_count=common_count-1; }

}

3

speed_change=0;

}

if(sent_ok==1)

{

sent_ok=0;

P1_0=0;

for(i=0;i<=20;i++) {_nop_();}

TI=0; SBUF=T0high;

while(TI==0);TI=0;

TI=0; SBUF=T0low;

while(TI==0);TI=0;

P1_0=1;

for(i=0;i<=20;i++) {_nop_();}

SM2=1;

}
}
while(1);
}

void timer0(void) interrupt 1 using 3

{

P2_0=~P2_0;

y1=add[common_count];

T0high = (uchar)(y1>>8)

/*

y1
的高
8

*/

T0low = (uchar)(y1&0x00ff);

/*

y1
的低
8

*/

TH0=T0high;
/*

8

T0high
送定时器
0

TH0*/

TL0=T0low;
/*

8

T0low
送定时器
0

TL0*/
}
void timer2(void) interrupt 5 using 2

{

TF2=0;
/*T2
溢出中断需软件清
0*/

speed_change=1;

//
速度可以改变标示,以便主程序处理

WD=!WD; /*MAX813
喂狗
*/

}

void inte_SERIAL() interrupt 4 using 1

/*
串口
0
中断服务子程序
*/
{

uchar key_in

key_in=0;

if(RI)

{追问编译时好多错误怎么办

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... iphoneg5s很容易发烫怎么回事? 羊驼考务考生服务平台安全吗 股市今天休假吗 《现代汉语》目录及要点汇总(简)(上) 金税盘开发票汇总目录为什么会变样 在家居设计中,金属线条的使用频率比较高,金属线条的优势是什么呢? 职业年金为什么是领139个月 飞乐丝注册过商标吗?还有哪些分类可以注册? 好客小厨菜馆怎么样 河南省巩义市哪家饭店比较好吃又实惠? 飞乐小厨 巩义店怎么样 表示感谢的英文歌曲介绍 感谢是什么歌曲 黄石威能地暖在哪里买 古墓丽影崛起失落之城挑战投石机着火怎么弄 多措并举推动轻工业稳健发展,哪些领域会受益? 伤口感染吃什么药好的快 taⅠl是什么意思 tall翻译 创维电视E6200和G9200哪个型号更好 潍坊高创桃源交房多久拿契税 成都美的微波炉维修点在哪儿呀?现在一开电源,里面就冒强光,好吓人呀。 百分表如何使用 华为平板移动分屏怎样不会变全屏 气虚体质要从三方面进行调养 如何应对孩子闹脾气 孩子脾气暴躁怎么应对 浙江意动文化创意有限公司怎么样? 重庆翰源文化传播有限公司怎么样? 土豆发青还能吃吗 土豆发青还可以吃吗 土豆变青还能吃吗 土豆变青还可以吃吗 抖音视频没有壁纸下载只有生成图片功能呢? 谁知道老牛破车的意思? 老汗推车是什么意思? 一字怎么写好 一个新手机号怎么注册 如果一个人声音很好听,却经常被人说声音难听恶心,他们是嫉妒吗? 怎样用手机号注册 剑3如何玩 蔷薇十字小剑怎么玩?