با سلام
من برنامه ای نوشته ام از وقفه خارج نمیشه ولی برنامه ی ساده تر نوشته ام درست کار می کنه؟
#include <mega32.h>
#include <stdlib.h>
#include <delay.h>
#include <keypad.h>
#include <SIM900.h>
#include <alcd.h>
#include <stdio.h>
// Declare your global variables here
char key=16;
char text1[50],str[50],text2[100];
char sms[80],phone[30];
int i=0,s=0,ans;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
ans = 0;
getstr(text1);
getstr(text2);
PORTD.6 = 1;
delay_ms(200);
PORTD.6 = 0;
lcd_clear();
lcd_gotoxy(0,0);
if(!strcmp(text1,"RING"
)
{
// while(PIND.2 == 0)
// {
ans = 1;
PORTC.1=1;
delay_ms(3000);
i=Hangup();
ans = 0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts("Hang up!"
;
PORTC.1=0;
lcd_gotoxy(0,1);
delay_ms(2000);
// }
}
lcd_clear();
}
void Signal_Dispaly(int i);
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x0F;
PORTD=0x00;
DDRD=0x60;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;MCUCR=0x02;MCUCSR=0x00;GIFR=0x40;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL= 0x47;
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
lcd_definechar(SigQual[0],0);
lcd_definechar(SigQual[1],1);
lcd_definechar(SigQual[2],2);
lcd_definechar(SigQual[3],3);
lcd_definechar(SigQual[4],4);
lcd_definechar(SigQual[5],5);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts("Only GOD"
;
lcd_gotoxy(0,1);
lcd_puts("Ahmad Farahani"
;
// Global enable interrupts
#asm("sei"
while (1)
{
key = keyscan();
if(s==0)
{
Operator_Name(str);
i = Signal_Quality();
lcd_gotoxy(0,1);
lcd_puts(str);
Signal_Dispaly(i);
}
if(key == 12){delay_ms(50);lcd_clear();s++;if(s==7)s=0;}
}
}
void Signal_Dispaly(int i)
{
if(i == 99) {
lcd_gotoxy(0,1);
lcd_puts("No Signal!"
;
}
else if(i == 0) {
lcd_gotoxy(10,0);
lcd_putchar(0);
}
else if(i == 1) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
}
else if(i == 2) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
}
else if(i == 3) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
}
else if((i > 3) & (i < 31)) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
lcd_putchar(4);
}
else if(i == 31) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
lcd_putchar(4);
lcd_putchar(5);
}
}
من برنامه ای نوشته ام از وقفه خارج نمیشه ولی برنامه ی ساده تر نوشته ام درست کار می کنه؟
#include <mega32.h>
#include <stdlib.h>
#include <delay.h>
#include <keypad.h>
#include <SIM900.h>
#include <alcd.h>
#include <stdio.h>
// Declare your global variables here
char key=16;
char text1[50],str[50],text2[100];
char sms[80],phone[30];
int i=0,s=0,ans;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
ans = 0;
getstr(text1);
getstr(text2);
PORTD.6 = 1;
delay_ms(200);
PORTD.6 = 0;
lcd_clear();
lcd_gotoxy(0,0);
if(!strcmp(text1,"RING"

{
// while(PIND.2 == 0)
// {
ans = 1;
PORTC.1=1;
delay_ms(3000);
i=Hangup();
ans = 0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts("Hang up!"

PORTC.1=0;
lcd_gotoxy(0,1);
delay_ms(2000);
// }
}
lcd_clear();
}
void Signal_Dispaly(int i);
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x0F;
PORTD=0x00;
DDRD=0x60;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;MCUCR=0x02;MCUCSR=0x00;GIFR=0x40;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL= 0x47;
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
lcd_definechar(SigQual[0],0);
lcd_definechar(SigQual[1],1);
lcd_definechar(SigQual[2],2);
lcd_definechar(SigQual[3],3);
lcd_definechar(SigQual[4],4);
lcd_definechar(SigQual[5],5);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts("Only GOD"

lcd_gotoxy(0,1);
lcd_puts("Ahmad Farahani"

// Global enable interrupts
#asm("sei"

while (1)
{
key = keyscan();
if(s==0)
{
Operator_Name(str);
i = Signal_Quality();
lcd_gotoxy(0,1);
lcd_puts(str);
Signal_Dispaly(i);
}
if(key == 12){delay_ms(50);lcd_clear();s++;if(s==7)s=0;}
}
}
void Signal_Dispaly(int i)
{
if(i == 99) {
lcd_gotoxy(0,1);
lcd_puts("No Signal!"

}
else if(i == 0) {
lcd_gotoxy(10,0);
lcd_putchar(0);
}
else if(i == 1) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
}
else if(i == 2) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
}
else if(i == 3) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
}
else if((i > 3) & (i < 31)) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
lcd_putchar(4);
}
else if(i == 31) {
lcd_gotoxy(10,0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
lcd_putchar(3);
lcd_putchar(4);
lcd_putchar(5);
}
}
دیدگاه