//==============================================================================
// project : Demo Program
// Device : MC97F1204 (20SOP)
// file name : Main.c
// author : TOM chan
// date : 2013.12.10
// tool : uVision C51 Compiler ( Version 4.0 )
// MDS : OCD 2
//
// frequency : internal 8MHz oscillator
// reset : built-in 4V
/
/==============================================================================
//------------------------------------------------------------------------------
// Include file and variable
//------------------------------------------------------------------------------
#include <MC97F1204S.h>
#include <intrins.h>
#define schar signed char
#define uchar unsigned char
#define Byte unsigned char
#define sint signed int
#define uint unsigned int
面波仪#define Word unsigned int
#define slong signed long
#define ulong unsigned long
#define nop _nop_()
//------------------------------------------------------------------------------
// Buzzer sound control
//------------------------------------------------------------------------------
bit buzon;
uchar Tick10ms;
uchar m_State;
uchar m_OnTime;
uchar m_OffTime;
uchar m_Repeat;
uchar m_Tmr;
bit DelayBUZ;
uchar pcitime;
typedef struct{
uchar T0_2ms;
uchar T0_5ms;
uchar T0_10ms;
}EnMode;
uint rADC[2];
uint AD13;
uint AD14;
bit adexit;
uchar AdAn13;
uchar AdAn14;
uchar adpcs;
static EnMode data EM;
#define BZSTATE_SOUND (0x80)
#define TICK10MS_BEEP (0x02)
#define BUZ P02
#define AN13 0x0d
#define AN14 0x0e
#define ADST 0x40
void Wait_uSec(uint DELAY)
{
uint jj; //
jj= (DELAY/18)*7; //
while(jj) jj--; //
}
void Port_Initial(void)
{
//SCCR = 0x00; // WDTRC Disable
/
/BODR = 0x0e; // LVR ON , BOD enable , 4V Reset
// b7 b6 b5 b4 b3 b2 b1 b0
// S1k P5 PWM RT2 RT1 BUZ FLZ FAN OCD and key scan strobe
P0IO = 0xff; // 输出
P0 = 0x00; // 低电平
P0OD = 0x00; // 推换输出
P0PU = 0x00; // 上拉无效
P0DB = 0x00; // 禁止防反跳
// b7 b6 b5 b4 b3 b2 b1 b0
//WA-R S8 S7 S6K S5K S4K S3K S2K
P1IO = 0x00
;
// 输入
P1 = 0x00; // 低电平
P1OD = 0x00; // 推换输出
P1PU = 0xff; // 上拉有效
P1DB = 0x00; // 禁止防反跳
PCI = 0xff; // 开启 pci p10-p17
EIBOTH = 0x00;
EIENAB = 0x00; //******INT0,INT1使用时要使能该两位**** EIPOLA = 0x00;
EIEDGE = 0x00;
EIFLAG = 0x00;
/
/ b7 b6 b5 b4 b3 b2 b1 b0
// - - - - - - AD AD
P2IO = 0x00; // - - - - - - in in
P2 = 0x00; // - - - - - - 0 0
P2OD = 0x00; // - - - - - - PP PP
P2PU = 0x00; // - - - - - - off off
P2DB = 0x00; // - - - - - - 0 0
// b7 b6 b5 b4 b3 b2 b1 b0
PSR3 = 0x60; // AN13, 14 Enable
ADCM1 = 0x05; // H 用低 4 bit ,L 用 8 bit, fx/4=8/4=2MHz
ADCM = 0x10; // AD 使能,内部VDD参考电压
}
uint ADdata(uchar An)
{
uint TempData = 0;
uint TempData1 = 0;
ADCM &= 0xf0; //清通道选择位
胶圈电熔双密封聚乙烯复合管nop;
nop;
nop;
nop;
nop;
nop;
ADCM |= An; //选择通道
pe附着力促进剂
nop;
nop;
nop;
nop;
nop;
nop;
ADCM |= ADST; //开启ADC 转换
nop;
nop;
nop;
nop;
nop;
nop;
while(!(ADCM&0x10));
TempData1 = ADCRH;
TempData = TempData1<<8;
TempData |= ADCRL;
ADCM &=~ADST;
//ADCM &=0xbf;
nop;
nop;
nop;
return TempData;
}
void AD_AN14(void)
{
rADC[0]=0;
rADC[0] = ADdata(AN14);
AD14=rADC[0];
rADC[0]=0;
AdAn14 = 0;
if( AD14 <= 2015 ) P11 = 1 ;
else if( AD14 >= 2075 ) P12 = 1 ;
else
{
P12 = 0;
P11 = 0;
}
}
void main(void)
{
//------------------------------------------------------------------------------
/
/ 8MHz IRC System Clock Select & builtin reset level select
//------------------------------------------------------------------------------
SCCR = 0x80; // 使能内部RC独立时钟源64K独立晶振 智能家居系统BODR = 0x01; // LVR[7] oN, BOD 复位功能使能,STOP模式下BOD 禁止, 2.1V复位
Port_Initial(); // Main board port initialize
Wait_uSec(30000); // 30ms wait
Wait_uSec(30000); // 30ms wait
Wait_uSec(30000); // 30ms wait
Wait_uSec(30000); // 30ms wait
T0DR = 249; // 1us x 250 = 250us interval
T0CR = 0x8b;
// pcs = 8MHz/8 = 1us
T0CR1 = 0x00; //
IE = 0x88; // EA - RX SPI PCI Ext2 Ext1 Ext0
IE1 = 0x02; // - - - T3 T2 - T0 -
IE2 = 0x00; // - - - - - BOD BIT WDT 禁止
// b7 b6 b5 b4 b3 b2 b1 b0
EA = 1; // Global Interrupt Enable
nop;
nop;
nop;
/
/PCON = 0x03;
nop;
nop;
nop;
//看门狗独立时钟配置需以下三寄存器:SCCR,BCCR,WDTMR
SCCR = 0x80; // 使能内部RC独立时钟源64K独立晶振
BCCR = 0x30; // 配置fWDTRC看门狗时钟, 64000/256=250Hz 1/250Hz=0.004S BIT Clock*2 =0.004s*2=0.008S
WDTR = 0x3E; // 0.008*62=496ms看门狗溢出时间
向心关节轴承散件加工
水上步行器WDTMR = 0xe0; // 开启看门狗,清除看门狗计数器 nop;
nop;
nop;
while(1)
{
WDTMR = 0xe0; //清看门狗计算器
if(EM.T0_5ms>=20) // 5ms
{
EM.T0_5ms=0;
EM.T0_10ms++;
EM.T0_2ms++;
if(EM.T0_10ms>=20) // 100ms
{
EM.T0_10ms = 0;
AD_AN14();
}
if( EM.T0_2ms>=200) // 0.5s
{
EM.T0_2ms=0;
P0=~P0;
//T0CR &= 0xfc; // 暂停T0计数器,T0 STOP,需把这两项STOP后,才能清零T0计数器
nop;
nop;
nop;
/
/T0CR |= 0x01; // T0 清零后开始运行,清零T0计数器数值
nop;
nop;
nop;
//T0CR |= 0x02; // T0计数器继续运行,要开启T0计数据运行,否则T0计数器无法再计数
nop;
nop;
nop;
}
}
}
}
//==============================================================================
// Timer0 Interrupt Handler by 4ms interval
// Frequency : internal 8 MHz RC oscillator
// internal RC OSC 8MHz 250us ; external OSC 8MHz 250us
//==============================================================================
void T0_Int_Handler(void) interrupt 7 using 1
{
EM.T0_5ms++;
//P02 = ~P02;
}
void PCI_INT(void) interrupt 3 // PCI中断执行
{
pcitime++;
EIFLAG = 0x00;
}