![]() |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 2
: |
mình rất cần phần mềm để viết chương trình nap cho PIC. bạn chia sẽ cho mình với. thanks
|
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
http://www.picvietnam.com/forum//showthread.php?t=4 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: Apr 2007
Bài gửi: 9
: |
Em có một đoạn code muốn nhờ các anh đi trước giúp đỡ mà ko biết cách chèn lên thế nào, đành phải làm thủ công thế này. Đoạn code của em có mục đích là: đầu tiên cho 2 chân RB1 và RB2 ở mức thấp, sau đó kiểm tra trạng thái của RD0 (chân RD0 được nối lên cao qua điện trở 10k), nếu RD0 = 0 thì đưa ra chân RB2 mức 1, trễ 5s, đưa RB2 xuống 0 và RB1 lên 1 trễ 5s và thoát khỏi điều kiện if và tiếp tục kiểm tra RD0. Nhưng khi chạy thử mạch thì RB2 có mức 1 trễ 5s sau đó RB1 có múc 1... mặc dù RD0 vẫn chưa = 0, mà sau đó chương trình cũng chẳng thoát khỏi điều kiện if. Em biết ngày trước đã có bạn hỏi như em và đã được giúp đỡ nhưng em tim lại mãi mà không thấy. Em mới học, mong các anh giúp đỡ! Đoạn code của em như sau:
Code:
#include <16F877a.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT, NOLVP #use delay(clock=4000000) #use fast_io(b) main() { set_tris_b(0); set_tris_d(255); output_low(PIN_B1); output_low(PIN_B2); if(RD0=0) output_high(PIN_B2); delay_ms(5000); output_low(PIN_B2); output_high(PIN_B1); delay_ms(5000); } thay đổi nội dung bởi: namqn, 07-06-2008 lúc 08:26 PM. |
![]() |
![]() |
![]() |
#4 |
Trưởng lão PIC bang
|
Chương trình của bạn nên được sửa lại như sau:
Code:
#include <16F877a.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT, NOLVP #use delay(clock=4000000) #use fast_io(b) main() { set_tris_b(0); set_tris_d(255); output_low(PIN_B1); output_low(PIN_B2); if(RD0 == 0) { output_high(PIN_B2); delay_ms(5000); output_low(PIN_B2); output_high(PIN_B1); delay_ms(5000); } while (1); } 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 |
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Apr 2007
Bài gửi: 9
: |
Cảm ơn anh Nam đã giúp đỡ! Nhưng ko biết do Kit của em hay lý do gì mà khi thử mạch, nếu ngắt đường nối lên cao của RD0 thì RB2 có trạng thái 1 sau 5s đến RB1 có trạng thái 1 RB2 xuống 0 và giữ ở trạng thái đó suốt. Nếu giữ đúng sơ đồ, thì ấn nút bấm, chẳng thấy gì xảy ra cả. Anh xem giúp em với! (em dùng Kit của anh SGT)
thay đổi nội dung bởi: namqn, 08-06-2008 lúc 06:06 AM. |
![]() |
![]() |
![]() |
#6 |
Trưởng lão PIC bang
|
Nếu bạn muốn việc kiểm tra trạng thái chân RD0 được thực hiện liên tục thì code của bạn có thể sửa thành như sau:
Code:
#include <16F877a.h> #include <def_877a.h> #fuses NOWDT,PUT,XT,NOPROTECT, NOLVP #use delay(clock=4000000) #use fast_io(b) main() { set_tris_b(0); set_tris_d(255); output_low(PIN_B1); output_low(PIN_B2); while (1) { if(RD0 == 0) { output_high(PIN_B2); delay_ms(5000); output_low(PIN_B2); output_high(PIN_B1); delay_ms(5000); } } } 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 |
![]() |
![]() |
![]() |
#7 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
nhờ mọi người giúp đỡ giao tiếp 2 pic16f877a theo chuẩn 485.
ý tưởng của mình như sau: con master truyền một ký tự 'a' sang cho con slave.sau đó set chân đk của con mas để nó chờ tín hiệu gửi về từ con slave. con slave nhận đc ký tự từ master gửi đến và kiểm tra nếu đúng ký tự cần thì thực hiện gửi lại ký tự 'b'. quá trình cứ liên tục như vậy. |
![]() |
![]() |
![]() |
#8 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
mình đã thử con master chỉ liên tục truyền và con slave liên tục nhận thì không có vấn đề gì. nhưng khi thực hiện hỏi đáp như trên thì ctr không chạy đc.
đây là đoạn code: Code:
/////////////////////////////////////////////////////////////////// //ham nhan ky tu #INT_RDA void RECEIVER() { int k,l; output_high(pin_b0); recei[k]=fgetc(PC); if (recei[k]=='@') { recei[k]=null; if (recei[0]=='b') { output_high(pin_e0);//set chan dk r232=0;//set co nhan delay_ms(50); } k=0; } else k=k+1; } /////////////////////////////////////////////////////////*/ void main(void) { int16 i,j; //int1 r232; set_tris_a(255); set_tris_b(0); set_tris_d(0); set_tris_e(0); portb=0; output_high(pin_e0); enable_interrupts(global); enable_interrupts(int_RDA); lcd_init(); delay_ms(1); lcd_clear(); delay_ms(1); r232=0; while(1) { if (r232==0) { printf("aa@"); r232=1; delay_ms(50); output_low(pin_e0); delay_ms(100); } } } |
![]() |
![]() |
![]() |
#9 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
còn đây là code con slave:
Code:
////////////////////////////////////////////////////////////*/ //ham nhan ky tu #INT_RDA void RECEIVER() { int x,y; chuoi[x]=fgetc(PC); if (chuoi[x]=='@') { chuoi[x]=null; dodaichuoi=strlen(chuoi); if (chuoi[0]=='a') { count0=count0+1;//dem so lan nhan đc r232=1;//set co nhan } x=0; } else x=x+1; } ////////////////////////////////////////////////////////// void main(void) { int luudiemcat; set_tris_a(255); set_tris_b(255); set_tris_d(0); set_tris_e(0); portb=porte=0; output_low(pin_E0); portd=0; r232=0; enable_interrupts(global); enable_interrupts(int_RDA); setup_adc(adc_clock_internal); while(true) { if (r232==1) { output_high(pin_e0); delay_ms(50); printf("bb@"); delay_ms(200); output_low(pin_e0); r232=0; lcd_display_str(0,0,chuoi); lcd_display_int8(0,5,dodaichuoi); lcd_display_int16(0,10,count0,0); } } } |
![]() |
![]() |
![]() |
#10 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
nhờ mọi người kiểm tra giúp xem đoạn code trên có vấn đề gì không.
cảm ơn mọi người nhiều!!! |
![]() |
![]() |
![]() |
#11 |
Đệ tử 1 túi
Tham gia ngày: Jun 2008
Bài gửi: 18
: |
các bác cho em hỏi về counter của con 16F877A :
em chưa hiểu được lệnh này setup_COUNTERS (rtcc_state, ps_state); rtcc_state là một trong những constant sau: RTCC_INTERNAL // tham số này có nghĩa j ?? em tưởng nó chỉ lấy xung từ chân RA4/TOCK1 RTCC_EXT_L_TO_H // RTCC_EXT_H_TO_L // ps_state là một trong những constant sau: RTCC_DIV_2 // chọn cái tỉ số chia này có nghĩa j , có fai cứ 2 xung thì nó tăng bộ đếm lên 1 RTCC_DIV_4 RTCC_DIV_8 RTCC_DIV_16 RTCC_DIV_32 RTCC_DIV_64 RTCC_DIV_128 em viết một chương trình cho timer1 mà nó ko chạy , em sửa nó từ timer0 (đã chạy) #include <16f877a.h> #include <def_877a.h> #fuses NOWDT ,NOPUT ,NOPROTECT ,NODEBUG,NOBROWNOUT,NOLVP,HS #use delay(clock=20000000) int16 count; #int_timer1 void interrupt_timer1() { set_timer1(0); ++count; if(count==20) { count=0; PORTC=~PORTC; } } void main() { TRISC=0x00; PORTC=0x55; enable_interrupts(int_timer1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); enable_interrupts(global); set_timer1(0); // TODO: USER CODE!! while(true){} } các bác cho ý kiến thay đổi nội dung bởi: kinhaxac, 01-07-2008 lúc 05:44 PM. |
![]() |
![]() |
![]() |
#12 |
Đệ tử 5 túi
Tham gia ngày: Jun 2008
Bài gửi: 112
: |
![]() Help Me ........ :geek:
Mình đang tìm hiểu và viết chương trình cho LCD( 2 dòng x 20 ký tự ) Nhưng mình đang gặp một khó khăn nho nhỏ cần các bạn giúp đỡ... Mình viết chương trình để hiển thị các ký tự và chuỗi ký tự thì rất ok . Nhưng để hiển thị giá trị chứa trong một thanh nghi ,một byte nhớ hay giá trị của một biến INT lên LCD thì mình bị mắc quá ko hiển thị được. Huynh đệ nào biết giúp mình ngay nha :ugeek: - Bài mình đang mắc như sau : hiển thị giá trị chuyển đổi ADC khi thay đổi tín hiệu đầu vào chân AN0 của pic16f877a lên LCD ( value = read_adc() , giá trị trong biến value cần hiển thị lên LCD ) **************** THANHK ************** |
![]() |
![]() |
![]() |
#13 |
Đệ tử 4 túi
Tham gia ngày: Aug 2006
Bài gửi: 81
: |
bạn tách lấy số hàng đơn vị,tách lấy số hàng chục,....
cộng mỗi số với 0x30 rồi putc() lên LCD thay đổi nội dung bởi: david, 03-07-2008 lúc 03:51 PM. |
![]() |
![]() |
![]() |
#14 |
Đệ tử 1 túi
Tham gia ngày: Jun 2008
Bài gửi: 18
: |
hic khong ai trả lời mình ah`
|
![]() |
![]() |
![]() |
#15 |
Đệ tử 5 túi
Tham gia ngày: Jun 2008
Bài gửi: 112
: |
Cám ơn bác đã chỉ bảo ,Em đã tách được các số và cho hiển thị lên LCD...
Nhưng em chuă hiểu vì sao khi tách các số ra lại phải cộng với 0x30 ?Có phải khi cộng với 0x30 ta sẽ được mã ASII của số đó không? Mọi người cho em hỏi đường link để dowload file : lcd_lib_4bit.c ***************** THANKS ************** |
![]() |
![]() |
![]() |
|
|