This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Interrupt not working(tx in softuart)(reception is inbuilt uart in the interrupt mode)

#include<softuart.h>
#include<stdio.h>
#include<reg51.h>

void uart_init();
sbit sw=P1^7;

unsigned char rx();
code unsigned char rd[] = "AT+CMGR=1";
code unsigned char ne[] = "AT+CNMI=2,2,0,0,0";
unsigned int r=0,m=0,s1=0,n1=0,f1=0,m2=0;
unsigned char gs,mes_dat[]=0,mess[]=0;
extern void lcd_init();
void lcd_cmd(unsigned char);
void lcd_data(unsigned char);
//void wait();

void gsm_delay(unsigned int);
unsigned char txt[]="AT+CMGF=1";
unsigned char no[] ="AT+CMGS=\"9940151239\"";
unsigned char del[]="AT+CMGDA=\"DEL ALL\"";

unsigned char sen[]="SENSOR";

void send_no();
void new_mess();
void gsm_read();

void delete();
void gsm_read();
void mode();
unsigned char rx();
unsigned char w, re,rx_data;
void tx(unsigned char);

void serial(void) interrupt 4
{

if(TI==1) { TI=0; SBUF = '\0'; //ES=0; } else if(RI==1) { rx_data = SBUF;

if(rx_data=='+') { do { mess[m2] = rx_data;

m2++; RI=0; }while(rx_data=='T'); }

RI = 0; }
}

void main()
{ uart_init(); lcd_init(); mode(); new_mess();

// delete();

while(1) { IE = 0x90; m = 0; r = 0; s1 = 0; m2 = 0;

re = rx_data;

if(re=='+') { RI = 0;

if(SBUF=='C') { lcd_data('1'); RI = 0; if(re=='M') { RI=0; lcd_data('2'); if(re=='T') { RI=0; do { gs = re; RI = 0; }while(gs!=0x0a);

do { gs = re; RI = 0; }while(gs!=0x0a);

m=-1; do { m = m+1;

mes_dat[m] = re; RI = 0;

}while(mes_dat[m]!=0x0d); mes_dat[m] = '\0'; m=0; lcd_cmd(0x01); lcd_cmd(0x80); while(mes_dat[m]!='\0') { lcd_data(mes_dat[m]); m++; } } } } } while(sw==1); m2=0; while(mess[m2]!='T') { //lcd_data(mess[m2]); tx(mess[m2]); m2++; }

send_no();

while(sen[s1]!='\0') { putc(sen[s1]); s1++; } putc(0x1a);

lcd_data('L');

gsm_delay(1000); gsm_delay(1000); gsm_delay(1000);

}

}

void new_mess()
{ n1=0; while(ne[n1]!='\0') { putc(ne[n1]); n1++; } putc(0x0a); putc(0x0d); gsm_delay(1000);
}

void mode()
{ f1 = 0; while(txt[f1]!='\0') { putc(txt[f1]); f1++; }

putc(0x0a); putc(0x0d); gsm_delay(1000);
}

void uart_init()
{ TMOD = 0x20; TH1 = -3; SCON = 0x50; TR1 = 1; //IE = 0x90;
}

/*unsigned char rx()
{ unsigned char rec; while(RI==0); rec = SBUF; RI = 0; return rec;
}

void delete()
{ unsigned int d ; d=0; while(del[d]!='\0') { putc(del[d]); d++; } putc(0x0a); putc(0x0d); gsm_delay(1000);

} */

void send_no()
{ unsigned int s=0; while(no[s]!='\0') { putc(no[s]);

s++;

}

putc(0x0a); putc(0x0d);

}
/*void gsm_read()
{ m=0; r=0; lcd_data('R'); while(rd[r]!='\0') { putc(rd[r]); r++; }

putc(0x0a); putc(0x0d);

} */

void gsm_delay(unsigned int k)
{ unsigned int i,j; for(i=0;i<=k;i++) for(j=0;j<=1273;j++);
} void tx(unsigned char tx_data)
{ SBUF = tx_data; while(TI==0); TI=0;
}

Parents
  • maybe it has been changed, but (it used to be that) tabbing lead to some quite wild appearnces

    just as a check

            this is tabbed
                    this is double tabbed
            this is spaced
    

    well the preview show that Keil and notepad use the same tabbing

    so, evidently the op has not heard of indenting

    I am truly amazed seeing some of the scribbles posted here under the guise of "code"

    Erik

Reply
  • maybe it has been changed, but (it used to be that) tabbing lead to some quite wild appearnces

    just as a check

            this is tabbed
                    this is double tabbed
            this is spaced
    

    well the preview show that Keil and notepad use the same tabbing

    so, evidently the op has not heard of indenting

    I am truly amazed seeing some of the scribbles posted here under the guise of "code"

    Erik

Children