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 24-02-2012, 04:05 AM   #1
cutoi
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 3
:
Nháy led RB0 Timer1

E viết đoạn code, nhưng nó không chạy theo ý mình được.
Giờ e muốn cho delay =1s thì làm sao ạ?
CODE:

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x00

int16 count;
int1 led;
//Chuong trinh ngat TMR0
#int_timer1
void interrupt_timer1()
{
set_timer1(3035);
++count;
if(count == 3500) //
{
count=0;
led=~led;
if (led==1)output_high(pin_B0);
if (led==0)output_low(pin_B0);

}
}

//Chuong trinh chinh
void main(void)
{
set_tris_b(0);
set_timer1(3035);
setup_timer_1(T1_INTERNAL&T1_DIV_BY_8);
enable_interrupts(int_timer1);
enable_interrupts(global);
led=1;
while (true){
interrupt_timer1();
}
}

E mới học nên cũng chẳng hiểu là con PIC nó sẽ đọc lệnh theo thứ tự nào, bác nào chỉ rõ giúp e mới được không ạ.
Một điều nữa là: e thay đổi set_timer1 để căn 1s mà ko thấy tốc độ nháy thay đổi gì, nếu muốn thay đổi tốc độ đèn thì lại phải thay đổi biến count ?????
Cảm ơn mấy bác nhiều, ngồi cả ngày mà ko xong... Oải quá
cutoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-02-2012, 12:37 PM   #2
cyber-life
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 1
:
Bạn có thể làm như sau:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
set_timer1(6);// T = 2*(256 - 6)*1us = 500us
count == 2000 // 2000*500us = 1s
cyber-life vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2012, 06:07 AM   #3
Aducbkfet
Nhập môn đệ tử
 
Tham gia ngày: Sep 2010
Bài gửi: 5
:
Timer1

Trích:
Nguyên văn bởi cyber-life View Post
Bạn có thể làm như sau:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
set_timer1(6);// T = 2*(256 - 6)*1us = 500us
count == 2000 // 2000*500us = 1s
Sao lại là T = 2*(256 - 6)*1us = 500us nhỉ?
Timer1 là timer 16 bit mà mình nghĩ nó phải là 65535 chứ?
Aducbkfet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2012, 11:23 AM   #4
cutoi
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 3
:
Thumbs down

Trích:
Nguyên văn bởi Aducbkfet View Post
Sao lại là T = 2*(256 - 6)*1us = 500us nhỉ?
Timer1 là timer 16 bit mà mình nghĩ nó phải là 65535 chứ?
Tên nick nghe quen quen nhể

Mình làm được rồi, hôm trước đọc được cái kỹ năng tạo vòng lặp sử dụng lệnh DECFSZ và GOTO xếp xen kẽ.
cutoi 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à 04:30 PM.


Đượ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