پاسخ : مشکلات sim900
اقا راه افتاد ممنون...اما من از وقفه استفاده نکردم فعلا کارم راه افتاده نمیدونم کجا باید استفاده کنم...!!؟؟
اقا راه افتاد ممنون...اما من از وقفه استفاده نکردم فعلا کارم راه افتاده نمیدونم کجا باید استفاده کنم...!!؟؟
#include <mega16a.h> #include <alcd.h> #include <stdlib.h> #include <delay.h> #include <stdio.h> #include <string.h> int i,res; void init_io(); unsigned char usart_receiver(); void sim900_power(); void send_sms(); void display_num(); void compare(); void sim900_power(); unsigned char num[14]; unsigned char temp[1]; unsigned char buffer; unsigned char my_num[14]="+989132921239"; #define ctrl_z 0x1a #define enter 0x0d #ifndef RXB8 #define RXB8 1 #endif #ifndef TXB8 #define TXB8 0 #endif #ifndef UPE #define UPE 2 #endif #ifndef DOR #define DOR 3 #endif #ifndef FE #define FE 4 #endif #ifndef UDRE #define UDRE 5 #endif #ifndef RXC #define RXC 7 #endif #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART Receiver buffer #define RX_BUFFER_SIZE 64 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE <= 256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif // This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index++]=data; #if RX_BUFFER_SIZE == 256 // special case for receiver buffer size=256 if (++rx_counter == 0) rx_buffer_overflow=1; #else if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; } #endif } } #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index++]; #if RX_BUFFER_SIZE != 256 if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #endif #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif // USART Transmitter buffer #define TX_BUFFER_SIZE 64 char tx_buffer[TX_BUFFER_SIZE]; #if TX_BUFFER_SIZE <= 256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif // USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) { if (tx_counter) { --tx_counter; UDR=tx_buffer[tx_rd_index++]; #if TX_BUFFER_SIZE != 256 if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; #endif } } #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index++]=c; #if TX_BUFFER_SIZE != 256 if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; #endif ++tx_counter; } else UDR=c; #asm("sei") } #pragma used- #endif // Standard Input/Output functions //#include <stdio.h> // Declare your global variables here void main(void) { init_io(); sim900_power(); PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x18; DDRD=0x00; lcd_init(16); // Global enable interrupts #asm("sei") DDRC.5=1; PORTC.5=1; while(1) { lcd_putsf("*READY FOR USE"); buffer=getchar(); if(buffer=='+') { lcd_putsf("step 0 OK"); } } } void sim900_power() { DDRA.6=1; PORTA.6=1; delay_ms(500); PORTA.6=0; } void init_io() { // 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=0xD8; //UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; }
while(1) { for(i=0;i<2;i++) { while('+'!=getchar()); } gets(num,12); lcd_clear(); lcd_putsf("number :"); lcd_gotoxy(0,1); lcd_puts(num); delay_ms(1500); lcd_clear(); temp[1]='\0'; temp[0]=num[11]; lcd_puts(temp); delay_ms(2000); }
دیدگاه