4339|7

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

使用三星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< #define Clr_Bit(byte,bit) (byte&=~(1< __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     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的频率,望大虾们指点迷津,程序不全,说太长发不了

最新回复

调用时,是set_bit(P1,2),是不是无法识别P1,认为只是变量,而不是p1口?但如何解决??  详情 回复 发表于 2010-6-21 09:23
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
单片机中有看门狗,我没有启用,复位寄存器??是否为控制复位电压的寄存器
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
1.先简单测试单个功能,然后逐个添加调试
2。关闭中断,
3。测试软件模拟输出beep和驱动 led
4.可以按钮按下等闪1次
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
感觉???你是如何判断你的板在重启?有带仿真器吗?有的话,很容易搞定的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
#define set_bit(sbit,bit) (sbit|= (1< #define clr_bit(sbit,bit) (sbit&=~(1< 请问这样定义有错吗??
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
单单看这个define是没有错的。具体要看你使用它的时候,放些什么数进去,假如sbit是一个char型,那么bit不要超过7,虽然不会报错,单得不到预想的结果。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主怎么感觉到重启了?单片机中有没有看门狗,是不是清看门狗的时间不对。不知道这个单片机中有没有复位寄存器,要是有重起后读一下它就知道了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
调用时,是set_bit(P1,2),是不是无法识别P1,认为只是变量,而不是p1口?但如何解决??
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表