1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Làm trễ 1 micro giây trong VC++ bằng cách nào?

Chủ đề trong 'Điện - Điện tử - Viễn thông' bởi HaveIEverToldYou, 15/06/2005.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. HaveIEverToldYou

    HaveIEverToldYou Thành viên mới

    Tham gia ngày:
    14/05/2005
    Bài viết:
    15
    Đã được thích:
    0
    Làm trễ 1 micro giây trong VC++ bằng cách nào?

    Làm trễ 1 micro giây trong VC++ bằng cách nào?
    Mong các bạn chỉ giùm mình với
  2. blueman

    blueman Thành viên mới

    Tham gia ngày:
    19/02/2002
    Bài viết:
    71
    Đã được thích:
    0
    Bạn làm gì mà cần độ chính xác thế, em tưởng chỉ cần đến mili giây là đủ rồi chứ bác.
  3. werty98

    werty98 Thành viên gắn bó với ttvnol.com

    Tham gia ngày:
    17/06/2003
    Bài viết:
    8.196
    Đã được thích:
    5.601
    CHế một mạch dao động 1MHz rồi cho vào một ngắt ISA hoặc PCI nào đó. Khi lập trình chỉ cần bắt ngắt này là OK.
  4. biettiti

    biettiti Thành viên mới

    Tham gia ngày:
    23/12/2002
    Bài viết:
    1.573
    Đã được thích:
    0
    Bác xem thử 1 đoạn mã này nhé. Tham khảo rồi mô đi phê cũng ổn . Ở đây có 2 đoạn mã làm trễ mức ms và mức us
    /* setup_timer(cmd)
    *
    * Initialise PORTB and CTC.
    *
    */
    void setup_timer(int cmd)
    {
    asm pushf
    asm cli
    asm in al,PORTB
    asm and al,0xFD /* vô hiệu speaker */
    asm or al,1 /* kích hoạt timer 2 gate */
    asm out PORTB,al
    asm mov ax,cmd
    asm out (TIMER+3),al
    asm popf
    }
    /* ms_delay(ticks)
    * làm trễ = ticks*0.8381 microseconds, ticks<32768, trễ tối đa là 27ms
    */
    void ms_delay(int ticks)
    {
    unsigned hi,lo;
    if ( ticks == 0 ) {
    setup_timer(0x90);
    return;}
    hi = ticks>>8;
    lo = ticks&0xFF;
    asm pushf
    asm cli
    asm mov ax,lo
    asm out (TIMER+2),al
    asm in al,PORTB
    asm mov ax,hi
    asm out (TIMER+2),al
    asm popf
    mschk:
    asm mov al,0x0
    asm out (TIMER+3),al
    asm in al,(TIMER+2)
    asm in al,PORTB
    asm in al,(TIMER+2)
    asm shl al,1
    asm jnc mschk
    // setup_timer(0x90);
    }
    /* us_delay(ticks)
    * lamf trễ = ticks*0.8381 microseconds, ticks<128, trễ khoảng 107us
    */
    void us_delay(int ticks)
    {
    if ( ticks == 0 )
    return;
    asm pushf
    asm cli
    asm mov ax,ticks
    asm out (TIMER+2),al
    uschk:
    asm mov al,0x80
    asm out (TIMER+3),al
    asm in al,(TIMER+2)
    asm shl al,1
    asm jnc uschk
    asm popf
    }
    /* reset_timer()
    void reset_timer(void)
    {
    asm pushf
    asm cli
    asm mov al,0xB6
    asm out (TIMER+3),al
    asm in al,PORTB
    asm and al,0xFC
    asm out PORTB,al
    asm popf
    }

Chia sẻ trang này