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 20-12-2012, 04:54 AM   #1
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
Dùng ngắt ngoài để đếm xung!!!

các anh cho em hỏi chương trình sau bị lỗi gì mà sao em dùng ngắt ngoài để đếm xung mà chỉ hiện lên số 0 ak??? thanks all!!!
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(d)
#priority ext,timer1
int16 dem,j,x,count,nghin,tram,chuc,dv;
unsigned char MA7DOAN[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F};
#int_ext
void ngat_RB0()
{
++count;
x=count;

}

void main()
{
set_tris_b(0b00000001);
set_tris_d(0);
set_tris_c(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
//count=0;
while(1)
{
nghin=x/1000;
x=x%1000;
tram=x/100;
dem=x%100;
chuc=x/10;
dv=x%10;
for(j=0;j<=100;j++)
{ output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_us(1000);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_us(1000);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_us(1000);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_us(1000); }
}
}
huydungsh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-12-2012, 08:40 AM   #2
hatuan296
Làm quen với PIC
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
:
Bạn thay XT = HS trong dòng này , thạch anh hơn 10Mhz thì phải set là HS bạn ơi . #fuses NOWDT,PUT,XT,NOPROTECT
Sau đó từ từ tính tiếp .
hatuan296 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2012, 10:28 AM   #3
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
anh ơi em sửa như anh nói ma sao không được!! vẫn cứ hiện lên số 0, mong anh giúp cho ak!! em cảm ơn nhiều lắm!! mà anh có code mẫu về phần này cho em xin với??
huydungsh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2012, 12:31 PM   #4
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Bạn bỏ tiếp mấy dòng này đi.
#use fast_io(b)
#use fast_io(d)
#priority ext,timer1
Và nữa là: biến x của bạn sẽ bị chia liên tục trong khi chờ đợi xung tiếp theo đến (việc chia liên tục sẽ làm cho x=0)
Ý tưởng sửa như thế này. Bỏ biến X đi, dùng trực tiếp biến count:
Code:
nghin=count/1000;
tram=(count%1000)/100; 
chuc=(count%100)/10; 
dv=count%10;
Phải ko nhỉ, bạn thử lại xem?!
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2012, 07:53 PM   #5
pstin
Đệ tử 7 túi
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
:
Mô phỏng

Chịu khó luyện tay nghề mới "lên" được!!!..
Hình Kèm Theo
File Type: png dem xung.png (162.5 KB, 11 lần tải)
pstin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-12-2012, 07:47 PM   #6
pstin
Đệ tử 7 túi
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
:
Chương trình chạy ngon lành nè!!!!,...
Hiển thị led chậm lại, lặp lại ít lần để dễ quan sát trên Protues!!!.
Seg a,b,c,d,e,f,g....lần lượt nối với C0, C1,....C6

#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(d)
#priority ext,timer1
int16 dem,j,x,count=0,nghin,tram,chuc,dv,y;
unsigned char MA7DOAN[] = {0x40,0x79,0xa4,0x30,0x19,0x12,
0x02,0x78,0x00,0x10};

#int_ext
void ngat_RB0()
{
char c;
c=input_b();
++count;
x=count;

}

void main()
{
set_tris_b(0b00000001);
set_tris_d(0);
set_tris_c(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
//count=0;
while(TRUE)
{
nghin=x/1000;
y=x%1000;
tram=y/100;
dem=y%100;
chuc=dem/10;
dv=dem%10;
for(j=0;j<=10;j++)
{
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);
}
}
}

thay đổi nội dung bởi: pstin, 25-12-2012 lúc 10:41 AM.
pstin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2013, 07:36 PM   #7
caothanhtiger
Nhập môn đệ tử
 
Tham gia ngày: Nov 2012
Bài gửi: 2
:
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);

led 7SEG này anot chung sao set muc "0" nhỉ output_d(0xbf)=10111111

nêu mình nghĩ đúng thì phải set mức "1" thì led mới sáng được chứ nhỉ output_d(0x40) = 01000000 tương ứng hàng đơn vị.

mong bạn giải thích dùm . mới tìm hiểu về lĩnh vực về pic
caothanhtiger vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2013, 09:17 PM   #8
caothanhtiger
Nhập môn đệ tử
 
Tham gia ngày: Nov 2012
Bài gửi: 2
:
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);

led 7SEG này anot chung sao set muc "0" nhỉ output_d(0xbf)=10111111

nêu mình nghĩ đúng thì phải set mức "1" thì led mới sáng được chứ nhỉ output_d(0x40) = 01000000 tương ứng hàng đơn vị.

mong bạn giải thích dùm . mới tìm hiểu về lĩnh vực về pic
caothanhtiger vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2013, 09:26 AM   #9
pstin
Đệ tử 7 túi
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
:
Trích:
Nguyên văn bởi caothanhtiger View Post
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);

led 7SEG này anot chung sao set muc "0" nhỉ output_d(0xbf)=10111111

nêu mình nghĩ đúng thì phải set mức "1" thì led mới sáng được chứ nhỉ output_d(0x40) = 01000000 tương ứng hàng đơn vị.

mong bạn giải thích dùm . mới tìm hiểu về lĩnh vực về pic
Cũng tùy theo người dùng khoái chiêu nào thôi!!!,..
Mạch sử dụng transistor PNP, loại này phải kích mức thấp mới dẫn, dòng kích sẽ chạy từ cực E ---> B.
Kích trasistor NPN thì kích mức 1, dòng kích sẽ chạy từ cực B ---> E, kích kiểu này có nhiều "hạn chế", chủ yếu dùng kể "kích dẫn nối mass",...nếu dùng kích ở phía Vcc thay cho transistor như sơ đồ ở trên...thì áp ra bị sụt áp phía đầu Anot của led 7 đoạn,...áp sẽ < 4.3V.
(Cái sơ đồ ở trên đáng lẽ phải có các điện trở hạn dòng vô port_C,..tại làm biếng vẽ nên nó vậy).
pstin 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:50 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