- UID
- 934487
- 阅读权限
- 40
- 推广
-
- 幽默
-
- 注册时间
- 2016-7-16
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2022-9-27 08:01:16
|
显示全部楼层
//8脚 STC15F104W 2相4线电机//P3.0--P3.3 这4个脚设为推挽,12MHZ,烧录后才焊接4个电阻。
//要求:上电后正转10秒,反转10秒
#include<reg52.h> //代入头文件//
#include <intrins.h> // 用空操作 _nop_ 时要加这句//
#define ulong unsigned long //宏定义变量类型 0----4294967295/
#define uint unsigned int //宏定义变量类型 0----65535/
#define uchar unsigned char// 宏定义变量类型 0-255/
uchar jlu; //几率-----------------=======
uint t1;
sfr P3M1=0xB1;
sfr P3M0=0xB2; //P3口特殊寄存器声明
sbit A1=P3^3; //
sbit A2=P3^2; //
sbit B1=P3^1; //
sbit B2=P3^0; // 4个输出口
#define Coil_1 {A1=1;A2=0;B1=0;B2=0;}//A+流向A-,B断电
#define Coil_2 {A1=1;A2=0;B1=1;B2=0;}//A+流向A-,B+流向B-
#define Coil_3 {A1=0;A2=0;B1=1;B2=0;}//A断电,B+流向B-
#define Coil_4 {A1=0;A2=1;B1=1;B2=0;}//A-流向A+,B+流向B-
#define Coil_5 {A1=0;A2=1;B1=0;B2=0;}//A-流向A+,B断电
#define Coil_6 {A1=0;A2=1;B1=0;B2=1;}//A-流向A+,B-流向B+
#define Coil_7 {A1=0;A2=0;B1=0;B2=1;}///A断电,B-流向B+
#define Coil_8 {A1=1;A2=0;B1=0;B2=1;}//A+流向A-,B-流向B+
#define Coil_OFF {A1=0;A2=0;B1=0;B2=0;}//全部断电
void main( )//主程序
{
TMOD=0x01; // TMOD=0x11;//设置定时器0为工作方式1//
TH0=(65536-1000)/256; //12MHZ,1MS一次中断,商//
TL0=(65536-1000)%256; //低四位装数=余数//
EA=1; //开总中断//
ET0=1; //开定时器0中断
TR0=1;//启动定时器0//397//
Coil_OFF; //把4个输出设为低电平,全部断电
P3M1=0x0;// 高8位为0000 0000
P3M0=0xF; //低8位为0000 1111 3.0--3.3脚为推挽输出,各脚串联1K电阻到地,有4毫安电流。其他是准双向口串联1K电阻到地只有13微安
while(1)//大循环
{
jlu=0;//几率------
//以下是你的编程区=========================================
//以下你不要编程=========================================
while(jlu<1) //几率-------
{_nop_(); _nop_(); _nop_(); }
}
}
void exter0() interrupt 1 //定时器0的中断程序//定时器1的中断程序 void exter1() interrupt 3//
{ static unsigned char i2,i;
TH0=(65536-1000)/256; //重装数12MHz 1000=1ms,如果不重装,默认数是65536,不是想要的10000//
TL0=(65536-1000)%256;
t1++;
if(t1<10000){ //正转10秒
switch(i)
{
//正转
case 0: Coil_1;i++;break;
case 1: Coil_2;i++;break;
case 2: Coil_3;i++;break;
case 3:Coil_4;i++;break;
case 4:Coil_5;i++;break;
case 5:Coil_6;i++;break;
case 6:Coil_7;i++;break;
case 7:Coil_8;i++;break;
case 8:i=0;break;
//default:break;
}
}
if(t1>=10000) { //反转10秒
switch(i2)
{
//反转
case 0:Coil_8;i2++;break;
case 1:Coil_7;i2++;break;
case 2:Coil_6;i2++;break;
case 3:Coil_5;i2++;break;
case 4:Coil_4;i2++;break;
case 5:Coil_3;i2++;break;
case 6:Coil_2;i2++;break;
case 7:Coil_1;i2++;break;
case 8:i2=0;break;
//default:break;
}
}
if(t1==20000){t1=0;} //轮回
//以下你不要编程=========================================
jlu=1;//几率---------
}
|
|