MC97F1204芯片C语言范例程序

//==============================================================================
//      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复位
WDTMR  = 0x00;    //关看门狗
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;
}

本文发布于:2024-09-21 21:57:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/163866.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:看门狗   计数器   使能   独立   时钟
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议