![]() |
![]() |
#376 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Với C, một chuỗi luôn phải kết thúc với ký tự NULL.
|
![]() |
![]() |
#377 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
giúp mình cái hàm nhận xâu ký tự
bên phát mình thực hiện như sau: Code:
itoa(x,10,s);//chuyển số nguyên x thành xâu ký tự printf("%s", s); Code:
#INT_RDA RECEIVER() { char kt; int i; char s1[4]; i=0; kt=fgetc(pc); while(kt!=null) { s1[i]=kt; i++; kt=fgetc(pc); } lcd_clear(); delay_ms(1); lcd_display_str(0, 0, s1);//hiển thị xâu } mình cảm ơn. |
![]() |
![]() |
#378 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Theo như đoạn code trên, hàm lcd_display_str nhận đối số là một chuỗi do đó chắc chắn nó yêu cầu chuỗi của bạn phải kết thúc = ký tự NULL, chuỗi s1 như trên chưa có ký tự kết thúc.
Bạn nên post cả code của phần phát |
![]() |
![]() |
#379 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
bên phát mình chỉ có hai dòng lệnh vậy thôi vì mình ghép nó vào một chương trình con khác.
Code:
void tonghop_so() { char s[5]; t1=nghin*10+tram; t2=chuc*10+donvi; trunggian2=t1*100+t2; if((hor==0)&(trunggian2<=5000)) { rnominal0=trunggian2; itoa(trunggian2,10,s);//chuyển số nguyên trunggian2 thành xâu ký tự printf("%s", s); } } hàm lcd_display_str(); là hàm hiển thị một mảng ký tự. Code:
void lcd_display_str(int line, int8 posc, char str[]) { int8 i,j; j=strlen(str);// Cho xau la co dinh for (i = posc; i < j+posc ; i++) { lcd_display_char(line, i, str[i-posc]); delay_ms(1); } } |
![]() |
![]() |
#380 | |
Đệ tử 2 túi
Tham gia ngày: Oct 2007
Bài gửi: 42
: |
Trích:
#include <16F877A.h> #byte portb = 0x06 #byte portc = 0x07 #use delay (clock = 20000000) int count=1; #INT_EXT void EXT_LED() { portc=count; count=count+1; delay_us(100); bit_clear(portb,0); } void main() { ext_int_edge(L_TO_H); enable_interrupts(INT_EXT); enable_interrupts(global); set_tris_b(0xff); set_tris_c(0x00); portc=0; bit_set(portb,0); while(1) { } } |
|
![]() |
![]() |
#381 |
Đệ tử 2 túi
Tham gia ngày: Oct 2007
Bài gửi: 42
: |
Bác F co CCS 4.038 không post lên cho mọi người nữa. Không biết nó có gì mới+tốt hơn không?
|
![]() |
![]() |
#382 |
Nhập môn đệ tử
Tham gia ngày: Feb 2008
Bài gửi: 3
: |
cám ơn các bạn rất nhiều
|
![]() |
![]() |
#383 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
giúp mình về cái timer với!!
trong chương trình của mình có sử dụng cả timer và ngắt. Đây là hàm phục vụ ngắt của mình: Code:
#int_RB void ngat_RB() { if((RBIF)&&(RBIE)) { //if(khoidong0==1) // goto Thoat; output_low(pin_A3); output_low(pin_A4); output_low(pin_A5); if(!RB4) { if(ver==0) { ver=1; hienthicot1(); goto Thoat; } if(ver==1) { ver=2; CPHT=1; goto Thoat; } if(ver==2) { ver=3; doctrunggian2(); hienthicot3(); goto Thoat; } if(ver==3) { ver=4; phantich_so(trunggian2); trunggian=nghin; lcd_display_blink(0,13); goto thoat; } if(ver==4) { ver=5; trunggian=tram; if(hor==6) lcd_display_char(0,13,pw[0]); lcd_display_blink(0,14); goto thoat; } if(ver==5) { trunggian=chuc; if(hor==6) lcd_display_char(0,14,pw[0]); ver=6; lcd_display_blink(0,15); goto thoat; } if(ver==6) { trunggian=donvi; if(hor==6) lcd_display_char(0,15,pw[0]); ver=7; lcd_display_blink(0,16); goto thoat; } if(ver==7) { ver=4; trunggian=nghin; if(hor==6) lcd_display_char(0,16,pw[0]); lcd_display_blink(0,13); goto thoat; } } // Xong RB4 if(!RB5) { if((ver==0)||(ver==1)) goto Thoat; if(ver==2) { ver=1; hienthicot1(); CPHT=0; hor=0; goto Thoat; }// endif(ver==1) if(ver==3) { if((hor==1)||(hor==2)||(hor==3)||(hor==4)||(hor==5)) hor=1; if((hor==6)||(hor==7)||(hor==8)||(hor==9)) hor=6; hienthicot2(); ver=2; goto Thoat; }// endif(ver==1) if((ver==4)||(ver==5)||(ver==6)||(ver==7)) { //RBIF=0; tonghop_so(); } }// Endif(RB5) if(!RB6) // Xu ly tang gia tri { if((ver==4)||(ver==5)||(ver==6)||(ver==7)) tangcot(); }// Endif(RB6) if(!RB7) { if(ver==2) { if(hor==0) { hor=1; goto hienthi42; } if(hor==1) { hor=6; goto hienthi42; } if(hor==6) { hor=0; goto hienthi42; } hienthi42: hienthicot2(); goto thoat; } if(ver==3) { if(hor==1) { hor=2; goto chuyendich43; } if(hor==2) { hor=3; goto chuyendich43; } if(hor==3) { hor=4; goto chuyendich43; } if(hor==4) { hor=5; goto chuyendich43; } if(hor==5) { hor=1; goto chuyendich43; } if((hor==6)&(user==1)) { hor=7; user=0; goto chuyendich43; } if(hor==7) { hor=8; goto chuyendich43; } if(hor==8) { hor=9; goto chuyendich43; } if(hor==9) { hor=7; goto chuyendich43; } chuyendich43: { //doctrunggian2(); hienthicot3(); phantich_so(trunggian2); // doctrunggian2(); } } //If (ver==3) }// Endif(RB7) Thoat: RBIF=0; //Xoa co ngat RB } // Ket thuc if co ngat }// Ket thuc ham void mình đã thử độc lập riêng timer thì hoàn toàn đúng. mong được mọi người giúp đỡ. mình cảm ơn nhiều. |
![]() |
![]() |
#384 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
CCS C không hỗ trợ reentrant, do đó khi 1 chuơng trình con được gọi đồng thời trong chương trình chính và trong trình phục vụ ngắt thì CCS sẽ sinh mã để tự động che ngắt khi vào chương trình con đó để tránh reentrant.
Với trường hợp của bạn có 2 hiệu ứng làm trễ ngắt timer: Thứ 1: khi vào chương trình con được gọi chung, CCS sẽ che ngắt global, do đó ngắt timer ko đc xảy ra, làm ngắt timer đến trễ so với thực tế. Thứ 2: Trình phục vụ ngắt thay đổi mức trên PORTB của bạn quá dài, vì trong thời gian đang thực thi trình này thì ngắt nói chung và ngắt timer nói riêng ko thể xảy ra, nên làm trễ ngắt timer. Về khái niệm reentrant (vào lại). Bạn có thể tưởng tượng một chương trình con A đang được chạy trong chương trình chính, ngắt xảy ra và A lại đc gọi bởi trình phục vụ ngắt. Lúc này sẽ có một số vấn đề phát sinh: 1 - Không gian bộ nhớ cấp cho các biến của A: nếu linker cấp phát tĩnh các biến này thì coi như tiêu. Với pic16F, cấp phát động bộ nhớ (dùng stack) là điều phức tạp vì hardware ko hỗ trợ nhiều cho truy xuất bộ nhớ gián tiếp, mình ko có thời gian disassembly nhưng tin chắc là CCS ko làm điều này (CCS ko hỗ trợ đệ quy). 2 - Các tác vụ về IO hoặc về biến tốn nhiều chu kỳ máy khi bị ngắt giữa chừng cũng coi như tiêu. |
![]() |
![]() |
#385 |
Nhập môn đệ tử
Tham gia ngày: Feb 2008
Bài gửi: 3
: |
thanks!!! rat bo ich!
|
![]() |
![]() |
#386 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
thanks anh nhiều!!
nhưng em vẫn chưa hiểu lắm về reentrant. anh có tài liệu j nói về vấn đề này không? vấn đề nữa là trình phục vụ ngắt trên port B của em có lẽ là không rút ngắn được bao nhiêu.vậy có cách nào để tính thời gian ngắt của timer không? |
![]() |
![]() |
#387 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
cho em hỏi một vấn đề nữa nhé.
hiện tại chương trình của em cần thêm một số modul nữa, nhưng khi thêm vào và dịch thì nó thông báo là hết RAM mặc dù trước đó ctrinh mới dùng hết khoảng hơn 60% RAM. có ai biết về vấn đề này xin giúp em với, làm sao để có thể dịch được nhiều hơn? |
![]() |
![]() |
#388 | ||
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Trích:
Về timer, mình nghĩ bạn nên đưa phần quét phím ra chương trình chính, khi có ngắt INT_RB, bạn set cờ báo cho chuơng trình chính kiểm tra phím bấm, lúc này ngắt timer vẫn xảy ra được Trích:
|
||
![]() |
![]() |
#389 |
Nhập môn đệ tử
Tham gia ngày: Jan 2008
Bài gửi: 3
: |
mời tìm hiểu về pic cho mình hỏi có cách tạo ra cấu trúc truy nhập kiểu bảng (db ....)như đối với 8051 không .và tổ chức như thế nào/Mong trả lời của các bạn và các tiền bối
thay đổi nội dung bởi: auto_control, 22-03-2008 lúc 12:58 AM. |
![]() |
![]() |
#390 | |
Trưởng lão PIC bang
|
Trích:
Câu hỏi của bạn nên được post ở luồng cơ bản về PIC và vi điều khiển, và sử dụng hợp ngữ. Bạn có thể đọc tài liệu hướng dẫn của MPASM để thấy có thể dùng DT, DB, và DW để định nghĩa các bảng dữ liệ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 |
|
![]() |
![]() |
|
|
![]() |
||||
Ðề 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 |