|
你好!
我第一次使用三星的9454作小家电的控制。由于之前是用51与PIC,对9454的使用不熟。现参照你们的9454中文手册用IAR编译器对其进行编程,但发现写出的程序进不了定时中断。希望得到你们的提点。
我的程序中用P2口对定时中断进观察,我在主程序中对P2口进行付0xFF,一但进入定时中断后就对P2口进行付0x00。从外部所接的LED看它是否已进入中断。
#include <ioS3C9454.h>//
#define uchar unsigned char
#define uint unsigned int
//__root const uchar SmartOption[4]@0x3c={0x00,0x00,0xE4,0x00};
static uint Ts;
static uint Tss;
void Ch (void);
void mDelay(void);
void TimeLed(void);
void main(void)
{
Ch(); //初始化
//=================================================================
//付初值区
Ts=0;
Tss=0;
P2=0xff; //先对P2口付1,如果能进中断则P2口会付0
//===================================================================
for(;;)
{
TimeLed();
}
}
//====================================================================
void Ch ()
{
SYM=0x00;
P0CONL=0xAA;
P1CON=0xFA;
P2CONH=0xDF; //
P2CONL=0xAA;
BTCON=0xA3; //基本定时控制器10100011=1010-禁止看门狗
CLKCON=0x18; //时钟控制寄存器
ADCON=0x8C;
P0PND=0x00;
T0DATA = 100;//定时器初始值
T0CON = 0x8A;//打开定时器 1/8之一分频 10001010
}
//=====================================================================
void mDelay ()
{ static uint temp;
static uint DelayTime;
DelayTime=1;
for(;DelayTime>0;DelayTime--)
{for(temp=0;temp<915;temp++)
{;}
}
}
//=========================================================================
void TimeLed ()
{ static uchar i=0;
mDelay();
i++;
if(i==2)
{
i=0;
}
switch(i)
{case 0: P0=0xFF; break;
case 1: P0=0x00; break;
}
}
//============================================================================
//*************************************************************************
//**中断向量及服务程序定义********
#pragma vector=0x00
__interrupt void Interrupts()
{
T0CON=T0CON&0xf6;
P2=0x00;//如果能进中断,则P2口付0
} |
|