![]() |
![]() |
#76 |
Đệ tử 2 túi
Tham gia ngày: Nov 2005
Bài gửi: 45
: |
Chào boys!
* set_timer0(6); đây là phương thức gọi hàm. set_timer0() là một hàm, 6 là tham số. Còn hàm này làm gì thì bạn phải tự tìm hiểu lấy. * ++count; là thực hiện tăng biến count lên 1 đơn vị. Nó giống lệnh count=count+1. Còn có một cú pháp nhữa là count++. Hai lệnh lệnh này có sự khác nhau về thứ tự thực hiện khi nằm trong một biểu thức so sánh. * if(count==2000) là phép so sánh. Nếu giá trị của biến count bằng 2000 thì kết quả của phép so sánh là True ngược lại là False. * a là .. mình chịu thua!?!? ![]() Bạn nên tìm một cuốn sách lập trình C của Quách Tuấn Ngọc để hiểu về những điều này. Chúc bạn thành công. hpecom.
__________________
Biết thì nói là biết, Không biết thì nói là không biết, .. |
![]() |
![]() |
#77 |
Đệ tử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 32
: |
CCS for pic6F877A
cảm ơn anh hpecom đã chỉ giáo
![]() |
![]() |
![]() |
#78 |
Đệ tử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 32
: |
CCS C for PIC16F877A
Nhân tiện anh cho em hỏi thêm : giả sử em viết một ct nháy led (cho nó chạy như vòng lặp ), đầu tiên kt các khóa để biết ct sẽ nháy led kiểu nào. sau đó thì ct sẽ thực hiện lệnh nháy đèn led, nếu như sau khi ta bấm nút chọn kiểu nháy, ct sẽ tiếp tục thực hiện lệnh tiếp theo mà ta đổi ý bấm nút khác để đổi kiểu thì ct sẽ không nhận vì đang thực hiện các lệnh bật-tắt led. Bài tập này hình như có ở trang 2, 3 dùng interrup và timer0, Tại sao nhỉ ?
|
![]() |
![]() |
#79 |
Đệ tử 2 túi
Tham gia ngày: Nov 2005
Bài gửi: 45
: |
Nếu bạn sử dụng vòng lặp thì nút bấm sẽ ko được nhận trong khi vòng lặp đang thực hiện. Cách giải quyết bài toán như sau:
_ Bạn hãy khai báo 1 biến toàn cục. Biến này lưu kiểu chớp. Hàm chớp sẽ dựa vào giá trị biến này mà đổi kiểu chớp. _ Sử dụng timer0 làm thời gian chuẩn để trì hoãn chớp tắt (vì nếu dùng làm thời gian trì hoãn chớp tắt thì nó quá ngắn ta không thể thấy chớp được). _ Khai báo một biến toàn cục làm hệ số cho thời gian trì hoãn. Trong ngắt Timer0 bạn sẽ đếm biến này đến một giá trị nào đó thì gọi hàm chớp tắt. _ Bạn cũng cần khai báo một biến toàn cục để cho hàm chớp tắt biết mình phải làm gì. Hoặc nếu ko bạn có thể truyền tham số cho hàm. _ Trong chương trình main, bạn dùng vòng lặp để bắt phím nhấn (hoặc dùng ngắt) và thực hiện thay đổi giá trị của biến kiểu chớp. Trên đây là giải thuật, đó là phương pháp để giải quyết bài toán. Tất nhiên trong quá trình viết bạn có thể khai báo thêm các biến toàn cục hay cục bộ để thực hiện thuật toán. Tốt nhất là bạn nên viết trước và gặp khó khăn thì đưa cả code lên để mọi người giúp bạn giải quyết. Đây là một bài toán khá hay, mong rằng bạn sẽ thành công. hpecom.
__________________
Biết thì nói là biết, Không biết thì nói là không biết, .. |
![]() |
![]() |
#80 |
Đệ tử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 32
: |
CCS C for PIC16F877A
Em mượn tạm đoạn code của nhh anh mổ xẻ nó giùm em nhé
//************************************************** ** // Author : nhh // Date : 02/04/06 // Hardware: PIC16F877A //************************************************** ** #include <16F877A.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) #use fast_io(b) #byte portb=0x06 #define led pin_B0 int16 count; int8 a; //Chuong trinh ngat TMR0 #int_timer0 void interrupt_timer0() { set_timer0(6); ++count; if(count==2000) { count=0; a=a<<1; // dich trai a 1bit ![]() } if(a==256) { a=1; count=0; } } //Chuong trinh chinh main() { set_tris_b(0); enable_interrupts(global); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); ![]() set_timer0(6); count=0; a=1; while(true) { portb=a; ![]() } } Anh giải thích mấy cỗ có ![]() |
![]() |
![]() |
#81 | |
Đệ tử 3 túi
Tham gia ngày: Oct 2005
Bài gửi: 47
: |
Trích:
|
|
![]() |
![]() |
#82 | |
Trưởng lão PIC bang
|
Trích:
http://www.picvietnam.com/forum/showthread.php?t=330 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 |
|
![]() |
![]() |
#83 |
Đệ tử 2 túi
Tham gia ngày: Mar 2006
Bài gửi: 44
: |
Chào bác nhh!
Tôi copy nguyen bai delay1s_RB0 của bác về nạp thử, nhưng không hiểu sao nó không chạy, mà phải cắm chân RB3 (chân PGM) xuống đất thì nó mới chạy, bác có thể cho tôi biết tại sao không? Cám ơn bác! |
![]() |
![]() |
#84 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
#85 | |
Đệ tử 2 túi
Tham gia ngày: Nov 2005
Bài gửi: 45
: |
Trích:
![]() [CODE:] a=a<<1; // dich trai a 1bit [/CODE] Như tác giả đã chú thích đó là lệnh dịch trái 1 bit. VD: trước khi dịch, a có giá trị 0 0 0 0 0 0 0 1 (0x01) thì sau lệnh dịch này giá trị biến a sẽ là 0 0 0 0 0 0 1 0 (0x02). Vậy lệnh dịch trái sẽ làm tăng giá trị biến bị dịch lên 2 lần: 2 thành 4. Giống như bạn dịch trong hệ thập phân số 0500 thì được 5000 tức tăng 10 lần. Hệ nhị phân (2 số) dịch trái 1 bit sẽ tăng giá trị 2 lần, hệ thập phân (10 số) dịch trái một bit, số sẽ tăng giá trị 10 lần. Vậy nhiều lệnh dịch sẽ làm cho a thay đổi như sau 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 * Dấu ![]() [CODE:] setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); [/CODE] mode may be one or two of the constants defined in the devices .h file. RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32, RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256 Bạn hãy đọc Help và các ví dụ của nó thì bạn sẽ hiểu được cách tính. Bạn hãy tìm hiều kỹ về bộ chia tần trong DataSheet của chip sẽ hiểu tại sao chỉ làm 2 mũ n. * Dấu ![]() [CODE:] portb=a; [/CODE] Đây là lệnh xuất giá trị biến a ra PortB. a có 8 bit, PortB có 8 chân B7 đến B0. Lệnh trên sẽ áp các bit của a vào PortB theo đúng trọng số. Chúc bạn thành công. (và lần sau hỏi dễ xíu ![]() hpecom.
__________________
Biết thì nói là biết, Không biết thì nói là không biết, .. thay đổi nội dung bởi: hpecom, 22-08-2006 lúc 09:00 AM. |
|
![]() |
![]() |
#86 |
Đệ tử 1 túi
Tham gia ngày: Aug 2006
Bài gửi: 12
: |
làm thế naò để vi điêù khiển pic16f877a nhận biết số vong quay cuả motor động cợ? khi khởi động output chân BO cho mức cao high motor động cợ 1 quay 20 vong phát ra 20 xung vuông đến input chân D0 ,chan D0 nhan 20 xung xu li cho ra chan output BO muc thap low motor dong co thu 1 ngung quay va output B1 cao high motor dong co thu 2 quay 10 vong tao ra 10 xung vuong den chan D1 chan D1 nhan 10 xung thi B1 low dong co motor2 dung va B0 high dong co motor 1 quay va nguoc lai
Cho minh hoi cach lam mach dem vong quay motor dong co?xin cac huynh cho luon so do mach nay?va can mua nhung linh kien gi về ráp mạch? Va xin cac huynh chi cho cach viet chay chuong trinh nay dung ngon ngu C _CCS_C tan so 20Mhz pic 16f877a |
![]() |
![]() |
#87 |
Đệ tử 2 túi
Tham gia ngày: Mar 2006
Bài gửi: 44
: |
Cảm ơn ngài trưởng lão Pic bang!
Bây giờ thì tôi đã hiểu, nhưng khi phải nối mass chân RB3 rồi thì coi như chân đó không thể dùng được nữa hả? |
![]() |
![]() |
#88 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
#89 |
Đệ tử 2 túi
Tham gia ngày: Mar 2006
Bài gửi: 26
: |
Luồng này sôi động gớm ta!
Sao không thấy bác nhh post bài nữa kà! Anh em nào rảnh rỗi post tiếp cho bà con hào tham gia với....! ![]() |
![]() |
![]() |
#90 |
Đệ tử 1 túi
Tham gia ngày: May 2006
Bài gửi: 25
: |
Mình đang thử ctr điều khiển động cơ: Khi có tín hiệu từ chân RB0 thì động cỏ quay, nếu đang quay mà có tín hiệu từ RB1 thì động cơ quay ngược lại bằng thời gian no đã quay xuôi, bạn nào có thể viết cho mình một ví dụ như vậy bằng CCS được ko, cảm ơn nhiều.
|
![]() |
![]() |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |