首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

使用三星S3F9488单片机,编写的程序,感觉老是重启,请们指点

2012-03-09 
使用三星S3F9488单片机,编写的程序,感觉老是重启,请大虾们指点#include ioS3C9488.h//#include intrins

使用三星S3F9488单片机,编写的程序,感觉老是重启,请大虾们指点
#include "ioS3C9488.h"// 
#include "intrinsics.h"//包含内部函数 
#include "math.h"
#pragma vector = __TIMERB_UNDERFLOW_vector  
__root __interrupt void interrupt0();
#define uchar unsigned char
#define uint unsigned int
#define Set_Bit(byte,bit) (byte|=(1<<bit)
#define Clr_Bit(byte,bit) (byte&=~(1<<bit)
__code const volatile uchar SmartOption[4] @0x003c = {0xFF,0x00,0xBB,0xFB}; //定义P0.0-P0.2为次晶振,EESET
void delay(uint i); //单位为1ms
void Err1( );
void Err2( );
void Winter( );  
void Summer( );  
void Cotton( );  
void Wool( uchar m2);  
void Shoes( );  
void Clothes(uchar m4 );  
void Flea( );  

void Temp( );  
void Booking( uchar temp1);  
//void Interrupt0( );
void initialize( ); //初始化程序
void scan( ); //
void heat_work(); //加热
void heat_stop();  
void fan_work(); //风扇
void fan_stop();
void modify_time(); //修改时间
void buz();

uchar LCD0[11]={0x00,0x60,0x40,0x20,0x80,0x80,0x40,0x00,0x00,0x80,0xE0}; //显示0-9,E-
uchar LCD1[11]={0x10,0xB0,0X20,0XA0,0X20,0X00,0XB0,0X00,0X20,0x40,0XE0}; //显示0-9,E-
uchar KEY[6]={0XEF,0XDF,0XBF,0X7F,0XFE,0XFD}; //按钮1-6
uchar LED[]={0x01,0x02,0x04,0x08,0x80,0x10,0x20,0x40}; //数码管高电位
uchar time[6];
uchar ID=0;
uchar hour=0,min=0,sec=0;
uint flag=0;
uchar temp=0;

/*****************************************************************/
  //主函数
/****************************************************************/
void main( )

  //BTCON=0XFF;
  SP=0XC0;
  asm("DI");
  //ADCON=0X8D; //1vs采样一次
  BTCON=0XFB; //稳定晶振为62.5ms
  OSCCON=0X04;
  CLKCON=0X8F; //没有分频
  LCDCON=0X94; //LCD的占空比,信号为FW/128
  LCDVOL=0X89; // LCD的亮度设置
 
  P0CONH=0XFF;P0CONL=0X80;P0PUR=0XFF; //p0.3为采样口
  P1CONH=0XFF;P1CONL=0XA6; P1PUR=0XFF; //P1.0有待最后确定
  P2CONH=0XFF;P2CONL=0XFF; 
  P3CONH=0XFA;P3CONL=0X00; //P3.0为输入,全是输入  
  P3INT=0X00; //不启用外部中断
  P4CONH=0x16;//0X02;
  P4CONL=0X7F;//0X3F;
  //STPCON=0XA5; //允许STOP指令
  TACON=0X00; //初始化
  TBCON=0X00;
  //TINTPND=0X00; //待定???
 // VLDCON=0X1D;  
  //VLDCON=0XDD;  
  //WTCON=0X52; //待定
  //SYM=0X08; //允许所有中断运行
  //asm("DI");
  asm("EI");
  
  initialize( ); //初始化
  while(1)
  {
  if (P3==KEY[3])  
  delay(10);
  if(P3==KEY[3])
  {
  void buz();
  Winter( );
  Err2();
  Err1();
  /*if(P3==KEY[0])  
  delay(10);
  if(P3==KEY[0])
  {
  void buz();
  Booking( ); 
  while(P3==KEY[0]);
  }*/
  if(P3==KEY[1])  
  delay(10);
  if(P3==KEY[1] )
  {
   
  void buz();
  void Flea();
  while(P3==KEY[1]);
   
  if(P3==KEY[5])  


  delay(10);
  if(P3==KEY[5])
  {
  void buz();
  ID++;
  if(ID>5)
  ID=0;
  switch(ID)
  {
  case 0: Winter( ); Cotton(0); break; 
  case 1: Winter( ); Clothes(0); break;
  case 2: Winter( ); Wool(0); break;
  case 3: Winter( ); Shoes(0); break;
  case 4: Summer( ); Clothes(1); break;
  case 5: Summer( ); Wool(1); break;
  default: break;
  }
  while(P3==KEY[5]);
  }
while(P3==KEY[3]);  
  }
   
   
  }
   
}
/**************************************************************************/
//功能函数
/**************************************************************************/


void delay(uint i ) // MS
{
  uint k;
  uint a;
  for(k=0;k<i;k++)
  for(a=0;a<500; a++)
  asm("NOP");
  
}

void initialize( )
{
  uchar r;
  
 // WTCON=0X56;
  //P4=0X17;
  P0=0X00;
  P1=0X00;
  P2=0XFF;
  P4=0X17;
  delay(1000);
  //P1=0XF0;
  //P0=0XF0;
  
  //P1=P1_1_High;
  WTCON=0X12; //给蜂鸣器1K脉冲
  for(r=0;r<10;r++)
  delay(500);
  //P1=0xf2;
  WTCON=0X10; 
 // WTCON=0X16;
  P2=0X00;
  P4=0X00;
  P1=0XF0;
  P0=0XF0;
   
}


void scan( )
{
 static uchar x1,x2=5;
  
  for(x1=4;x1<8;x1++)
  {
  P2=LED[x1];
  if(x2<2)
  x2=5;
  P1=LCD0[time[x2--]];
  }  
  
  
}

void Err2( )
{
  uchar t;
  if (P3==0x01)
  delay(10);
  if (P3==0x01)
  {
  void buz();
  while(1)
  {
  Set_Bit(P1,1);
  for(t=0;t<10;t++)
  delay(1000);
  Clr_Bit(P1,1);
  for(t=0;t<10;t++)
  delay(1000);
  }
  }
}

void Winter( )
{  
  Clr_Bit(P0,5);
  Set_Bit(P4,0);  
  Set_Bit(P0,4);
   
}
void Summer( )
{
  Clr_Bit(P0,4);
  Set_Bit(P4,0);
  Set_Bit(P0,5);
void Cotton( )
{
  uchar s1=0;
  Clr_Bit(P0,6);
  Set_Bit(P4,1);  
  /* time[0]=0;
  time[1]=0;
  time[2]=0;
  time[3]=0;
  time[4]=2;
  time[5]=0;*/
  sec=0;
  min=0;
  hour=2;
  modify_time();
  //TBCON=0x22;
  TBDATAH=0XC3; //定时为50MS
  TBDATAL=0X50;
  TBCON=0x22;
  if(P3==KEY[4])
  delay(10);
  if(P3==KEY[4])
  {
  void buz(); 
  s1++;
  TBCON=0x2E; //计时开始
  heat_work();
  //heat_stop();
  fan_work();
  //fan_stop();
  if(flag==20)
  { 
  sec-=1;


  modify_time();
  }
  if(s1==2)
  {
  heat_stop();
  fan_stop();
  TBCON=0x22; //停止计时和禁止中断
  s1=0;
  }
   
  }
   


void Booking(uchar temp1 ) 
{
  //uchar ID=0;
  //ID++;
  switch( temp1)
  {
  case 0: min=20;break;
  case 1:min=40;break;
  case 2:hour=1;break;
  default:sec=0,min=0,hour=0;break;
  }
   
}

void Interrupt0( ) 
{ uint t=0;
  // uint flag=0;
  t++;  
if(t==20) 
  {
  flag=20;
  t=0;
  }

else  
flag=0;
}  



void heat_work()
{
  P1=P1_2_High;
}
void heat_stop()
{
  P1=P1_2_Low;
}
void fan_work()
{
  P1=P1_0_High;
}
void fan_stop()
{
  P1=P1_0_Low;
}
void modify_time()
{
 // uchar temp=0;
  
 
  
  if(sec==0)
  {
  if((min==0)&&(hour==0))
  {
   
  heat_stop();
  fan_stop();
  if(P3==KEY[0]) // 预约
  delay(10);
  if(P3==KEY[0])
  {
   
  void buz();
  Booking(temp );
  temp++;
  if(temp==3)
  temp=0;
  while(P3==KEY[0]);
  }
  else TBCON=0x22; //停止计时和禁止中断
  }
  else
  sec=59;
  if((min-=1)==0&&hour!=0)
  {
  //if((hour-=1)>=0)
  min=59;
   
  hour-=1;
   
  }
   
   
   
  }  
 
  //sec%=60;
  //temp2=
  //min-=temp1/60;
  //temp2=min;
  //min%=60;
 // hour=(hour-temp/60)%12;
  time[0]=sec%10;
  time[1]=sec/10;
  time[2]=min%10;
  time[3]=min/10;
  time[4]=hour%10;
  time[5]=hour/10;
  scan();
}
void buz()
{

  WTCON=0X32; //给蜂鸣器4K脉冲
  
  delay(500);
  P1=0xf2;
  WTCON=0X30; 
}
烧写到硬件里,老是感觉重启,LED闪烁很厉害,蜂鸣器一直发出吱吱的声音,给的是1KHZ的频率,望大虾们指点迷津,程序不全,说太长发不了

[解决办法]
1.先简单测试单个功能,然后逐个添加调试
2。关闭中断,
3。测试软件模拟输出beep和驱动 led
4.可以按钮按下等闪1次
[解决办法]
感觉???你是如何判断你的板在重启?有带仿真器吗?有的话,很容易搞定的。
[解决办法]
单单看这个define是没有错的。具体要看你使用它的时候,放些什么数进去,假如sbit是一个char型,那么bit不要超过7,虽然不会报错,单得不到预想的结果。
[解决办法]
楼主怎么感觉到重启了?单片机中有没有看门狗,是不是清看门狗的时间不对。不知道这个单片机中有没有复位寄存器,要是有重起后读一下它就知道了

热点排行