Quantcast
Channel: MCS Electronics Forum
Viewing all articles
Browse latest Browse all 20563

BASCOM-AVR : how to convert bascom programming this program C : NEWTOPIC

$
0
0
//please help me #include <mega8535.h> #include <delay.h> //#include <ctype.h> #include <string.h> // Standard Input/Output functions #include <stdio.h> // Declare your global variables here #define Pulse PORTA.0 #define RTS PORTD.4 #define CTS PIND.5 #define TM PIND.2 #define RST PORTD.3 #define WU PIND.6 #define OO PORTD.7 #define msg0 "$PSRF100,1,4800,8,1,0*" //SER #define msg1 "$PSRF103,05,00,00,01*" //VTG #define msg2 "$PSRF103,04,00,00,01*" //RMC #define msg3 "$PSRF103,03,00,00,01*" //GSV #define msg4 "$PSRF103,02,00,00,01*" //GSA #define msg5 "$PSRF103,00,00,03,01*" //GGA 3 sec #define msg6 "$PSRF114,1b,1,3,1,a,0,0,0,f,6,0,f0,0,0,4a,0*" //#define msg7 "$PSRF103,08,00,00,01*" //ZDA unsigned char msg[27], kode[6], jam[2], menit[2], detik[2], lati[9], ns, longi[10], ew, sat[2], alti[5]; unsigned char cksum, grup, xcount; unsigned char cksumcalc[2]; bit valid, star, sto, paket=0;//, elcm=0, ots=0; void checksum(void); void checksumfly(void); void inituart(void); void txsend(unsigned char datatx); #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 80 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, xuart; status=UCSRA; data=UDR; //txsend(data);// 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 (data == 0x24)//$ { grup = 0; valid = 1; star = 1; sto = 0; //msg[0] = 0; xcount = 0; //txsend(data);// } else if (data == 0x2C)//, { if (grup == 0) { if ((msg[0] != 'G')||(msg[1] != 'P')||(msg[2] != 'G')||(msg[3] != 'G')||(msg[4] != 'A')) valid = 0; xuart=0; do { kode[xuart] = msg[xuart]; xuart++; } while (xuart<5); //if ((msg[0] == 'P')&&(msg[1] == 'S')&&(msg[2] == 'R')&&(msg[3] == 'F')&&(msg[4] == '1')&&(msg[5] == '5')&&(msg[6] == '6')) elcm=1; //if ((msg[0] == 'P')&&(msg[1] == 'S')&&(msg[2] == 'R')&&(msg[3] == 'F')&&(msg[4] == '1')&&(msg[5] == '5')&&(msg[6] == '0')) ots=1; } else if (grup == 1)//utc { jam[0] = msg[0]; jam[1] = msg[1]; menit[0] = msg[2]; menit[1] = msg[3]; detik[0] = msg[4]; detik[1] = msg[5]; } else if (grup == 2)//latitude { xuart=0; do { lati[xuart] = msg[xuart]; xuart++; } while (xuart<9); } else if (grup == 3)//N/S { ns = msg[0]; } else if (grup == 4)//longitude { xuart=0; do { longi[xuart] = msg[xuart]; xuart++; } while (xuart<10); } else if (grup == 5)//E/W { ew = msg[0]; } else if (grup == 6) { if (msg[0] == 0x30) valid = 0; } else if (grup == 7) { if ((msg[0] == 0x30)&&(msg[1] == 0x30)) valid = 0; sat[0] = msg[0]; sat[1] = msg[1]; } else if (grup == 9) { alti[0] = msg[0]; alti[1] = msg[1]; alti[2] = msg[2]; if (xcount>3) alti[3] = msg[3];; else alti[3]=0x2C; if (xcount>4) alti[4] = msg[4]; else alti[4]=0x2C; } //msg[0] = 0; xcount = 0; grup++; } else if (data == 0x2A)//* { sto = 1; //msg[0] = 0; xcount = 0; } else if (data == 0x0D) { checksumfly(); if ((cksumcalc[0] == msg[0])&&(cksumcalc[1] == msg[1])) { //txsend(data);// } else { valid = 0; } } else if (data == 0x0A) { paket = 1; //txsend(0xAA);// //txsend(0x55);// rx_wr_index=0; rx_counter=0; xcount=0; //txsend(data);// } else { msg[xcount] = /*msg + Chr*/(data); xcount++; if (star == 1) cksum = data; else if (sto == 0) cksum = cksum ^ data; star = 0; } 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 // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here Pulse = ~Pulse; //txsend('+'); } void checksumfly(void) { unsigned char msgcount; msgcount = cksum >> 4; if (msgcount <= 9) msgcount = msgcount + 0x30; else msgcount = msgcount + 0x37; cksumcalc[0] = /*Chr*/(msgcount); msgcount = cksum % 16; if (msgcount <= 9) msgcount = msgcount + 0x30; else msgcount = msgcount + 0x37; cksumcalc[1] = /*(cksumcalc << 8) + Chr*/(msgcount); } void checksum(void) { unsigned char msgcount; unsigned char msgchar; unsigned int cksumchar; unsigned char tempchar; unsigned char msglen; msgchar = msg[1]; cksum = /*toascii*/(msgchar); msglen = strlen(msg); msgcount = 2; do { msgchar = msg[msgcount]; tempchar = /*toascii*/(msgchar); cksum = cksum ^ tempchar; msgcount++; } while (msgcount != msglen-1); msgcount = cksum >> 4; if (msgcount <= 9) msgcount = msgcount + 0x30; else msgcount = msgcount + 0x37; cksumchar = /*chr*/(msgcount); msgcount = cksum & 0x0F; if (msgcount <= 9) msgcount = msgcount + 0x30; else msgcount = msgcount + 0x37; cksumchar = (cksumchar<<8) + /*chr*/(msgcount); msg[msglen] = cksumchar >> 8; msg[msglen+1] = cksumchar & 0x00FF; msg[msglen+2] = 0x0D; msg[msglen+3] = 0x0A; } void main(void) { // Declare your local variables here unsigned char x; unsigned int y; delay_ms(300); // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1 PORTA=0x01; DDRA=0x01; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T //PORTB=0x00; //DDRB=0x00; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=Out Func6=In Func5=In Func4=Out Func3=Out Func2=In Func1=Out Func0=In // State7=0 State6=P State5=P State4=1 State3=1 State2=P State1=1 State0=P PORTD=0x7F; DDRD=0x9A;//0xAA; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 4800 (Double Speed Mode) UCSRA=0x02; UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; inituart(); //delay_ms(1000); if (CTS==1)//if (RTS==1) { txsend('C');// txsend('T');// txsend('S');// txsend(0x0D);// txsend(0x0A);// } if (WU==0) { txsend('S');// txsend('L');// txsend('1');// txsend(0x0D);// txsend(0x0A);// } while (WU==0) { OO=0; delay_ms(700); OO=1; delay_ms(200); OO=0; delay_ms(700); } txsend('W');// txsend('U');// txsend('1');// txsend(0x0D);// txsend(0x0A);// RTS=0;//CTS=0; while (WU==1) { OO=0;//RST=1;//OO=0; delay_ms(700); OO=1;//RST=0;//OO=1; delay_ms(200); OO=0;//RST=1;//OO=0; delay_ms(700); } txsend('S');// txsend('L');// txsend('2');// txsend(0x0D);// txsend(0x0A);// while (WU==0) { OO=0; delay_ms(1200); OO=1; delay_ms(200); OO=0; } txsend('W');// txsend('U');// txsend('2');// txsend(0x0D);// txsend(0x0A);// /* while (CTS==1)//while (RTS==1) { txsend('R');// } */ x=0; do { msg[x]=msg0[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); x=0; do { msg[x]=msg1[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); x=0; do { msg[x]=msg2[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); x=0; do { msg[x]=msg3[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); x=0; do { msg[x]=msg4[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); x=0; do { msg[x]=msg5[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); /* x=0; do { msg[x]=msg7[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); delay_ms(200); */ // Global enable interrupts #asm("sei") //txsend('O');// //txsend('K');// while (1) { // Place your code here if (paket==1) { delay_ms(100); /* if (elcm == 1) { txsend('E');// txsend('L');// txsend('C');// txsend('M');// txsend(0x0D);// txsend(0x0A);// x=0; do { msg[x]=msg6[x]; x++; } while (msg[x-1]!=0); checksum(); puts(msg); elcm=0; } else if (ots == 1) { txsend('O');// txsend('k');// txsend('T');// txsend('S');// txsend(0x0D);// txsend(0x0A);// ots=0; } else*/ if (valid == 0) { txsend('E'); txsend('r'); txsend('r'); txsend('o'); txsend('r'); txsend(0x0D); txsend(0x0A); } else { txsend('T'); txsend('i'); txsend('m'); txsend('e'); txsend(' '); txsend(' '); txsend(' '); txsend(' '); txsend(' '); txsend(':'); txsend(' '); txsend(jam[0]); txsend(jam[1]); txsend(':'); txsend(menit[0]); txsend(menit[1]); txsend(':'); txsend(detik[0]); txsend(detik[1]); txsend(0x0D); txsend(0x0A); txsend('L'); txsend('a'); txsend('t'); txsend('i'); txsend('t'); txsend('u'); txsend('d'); txsend('e'); txsend(' '); txsend(':'); txsend(' '); x = 0; do { txsend(lati[x]); if (x==1) txsend(0xBA); if (x==3) txsend(0x27); x++; } while (x<4); y = ((lati[5]-0x30)*1000) + ((lati[6]-0x30)*100) + ((lati[7]-0x30)*10) + ((lati[8]-0x30)); y = 0.6 * y; lati[5] = y / 1000; lati[6] = (y % 1000) / 100; lati[7] = (y % 100) / 10; lati[8] = (y % 10); x = 5; do { txsend(0x30+lati[x]); if (x==6) txsend(0x2E); x++; } while (x<9); txsend(0x22); txsend(' '); txsend(ns); txsend(0x0D); txsend(0x0A); txsend('L'); txsend('o'); txsend('n'); txsend('g'); txsend('i'); txsend('t'); txsend('u'); txsend('d'); txsend('e'); txsend(':'); txsend(' '); x = 0; do { txsend(longi[x]); if (x==2) txsend(0xBA); if (x==4) txsend(0x27); x++; } while (x<5); y = ((longi[6]-0x30)*1000) + ((longi[7]-0x30)*100) + ((longi[8]-0x30)*10) + ((longi[9]-0x30)); y = 0.6 * y; longi[6] = y / 1000; longi[7] = (y % 1000) / 100; longi[8] = (y % 100) / 10; longi[9] = (y % 10); x = 6; do { txsend(0x30+longi[x]); if (x==7) txsend(0x2E); x++; } while (x<10); txsend(0x22); txsend(' '); txsend(ew); txsend(0x0D); txsend(0x0A); txsend('A'); txsend('l'); txsend('t'); txsend('i'); txsend('t'); txsend('u'); txsend('d'); txsend('e'); txsend(' '); txsend(':'); txsend(' '); x = 0; do { if (alti[x]!=0x2C) txsend(alti[x]); x++; } while (x<5); txsend(' '); txsend('m'); txsend(0x0D); txsend(0x0A); txsend('S'); txsend('a'); txsend('t'); txsend('e'); txsend('l'); txsend('l'); txsend('i'); txsend('t'); txsend('e'); txsend(':'); txsend(' '); x = 0; do { txsend(sat[x]); x++; } while (x<2); txsend(0x0D); txsend(0x0A); } paket = 0; } } } [b:488c4dc193][color=red:488c4dc193](BASCOM-AVR version : 2.0.7.6 )[/b:488c4dc193][/color:488c4dc193]

Viewing all articles
Browse latest Browse all 20563

Trending Articles