|
Tài trợ cho PIC Vietnam |
Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển... |
|
Ðiều Chỉnh | Xếp Bài |
16-05-2012, 06:15 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: May 2012
Bài gửi: 3
: |
Điều chỉnh độ sáng LED
Xin chào các bạn,
Mình đang làm 1 bài đkhiển độ sáng của LED giao tiếp với máy tính dùng PIC 16f877a và VB6. Mình đã thử làm bật tắt đèn, chạy rất tốt nhưng đến phần này thì ko hiểu sao LED ko sáng. Mình xin trình bày sơ qua code của mình : Trên VB tạo 1 thanh Hscroll, dựa vào giá trị của thanh bar này mình sẽ truyền về PIC và dùng PWM để thay đổi độ sáng của LED. Theo mình hiểu thì truyền dữ liệu từ PC xuống PIC sẽ là 1 string, sau đấy dùng hàm atoi() để chuyển sang Interger rồi set vào duty của PWM. Mình viết code theo ý tưởng đấy nhưng ko làm sao làm đc. Mong các bạn giúp đỡ. Mình gửi code đính kèm. #include <16f877a.h> #device 16f877a*16ADC=10 #include <DEFS_16F877A.h> #include<stdlib.h> #fuses nowdt,nolvp,noprotect,xt,put #use delay(clock=20000000) #use fast_io(b) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7) int1 rcv_done=0; int8 value_integer=0; int8 value=0; char save_data[5]; int1 thong_bao=0; #int_RDA // Ngat khi nhan du lieu tu ben ngoai void int_rda_is() { char data; int index; int1 bien_nhan=0; data=getc(); //putc(data); // nhan data tu PC tung ki tu mot switch (data) { case '*' : rb6=0; break; case '^': rb6=1; break; } if (data=='$') { bien_nhan=1; } else if (data=='%') { bien_nhan=0; } else if (bien_nhan==1) { save_data[index]=data; index++; } if (bien_nhan==0) { value_integer=atoi(save_data); value=(value_integer*10); } } void main() { enable_interrupts(int_rda); enable_interrupts(global); set_tris_B(0); portb=0; setup_ccp1(CCP_PWM); setup_timer_2(t2_div_by_16,154,1); while(1) { set_pwm1_duty(value); } } |
|
|