- #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;//串口中斷
- }
復制代碼
|