?? main.c
字號:
/****************************************Copyright (c)**************************************************
** 廣州周立功單片機發展有限公司
** 研 究 所
** 產品一部
**
** http://www.zlgmcu.com
**
** 文 件 名: main.c
** 最后修改日期: 2004年11月15日
** 描 述: 用戶應用程序
** 版 本: V5.0
**********************************************************************************************************/
#include <reg52.h>
#include "D12Config.h"
#include "Descriptor.h"
#include "Chap_9.h"
#include "D12Driver.h"
sbit MCU_LED0 = P1^2; //LED
sbit MCU_LED1 = P1^3;
sbit P1_4=P1^4; //P1.4輸出方向電平信號
sbit P1_5=P1^5; //P1.5輸出步進脈沖信號
sbit P2_0=P2^0; //P3.4輸出脫機信號
unsigned int flag,th0,tl0,step,step1,step2,j,k,TIMER,count=0,EvTimer=0;
void main()
{ INT32U cnt,i;
EpBuf[0]=0;
for(cnt = 0; cnt <= 0xffff; cnt++) //延時
{
MCU_LED0 = 0; //D2和D3點亮
MCU_LED1 = 0;
}
MCU_LED0 = 1; //D2和D3滅
MCU_LED1 = 1;
P0 = 0xFF; //初始化I/O口
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
if (Init_D12()!=0) //初始化D12
return; //如果初始化不成功,返回
EX0 = 1; //開外部中斷0
PX0 = 0; //設置外部中斷0中斷優先級
EA = 1; //開總中斷
TMOD=0x01; //T0采用方式1進行定時
ET0=1; //開定時器中斷
TR0=0; //關定時器
while(1)
{
usbserve(); //處理USB事件
if(bEPPflags.bits.configuration)
{ if(bEPPflags.bits.ep2_rxdone==1) //端點2收到數據
{ DISABLE();
bEPPflags.bits.ep2_rxdone=0; //清除端點2收到數據標志
ENABLE();
flag=EpBuf[0]; //轉動方向
th0=EpBuf[1]; //定時器T0高字節
tl0=EpBuf[2]; //定時器T0低字節
TIMER=EpBuf[3]; //定時次數
step1=EpBuf[4]; //步距數高字節
step2=EpBuf[5]; //步距數低字節
step=(step1<<8)+step2; //步距數
switch(flag)
{case 0: {P2_0=0;EpBuf[4]=0;EpBuf[5]=0;}break; //停止
case 1: {P2_0=1; //使能
P1_4=0; //正轉
for(cnt = 0; cnt <= 0xff; cnt++); //延時
j=0; //判別已轉步數
for(i=0;i<2*step;i++)
{TH0=th0;TL0=tl0;TR0=1; //啟動定時器
while(!EvTimer); //等待定時器中斷,直到EvTimer=1
EvTimer=0; //清除中斷標志
P1_5=!P1_5; //輸出信號跳變
if(P1_5)j++; //轉動步數增加
TR0=0; //禁止定時器
}
P2_0=0; //停止轉動后禁止使能
k=j>>8; //高字節
EpBuf[4]=k;
EpBuf[5]=j-256*k;}break;//低字節
case 2:{P2_0=1; //使能
P1_4=1; //反轉
for(cnt = 0; cnt <= 0xff; cnt++); //延時
j=0; //判別已轉步數
for(i=0;i<2*step;i++)
{TH0=th0;TL0=tl0;TR0=1; //啟動定時器
while(!EvTimer); //等待定時器中斷,直到EvTimer=1
EvTimer=0; //清除中斷標志
P1_5=!P1_5; //輸出信號跳變
if(P1_5)j++; //轉動步數增加
TR0=0; //禁止定時器
}
P2_0=0; //停止轉動后禁止使能
k=j>>8; //高字節
EpBuf[4]=k;
EpBuf[5]=j-256*k;}break;//低字節
}
D12_WriteEndpoint(5,6,EpBuf); //通過端點2發送5個字節給主機
}
}
}
}
void TIMER0(void) interrupt 1 //定時中斷處理程序
{TH0=th0;
TL0=tl0;
count++;
if(count>=TIMER)
{count=0;
EvTimer=1;}//設置定時器中斷
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -