?? main.c
字號:
///////////////////////////////////////////////////////////////////////////////
//文件描述 main.c
//描述: 7 blockers control system of test
///////////////////////////////////////////////////////////////////////////////
#include "SPCE061V004.h"
unsigned int switch1;
main()
{
//unsigned int KeyCode,KeyNumber,codesign; //獲得鍵值,鍵值序號
unsigned int handswitch;
unsigned int doorswitch;
unsigned int j,k,l;
unsigned long int i;
unsigned int dirction;
unsigned int speed;
unsigned int step;
unsigned int failure;
unsigned int solveflow;
unsigned int result;
i=0;
do
{
handswitch=0;
doorswitch=0;
failure=1;
//========================================================================================
//凌陽I/O口的初始化------(((***IOA0--3可能要預留給步進電機 4-5給電動推桿;6,7給內外擺電機 8,9為輸入口; 10為高電平輸出***)))
//(((***IOB2為中斷(常高電平) IOA8-14控制數碼管.IOB8-15為控制數碼管的顯示。使用動態顯示)))
//IOA0--3-->高電平輸出-->控制把手步進電機,IOA4,5-->高電平輸出-->控制電動推桿正反轉,IOA6內擺電機,IOA7外擺電機
//IOA15-->高電平輸出-->LED燈和solenoid電磁鐵(0x8000)
//IOB0-->輸入口-->把手電機的接近開關,IOB1-->輸入口-->柜門的接近開關
//IOB2為特殊功能-->設為輸入口
//========================================================================================
*P_SystemClock = 0x0080;//系統頻率設置為49.152MHz,強振模式
*P_IOA_Dir=0xffff;//全是高電平輸出
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0xffff;
__asm("INT OFF"); //保護中斷不受外部干擾
*P_IOB_Dir=0xfff0; //IOB2~3是輸入口,帶下拉電阻的輸入腳,為引腳第二功能
*P_IOB_Attrib=0xfff0; //其余IOB腳為高電平輸出引腳
*P_IOB_Data=0xfff0; //開外中斷1,2
*P_INT_Ctrl=C_IRQ3_EXT1;
*P_INT_Ctrl=C_IRQ3_EXT2;
//========================================================================================
//判斷外擺臂是否關閉柜門
//========================================================================================
__asm("INT IRQ"); //允許IRQ中斷,關閉FIQ中斷
*P_IOA_Data=0x0080; //啟動外門擺臂電機
switch1=1;
//for(;switch1==1;)
// {
// while(switch1==0) //當柜門的微動開關被觸動后,觸發單片機的外部中斷
// {
// *P_IOA_Data=0x0000; //關閉外門擺臂電機
// switch1=2;//jump out of the circle
// }
// *P_Watchdog_Clear=C_WDTCLR;//clear watchdog清狗
// }
//========================================================================================
//氣動電機正轉前進
//========================================================================================
__asm("INT OFF"); //保護中斷不受外部干擾
*P_IOA_Data=0x0010;//氣動電機正轉前進
DELAY(10);
// do
// {
// handswitch=*P_IOB_Data;
// handswitch&=0x0001;//判斷接近開關是否為高電平,即接通。
// *P_Watchdog_Clear=C_WDTCLR;
// }while(!handswitch);//當handswitch是0時,接近開關斷開,while即為真,則循環執行
//========================================================================================
//把手電機接近開關亮之后,停止氣動電機,啟動把手電機鎖門(步進)
//========================================================================================
*P_IOB_Data=0x0000;
Delayus(10);
DriveMoto(1,2,6);//步進電機鎖門程序
//========================================================================================
//啟動把手電機(步進),門鎖上后,柜門接近開關應該接通,如不接通,則測試結束
//========================================================================================
DELAY(1);//這里可能在后來需要調整,因為延時是要保證A口數據讀入的正確,在穩定的前提下可以適當的減少
doorswitch=*P_IOB_Data;
doorswitch&=0x0002;//判斷柜門接近開關是否為高電平,即接通
if(doorswitch==0x0002)
{
for(k=0;(doorswitch==0x0002)&(k<1);k++)
{
Delayus(10);
DriveMoto(0,2,6);//步進電機鎖門程序//反轉步進電機,開門
doorswitch=*P_IOB_Data;
doorswitch&=0x0002;//判斷接近開關有無故障產生
}
if(doorswitch==0x0002)
{
failure=0;
}
}
//========================================================================================
//失敗后的操作
//========================================================================================
if(failure)
{
//i=64432;
//for(;i>=50000;)
//{
// solveflow++;
// i=i-50000;//soveflow為偶數時和奇數時不同
// }
//Apart(i,solveflow);//接近開關沒有反應則測試結束
// *P_IOA_Data=0x0000;
goto end;
}
else
{
*P_IOA_Data=0x0000;//所有電機停機,//IOA15-->高電平輸出-->LED燈和solenoid電磁鐵,IOA6內擺電機,IOA7外擺電機
Delayus(10);//us級延時,寫間隙,清零IOA數據寄存器,保證新數據寫入的正確
*P_IOA_Data=0x8000;//置位IOA15,IOA15輸出高電平,啟動電磁鐵和LED燈
DELAY(1);//
DriveMoto(0,2,6);//步進電機鎖門程序//反轉步進電機,開門
//========================================================================================
//IOA4,5-->高電平輸出-->控制電動推桿正反轉,IOA0-3-->高電平輸出-->控制把手電機正反轉
//========================================================================================
*P_IOA_Data=0x0000;//所有電機停機 IOA6內擺電機,IOA7外擺電機
Delayus(10);//us級延時,寫間隙,清零IOA數據寄存器,保證新數據寫入的正確
*P_IOA_Data=0x0020;//控制電動推桿反轉退回
DELAY(10);
*P_IOA_Data=0x0000;//電機停機
Delayus(10);//us級延時,寫間隙,清零IOA數據寄存器,保證新數據寫入的正確
*P_IOA_Data=0x0040;//啟動內門擺臂電機
DELAY(5);
*P_IOA_Data=0x0000;//電機停機
i++;
// for(;i>=50000;)
// {
// solveflow++;
// i=i-50000;//soveflow為偶數時和奇數時不同
// }
}
Apart(i,solveflow);
}while(!failure);//判斷錯誤標志位;
end: while(1)
{
Apart(i,solveflow);
*P_Watchdog_Clear=C_WDTCLR;//clear watchdog清狗
}
//可以設置按鍵,在此等待按鍵,復位重新測試。
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -