📄 main.c
字号:
/********************************
使用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;
/*延时程序*/
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--);
}
/*中断向量及服务程序定义*/
#pragma vector=0x00
__interrupt void EXT0()
{
start_flag=1;
if((UTEST_IN==1)&&(VTEST_IN==0)&&(WTEST_IN==0)) /*判断转子电角度*/
{
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; /*清除中断标志位*/
__no_operation();
}
/*启动系统时初始化过程*/
void system_init()
{
CLKCON = 0x7F; /*主系统时钟选择non-divided*/
OSCCON = 0x7f;
WDTCON = 0xAA; /*关闭看门狗*/
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霍尔信号输入(P1.0~P1.2为输入功能)*/
JF_CON_0;
P2CONH = 0xAA;
P2CONL = 0x08;
P3INT = 0x02; /*下降沿触发中断*/
P3CONH = 0xA9; /*(HL_INT信号)允许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();
}
/*无刷直流三相电动机启动*/
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)
{
/*芯片启动初始化过程*/
system_init();
start_up();
/*主循环开始*/
while(1)
{
delaynop();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -