![]() |
|
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 |
|
![]() |
#1 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
to anh Nam,
em nghĩ thế mạnh của một trình dịch thể hiện ở chỗ nó có hỗ trợ cho người dùng nhiều hay không.CCS hỗ trợ rất nhiều,em không phủ nhận là phải hiểu gốc gác vấn đề,datasheet tất nhiên phải đọc.Nhưng em thiết nghĩ ,cái gì đã hỗ trợ sao lại không dùng,thời gian để nghiên cứu thứ khác . chẳng hạn,trong thiết lập PWM,nếu phải set các bit trong các thanh ghi Config PWM,eo ui,sẽ thật khó hiểu,cho bản thân,và cả cho người khác khi đọc chương trình,trong khi trong Help của CCS có hẳn các Built in Funtion, các lệnh C thật dễ hiểu để thiết lập,dễ chỉnh sửa chương trình sau này. |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
Quan niệm của tôi về thế mạnh của trình biên dịch lại khác: khả năng biên dịch hiệu quả, và khả năng khai thác tài nguyên giới hạn của chip. Bạn không thích thiết lập các thanh ghi cho module PCPWM thì cứ dùng các hàm thư viện đã có sẵn, còn tôi thích làm việc đó, và không loại trừ khả năng có một số bạn khác cũng thích. Nói như bạn thì có lẽ bạn gong05sk nên đọc lại tài liệu hướng dẫn của CCS C, vì có vẻ như bạn ấy chưa hiểu được những hàm thư viện dễ hiểu đó. 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 |
|
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 2
: |
pwm cua pic 16f877a
ban nao ranh` ve pwm thi giup minh voi.minh vua tim dc cai code viet ve pwm,nhung ma compile no bao loi!de minh gui len cho cac ban!
Code:
#include <16F877A.h> #include <DEFS_16F877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=10000000) #use fast_io(b) #define tocdo0 0 //toc do bang 0 #define td_macdinh 80 //toc do mac dinh #define tocdo1 124 //1/5 toc do cuc dai #define tocdo2 248 //2/5 toc do cuc dai #define tocdo3 372 //3/5 toc do cuc dai #define tocdo4 496 //4/5 toc do cuc dai #define tocdo5 620 //toc do cuc dai int16 duty1=0; int16 duty2=0; int8 bientocdo=0; int1 bienthuan=0; int1 biennghich=0; void main() //bo PMW1 dk dco quay thuan { //bo PMW2 dk dco quay nghich set_tris_b(0x0ff); //khoi tao port B la port nhap setup_ccp1(CCP_PWM); //khoi tao bo PWM1 setup_ccp2(CCP_PWM); //khoi tao bo PWM2 setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms //(1/clock)*4*t2div*(period+1) //(1/10e6)*4*16*(154+1)=1e-3=1ms set_pwm1_duty(duty1); //gia tri duty cua PWM duoc tinh set_pwm2_duty(duty2); //theo cong thuc duty1*t2div/clock //khoi tao duty=0 ->tat dong co while(true) { if (!bit_test(portb,1)) //neu nhan phim FO : chay thuan { duty1=tocdo0; duty2=tocdo0; set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co delay_ms(1000); //delay 1s de giam quan tinh dc bienthuan=1; biennghich=0; goto next; } if (!bit_test(portb,2)) //neu nhan phim RE : chay nghich { duty1=tocdo0; duty2=tocdo0; set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co delay_ms(1000); //delay 1s de giam quan tinh dc bienthuan=0; biennghich=1; goto next; } if (!bit_test(portb,3)) //nhan phim toc do 1 { bientocdo=1; goto next; } if (!bit_test(portb,4)) //nhan phim toc do 2 { bientocdo=2; goto next; } if (!bit_test(portb,5)) //nhan phim toc do 3 { bientocdo=3; goto next; } if (!bit_test(portb,6)) //nhan phim toc do 4 { bientocdo=4; goto next; } if (!bit_test(portb,7)) //nhan phim toc do 5 bientocdo=5; next: if (!bit_test(portb,0)) //neu nhan phim OFF { duty1=tocdo0; duty2=tocdo0; set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de set_pwm2_duty(duty2); //tat dong co bienthuan=0; biennghich=0; bientocdo=0; //xoa bien toc do } if (bienthuan) { duty2 = tocdo0; switch (bientocdo) { case 1: duty1= tocdo1; break; case 2: duty1= tocdo2; break; case 3: duty1= tocdo3; break; case 4: duty1= tocdo4; break; case 5: duty1= tocdo5; break; default : duty1 = td_macdinh; break; } set_pwm1_duty(duty1); //cho dco chay thuan set_pwm2_duty(duty2); } if (biennghich) { duty1 = tocdo0; switch (bientocdo) { case 1: duty2= tocdo1; break; case 2: duty2= tocdo2; break; case 3: duty2= tocdo3; break; case 4: duty2= tocdo4; break; case 5: duty2= tocdo5; break; default : duty2 = td_macdinh; break; } set_pwm1_duty(duty1); //cho dco chay nghich set_pwm2_duty(duty2); } } } mog cac pac giup do!thank nhieu! thay đổi nội dung bởi: namqn, 07-07-2009 lúc 12:23 PM. |
![]() |
![]() |
![]() |
#4 |
Đệ tử 3 túi
Tham gia ngày: Feb 2009
Bài gửi: 47
: |
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 1 túi
Tham gia ngày: Dec 2005
Bài gửi: 12
: |
Trích:
*thứ nhất CCSC không hỗ trợ tốt cho người dùng. Bạn hãy để ý từ phiên bản đầu tiên đến bản mới nhất, phần Help của CCSC luôn rất khó sử dụng, phần ví dụ trong Help cũng khó tiếp cận. Tôi từng viết ASM cho PIC rất kỹ và hiện đang dùng CCSC nhưng lúc làm luận văn, viết PWM cho con PIC18F4431, dùng hàm của CCSC thì tôi cực kỳ vất vả. Đến lúc tức điên người lên không thèm dùng hàm built in nữa, tôi chuyển sang tự set thanh ghi cho PIC luôn, chạy tốt! * thứ hai, như tôi đã nói, ít ra cũng phải hiểu cấu trúc PIC, hiểu cách hoạt động của các thanh ghi (và viết ASM chính là để hiểu rõ điều này) thì mới viết C tốt. Khi đó nếu gặp vấn đề gì với C, ta có thể troubleshooting rất nhanh, không được nữa thì quay lại ASM. Vì C thật ra cũng là ASM mà ra. Tôi nghĩ nếu bạn chỉ là cần code để cho luận văn hay đề tài gì đó không dài hạn, hoặc bạn chỉ "ghé thăm" PIC trong một thời gian ngắn thì bạn cứ dùng C thoải mái mà không cần hiểu thanh ghi. Nhưng nếu đã quyết định sử dụng PIC cho công việc (dài hạn) thì nên tìm hiểu tường tận. Datasheet tuy khó hiểu nhưng hứa với bạn là chỉ trong thời gian đầu, lần thứ 2,3,4... bạn sẽ thấy dễ dần. Có gì khó hiểu bạn cứ post lên đây là ok thôi. Bye, good luck with PIC! |
|
![]() |
![]() |
![]() |
#6 | |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
Trích:
tôi cũng từng code ASM cho 8051,rùi mới xài PIC.Và tôi nghĩ đa số sv chúng ta cũng thường theo con đường đó nên cũng ko khó khi tìm hiểu cấu trúc PIC.còn C or ASM cũng chỉ là vấn đề về ngôn ngữ thui mà. |
|
![]() |
![]() |
![]() |
|
|