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

📄 ft.c.bak

📁 电机测速程序,用nec芯片,5mhz晶振,调试通过
💻 BAK
字号:
/*
	测速程序 5.0MHz;
	MCU:78F9189(789166)
	2006.02.14
*/
#define MAINRAM 1
#include "ram.c"

/*---------------------------*/
void int_wti();     /* 0.5ms */
void int_tm81();    /* remo */
void int_tm82();    /* 1ms timer */
void int_tm90();    /* fan ctrl */

void int_p0();      /* speed feedback */
void int_p1();      /* zero */
void int_p2();      /* remo int */

void hdwinit();
void userinit();
void delay30ms();
void checkpair();
void doevents();

extern void LEDscan();
extern void showsub();
extern void emergsub();
extern void keyread();
extern void div32_16(),div16_8();



/*----------------------------------------------*/
/*         Main Program From Here               */
/*----------------------------------------------*/

void main()
{
    hdwinit();
    userinit();

    TCE80 = 1;
    TCE82 = 1;
	
    WDTM = 0b10011000;     /* WATCH DOG RUN */
    EI();
	
	/*
	1 pulse per circle
	Tcont = 0.512
	转速
			60*10000             1171875      0x11e1e3
	n = -------------------  = ------------ = -------- 
	      Tcont*spd_result	     spd_result   spd_result
	调完除法后:结果:Di16bit
			   余数:Gao16bit

	Gao16bit.word = 0x0011;
	Di16bit.word = 0xe1a3;


	*/
	/*====================================*/
	/*
	3 pulse per circle
	Tcont = 0.4096
	转速
			60*10000             488281       0x77359
	n = -------------------  = ----------- = ---------- 
	      3*Tcont*spd_result	spd_result	  spd_result
	调完除法后:结果:Di16bit
			   余数:Gao16bit
	Gao16bit.word = 0x0007;
	Di16bit.word = 0x7359;
	*/
        
    do
    {
        NOP();
        NOP();
        EI();
        WDTM = 0b10011000;     /* WATCH DOG RUN */
        NOP();
        NOP();

	    /* to do add sub here */
	    if (FLG5ms)
	    {
	        FLG5ms = 0;
	        	        
	        NOP();
            doevents();
	
	        NOP();
			
            if (fan_spdVAL_ok)
            {
                if (spd_result == 0xffff)
                {
					show_buff[0] = 0;
					show_buff[1] = 0;
					show_buff[2] = 0;
					show_buff[3] = 0;                	
                }
                else
                {
	                fan_spdVAL_ok = 0;
					Gao16bit.word = 0x0007;
					Di16bit.word = 0x7359;
					ChuShu16bit.word = spd_result;
					
					div32_16();/*商=Di16bit,余数=Gao16bit*/
					if (Gao16bit.word >= 0x8000)
					{
						Di16bit.word = Di16bit.word + 1;
					}					
					
					Gao8bit = Di16bit.byte.H;
					Di8bit = Di16bit.byte.L;
					ChuShu8bit = 100;
					div16_8();/*商=Di8bit,余数=Gao8bit*/
					
					shan = Di8bit;
					yushu = Gao8bit;
	
					Gao8bit = 0x00;
					Di8bit = yushu;
					ChuShu8bit = 10;
					div16_8();/*商=Di8bit,余数=Gao8bit*/				
					show_buff[0] = Gao8bit;
					show_buff[1] = Di8bit;
	
					Gao8bit = 0x00;
					Di8bit = shan;
					ChuShu8bit = 10;
					div16_8();/*商=Di8bit,余数=Gao8bit*/				
					
					show_buff[2] = Gao8bit;
					show_buff[3] = Di8bit;
				}				
            }

	        NOP();
	        emergsub();
	    }
    } while(1);
}

/*************************************************************/
/*---------------*/
void userinit()
{
    PluseOneCyc = 10;
    k_ID = 0x00;
    
    short_EN = 1; /* test and bug */
	/*-------------------------*/
	show_buff[0] = 0;/*关显示*/
	show_buff[1] = 0;	
	show_buff[2] = 0;/*关显示*/
	show_buff[3] = 0;	
	led_show = 0xff;
	temptime = roomtime; 
	delay_30s_flg = 0;
	
    /*
    settemp = 31;
    fan_off = ON;
    defrostTime = 300; 
    incoiltemp = 20;
	*/
    
    /*------PID value initiate---*/
    this_CR00_v = CR00_default;
    set_v = spd_1000;
    spd_result = 0xffff;
		
    EI();
    TCE82 = 1;
    	
    WDTM = 0b10011000;     /* WATCH DOG RUN */
    show_type = 0;
    
    EI();
}
/*---------------------------*/

void hdwinit()
{
    DI();    

    /* Clock f = 4.00MHz */
    /* book : User's Manual of uPD789167 */
    DI();
    PCC = 0b00000000; /* Page85 */
	/*      ||||||||_____>0
            |||||||______>PCC1
            ||||||_______>0
            |||||________>0
            ||||_________>0
            |||__________>0
            ||___________>0
            |____________>MCC  main system clock 0:enable,1:disable */
    SCKM = 0b00000001; /* P86 */
	 /*      ||||||||_____>SCC subsystem clock 0:enable,1:disable
             |||||||______>FRC feedbakc resistor 0:use,1:on use
             ||||||_______>0
             |||||________>0
             ||||_________>0
             |||__________>0
             ||___________>0
             |____________>0 */
    CSS = 0b00000000;
    /*	CSS0 PCC1
    	0		0 ------>fx
    	0		1 ------>4fx
    	1		0 ------>fxT/2
    	1		1 ------>fxT/2
    */
    CR90 = CR00_default; /*********/
    TMC90 = 0b00000000; /* 4.00MHz/4 : 1.0us : fan */
    BZC90 = 0b00000000;
    CR90 = CR00_default; /*********/
    
    /* TO80 输出用作蜂鸣器驱动 */
    CR80 = 62;
    TMC80 = 0b00000010;  /* fx/8=500k=2us,*62=0.124ms-->4K : buzzer */
	
    TMC81 = 0b00000010;  /* fx/256=15.625k=64us : remote */
    CR81 = 40;           /* 2.56ms : 6T */

    TMC82 = 0b00000000;  /* fx/32=125k=8us */
    CR82 = 125;          /* 1ms */

    WTM = 0b00000011; /* Page133/0.512ms */

    TCL2 = 0b00000110; /* watch dog time : 26.2ms */
    WDTM = 0b00011000;

    ADM0 = 0b00000000;
    ADS0 = 0b00000000;

    /* port ini */
    P0 = 0b00000000;
    P1 = 0b00000000;
    P2 = 0b00000110;/*PP20->clean,21->powerled*/
    P3 = 0b00000000;
    P5 = 0b00001111;/*led*/
    
    /* 0__output  1__input */
    PM0 = 0b11100000;
    PM1 = 0b11111100;
    PM2 = 0b10000001; /*P2.0 = key in  */
    PM3 = 0b11110111; /* P3.3:output,P3.0->speed back,P3.1->zero,P3.2->remo */
    PM5 = 0b11110000;
    
    /*-- 0__unused pull_up resistor  1__used*/
    /*
    PU0 = 0b00000011;
    PUB2 = 0b01100111;
    PUB3 = 0b00001111;
    */

    IF0 = 0b00000000;   /* P215 */
/*          ||||||||_____>INTWDT
            |||||||______>INTP0
            ||||||_______>INTP1
            |||||________>INTP2
            ||||_________>INTP3
            |||__________>INTSR20
            ||___________>INTST20
            |____________>INTWT        */

    IF1 = 0b00000000;
/*          ||||||||_____>INTWTI
            |||||||______>INTTM80
            ||||||_______>INTTM81
            |||||________>INTTM82
            ||||_________>INTTM90
            |||__________>SMB0   
            ||___________>SMBOV0
            |____________>INTAD0      */

    INTM0 = 0b00000000;
/*            ||||||||_____>0     
              |||||||______>0      
              ||||||_______>INTP00      "INTP01 | INTP00 "== "00" falling
              |||||________>INTP01                           "01" rising 
              ||||_________>INTP10                           "10" prohibited
              |||__________>INTP11                           "11" both   
              ||___________>INTP20
              |____________>INTP21  */

    MK0 = 0b11110001; /* P216 */
/*          ||||||||_____>INTWDT
            |||||||______>INTP0
            ||||||_______>INTP1
            |||||________>INTP2
            ||||_________>INTP3
            |||__________>INTSR20
            ||___________>INTST20
            |____________>INTWT    */

    MK1 = 0b11100010;
/*          ||||||||_____>INTWTI         "0"__ enable interrupt
            |||||||______>INTTM80        "1"__ disable int
            ||||||_______>INTTM81
            |||||________>INTTM82
            ||||_________>INTTM90
            |||__________>SMB0   
            ||___________>SMBOV0
            |____________>INTAD0     */
}

/*----------------------------*/
/*----------------------------*/
/*---------------*/
/*remo input*/
void int_p2()
{
}
/*----------------------*/
/* fan feedback */
void int_p0()
{
   fan_run_detect = 0x00;
   
   if ((++fan_p_cnt) >= PluseOneCyc)
   {
        fan_p_cnt = 0x00;
        spd_result = pulse_width_cnt;
        pulse_width_cnt = 0x0000;

        fan_spdVAL_ok = 1;
   }

   fanspd_cnt++;
   fan_is_ok = 1;
}

/*----------------------*/
/* power zero check : falling */
void int_p1()
{
  	CR90 = TM90 + this_CR00_v;
    triger_flg = 0;
    triger_lock = 0;
}
/*------------------------*/
void int_tm90()
{
    if (triger_lock == 0)
    {
        if (triger_flg == 0)
        {
            if (!fan_off) { /*infan_p = 1;*/ }
            CR90 = TM90 + CR00_intval; /* 1.6ms */
            triger_flg = 1;
        }
        else
        {
            infan_p = 0;
            triger_flg = 0;
            triger_lock = 1;
        }
    }
}

/*------------------------*/
void int_tm81()
{
}
/*------------------------*/
void int_tm82() /* 1ms */
{    
    if (++ tm82_5ms_cnt >= 5)
    {
    	tm82_5ms_cnt = 0x00;

        FLG5ms = 1;
    }
	
	if (++ tm82_20ms_cnt >= 20)
	{
		tm82_20ms_cnt = 0x00;
		tm82_20ms = 1;
	}
	

   	LEDscan();/*数码管扫描*/
}
/*------------------------*/
/*由WTM控制 Tval = 0.512ms */
void int_wti()
{		
    pulse_width_cnt++;
}
/*------------------------*/
void delay30ms()
{
    Old_CR90_5ms = TM90;
    while(TM90 - Old_CR90_5ms < 30000)
    {
        NOP();
    }
}
/*------------------------*/
/*和校验*/
void checkpair()
{
}
/*------------------------*/
void doevents()
{    
    /*计时*/    
    if (To100msFLG == 1)
    {
		if (++K_short_cnt >= 20)
        {
            K_short_cnt = 0x00;
            Flag1sRam1 = 0b11111111;
            Flag1sRam2 = 0b11111111;
            Flag1sRam3 = 0b11111111;
            if (++ fan_1min_cnt >= 60)
            {
             	fan_1min_cnt = 0x00;
               	fan_1min = 1;
            }
            if (temptime < roomtime)
            {                	
                temptime = temptime + 1;
            }                
        }
    }

	if (++time_300ms_cnt >=60)/*300ms*/
	{
		time_300ms_cnt = 0x00;
		flash_ms = 1;	
	}

    if (++Ram5mscnt >= 100) /* 0.5s reach */
    {
        Ram5mscnt = 0x00;
        if (k_ck_T < 10)
        {
            k_ck_T++;
        }
            
        flash05sflg = 1;
        if (FLG500ms == 1)
        {
            FLG500ms = 0;

            /********* fan control sub *****************/

            fan_1s_pls = fanspd_cnt; /* 1s get in once */
            fanspd_cnt = 0x00;

            /********* fan control sub end *************/

            Group1sRam = 0xff;

            if (To100msFLG == 0)
            {
                Flag1sRam1 = 0b11111111;
                Flag1sRam2 = 0b11111111;
                Flag1sRam3 = 0b11111111;
                if (++ fan_1min_cnt >= 60)
                {
                	fan_1min_cnt = 0x00;
                	fan_1min = 1;
                }

                if (temptime < roomtime)
                {                	
                    temptime = temptime + 1;
                }
                
                if (++fan_run_detect >= 5)/*没信号*/
                {
                	fan_run_detect = 0x00;
                	spd_result = 0xffff;
                	
                }
                                                               
            }
        }
        else
        {
            FLG500ms = 1;
        }
    }
}
/*--------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -