Thông báo

Collapse
No announcement yet.

Xin các bác chỉ giúp em lệnh này với

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

  • Xin các bác chỉ giúp em lệnh này với

    Em đang dùng ADC của AVR, xin các bác chỉ giúp em một số lệnh với nhé.

    Lệnh interrupt [ADC_INT] void adc_isr(void)

    Nghĩa là gì vậy ạ?

    PORTB=(unsigned char) ~(ADCW>>2);

    thì ~(ADCW>>2); nghĩa là gì ạ? dấu ~ làm gì vậy? cảm ơn các bác. Em chỉ biết ADCW là 1 thanh ghi nào đấy liên quan việc chuyển đổi ADC, dịch sang phải 2 nghĩa là gì nhỉ??

    Chương trình ở dưới:

    // I/O register definitions for avr128
    #include <MEGA128.h>
    // delay functions
    #include <delay.h>

    #define ADC_VREF_TYPE 0x00
    // ADC interrupt service routine
    interrupt [ADC_INT] void adc_isr(void)
    {
    // The LEDs will display the 8 most
    // semnificative ADC bits
    PORTB=(unsigned char) ~(ADCW>>2);
    // 20ms delay
    delay_ms(20);
    // Start a new AD conversion
    ADCSRA|=0x40;
    }

    void main(void)
    {
    // Port B initialization
    PORTB=0xFF; // all outputs
    DDRB=0xFF; // all LEDs are initially off
    delay_ms(20);
    delay_ms(20);
    // ADC initialization
    // ADC Clock frequency: 57.656 kHz
    // ADC Interrupts: On
    ADCSRA=0x8E;

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

    // Select ADC input 0
    ADMUX=0;

    // Start the first AD conversion
    ADCSRA|=0x40;

    // All the job is done by ADC interrupts
    while (1);
    }

  • #2
    interrupt [ADC_INT] void adc_isr(void)

    khi mình viết lệnh này em thấy trong C chuẩn đâu có hỗ trợ lệnh này các bác nhĩ???? sao mình biết khi lệnh này được dùng thì điều gì sẽ xảy ra vậy???

    ADC_INT trong ngoặc vuông nghĩa là sao vậy? nếu ko có ngặc vuông thì điều gì xảy ra vậy bác ơi?

    thanks

    Comment


    • #3
      interrupt: đây là từ khóa (chính xác là chỉ thị) trong CV. Chỉ cho biết đây là trình phục vụ ngắt (ISR).
      [ADC_INT] : phải có, đây là địa chỉ của bảng vector ngắt ADC. Có thể sửa [ADC_INT] thành [20] với 20 là địa chỉ của vector ngắt ADC trong con mega128 (chính xác là 20 hay bao nhiêu tui không nhớ rõ, bác xem trong file .inc).
      adc_isr : tên này tùy chọn, thích thì sửa là thavali cũng được
      void ....(void) : hai cái void là bắt buộc, vì một chương trình ISR không được có tham số trả về.
      Ngôn ngữ C cho MCU không thể gọi là C chuẩn được, chính xác hơn phải là Like C (gần giống cờ)

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X