Thông báo

Collapse
No announcement yet.

Cần giúp về Timer/Counter ATMEGA8.

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

  • Cần giúp về Timer/Counter ATMEGA8.

    Mình cần sử dụng 2 timer 8 bit là timer0 và timer2 trong atmega8 để thực hiện băm xung. Với at89 thì có 1 đoạn code rất hay dùng 2 timer:
    Code:
    #include <regx51.h>
     
    unsigned int code mang_t0[]={0,2000,4000,6000,8000,10000,12000,14000,16000,18000,20000};
     
    unsigned int code mang_t1[]={20000,18000,16000,14000,12000,10000,8000,6000,4000,2000,0};
     
     
    unsigned char count_s;
    unsigned char count;
    void T0_ISR();
    void T1_ISR();
    void init();
     
    void main() {
        init();
        while(1);
    }
     
    void init() {
        count=0;//10 cap do
        count_s=0;
        TMOD=0x11;//timer 0, 1 che do 1 16 bit
        P1=0xff;
        TR0=1;
        TF0=1;//ngat luon
        EA=1;
        ET0=1;
        ET1=1;
    }
     
    void T0_ISR() interrupt TF0_VECTOR {
        TR0=0;
        TH1=(0xffff-mang_t1[count])>>8;
        TL1=(0xffff-mang_t1[count])&0xff;
        //P1=mp[count];
        P1=0xff;
        TR1=1;
    }
     
    void T1_ISR() interrupt TF1_VECTOR {
        TR1=0;
        TH0=(0xffff-mang_t0[count])>>8;
        TL0=(0xffff-mang_t0[count])&0xff;
        ++count_s;
        if(count_s==5) {
            count_s=0;
            ++count;
            if(count==11) {
                count=0;
            }
        }
        P1=0x00;
        TR0=1;
    }
    ..
    Tức là 1 timer cho xuất mức logic 0, timer kia xuất mức 1. Khi ngắt tràn timer này chính là lúc bắt đầu khởi tạo timer kia...cứ thế sẽ điều được xung để xuất ra. Cái này dùng cho led sáng dần, mờ dần rất hay.
    _ Tuy nhiên khi mình áp dụng với ATMEGA8 thì chưa biết cách biến đổi như thế nào.
    Đây là code mình định làm cho con led mờ mờ (thời gian xuất 1 =1/3 thời gian xuất 0)

    Code:
    #include <mega8.h>
    
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {   TCCR2 = 0x05;
        TCNT2 = 0X10;
        PORTD = 0Xff;
          }
    
    // Timer2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {  TCNT0 = 0XAA;
       PORTD = 0X00;
        }
    
    // Declare your global variables here
    
    void main(void)
    {
    
    PORTB=0x00;
    DDRB=0xFF;
    
    PORTC=0x00;
    DDRC=0xFF;
    
    PORTD=0x00;
    DDRD=0xFF;
    
    TCCR0=0x05; // thực hiện chia tần cho 1024
    TCNT0=0x01;
              // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x41; // cho phép ngắt trên timer0 và timer2
    
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
    
          }
    }
    ......
    Khi building thì không có lỗi nhưng lắp mạch thì không thực hiện được.
    Mọi người xem giúp mình nhé.
    p/s: Mục đích là muốn điều xung trên tất cả các PORT dùng 2 timer0 và timer2

Về tác giả

Collapse

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

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

Collapse

  • Andrea14
    Vấn đề về tốc độ quay
    bởi Andrea14
    Chào mọi người,

    Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
    12-12-2025, 12:42
  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
Đang tải...
X