/*
==============================================================================
AC 50Hz,2KW heater lcd hot gun
date: 2009/07/26
版本号: V25
==============================================================================
*/
#include ".\head\INTRINS.H"
#include ".\head\DEFINE.H"
#include ".\head\GLOBAL.H"
#include <SH79F1612A.H>
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize user ram
void init_UserRam(void)
{
adc_Current0 = 0;
adc_Current1 = 0;
adc_Current2 = 0;
adc_Current3 = 0;
Current0 = 0;
Current1 = 0;
Current2 = 0;
Current3 = 0;
Current4 = 0;
Current5 = 0;
Current6 = 0;
Current7 = 0;
Currentg = 0;
Currenth = 0;
Current = 0;
AdSampleFreqCount = 0;
TempeAD = 0;
TestTempe_Hex_show = 0;
TestTempe_Hex = 0;
Com_mag = 0;
PID_AdjMaxLimit = 0;
Com0Buff = 0;
Com1Buff = 0;
ComCount = 0;
lcddriverfreq_ms = 0;
LcdShowMode = 0;
KeyBuff = 0;
KeyNew = 0;
KeyOld = 0;
KeyValue = 0;
KeyPress_Flag = 0;
FastKeyCount_ms = 0;
BCD1000 = 0;
BCD100 = 0;
BCD10 = 0;
BCD1 = 0;
count_ms = 0;
count_10ms = 0;
count_500ms = 0;
curek0 = 0;
curek1 = 0;
curek2 = 0;
curuk = 0;
DError = 0;
LastError = 0;
SumError = 0;
ScanKey_Flag = 0;
FastKeyFlag = 0;
LcdDriverRefurbish_Flag = 0;
ADConvertend_Flag = 0;
ADReserchList_Flag = 0;
ADReserchList_LcdShowFlag = 0;
ScanTestOption_Flag = 0;
TempeKeep_Flag = 0;
SetTempe_Hex = 50; //initial temperature is 50'c
LcdShowMode = SetMode;
count_3s = 0;
countFlash_500ms = 0; //在工作模式清设置模式500毫秒闪的计数器
count_500ms_Flag = 0;
TempeTheFirst_Flag = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize I/O Port
void init_Port(void)
{
P1M0 = Bin(11110000);//Bin(00000000);
P1M1 = Bin(00000000);//Bin(11110000);
P1 = Bin(11110000); //Bin(00000000);
P3M0 = Bin(00000000);
P3M1 = Bin(11111111);
P3 = Bin(00100000);
P4M0 = Bin(00000000);
P4M1 = Bin(11111111);
P4 = Bin(00000000);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize I/O Port
void ACinit_Port(void)
{
P1M0 = Bin(00000000);//Bin(00000000);
P1M1 = Bin(00001111);//Bin(11110000);
P1 &= Bin(11001111); //Bin(00000000);
P3M0 = Bin(00000000);
P3M1 = Bin(10111011);
// P3 = Bin(00100000);
// P3 &= Bin(00100000);
P4M0 = Bin(00000000);
P4M1 = Bin(00000001);
// P4 = Bin(00000000);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize ADC
void init_ADC(void)
{
ADCON = 0x00;
ADCH = 0x01; //enable ADC CH0 channal
ADT = 0x43; //ADC clock =12 tsys, sample time = 2 Tad = 12*2*(1/16.6)us = 1.45us
ADDH = 0x00;
ADDL = 0x00;
EADC = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize PWM
void init_PWM(void) //4M
{
PWMCON = Bin(11010001); //4M/4,pwm clock is 1M
PWMP = Bin(11111010); //PWM period
PWMD = Bin(01111101); //PWM duty
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize PWM
void ACinit_PWM(void) //4M
{
unsigned char temp = 0;
// temp = PWMCON;
// temp &= Bin(11010000);
// if(temp != Bin(11010000))
// {
// PWMCON &= Bin(00001111); //4M/4,pwm clock is 1M
// PWMCON != Bin(11010000); //4M/4,pwm clock is 1M
// }
// PWMCON != Bin(11010000); //4M/4,pwm clock is 1M
temp = PWMP;
temp &= Bin(11111010);
if(temp != Bin(11111010))
{
PWMP = Bin(11111010); //PWM period
}
temp = PWMD;
temp &= Bin(01111101);
if(temp != Bin(01111101))
{
PWMD = Bin(01111101); //PWM duty
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize Timer
void init_Timer(void)
{
TCON = Bin(00000000);
TMOD = Bin(00000010); //5,4;1,2 = 01 : 方式1,16位向上计数计数器
TCON1 = Bin(00000000); // timer0 clock=fsys/12
TL0 = 0xDD; //timer0 8bit reload
TH0 = 0xDD; //itmer0=fsys*12*35=101us
TL1 = 0x75;
TH1 = 0x75; //装初值,计数139,即每次计时139*0.72=100us
TR0 = 1; //turn on timer0
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize 外部中断INT
void init_INT(void)
{
EXF0 = 0x00; //11: 双沿触发
TCON1 = 0x00;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize EUART
void init_EUART(void)
{
SCON = 0x00;
SBUF = 0x00;
SADDR = 0x00;
SADEN = 0x00;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//Initialize MCU
void init_MCU(void)
{
EA = 0; // DISABLE ALL INTERRUPTS
PSW = 0;
CLKCON &= Bin(10011111);
CLKCON |= Bin(01000000); //fSYS = fOSC / 4,系统时钟为振荡器时钟 4.15Mhz
// INSCON = 0;
// SP = 0x00;
IPL0 = Bin(00000000);
IPH0 = Bin(00000000); //T1中断优先级为3;T0中断优先级为2;TX4中断优先级为1;ADC中断优先级为0;pwm中断优先级为0;其他中断优先级为0
IPL1 = Bin(00000000);
IPH1 = Bin(00000000);
IEN0 = Bin(00000010); //ADC,Time1,Tim0 ;enable timer0 interrupt
IEN1 = Bin(00100000); //enable PWM&EXT4 interrupt
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void Delay(unsigned int Counter) //1/4.15mhz=0.24096us
{
unsigned char k = 0; //20*0.24096=4.8192us
for (k = 0;k >= (Counter/2);k++)
RSTSTAT &= 0x3F;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//turn byte data to BCD data
unsigned char Byte_BCD(unsigned char Data)
{
if( Data > 99 ) return 0x00;
return( Data/10*0x10 + Data%10 );
}
/****************************************************************************
****************************************************************************/
void Change32KTo16M(void)
{
unsigned char i,temp;
temp = CLKCON;
temp &= Bin(00001100);
if(0x0C != temp)
{
CLKCON |= Bin(00001000); //打开OSCXCLK
for(i=0;i<166;i++)
{
_nop_(); //30。5US,DELAY 5MS
}
CLKCON |= Bin(00000100); //OSCXCLK作为OSCSCLK
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
INT0_int() interrupt 0
{
IE0 = 0; //clear INT0 interrupt request flag
}
/////////////////////////////////////////////////////////////////////////////////////////////////
Time0_int() interrupt 1 //101us
{
TF0 = 0; //clear Time0 interrupt request flag 101us
//======================================================================
zero_counter++;
if (zero_input==0) flag_zero_old=0;
else if (flag_zero_old==0)
{
zero_half_period=zero_counter/2;
zero_counter=0;
flag_zero_old=1;
// flag_int_zero_20ms=1;
}
if (zero_counter==0) Motor_OUT=0; //????????
else if (zero_counter==scr_output_timer) Motor_OUT=1; //??scr_output_timer?????
else if (zero_counter==zero_half_period) Motor_OUT=0; //????????
else if (zero_counter==((zero_half_period+scr_output_timer)&0x00FF)) Motor_OUT=1; //??scr_output_timer?????
//=========================================================================
timer0_counter1++;
if (timer0_counter1 >=50)
{
timer0_counter1=0;
flag_int_5ms=1;
}
//==========================================================================
EA = 1 ;
}
///////////////////////////////////////////////////////////////////////////////////////////////
qq_38880837
- 粉丝: 1
- 资源: 2
会员权益专享
最新资源
- ESP32连接巴法云上传温湿度,手机APP控制开关灯
- 基于微分方程的求解、稀疏线性方程组的求解、多机系统分析Python仿真(完整源码+说明文档+数据).rar
- 基于插值、拟合、数值积分、线性方程组迭代求解、非线性方程求根、常微分方程数值解的matlab仿真(源码+文档+数据).rar
- MATLAB实现求解9x9数独(完整源码+说明文档).rar
- 项目失败常见的五个原因和解决方法.pdf
- 使用软件测试工具UFT来进行脚本录制与回放
- 软件设计模式文档资源详细描述
- 基于机械臂控制的matlab仿真(完整源码).rar
- 基于二维矩阵寻找波峰绘制三维图像的matlab仿真(完整源码+数据).rar
- 基于图像处理的Matlab仿真(完整源码+说明文档+数据).rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


