📄 ft.c.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 + -