|
Tài trợ cho PIC Vietnam |
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 |
|
Ðiều Chỉnh | Xếp Bài |
20-12-2012, 04:54 AM | #1 |
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); } } } |
20-12-2012, 08:40 AM | #2 |
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 . |
21-12-2012, 10:28 AM | #3 |
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??
|
21-12-2012, 12:31 PM | #4 |
Đệ 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; |
21-12-2012, 07:47 PM | #5 |
Đệ 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. |
21-12-2012, 07:53 PM | #6 |
Đệ 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!!!..
|
12-01-2013, 07:36 PM | #7 |
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 |
12-01-2013, 09:17 PM | #8 |
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 |
13-01-2013, 09:26 AM | #9 | |
Đệ tử 7 túi
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
: |
Trích:
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). |
|
|
|