- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar buf;
- char code zh[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //--1# 此部分为步进电机控制部分
- void delay(char x)//延时程序
- {
- char i;
- while(x--)
- {
- for(i=0; i<120; i++);
- }
- }
- void motor(unsigned int a)//a即想要转的圈数
- {
- unsigned char b;
- unsigned int c;
- for (c=0; c<8*64*a; c++)
- {
- for (b=0; b<8; b++)
- {
- P1 = zh[b];
- delay(1);
- }
- }
- }//--1# 此部分为步进电机控制部分
- void main(void)
- {
- SCON=0x50;//设定串口工作方式0101 0000 串行口控制寄存器SCON 详细注释后面
- PCON=0x00; //=PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,在51单片机中单元地址是87H,其结构格式如下:
- TMOD=0x20; //> 20=10100 //TMOD是定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)。
- EA=1; //=EA引脚表示存取外部程序代码之意,低电平动作,当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。EA引脚必须接低电平,因为其内部无程序存储器空间。
- ES=1; //= ES:串行口中断控制位。ES=1,允许串行口中断。
- TL1=0xfd; //=fd=11111101 为什么51单片机串行中断中TL1和TH1的值要相同
- TH1=0xfd; //= fd=11111101
- TR1=1; //= TH1,TL1、TR1、TMOD是单片机的特殊寄存器 ,是用来控制计数/中断器的.TMOD(工作方式控制寄存器);TH1/TL1是定时器/计数器1;TR1=1是启动定时器1。
- while(1);
- }
- //串行中断服务函数
- void serial() interrupt 4 //== interrupt翻译:打断
- {
- ES=0;
- RI=0;
- buf=SBUF; //= SBUF全称serial data buffer,中文名称“串行数据缓冲器”
- //**********************************************************************************
- //2#-段内容 =正确运行 等待串口助手"文本输入数字后点亮灯光
- //if(buf<50)//35=3 可以输入0 1点亮LED灯
- // P1=0X01;
- //***********************************************************************************
- if(buf<100)//------------------1#--步进电机控制
- { delay(1000); //不知道什么问题加载电机就运转,不是等待输入数字转多少圈,
- motor(buf); //转n圈(可以改动)
- delay(1000);
- while(1) ;
- } //------------------1#--步进电机控制<<
- ES=1;//串口中断
- }
复制代码
|