PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-04-2010, 12:09 AM   #1
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
mong được chỉ giao vấn đề TIMER0 pic16f88

chào các bạn.mình mới test thử TIMER0 của pic16f88 nhưng thấy nó sai nhiều quá mà mình cũng ko tìm ra nguyên nhân.
mình port code nên mong các bạn xem dùm
cám ơn nhiều!

Trích:
#include <htc.h>
__CONFIG(INTIO & PWRTDIS & BORDIS & WDTDIS & MCLRDIS & LVPDIS);
#define _XTAL_FREQ 20000000
void TIMER0_Init()
{
T0CS = 0;
PSA = 0;
OPTION = 0x00; // tỉ lệ 1:2
GIE = 1;
TMR0IE = 1;
TMR0IF = 0;
TMR0 =6;
}
void interrupt inter0(void)
{
count++;
TMR0IF=0;
TMR0 = 6;
}
void HienThi()
{
if(count==10000) //tính 1s thì nhảy 1 số (nhưng mình bấm đông hồ thì 7s)
{
PORTB=LED_7SEG[code];
code++;
if(code==10)
{
code=0;
}
}

}
tái sao khi mình thay
if(count==10000) bằng if(count==400)
mà vẫn sau 7s mới thấy nhảy 1 số
mình làm mạch và nạp chíp thật chứ ko phải mô phổng sao lại sai nhiều thế nhỉ
mong các bạn giải thích dùm

thay đổi nội dung bởi: namqn, 19-04-2010 lúc 09:18 AM. Lý do: định dạng code
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2010, 09:20 AM   #2
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
Có lẽ mạch phần cứng của bạn chưa ổn, tham khảo bài viết #1 trong luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=3451

Bạn dùng INTIO (bộ dao động nội) thì làm sao tần số đến 20000000 Hz được.

Ngoài ra, không rõ bạn khai báo các biến code và count ra sao. Riêng với tên biến code, nó trùng với 1 từ khóa để định dạng các đoạn mã trên diễn đàn.

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 19-04-2010, 09:56 AM   #3
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi namqn View Post
Có lẽ mạch phần cứng của bạn chưa ổn, tham khảo bài viết #1 trong luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=3451

Bạn dùng INTIO (bộ dao động nội) thì làm sao tần số đến 20000000 Hz được.

Ngoài ra, không rõ bạn khai báo các biến code và count ra sao. Riêng với tên biến code, nó trùng với 1 từ khóa để định dạng các đoạn mã trên diễn đàn.

Thân,
khai báo biến: unsigned char count,code
INTIO em nghĩ là cấu hình bắt buộc của pic 16f88.theo như em đã hỏi ở bài trước của diễn đàn.http://www.picvietnam.com/forum/showthread.php?t=6115
cho em hỏi thêm.Nếu em mắc vào 1 chân của VDK 1 cái còi bíp. thì có thể dùng timer để khi bấm nút thì còi kêu trong 1 khoảng thời gian rùi tự tắt
CODE viết cho còi
if(button==0)//nút được bấm
{
COI=1;// CÒI KÊU
while(~BUTTON)
COI =0;
}
nếu viết như vậy thì phải bỏ nút ra còi mới tắt
em muốn bấm 1 cái còi kêu 1 thời gian rùi tự tắt ko cần bỏ nút
mong các bạn giúp đỡ!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2010, 12:04 PM   #4
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
Trích:
Nguyên văn bởi kiemkhach10 View Post
khai báo biến: unsigned char count,code
INTIO em nghĩ là cấu hình bắt buộc của pic 16f88.theo như em đã hỏi ở bài trước của diễn đàn.http://www.picvietnam.com/forum/showthread.php?t=6115
...
Như vậy count và code chỉ có độ dài 8-bit. Với biến count có độ dài 8-bit, phép so sánh count == 10000 sẽ cho thời gian delay ngắn hơn phép so sánh count == 400. Lý do: chỉ có 8 bit thấp nhất của count được so sánh với 8 bit thấp nhất của các giá trị đó. Cụ thể: phép so sánh count == 10000 = 0x2710 tương đương với so sánh count == 0x10 (tức là 16), còn phép so sánh count == 400 = 0x0190 tương đương với so sánh count == 0x90 (tức là 144).

Có lẽ bạn cần học thêm về số học trong hệ nhị phân, và các kiểu dữ liệu trong C.

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 19-04-2010, 12:14 PM   #5
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi namqn View Post
Như vậy count và code chỉ có độ dài 8-bit. Với biến count có độ dài 8-bit, phép so sánh count == 10000 sẽ cho thời gian delay ngắn hơn phép so sánh count == 400. Lý do: chỉ có 8 bit thấp nhất của count được so sánh với 8 bit thấp nhất của các giá trị đó. Cụ thể: phép so sánh count == 10000 = 0x2710 tương đương với so sánh count == 0x10 (tức là 16), còn phép so sánh count == 400 = 0x0190 tương đương với so sánh count == 0x90 (tức là 144).

Có lẽ bạn cần học thêm về số học trong hệ nhị phân, và các kiểu dữ liệu trong C.

Thân,
em port nhầm: biến unsigned char code //code này em khai báo 1 mảng số 0>>9(led 7thanh)
unsigned int count//cái này mới là biến so sánh
anh cho em hỏi cấu hình cho pic16f88 như vậy là đúng chưa và anh giúp em thuật toán hoặc ví dụ nhỏ cho doạn chương chình CÒI như em nêu ở trên
cám ơn nhiều!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2010, 01:32 AM   #6
chungcb86
Đệ tử 1 túi
 
chungcb86's Avatar
 
Tham gia ngày: Dec 2009
Bài gửi: 24
:
nếu yêu cầu chỉ có thế thì code này không bít có đáp ứng đc yêu cầu của bạn không
CODE viết cho còi
if(button==0)//nút được bấm
{
COI=1;// CÒI KÊU
delay_ms(thoigiancanthiet);
COI =0;
while(~BUTTON)
}

Hoặc bạn có thể kiểm tra xem có sự chuyển trạng thái của nút nhấn không? nếu không thì không phát còi. nếu có thì phát còi một thời gian rồi dừng.
chungcb86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2010, 05:30 PM   #7
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi chungcb86 View Post
nếu yêu cầu chỉ có thế thì code này không bít có đáp ứng đc yêu cầu của bạn không
CODE viết cho còi
if(button==0)//nút được bấm
{
COI=1;// CÒI KÊU
delay_ms(thoigiancanthiet);
COI =0;
while(~BUTTON)
}

Hoặc bạn có thể kiểm tra xem có sự chuyển trạng thái của nút nhấn không? nếu không thì không phát còi. nếu có thì phát còi một thời gian rồi dừng.
thank bạn mình đã làm được rùi
kiemkhach10 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à 11:53 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