导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[newcomer]w77e58编程怪现象!![求助]:中断



No.34906
作者:newcomer
邮件:chen@yahoo.com.cn
ID:12823
登陆:2次
文章数:9篇
最后登陆IP:211.101.210.165
最后登陆:2003/7/12 16:09:29
注册:2003/6/6 9:25:40
财富:131
发帖时间:2003/6/18 18:59:34
发贴者IP:211.101.210.165
标题:newcomer:w77e58编程怪现象!![求助]:中断时复位??
摘要:No.34906w77e58编程怪现象!![求助]:中断时复位?? //主程序就是w77e58的串口1中断程序,编译成功(未写完的项目程序)
//KEIC51 EVAL V1.24编辑,
//现象:在运行到w77e58串口1中断时程序自动复位,且中断程序好象未正常完成,无中断则不会复位(硬件调试)?
//用串口调试器调试,则程序一旦进入中断则将永远循环下去。
//改为串口0中断keil 用ds80c320软仿真,运行正常。
//??????????
#include  <stdio.h>              
#include  <REG51.h>  
#define XON  0x11
#define XOFF 0x13  
#define dwlen 100
#define XON  0x11
#define XOFF 0x13
#define LENGTH 100
sfr PMR   = 0xc4;
char i,j;
sbit EWDI  = 0xec; //允许看门狗中断
sbit EX5   = 0xeb; //ex5-ex2;外部中断允许
sbit EX4   = 0xea; 
sbit EX3   = 0xe9; 
sbit EX2   = 0xe8; 

/* EIP  */
sbit PWDI  = 0xfc; //pwdi=1 看门狗中断优先
sbit PX5   = 0xfb;  //px5-px2=1 外部中断优先
sbit PX4   = 0xfa; 
sbit PX3   = 0xf9; 
sbit PX2   = 0xf8; 
sbit INT2  = 0x94;//外中断2,上跳变触发
sbit INT3  = 0x95;//外中断3,下跳变触发
sbit INT4  = 0x96;//外中断4,上跳变触发
sbit INT5  = 0x97;//外中断5,下跳变触发
sbit ES1   = 0xae ;
sfr SCON1=0x0c0;
sfr SBUF1=0x0c1; 
sbit RI1=SCON1^0;
sbit TI1=SCON1^1;
sbit REN1=SCON1^4;  
sbit DMEO=0X0C4^0;  
sbit IE5=0X91^7;
char xdata dw[dwlen]={'X','X','X','X','X','X','X','X','X'};     //attention : '\0x0d'!=0x0d
xdata char string[LENGTH]_at_ 0x0116; 
char  *flag; 
xdata char Ephone[]="13161528267"; 
xdata char Fphone[]="13161528267";                                                           //\r!='\r'    0x0d='\r'
char mode;
int len;
static int c=0;
char response;
char smssend;
char string1[5];
//长延时 12MHZ  about
void Delay100Ms(void)
{
 unsigned char i = 5;
 unsigned int j;
 while(i--)
 {
  j=1815;
  while(j--);
 };
}
void atd()
{;}
void ath(void)
{ printf("ATA\r");}  
char getkey () 
 {
  char c;
  while (!RI1);
  c = SBUF1;
  RI1 = 0;
  return (c);
}
char putchar( char c){         //2003/6/17C
if (c == '\n') 
 {
     if (RI1)               //RI`RI1
     {
      if (SBUF1 == XOFF) 
       {
        do 
         {
          RI1 = 0;
          while (!RI1);
         }
        while (SBUF1!= XON);
        RI1 = 0; 
       }
     }
    while (!TI1);
    TI1 = 0;
    SBUF1 = 0x0d;                       // output CR 
 }
  if (RI1)  
  {
    if (SBUF1 == XOFF) 
     {
      do  
       {
        RI1 = 0;
        while (!RI1);
       }
      while (SBUF1!= XON);
      RI1 = 0; 
    }
  }
  while (!TI1);
  TI1 = 0;            
  return (SBUF1= c);  

char MyGetChar1(void) { /* was char */
 char c;
 while (!RI1);     //set point for debug  serial1 used
 c = SBUF1;
 RI1 = 0;
      // putchar1(c);                                                    
 return (c);
}
/*******************get char    <cr>   twice control length***********/
void  getline2(char * s)            //for gsm use
 {int i=0,j=2;
 char c;
  do
    { c=MyGetChar1();
      s[i]=c;
     if(s[i]==0x0d)
       {j--;
       } 
        i++;  
    }
 while(j!=0);    //  <cr>   twice receive 
                              // for coming PHONE : RING  <CR>    <LF>   TWICE  
                             // for coming sms   : +CMT:""....  <CR>    <LF>  DATA  <CR>    <LF>  

char chargestate()
{char state=0;
   if(INT4==1) //ON CHARGE
    {;
     state='Y';
    }
   else
    {;                              
     state='N';
    }     
return state ;
}  
 int FEPS(char *s)
     {int i=0;
     do
     { if((s[i]=='p')||(s[i]=='s')||(s[i]=='f')||(s[i]=='e'))
         {return i;}
        else
        i++;
      }
      while(i  <100);
      return 0;   
     }
void delay()
{         unsigned int us,usn,MS;
MS=127;
  while(MS!=0)
   { usn = 127;
    while(usn!=0)
     {
      us=80;
      while (us!=0){us--;};
      usn--;
    }
    MS--;  }
}
     
/*******************************/                          
void main()
{             
       //  char i,response[20];              
        PMR = 0x41; 
         TMOD=0X20;
 SCON1=0X50;
        SCON=0X50;
 TCON=0X60;
 TH1=0X0FD;
 TL1=0X0FD;
 PCON=0X00;
        IP=0X00;//PRI INTERRUPT
        TR1=1; 
for(i=0;i  <LENGTH;i++)
{string[i]='w';}
TI1=1;
Delay100Ms();
      printf("at&f\r");
     delay();
     TI1=1;
    printf("at+ipr=0\r");                       
     delay();
        printf("at+cnmi=0,2,0,0\r");                       
     delay();
         printf("at+waip=1\r");                      
     delay();
  printf("at+crmp=3,6,0,2\r");                       
     delay();
   printf("at+crmp=0,0,0,0\r");
TI1=0;
RI1=0;
TI1=0;
RI1=0;
ES1=1;
EA=1;
while(1);
}
void coming() interrupt 7 using 0              //interrupt n interruptting from 8n+3 address 
{ TI1=1;                                              //serial1 0x3b  n=7 { TI=1;
  RI1=0;  
  if((SBUF1=='R')||(SBUF1=='+'))     
  {string[0]=SBUF1;                              
  } 
  else if(((SBUF1=='I')&&(string[0]=='R'))||((SBUF1=='C')&&(string[0]=='+')))
       {string[1]=SBUF1;
            if(string[1]=='I')    //COMING RING
               {   printf("at+crmp=0,11,0,2\n");
                   delay();
                   printf("at+crmp=0,0,0,0\n");
                   delay();
                   printf("ath\n");
                   printf("atd13161528267;\r");
                   for(i=0;i  <LENGTH;i++)
                     {string[i]='w';}
                  TI1=0;
               }
                else 
                   {    i=2;
                        j=2;
                       do
                          {
                           string[i]=getkey();
                           if(string[i++]==0x0d)
                           j--;
                           }
                           while(j!=0);
        ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:63毫秒 最大:78531毫秒 查询6次