急求步进电机控制程序

急求步进电机控制程序,第1张

void

time0()

interrupt

1

using

1{

//用定时器中断来产生时钟信号

TR1=~TR1

TL0=......

TH1=......

}

serial()

interrupt

4

using

2

//定时器中断串行通信

{

a=SBUF

//a为接收到的数据

RI=0

}

真不知道你是什么意思。51、52单片机串行口是用定时器1或定时器2产生时钟频率的,而且是不用中断方式的,只要打开定时器就可以了。你的意思是用定时器0来产生时钟频率呢还是只作定时?我是当作定时给你编的。

可我又奇怪,看你的设计要求好像不需要定时的。真是搞不懂你。

还有,串行口通信要根据单片机晶振频率,通信波特率来来确定工作方式和定时器初值的,所以你的问题最好再详细点。

直接略过前面的三个主回路不用看,后面开始,先是三个热继电器,不用考虑。然后是三个停止,不用考虑。第一个是SB1按下,KM1得电并自保,同时,给KT1\KT2电,时间继电器开始计时。到设定时间后,KM2、KM3依次启动。很基本的图纸啊。

如果要完全的顺序控制,还可以用KM2启动KT3,道理同理KM1启动KT1。因为按要求,应该是电机1启动后,电机2启动,电机2启动后电机3启动。图中设计,如果KT2与KT3时间设定不对,那顺序就错了。

#include <REGX52.H>

bit aj = 0

sbit clk1=P1^0 //定义X脉冲输出位

sbit dir1=P1^1 //定义X正反转控制位

sbit ena1=P1^2 //定义Y使能控制位

sbit x1 =P1^6

unsigned int k=0,x11,y11,cycle=2000,yk,xk,xk1//定义开始控制位

unsigned char x = 1

unsigned int kx

void delay(unsigned int i)

{

unsigned int j,k

for(j=ij>0j--)

for(k=300k>0k--)

}

void inistartx(void) //X初始化函数

{

xk=0

dir1=1

cycle=9600

kx=300

TR0=1

P2_0=0

while(xk1<400)

TR0=0

kx=0

delay(500)

xk=0

cycle=9600

dir1=0

xk1=0

kx=700

TR0=1

while(x==1&&xk1<801)//

TR0=0

delay(500)

cycle=9600

xk1=0

dir1=1

kx=300

TR0=1

while(xk1<400)

TR0=0

kx=0

clk1=0

xk1=0

}

void exint0_init( )

{

IT0 =1 //下降沿产生中断

EX0 =1 //使能外部中断

EA =1 //使能全局中断

}

void initime0(void) //初始化定时器0

{

TH0=0xf8

TL0=0x30

}

void time0() interrupt 1 //定时器0中断函数

{

if(xk1<100){cycle=cycle-80}

if(xk1>=100&&xk1<=kx){cycle=1600}

if(xk1>kx) {cycle=cycle+80}

TH0=(65536-cycle)/256 //定时5000次= 5000us = 5 ms 65536-5000=60536=0xec78

TL0=(65536-cycle)%256

//TH0=0xf8 //定时器1为X或者Y提供脉冲数

//TL0=0x30 //频率500cycle=2000 cycle=2500=》频率=400

xk1++

clk1=~clk1

k++

}

void exint0() interrupt 0 //接近开关接P3.2,发生中断停止

{

TR0=0

x=0

ena1=0

}

void main (void)

{

x1=1

TMOD = 0x01

IE=0xAF //EA - ET2 - ES - ET1 - EX1- ET0 - EX0 允许(总中断EA) ET2 ET1 ET0中断

initime0()

exint0_init()

inistartx()

TR2=1

while(aj ==0)

inistartx()

TR1=1

//IP= 0x00 //- - PT2 PS PT1 PX1 PT0 PX0

////TCON =0x00 //TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

//T2CON =0x00 //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T CP/RL2

while(1){

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12204555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存