?? main.c
字號(hào):
/********************************
使用MCU: S3F9488
FOSC = 4MHZ
********************************/
#include "ioS3C9488.h"
#include "intrinsics.h"
#define uchar unsigned char
#define uint unsigned int
#define TMPWM_OUT_1 P0|=0x80
#define TMPWM_OUT_0 P0&=~0x80
#define PW_CON_1 P4|=0x04
#define PW_CON_0 P4&=~0x04
#define JZ_CON_1 P1|=0x10
#define JZ_CON_0 P1&=~0x10
#define JF_CON_1 P2|=0x02
#define JF_CON_0 P2&=~0x02
#define UTEST_IN (P1&0x01)
#define VTEST_IN (P1&0x02)
#define WTEST_IN (P1&0x04)
#define CU_OUT_1 P1|=0x40
#define CU_OUT_0 P1&=~0x40
#define CV_OUT_1 P1|=0x80
#define CV_OUT_0 P1&=~0x80
#define CW_OUT_1 P4|=0x01
#define CW_OUT_0 P4&=~0x01
#define HU_OUT_1 P3|=0x04
#define HU_OUT_0 P3&=~0x04
#define HV_OUT_1 P3|=0x02
#define HV_OUT_0 P3&=~0x02
#define HW_OUT_1 P3|=0x01
#define HW_OUT_0 P3&=~0x01
/*此處定義程序所用到的全局變量*/
uchar start_flag=0;
/*延時(shí)程序*/
void delaynop(void)
{
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
}
void delay(uint n)
{
uint i;
for(i=n;i>0;i--);
}
/*中斷向量及服務(wù)程序定義*/
#pragma vector=0x00
__interrupt void EXT0()
{
start_flag=1;
if((UTEST_IN==1)&&(VTEST_IN==0)&&(WTEST_IN==0)) /*判斷轉(zhuǎn)子電角度*/
{
CU_OUT_1;HU_OUT_1;
CV_OUT_0;HV_OUT_1;
CW_OUT_0;HW_OUT_0;
goto over;
}
if((UTEST_IN==0)&&(VTEST_IN==0)&&(WTEST_IN==4))
{
CU_OUT_0;HU_OUT_1;
CV_OUT_1;HV_OUT_1;
CW_OUT_0;HW_OUT_0;
goto over;
}
if((UTEST_IN==0)&&(VTEST_IN==2)&&(WTEST_IN==0))
{
CU_OUT_0;HU_OUT_0;
CV_OUT_1;HV_OUT_1;
CW_OUT_0;HW_OUT_1;
goto over;
}
if((UTEST_IN==1)&&(VTEST_IN==0)&&(WTEST_IN==0))
{
CU_OUT_0;HU_OUT_0;
CV_OUT_0;HV_OUT_1;
CW_OUT_1;HW_OUT_1;
goto over;
}
if((UTEST_IN==0)&&(VTEST_IN==0)&&(WTEST_IN==4))
{
CU_OUT_0;HU_OUT_1;
CV_OUT_0;HV_OUT_0;
CW_OUT_1;HW_OUT_1;
goto over;
}
if((UTEST_IN==0)&&(VTEST_IN==2)&&(WTEST_IN==0))
{
CU_OUT_1;HU_OUT_1;
CV_OUT_0;HV_OUT_0;
CW_OUT_0;HW_OUT_1;
goto over;
}
over:
P3PND = 0x00; /*清除中斷標(biāo)志位*/
__no_operation();
}
/*啟動(dòng)系統(tǒng)時(shí)初始化過程*/
void system_init()
{
CLKCON = 0x7F; /*主系統(tǒng)時(shí)鐘選擇non-divided*/
OSCCON = 0x7f;
WDTCON = 0xAA; /*關(guān)閉看門狗*/
BTCON = 0x07; /*basetimer*/
WTCON = 0x12; /*Watch Timer:interrupt to 1.0S,disable Watch Timer*/
P0CONH = 0x80; /*TMPWM(P0.7為輸出模塊功能)*/
JZ_CON_0;
P1CONH = 0xAA;
P1CONL = 0x00; /*U_TEST、V_TEST、W_TEST霍爾信號(hào)輸入(P1.0~P1.2為輸入功能)*/
JF_CON_0;
P2CONH = 0xAA;
P2CONL = 0x08;
P3INT = 0x02; /*下降沿觸發(fā)中斷*/
P3CONH = 0xA9; /*(HL_INT信號(hào))允許P3.3端口外部中斷,P3.4~P3.6為輸出功能*/
P3CONL = 0x4A;
PW_CON_0;
P4CONH = 0xAA;
P4CONL = 0xAA; /*P4端口為輸出模式功能*/
P1=0x00;
P2=0x00;
P3=0x00;
P4=0x00;
CU_OUT_0;HU_OUT_1;
CV_OUT_0;HV_OUT_1;
CW_OUT_0;HW_OUT_1;
__enable_interrupt(); /*允許中斷*/
//__disable_interrupt();
}
/*無刷直流三相電動(dòng)機(jī)啟動(dòng)*/
void start_up()
{
TMPWM_OUT_1;
CU_OUT_1;HU_OUT_1;delay(30);
CV_OUT_0;HV_OUT_0;delay(30);
CW_OUT_0;HW_OUT_1;delay(30);
delay(50);
}
/*主程序控制*/
void main(void)
{
/*芯片啟動(dòng)初始化過程*/
system_init();
start_up();
/*主循環(huán)開始*/
while(1)
{
delaynop();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -