Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về vấn đề truyền dữ liệu lến máy tính !

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Em đã giải quyết được vấn đề truyền sai kí tự (mặc dù chỉ thử dc kí tự 3 và 6 là đúng hoàn toàn :d ) nhưng sao mà cứ cho hàm delay_ms(1000) vào là ko chạy đc nữa nhỉ? Ai có thể giải thích cho em lỗi ở đâu dc ko? Thank!

    Comment


    • #17
      Hịc, mình đã tìm ra nguyên nhân, hóa ra là con atmega16L bị hỏng phần truyền nhận dữ liệu với máy tính, mặc dù các phần khác vẫn dùng ngon Đúng là cái bọn chợ Trời toàn bán đồ lởm ^_^

      Comment


      • #18
        Vấn đề truyền sai trong proteus là do các cổng tín hiệu trong Max232 là cổng đảo (Khác so với max232 thực tế) -> tín hiệu bị đảo -> phải thêm NOT để đảm bảo tín hiệu đúng.
        Attached Files
        ----------------------
        Bể học là mênh mông!

        Comment


        • #19
          Nguyên văn bởi yen_trang Xem bài viết
          Em đã giải quyết được vấn đề truyền sai kí tự (mặc dù chỉ thử dc kí tự 3 và 6 là đúng hoàn toàn :d ) nhưng sao mà cứ cho hàm delay_ms(1000) vào là ko chạy đc nữa nhỉ? Ai có thể giải thích cho em lỗi ở đâu dc ko? Thank!
          Ngyên nhân là gi thế bạn mình cũng đang làm về vấn đề này mình muốn chuyền con số nhận được từ cảm biến lên máy tính
          Vấn đề của bạn có lẽ là do hàm putchar của bạn thôi bạn thư putchar('4') ;putchar('9');thử xem nhé

          Comment


          • #20
            Làm sao để gửi dc chuổi 1000.
            Theo mình biết hàm putchar( ) chỉ gửi được có 1 ký tự thôi.
            Mình dùng hàm puts( ) để gửi chuổi 1000.
            Các bạn ai biết dùng putchar( ) để gửi số 1000 chỉ mình nhé.
            Thanks các bạn.
            Phone: 0909319477
            Email:

            Comment


            • #21
              Mình đang mắc phần này, cũng không làm sao chạy được.

              Đây là code của em:

              /************************************************** ***
              Chip type : ATmega16
              Program type : Application
              Clock frequency : 16.000000 MHz
              Memory model : Small
              External SRAM size : 0
              Data Stack size : 256
              ************************************************** ***/

              #include <mega16.h>
              #include <delay.h>
              // Standard Input/Output functions
              #include <stdio.h>

              // Alphanumeric LCD Module functions
              #asm
              .equ __lcd_port=0x15 ;PORTC
              #endasm
              #include <lcd.h>

              #define RXB8 1
              #define TXB8 0
              #define UPE 2
              #define OVR 3
              #define FE 4
              #define UDRE 5
              #define RXC 7

              #define FRAMING_ERROR (1<<FE)
              #define PARITY_ERROR (1<<UPE)
              #define DATA_OVERRUN (1<<OVR)
              #define DATA_REGISTER_EMPTY (1<<UDRE)
              #define RX_COMPLETE (1<<RXC)

              // USART Receiver buffer
              #define RX_BUFFER_SIZE 8
              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_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
              if (++rx_counter == RX_BUFFER_SIZE)
              {
              rx_counter=0;
              rx_buffer_overflow=1;
              };
              };
              }

              #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_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
              #asm("cli")
              --rx_counter;
              #asm("sei")
              return data;
              }
              #pragma used-
              #endif

              // USART Transmitter buffer
              #define TX_BUFFER_SIZE 8
              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_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
              };
              }

              #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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
              ++tx_counter;
              }
              else
              UDR=c;
              #asm("sei")
              }
              #pragma used-
              #endif

              // Declare your global variables here

              void main(void)
              {
              unsigned char count;

              // Input/Output Ports initialization
              // Port A initialization
              PORTA=0x00;
              DDRA=0x00;

              // Port B initialization
              PORTB=0x00;
              DDRB=0xB0;

              // Port C initialization
              PORTC=0x00;
              DDRC=0xFF;

              // Port D initialization
              PORTD=0x00;
              DDRD=0x00;

              TCCR0=0x00;
              TCNT0=0x00;
              OCR0=0x00;

              TCCR1A=0x00;
              TCCR1B=0x00;
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;

              ASSR=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;

              MCUCR=0x00;
              MCUCSR=0x00;

              // 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: 9600
              UCSRA=0x00;
              UCSRB=0xD8;
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x67;

              ACSR=0x80;
              SFIOR=0x00;

              // Global enable interrupts
              #asm("sei")

              count = 10;

              while (1)
              {
              putchar(count);
              delay_ms(100);
              count++;


              };
              }

              Comment


              • #22
                Nguyên văn bởi lehanhla Xem bài viết
                Làm sao để gửi dc chuổi 1000.
                Theo mình biết hàm putchar( ) chỉ gửi được có 1 ký tự thôi.
                Mình dùng hàm puts( ) để gửi chuổi 1000.
                Các bạn ai biết dùng putchar( ) để gửi số 1000 chỉ mình nhé.
                Thanks các bạn.
                Bạn có thể dùng printf(putchar,"Hello")
                123...

                Comment


                • #23
                  Mình đang mắc phần này, cũng không làm sao chạy được.

                  Đây là code của em:

                  Trích:
                  /************************************************** ***
                  Chip type : ATmega16
                  Program type : Application
                  Clock frequency : 16.000000 MHz
                  Memory model : Small
                  External SRAM size : 0
                  Data Stack size : 256
                  ************************************************** ***/

                  #include <mega16.h>
                  #include <delay.h>
                  // Standard Input/Output functions
                  #include <stdio.h>

                  // Alphanumeric LCD Module functions
                  #asm
                  .equ __lcd_port=0x15 ;PORTC
                  #endasm
                  #include <lcd.h>

                  #define RXB8 1
                  #define TXB8 0
                  #define UPE 2
                  #define OVR 3
                  #define FE 4
                  #define UDRE 5
                  #define RXC 7

                  #define FRAMING_ERROR (1<<FE)
                  #define PARITY_ERROR (1<<UPE)
                  #define DATA_OVERRUN (1<<OVR)
                  #define DATA_REGISTER_EMPTY (1<<UDRE)
                  #define RX_COMPLETE (1<<RXC)

                  // USART Receiver buffer
                  #define RX_BUFFER_SIZE 8
                  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_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
                  if (++rx_counter == RX_BUFFER_SIZE)
                  {
                  rx_counter=0;
                  rx_buffer_overflow=1;
                  };
                  };
                  }

                  #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_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
                  #asm("cli")
                  --rx_counter;
                  #asm("sei")
                  return data;
                  }
                  #pragma used-
                  #endif

                  // USART Transmitter buffer
                  #define TX_BUFFER_SIZE 8
                  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_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
                  };
                  }

                  #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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
                  ++tx_counter;
                  }
                  else
                  UDR=c;
                  #asm("sei")
                  }
                  #pragma used-
                  #endif

                  // Declare your global variables here

                  void main(void)
                  {
                  unsigned char count;

                  // Input/Output Ports initialization
                  // Port A initialization
                  PORTA=0x00;
                  DDRA=0x00;

                  // Port B initialization
                  PORTB=0x00;
                  DDRB=0xB0;

                  // Port C initialization
                  PORTC=0x00;
                  DDRC=0xFF;

                  // Port D initialization
                  PORTD=0x01;
                  DDRD=0x02;


                  TCCR0=0x00;
                  TCNT0=0x00;
                  OCR0=0x00;

                  TCCR1A=0x00;
                  TCCR1B=0x00;
                  TCNT1H=0x00;
                  TCNT1L=0x00;
                  ICR1H=0x00;
                  ICR1L=0x00;
                  OCR1AH=0x00;
                  OCR1AL=0x00;
                  OCR1BH=0x00;
                  OCR1BL=0x00;

                  ASSR=0x00;
                  TCCR2=0x00;
                  TCNT2=0x00;
                  OCR2=0x00;

                  MCUCR=0x00;
                  MCUCSR=0x00;

                  // 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: 9600
                  UCSRA=0x00;
                  UCSRB=0xD8;
                  UCSRC=0x86;
                  UBRRH=0x00;
                  UBRRL=0x67;

                  ACSR=0x80;
                  SFIOR=0x00;

                  // Global enable interrupts
                  #asm("sei")

                  count = 10;

                  while (1)
                  {
                  putchar(count);
                  delay_ms(100);
                  count++;

                  };
                  }
                  Bạn thử thay PORTD và DDRD bằng các giá trị này thử nhé.

                  PORTD=0x01;
                  DDRD=0x02;

                  Chú ý: PORTD.0 là chân nhận dữ liệu nên phải khai báo là input.
                  PORTD.1 là chân truyền dữ liệu nên phải khai báo là output.
                  Phone: 0909319477
                  Email:

                  Comment


                  • #24
                    Nguyên văn bởi thanhtuandkh Xem bài viết
                    Mình đang mắc phần này, cũng không làm sao chạy được.

                    Đây là code của em:
                    Theo mình, bạn nên kiểm tra lại phần cứng, lưu ý kết nối Rx ben phia mạch kết nối với Tx bên PC va ngược lại. Code ko có vấn đề gì

                    Comment


                    • #25
                      Nguyên văn bởi lehanhla Xem bài viết
                      Bạn thử thay PORTD và DDRD bằng các giá trị này thử nhé.

                      PORTD=0x01;
                      DDRD=0x02;

                      Chú ý: PORTD.0 là chân nhận dữ liệu nên phải khai báo là input.
                      PORTD.1 là chân truyền dữ liệu nên phải khai báo là output.
                      Cảm ơn bác đã hướng dẫn nhưng em thấy khi định cấu hình sử dụng UART thì việc khai báo DDR của pin TX và RX là không cần thiết.

                      Mặt khác em cũng đã thử nhưng ...kết quả vẫn im re. KHông thể bắn được lên máy tính.

                      Bác nào đã từng làm món này giúp em với .....

                      Comment


                      • #26
                        Đoạn code này mình viết cho con Atmega32, mình test okie rồi.
                        Mình cũng thử truyền bằng giao diện, thấy cũng Okie

                        Attached Files
                        Last edited by lehanhla; 24-04-2009, 16:56.
                        Phone: 0909319477
                        Email:

                        Comment


                        • #27
                          Các bác xem giúp em đoạn cốt này với em muốn truyền con số thu được từ cảm biến qua adc lên vi điều khiển nhưng mà em mô phỏng bằng proteus thử thì không được nó hiện kí tự lung tung quá không ra những con số mà cảm biến thu được
                          Em khởi tạo tần số dao động của atmega16 là 8 mhz với sai số của khung truyền là 0.2% liệu đây có phải là nguyên nhân truyền sai không nhỉ các bác ?
                          Em thử mô phỏng khởi tạo bằng codevision C với tần số chuẩn như 11.0592 để sai số khung truyền 0.0% thì truyền lên đúng những kí tự mà mình đã truyền nhưng với lỗi 0.2% thi lại không được các bác giải thích giúp em với !
                          Mong các bác giúp đỡ

                          #include <mega16.h>
                          #include<delay.h>
                          // Alphanumeric LCD Module functions
                          #asm
                          .equ __lcd_port=0x18 ;PORTB
                          #endasm
                          #include <lcd.h>

                          #define RXB8 1
                          #define TXB8 0
                          #define UPE 2
                          #define OVR 3
                          #define FE 4
                          #define UDRE 5
                          #define RXC 7

                          #define FRAMING_ERROR (1<<FE)
                          #define PARITY_ERROR (1<<UPE)
                          #define DATA_OVERRUN (1<<OVR)
                          #define DATA_REGISTER_EMPTY (1<<UDRE)
                          #define RX_COMPLETE (1<<RXC)

                          // USART Receiver buffer
                          #define RX_BUFFER_SIZE 8
                          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_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
                          if (++rx_counter == RX_BUFFER_SIZE)
                          {
                          rx_counter=0;
                          rx_buffer_overflow=1;
                          };
                          };
                          }

                          #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_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
                          #asm("cli")
                          --rx_counter;
                          #asm("sei")
                          return data;
                          }
                          #pragma used-
                          #endif

                          // USART Transmitter buffer
                          #define TX_BUFFER_SIZE 8
                          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_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
                          };
                          }

                          #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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
                          ++tx_counter;
                          }
                          else
                          UDR=c;
                          #asm("sei")
                          }
                          #pragma used-
                          #endif

                          // Standard Input/Output functions
                          #include <stdio.h>

                          #define FIRST_ADC_INPUT 0
                          #define LAST_ADC_INPUT 1
                          unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
                          #define ADC_VREF_TYPE 0x20

                          // ADC interrupt service routine
                          // with auto input scanning
                          interrupt [ADC_INT] void adc_isr(void)
                          {
                          register static unsigned char input_index=0;
                          // Read the 8 most significant bits
                          // of the AD conversion result
                          adc_data[input_index]=ADCH;
                          // Select next ADC input
                          if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                          input_index=0;
                          ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
                          // Start the AD conversion
                          ADCSRA|=0x40;
                          }

                          // Declare your global variables here
                          void lcd_putnum(unsigned char so,unsigned char x,unsigned char y)
                          {
                          unsigned char a,b,c;
                          a=so/100;
                          b=(so-100*a)/10
                          c=(so-100*a-10*b);
                          lcd_gotoxy(x,y);
                          lcd_putchar(a+48);
                          lcd_putchar(b+48);
                          lcd_putchar(c+48);
                          }
                          void chuyendoi(unsigned char so)
                          {
                          unsigned char a,b,c;
                          a=so/100;
                          b=(so-100*a)/10;
                          c=(so-100*a-10*b);
                          putchar('a');
                          delay_ms(300);
                          putchar('b');
                          delay_ms(300);
                          putchar('c');
                          delay_ms(300);
                          }
                          void main(void)
                          {
                          // Declare your local variables here

                          // Input/Output Ports initialization
                          // Port A 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
                          PORTA=0x00;
                          DDRA=0x00;

                          // 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=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
                          PORTD=0x00;
                          DDRD=0x00;

                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 0 Stopped
                          // Mode: Normal top=FFh
                          // OC0 output: Disconnected
                          TCCR0=0x00;
                          TCNT0=0x00;
                          OCR0=0x00;

                          // Timer/Counter 1 initialization
                          // Clock source: System Clock
                          // Clock value: Timer 1 Stopped
                          // Mode: Normal top=FFFFh
                          // OC1A output: Discon.
                          // OC1B output: Discon.
                          // Noise Canceler: Off
                          // Input Capture on Falling Edge
                          // Timer 1 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: Timer 2 Stopped
                          // Mode: Normal top=FFh
                          // OC2 output: Disconnected
                          ASSR=0x00;
                          TCCR2=0x00;
                          TCNT2=0x00;
                          OCR2=0x00;

                          // External Interrupt(s) initialization
                          // INT0: Off
                          // INT1: Off
                          // INT2: Off
                          MCUCR=0x00;
                          MCUCSR=0x00;

                          // 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: 9600
                          UCSRA=0x00;
                          UCSRB=0xD8;
                          UCSRC=0x86;
                          UBRRH=0x00;
                          UBRRL=0x33;


                          // Analog Comparator initialization
                          // Analog Comparator: Off
                          // Analog Comparator Input Capture by Timer/Counter 1: Off
                          ACSR=0x80;
                          SFIOR=0x00;

                          // ADC initialization
                          // ADC Clock frequency: 125.000 kHz
                          // ADC Voltage Reference: AREF pin
                          // ADC Auto Trigger Source: None
                          // Only the 8 most significant bits of
                          // the AD conversion result are used
                          ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
                          ADCSRA=0xCE;

                          // LCD module initialization
                          lcd_init(16);

                          // Global enable interrupts
                          #asm("sei")

                          while (1)
                          {
                          unsigned char x;
                          // Place your code here
                          lcd_putnum(2*adc_data[1],0,0);
                          // lcd_putnum(adc_data[0],0,1);
                          x=2*adc_data[1] ;
                          chuyendoi(x);
                          };
                          }
                          Last edited by huetkiem; 24-04-2009, 23:06.

                          Comment


                          • #28
                            Giúp mình về chuong trình nhận dư liệu bằng cổng com viết bằng c#
                            Chương trình nhận dữ liệu qua cổng com của mình nhận dữ liệu qua Com, ở tốc độ 9600 thì rất ngon, nhưng mà lên tốc độ 115200 thì dữ liệu tải lên toàn bị lỗi font và không đủ. Các bác giải thích giúp tớ được không?
                            : dữ liệu đẩy lên cứ 2 giây 1 lần có dạng:
                            lat:abc,long:abc,accuracy:72.4237,view:10;

                            code của tớ đây
                            delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string
                            private void DataReceive(object obj, SerialDataReceivedEventArgs e)
                            {
                            try {
                            System.Threading.Thread.Sleep(3000);
                            InputData = P.ReadExisting();

                            }
                            catch { InputData = "Lỗi nhận từ COM."; }

                            string a = InputData;
                            if (a != String.Empty)
                            {
                            //txtkq.Text = InputData; // Ko dùng đc như thế này vì khác threads .
                            SetText(a); // Chính vì vậy phải sử dụng ủy quyền tại đây. Gọi delegate đã khai báo trước đó.
                            }
                            }
                            // Hàm của em nó là ở đây. Đừng hỏi vì sao lại thế.
                            private void SetText(string text)
                            {
                            string strText = DateTime.Now.ToString() + ": \n" + text + "\n";
                            if (this.txtkq.InvokeRequired)
                            {
                            SetTextCallback d = new SetTextCallback(SetText); // khởi tạo 1 delegate mới gọi đến SetText
                            this.Invoke(d, new object[] { strText });

                            }
                            else this.txtkq.Text = strText;
                            SaveGPSToDB(InputData);

                            }

                            Comment


                            • #29
                              Bác mất căn bản quá, nhiều người cũng như bác vậy, code thấy um sùm, ghê gớm, nhưng hỏi là biết gà rồi. Code này chắc chép ở đâu.

                              Comment

                              Về tác giả

                              Collapse

                              yen_trang Tìm hiểu thêm về yen_trang

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X