⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于三星8位单片机的实验程序
💻 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 + -