Ðăng Nhập

View Full Version : Tập lệnh trên CCS cho PIC


chutchit
03-12-2005, 03:44 PM
Tui đang làm giao tiếp RS232 với máy tính.
Nhưng tui không biết tập lệnh của nó! Mò trong những ví dụ và phần Help của nó khổ quá! Có ai biết tập lệnh 16F877 được miêu tả rõ ràng hơn ở đâu không? Làm ơn chỉ tui với! Gấp lắm! :eek:

falleaf
03-12-2005, 05:39 PM
http://www.picvietnam.com/forum//showthread.php?t=155

Bạn vào đây để download tài liệu CCS C tiếng Việt do txt cung cấp.

Ngoài ra, để dùng giao tiếp rs232 rất đơn giản:

#uses rs232

printf (xuất)
getc(nhập)

Bạn xem chi tiết lệnh ở trong phần hướng dẫn chi tiết.

Chúc vui.

chutchit
03-12-2005, 09:19 PM
Cám ơn bác, em đã load cái đó về rùi. Tuy nhiên nó chỉ có một vài cái cơ bản. Em nghĩ phải có nhiều hơn nữa chứ? Nếu bác có cái link nào tiếng Anh cũng OK.
chẳng lẽ để giao tiếp rs232 chỉ cần có 2 lệnh đó thôi sao? thế còn việc kiểm tra xem lúc nào bộ đệm tràn? như ở bên máy tính em làm cả khâu kiểm tra này, còn ở PIC thì sao? xử lý khi báo tràn như thế nào? EM có đọc datasheet của PIC 16F877 nhưng chưa thông lắm! Mong bác chỉ giáo. Ngoài ra em còn muốn xử lý data xuất/nhập này thì làm như thế nào? có phải ghi từ thanh ghi đệm vào bộ nhớ PIC rồi lấy data từ đó xử lý? Ví dụ như là em muốn cho nó xuất led chẳng hạn!
Mong bác thông cảm, có lẽ em hỏi hơi bị ngây ngô! Em mới chuyển từ 8051 sang PIC mấy tuần nay! CHưa biết gì cả!

falleaf
04-12-2005, 02:33 AM
Bạn xem kỹ tài liệu, khi uses 232, thì có hàng loạt thông số kèm theo, chỉ cần nhu vậy thôi, hay vì bạn thấy PIC nó quá đơn giản nên còn đắn đo?

Học pic trong 1 ngày, đó là thông điệp của F mà.

Chúc học tốt.

chutchit
05-12-2005, 07:33 AM
Cam on bac.Dung la em lam phuc tap hoa van de that! Qua la no don gian hon em nghi!

MoH
01-01-2006, 08:48 PM
Các bác cho em hỏi. Khi dung CCSC thì có thể set dược toàn bộ địa chỉ cho 1 port giống như dùng Keil cho 89 hay không?
ví dụ như:
Trong Keil cho 89: P0 = 0xFA chẳng hạn
==> Có lệnh nào tương đương đối với PIC hay không?
À. Em cũng đã thử giao tiếp RS232 sử dụng
#uses rs232
printf (xuất)
getc(nhập)
Nhưng không xuất lên máy tính được, máy tính truyền xuống nó nhận được nhưng không biết có nhận đúng hay không (vì không truyền được lên máy tính để kiểm tra)

txt
06-01-2006, 09:44 AM
Trong CCs tiếng việt trên , tôi có trình bày cách set po rt , VD po rt B
1/ thiết lập cơ chế truy xuất nhanh po rtB :
khai báo #U SE FAST_IO(po rtB)
khởi tạo 1 biến danh định chỉ tới địa chỉ PO rt B :Vd po rtB ở địa chỉ 0x3F thì set:
#LOCATE portB = 0x3F
portB chỉ là tên , có thể dùng tên khác tùy ý.

2/ sau đó trong chương trình , set chân vào ra :
VD : set_tris_B(0x11110000b) ; // B0->B3 : ngõ ra , B4->B7 : ngõ vào
VD : set_tris_B(255); // tất cà là ngõ vào
VD : set_tris_B( 0) ; // tất cả là ngõ ra
khi đó chỉ cần:
Vd : tất cả là ngõ vào thì có thể khiểm tra 1 cái gì đó :
if ( portB==0x0011b) { . . .} // nếu B0 và B1 có tín hiệu vào thì . . .
nếu set tất cả là ngõ ra thì :
Vd : portB = 127 ; // =0x01111111 : xuất tín hiệu ra trên B0->B6 ,B7 không có .

linhnc308
13-02-2006, 11:23 PM
Cám ơn bác, em đã load cái đó về rùi. Tuy nhiên nó chỉ có một vài cái cơ bản. Em nghĩ phải có nhiều hơn nữa chứ? Nếu bác có cái link nào tiếng Anh cũng OK.
chẳng lẽ để giao tiếp rs232 chỉ cần có 2 lệnh đó thôi sao? thế còn việc kiểm tra xem lúc nào bộ đệm tràn? như ở bên máy tính em làm cả khâu kiểm tra này, còn ở PIC thì sao? xử lý khi báo tràn như thế nào? EM có đọc datasheet của PIC 16F877 nhưng chưa thông lắm! Mong bác chỉ giáo. Ngoài ra em còn muốn xử lý data xuất/nhập này thì làm như thế nào? có phải ghi từ thanh ghi đệm vào bộ nhớ PIC rồi lấy data từ đó xử lý? Ví dụ như là em muốn cho nó xuất led chẳng hạn!
Mong bác thông cảm, có lẽ em hỏi hơi bị ngây ngô! Em mới chuyển từ 8051 sang PIC mấy tuần nay! CHưa biết gì cả!

Tôi thấy như vậy đã là đủ rồi, kho các hàm của CCS rất nhiệu Về RS232 cho pic thì bạn xem lại trong datasheet, PIC chi có 8 bit cho truyền và 8 bit cho nhân. Tài liệu đầy đủ nhất là help cua nó, kết hợp các hàm lại với nhau sẽ giúp bạn giải quyết nhiều bài toán.
Còn về lập trình giao tiếp RS232 tôi đã có một bài mẫu. Chương trình nhận ký tự từ bàn phím và hiên thị ra LCD, rồi xuất trả lại máy tính ký tự đó.


#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)

#include <lcd_lib_4bit.c>
#include <input.c>

int8 count=0;
char string_in[16];

#INT_RDA
Receive_isr() {
char c;
int8 i;
count++;
c = getc();
putc(c);
if (c=='c' | c=='C') {LCD_putcmd(0x01);count=0;} //Clear Screen
if (count<=16) LCD_putchar(c);
else {count=0;LCD_putcmd(0xC0);}
}
void main()
{

enable_interrupts(int_rda);
enable_interrupts(GLOBAL);

lcd_init();
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf("Enter a String.");
printf("Or anything you want!");
while (1) {}
}

falleaf
14-02-2006, 07:39 PM
Hôm nọ vì lý do sửa diễn đàn, nên bài viết của txt bị mất, trong bài đó có cái link tài liệu CCS C tiếng Việt, nay F post lại cái link đó cho mọi người.

Thành thật xin lỗi txt vì diễn đàn đang trong thời gian sửa chữa.

www.picvietnam.com/download/Tutorial/CCS_tieng_Viet.pdf

Chúc vui

vtt
06-09-2006, 12:10 AM
Chào bác linhnc308!
Bác có giới thiệu chương trình giao tiếp PC với PIC, trên PIC. Còn chương trình trên PC thì như thế nào, bác có thể post một chương trình để anh em tham khảo được không, vì bọn mình bây giờ mới bắt đầu mà. Cám ơn bác trước nhé.
Nếu bác nào đọc được bài này mà đã từng làm rồi thì có thể post bài lên được không.
Cám ơn tất cả các bác.

chumeodihia
08-10-2006, 12:56 AM
chương trình trên pc thì mới học bạn nên dùng visual basic chỉ có một vài lệnh(kèm theo khai báo chế độ cho cổng) là bạn có thể gởi 1 byte xuống cổng com hà.Visual dễ lắm bạn tự học đi,chủ yếu là xem trong thư viện MSDL của visual basic.
ví dụ như:
strdata = .Input nhận từ cổng com về
frmMain.MSComm1.Output = Chr(j) gởi 1 byte xuống cổng com

chú mèo đihia tái bút
thanks

navyvinpearl
10-10-2006, 02:14 PM
Ban nao da dung PIC de do duong ket hop voi dieu khien DC motor chua mach nuoc cho minh di moi !

falleaf
10-10-2006, 03:47 PM
Bạn thảo luận vấn đề này bên dientuvietnam, phần chuyên trang robocon.

Chúc vui

chauhoang
14-10-2007, 02:42 PM
Hôm nọ vì lý do sửa diễn đàn, nên bài viết của txt bị mất, trong bài đó có cái link tài liệu CCS C tiếng Việt, nay F post lại cái link đó cho mọi người.

Thành thật xin lỗi txt vì diễn đàn đang trong thời gian sửa chữa.

www.picvietnam.com/download/Tutorial/CCS_tieng_Viet.pdf

Chúc vui
xin chào các bác Mình là thành viên mới, mình có doyn bài CCS c bằng tiếng việt của bác txt và mình thấy rất hay, tại sao bác lại k post tiếp nhỉ?

__________________
www.dientuvietnam.net - www.vntelecom.org - www.tailieuvietnam.net

Học PIC như thế nào?

Không download được file? Bấm vào đây
Gõ dấu tiếng Việt trong diễn đàn


mail@falleaf.net
+82 10 4763 0970

100773007
20-11-2007, 11:27 AM
Cảm ơn đúng là tài liệu em đang cần

Macintosh
25-01-2008, 11:30 AM
các bác cho em hỏi:
em có y tưởng hiển thi LCD thông qua con shift register 74164,dữ liệu nhận từ cổng rs232,PIC. bước đầu tiên em thử là dùng lệnh: putc(value),nhưng thấy giá trị nhận được ở đầu ra parallel con 164 ko phải là các bit tuơng ứng của value.Vậy putc() có phải là lệnh thích hợp ko nhỉ.
Việc này em đã làm đuợc trên con 89,UART truyền ra thì ok

Macintosh
25-01-2008, 11:41 AM
em được biết cơ chế truyền dl đồng bộ trên con 89 là khi ta đặt data vào thanh ghi buffer thì nó được truyền ngay,RX truyền data,TX clock. thế thì làm việc này trên PIC như thế nào hả các pác?

LeDuc
04-02-2008, 01:19 AM
em được biết cơ chế truyền dl đồng bộ trên con 89 là khi ta đặt data vào thanh ghi buffer thì nó được truyền ngay,RX truyền data,TX clock. thế thì làm việc này trên PIC như thế nào hả các pác?
nếu muốn vậy thì bạn chỉ việc đưa dữ liệu cần truyền vào thanh ghi txreg , rồi cho phép truyền dữ liệu ở chế độ đồng bộ ...

mepic
13-02-2008, 09:32 PM
bác nào đã xài JDM thì chỉ mình setting hadware.cám ơn các bác trước.

princedx
12-08-2011, 04:29 PM
putc('A'); putc('T'); putc('+'); putc('C'); putc('M'); putc('G'); putc('S'); putc('='); putc(34);
putc('0'); putc('9'); putc('7'); putc('5'); putc('1'); putc('9'); putc('1'); putc('4'); putc('0');
putc('9'); putc(34); putc(13); delay_ms(200);
putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]);
putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13);

bác nào biết cho em hỏi đoạn chương trình kia tại sao lại phải thêm putc(34); putc(13); delay_ms(200);
putc(str3[0]); putc(str3[1]); putc(str3[2]); putc(str3[3]); putc(str3[4]); putc(str3[5]);
putc(str3[6]); putc(str3[7]); putc(str3[8]); putc(str3[9]); putc(str3[10]); putc(str3[11]); putc(str3[12]);putc(26); putc(13);
đây là đoạn code viết cho sim 300 với pic16f877a

ngosythuat
26-09-2011, 03:51 PM
Trong CCs tiếng việt trên , tôi có trình bày cách set po rt , VD po rt B
1/ thiết lập cơ chế truy xuất nhanh po rtB :
khai báo #U SE FAST_IO(po rtB)
khởi tạo 1 biến danh định chỉ tới địa chỉ PO rt B :Vd po rtB ở địa chỉ 0x3F thì set:
#LOCATE portB = 0x3F
portB chỉ là tên , có thể dùng tên khác tùy ý.

2/ sau đó trong chương trình , set chân vào ra :
VD : set_tris_B(0x11110000b) ; // B0->B3 : ngõ ra , B4->B7 : ngõ vào
VD : set_tris_B(255); // tất cà là ngõ vào
VD : set_tris_B( 0) ; // tất cả là ngõ ra
khi đó chỉ cần:
Vd : tất cả là ngõ vào thì có thể khiểm tra 1 cái gì đó :
if ( portB==0x0011b) { . . .} // nếu B0 và B1 có tín hiệu vào thì . . .
nếu set tất cả là ngõ ra thì :
Vd : portB = 127 ; // =0x01111111 : xuất tín hiệu ra trên B0->B6 ,B7 không có .
a ơi cho em hỏi chút. portB em chỉ muốn sử dụng một cổng chẳng hạn B0 để làm input còn những cái còn lại không dùng có được không

quangbuu
11-10-2013, 03:09 AM
Tui đang làm giao tiếp RS232 với máy tính.
Nhưng tui không biết tập lệnh của nó! Mò trong những ví dụ và phần Help của nó khổ quá! Có ai biết tập lệnh 16F877 được miêu tả rõ ràng hơn ở đâu không? Làm ơn chỉ tui với! Gấp lắm! :eek:

nếu cấu hình RS232 thì sử dụng lệnh
#use rs232(baud=9600,Parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
còn muốn nhận dữ liệu thì khai báo ngắt
#int_rda
void uart()
{
ch = gets; // ham nhan 1 ki tu
// xử lý code tiếp ở đây
}
...
void main()
{
...
enable_interrupts(int_rda);//cho phép ngắt uart
enable_interrupts(GLOBAL);// cho phép ngắt toàn cục
while(1)
{
//xử lí code ở đây
}
}

quangbuu
11-10-2013, 03:11 AM
Tui đang làm giao tiếp RS232 với máy tính.
Nhưng tui không biết tập lệnh của nó! Mò trong những ví dụ và phần Help của nó khổ quá! Có ai biết tập lệnh 16F877 được miêu tả rõ ràng hơn ở đâu không? Làm ơn chỉ tui với! Gấp lắm! :eek:

printf("%u",chuoi) // xuất đi một xâu kí tự lên PC
//các đối số khác cũng tương tự