PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-12-2008, 04:47 PM   #1
nms48
Đệ tử 1 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 11
:
cho mình hỏi tí: minh mô phỏng mà chay kô đúng ,có ai biết chương trình còn sai chỗ nào kô.(mình thấy timer0 chay ko đúng.timer1 thì dường như là chưa chạy)

nguyen lý như sau: lúc có xung cạnh lên thì khởi tạo timer0 5ms.khi timer0 tràn thì xuất xung ra D0 và khời tạo timer1 10ms.khi timer1 tràn thì xuất xung ra D1,bình thường thì xuất xung ra D2

chương trình mình như sau:

Code:
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

// ngat ngoai---------------
#int_EXT
void EXT_isr()
{
   set_timer0(40534);           //khoi tao timer0 5ms thi tran

}

//ngat timer0------------------
#int_timer0
void timer0_isr()
{
    output_high(pin_D0);
    delay_us(10);
    output_low(pin_D0);
    set_timer1(15534);           // khoi tao timer1 10ms

}
//ngat timer1--------------
#int_timer1
void timer1_isr()
{    output_high(pin_D1);
     delay_us(10);
     output_low(pin_D1);
}

// chuong trinh chinh
void main()
{
   enable_interrupts(INT_EXT);
   ext_int_edge(L_TO_H);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   enable_interrupts(int_timer0);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   enable_interrupts(int_timer1);
   enable_interrupts(global);

while(true)
{
   output_high(pin_d2);
   delay_ms(100);
   output_low(pin_d2);
    delay_ms(100);
}
}
cám ơn các bạn rất nhiều và mong được giúp đỡ sớm

thay đổi nội dung bởi: nms48, 31-12-2008 lúc 10:47 AM.
nms48 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-12-2008, 11:17 PM   #2
nms48
Đệ tử 1 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 11
:
trời ơi các cao thủ của làng pic đâu hết rùi : giúp minh với nếu kô mình chết chắc hichic.còn 3 ngày nữa nộp luận văn rùi, mình cũng biết làm luận văn thì tự nghiên cưu là chính -----nhưng mình đang bí ........help help me................

kô lẽ cả một diễn đàn với những người nhiệt thành như thế này mà kô biết cái chương trình của mình sai chỗ nào hay sao????????
nms48 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-12-2008, 01:07 AM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Timer 0 trong PIC16F877(A) là một timer 8-bit, việc bạn thiết lập số đếm 16-bit cho nó không làm thay đổi thực tế này. Trình dịch mà bạn đang dùng sẽ chỉ dùng 8 bit thấp của giá trị mà bạn đã mô tả để đặt vào thanh ghi đếm của Timer 0. Do đó, có thể dự đoán rằng Timer 0 không chạy đúng ý đồ ban đầu của bạn.

Trong vòng lặp chính, bạn không bao giờ xuất logic '0' ra D2.

Bạn đang thực hiện luận văn mà lại chờ cho đến khi chỉ còn 5 ngày là đến hạn nộp mới đặt câu hỏi ở diễn đàn thì chính bạn mới là người đáng trách, không nên trách các thành viên của diễn đàn. Diễn đàn hoạt động trên tinh thần tự nguyện, cùng giúp nhau tiến bộ, và không thành viên nào có nghĩa vụ phải đảm bảo rằng ai đó làm kịp bài tập, đồ án, hoặc luận văn để nộp, đặc biệt với những trường hợp chỉ còn vài ngày là hết hạn nộp.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-12-2008, 07:18 PM   #4
daythienha2007
Đệ tử 2 túi
 
Tham gia ngày: Apr 2008
Bài gửi: 26
:
Trích:
Nguyên văn bởi nms48 View Post
cho mình hỏi tí: minh mô phỏng mà chay kô đúng ,có ai biết chương trình còn sai chỗ nào kô.(mình thấy timer0 chay ko đúng.timer1 thì dường như là chưa chạy)

nguyen lý như sau: lúc có xung cạnh lên thì khởi tạo timer0 5ms.khi timer0 tràn thì xuất xung ra D0 và khời tạo timer1 10ms.khi timer1 tràn thì xuất xung ra D1,bình thường thì xuất xung ra D2

chương trình mình như sau:

Code:
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

// ngat ngoai---------------
#int_EXT
void EXT_isr()
{
   set_timer0(40534);           //khoi tao timer0 5ms thi tran

}

//ngat timer0------------------
#int_timer0
void timer0_isr()
{
    output_high(pin_D0);
    delay_us(10);
    output_low(pin_D0);
    set_timer1(15534);           // khoi tao timer1 10ms

}
//ngat timer1--------------
#int_timer1
void timer1_isr()
{    output_high(pin_D1);
     delay_us(10);
     output_low(pin_D1);
}

// chuong trinh chinh
void main()
{
   enable_interrupts(INT_EXT);
   ext_int_edge(L_TO_H);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   enable_interrupts(int_timer0);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   enable_interrupts(int_timer1);
   enable_interrupts(global);

while(true)
{
   output_high(pin_d2);
   delay_ms(100);
   output_low(pin_d2);
    delay_ms(100);
}
}
cám ơn các bạn rất nhiều và mong được giúp đỡ sớm
Khi bạn thiết lập timer :" setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
enable_interrupts(int_timer0); "
thì timer0ddax chạy rôif,khong fải tới lúc bạn set_timer0 nó mới chạy đâu.Tương tự đối với timer1.Hơn nưa Thời gian bạn delay quá ngắn,sao bạn biết timer1 ko chạy
daythienha2007 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:07 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam