PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 18-07-2007, 02:34 PM   #271
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
chào các bạn mình mới học pic nên chưa biết nhiều mong được sự giúp đỡ,
tui có vài câu hỏi mong được chỉ giáo
tui sử dụng ngắt timer nhưng thấy lệnh
set_timer0(); ko có tác dụng nghĩa là đặt số mấy cũng ko thấy thay đổi
thậm chí ko có lệnh đó vẫn chạy như thường
bạn nào làm ngắt timer rùi chỉ mình với
Code:
#include <18F4331.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

int i=0;
void main()
{
	setup_timer_0(rtcc_div_32);
        set_timer0(10);   ????nếu đặt 1 thì bao lâu mới ngắt
	enable_interrupts(int_rtcc);
	enable_interrupts(global);
	while(true)
	{
	}
}

#int_rtcc
void ngat_timer()
{
	i++;
	output_D(i);
	
}
cấu hỏi thứ 2 là khi giao tiếp máy tính mình truyền từ PC đến pic
dùng lệnh getc(); thì chỉ thu được 1 kí tự
ví dụ truyền số 12 thì thu được 2 số 1 và 2
có bạn nào biết lệnh nào để lấy 1 chuỗi ko?

thay đổi nội dung bởi: namqn, 18-07-2007 lúc 06:48 PM.
sandro_bk vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 06:56 PM   #272
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Về timer 0 và hàm set_timer0(), bạn đọc thêm tài liệu hướng dẫn của CCS C (trang 206, ver. 4, 01/2007) và datasheet của chip.

Về getc(), nếu bạn dùng nó thì tất nhiên chỉ lấy được 1 ký tự là nó đã trở về. Bạn đọc thêm về hàm gets() trong tài liệu hướng dẫn của CCS C (đã nêu trên, trang 148) để đọc 1 chuỗi ký tự.

Nếu bạn chưa biết tài liệu đó lấy ở đâu:
http://www.ccsinfo.com/downloads/ccs_c_manual.pdf

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 08:24 PM   #273
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
cho em hỏi cái bài LCD ở trên mà em đã hỏi ý ạ.em đã cho hiển thị được rùi, nhưng :
khi chạy lượt đầu tiên thì nó bị mất 1 kí tự đầu tiên,ở cả 2 hàng luôn.và chạy lượt sau nó ko bị mất,đúng như lập trình.
em đã khai báo 0x80 và 0xc0 cho 2 hàng ạ
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 18-07-2007, 11:06 PM   #274
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
cho em hỏi cái bài LCD ở trên mà em đã hỏi ý ạ.em đã cho hiển thị được rùi, nhưng :
khi chạy lượt đầu tiên thì nó bị mất 1 kí tự đầu tiên,ở cả 2 hàng luôn.và chạy lượt sau nó ko bị mất,đúng như lập trình.
em đã khai báo 0x80 và 0xc0 cho 2 hàng ạ
Mất theo kiểu nào vậy bạn? Không hiển thị ra ở vị trí đó hay là những ký tự nằm cùng hàng bị dịch qua bên trái một vị trí hay là hiển thị sai ở vị trí đó?

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 11:44 AM   #275
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 06:19 PM   #276
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi anh_gioi View Post
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
Hiện tượng này có nhiều khả năng là do thuật toán của bạn, lượt chạy đầu tiên con trỏ của chuỗi ký tự bị sai chẳng hạn. Bạn kiểm tra lại thuật toán của chương trình. Ở đầu vòng lặp chính nên có lệnh đặt giá trị cho con trỏ dùng để truy xuất chuỗi ký tự.

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 19-07-2007, 10:10 PM   #277
nguyen.geo
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 27
:
Trích:
Nguyên văn bởi anh_gioi View Post
dạ .LCD quét lần đầu tiên nó bị dịch sang trai 1 ki tu.(như : ANH_GIOI thì nó còn NH_GIOI).quét lần thứ hai thì nó ko bị mất như trên nữa.
e bị mất cả 2 hàng luôn mới đau chứ
Ban ơi theo mình thì bạn hãy đặt giá trị trễ thêm 1 tí nữa là được thôi mình cũng đã gặp trường hợp nảy rồi lỗi này thường xuất hiện với các câu lệnh như là xóa màn hình, về đầu dòng, dịch con trỏ. Thưởng thì mình đặt trễ sau xóa màn hình 2ms, sau lệnh chức năng khác cho LCD ( Trường hợp RS = 0) là 10 us thì nó làm việc bình thường.các lệnh hiển thị dữ liệu thì không cần. Bạn thử theo cách của mình nhé. chúc bạn thành công !
nguyen.geo vẫn chưa có mặt trong diễn đàn  
Old 01-08-2007, 02:34 PM   #278
tuanta
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 1
:
Unhappy Lỗi với chân RB3

Xin chào,

Mình đang sử dụng con PIC16F873A, chương trình viết trên CCS C. Mình gặp một lỗi rất khó hiểu là khi làm việc với portB, có duy nhất chân RB3 là mình không sao điều khiển được. Chẳng hạn mình dùng lệnh output_high(PIN_B3) thì không bao giờ nó High cả. Mạch test mình làm cũng rất đơn giản, giống như mạch của NHH post thôi. Mình đã nghĩ là do con PIC của mình nó hỏng riêng chân đấy, nên mình đã thử mua mấy con PIC16F873A khác về dùng, tình trạng vẫn hệt như vậy. Sau đó mình lại tiếp tục thử bằng cách chuyển sang con PIC16F876A xem sao, thì lỗi gặp cũng y hệt! Xin mọi người lời khuyên.

(Mạch nạp mình dùng là Galep-4).
Trích:
Nguyên văn bởi nhh View Post
Chào cả nhà!

Để lập trình cho PIC, mọi người có thể chọn cho mình những ngôn ngữ lập trình khác nhau như ASM, CCS C, HT-PIC, pascal, basic,...
Với nhh, đầu tiên tìm hiểu và viết chương trình cơ bản bằng ASM để hiểu rõ cấu trúc sau đó thì viết bằng CCS C cũng viết lại những cái cơ bản và đi dần lên, tốc độ lúc này nhanh hơn khi viết bằng ASM rất nhiều.

Khi viết bằng CCS C thông thường thì dịch ra file.hex có dài hơn so với khi viết bằng ASM. Hai ngôn ngữ CCS C và HT-PIC được ưa chuộng hơn cả, CCS C dễ học,gần gũi với ASM còn HT-PIC là dạng ANSI C.

Để lập trình và biên dịch CCS C, dùng chương trình PIC C Complier,sau khi soạn thảo các bạn ấn F9
để dịch,nếu thành công sẽ có thông báo như sau:



Ngoài ra, để xem code ASM như thế nào,sau khi dịch bạn chọn mục C/ASM List như hình dưới đây:



Link download trình biên dịch CCS C ở đây: http://www.tailieuvietnam.net/downlo...CCSC_3.249.rar
Phiên bản mới hơn tải tại: www.kho.tailieuvietnam.net, vào Download Home > Điện tử tàn thư > Vi điều khiển - Vi xử lý - PLC

Chúng ta cùng nhau tìm hiểu lần lượt các phần sau:

1.I/O + Delay
2.Timer và ngắt Timer
3.Ngắt ngoài
4.ADC, PWM,... (tập trung mổ xẻ nhiều)
5......

Tạm thời cứ như vậy đã, sau này sẽ tính tiếp!
Nào,chúng ta bắt đầu thôi!
Trích:
Nguyên văn bởi nhh View Post
Chương trình này làm nhấp nháy con led ở chân RB0 1s sáng, 1s tắt.
Code:
#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
main()
{
while(true)
	{
	output_high(PIN_B0);
	delay_ms(1000);
	output_low(PIN_B0);
	delay_ms(1000);
	}
}
Trên đây:
Code:
#include<16F877A.h>
Khai báo con PIC bạn sử dụng, file này chương trình viết sẵn nhằm khai báo các bit, thanh ghi quan trọng trong con pic này.Các bạn có thể vào thư mục cài đặt C:\Program Files\PICC\Devices\16F877A.h để xem nó khai báo được những gì trong đó!
Code:
#fuses NOWDT,PUT,HS,NOPROTECT
Thiết lập các config
Code:
#use delay(clock=10000000)
Khai báo tần số dao động cấp cho PIC
Code:
output_high(PIN_B0)
Xuất ra chân RB0 mức logic 1 (tức 5V), do khi thực hiện hàm này đã bao hàm luôn việc tác động lên thanh ghi TRISB (dùng chọn chân I/O) do vậy ta không cần viết lệnh chọn chân I/O nữa.
Code:
output_low(PIN_B0)
Ngược lại
Code:
delay_ms(1000)
Tạo trễ khoảng thời gian theo mili giây là 1000 (tức 1s)
Chú ý hàm này chỉ có tác dụng khi có khai báo tần số dao động cấp cho PIC

Và bây giờ thử làm cho tất cả 8 led nối với portB chớp tắt 1s xem nào!Phải chăng ta sẽ làm như sau (Viết trong vòng lặp while):
Code:
{
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
delay_ms(1000);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
delay_ms(1000);
}
Viết như thế này thì quá dài và thiếu chính xác nữa, có cách nào khác hay hơn không ? Sao ta không xuất đẩy hẳn portB lên mức cao,tạo trễ 1s rồi ép cho nó xuống mức thấp,tạo trễ 1s cùng một lúc nhỉ !
Bài tiếp theo sẽ đưa ra câu trả lời....
tuanta vẫn chưa có mặt trong diễn đàn  
Old 02-08-2007, 10:08 AM   #279
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Bạn chú ý chân RB3 là chân cực thu hở, muốn sử dụng, bạn mắc thêm 1 điện trở kéo lên.
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 05-08-2007, 02:12 PM   #280
c828
Nhập môn đệ tử
 
Tham gia ngày: Jan 2006
Bài gửi: 1
:
chào các Bác mình mới học ccs c được vài ngày nhưng khi viết ct hiển thị trên 2 led 7 doan và mô phỏng trên proteus thì không được, mong các bác cho em đoạn code. cám ơn
c828 vẫn chưa có mặt trong diễn đàn  
Old 09-08-2007, 04:12 AM   #281
sphinx9
Nhập môn đệ tử
 
Tham gia ngày: Jun 2007
Bài gửi: 1
:
mấy anh cho em hỏi xíu ạ tại seo khi em xài các lệnh
trisb=0;
rb0=1;
rb1=1;
rb2=1;
rb3=1;
hoặc các lệnh:
output_high(pin_b0);
output_high(pin_b1);
output_high(pin_b2);
output_hgh(pin_b3);
mà nếu em gắn ở các chân đó là led thì nó sáng lần lược ở rb0 rb1 rb2 rb3 chứ nó ko sáng ở cả 4 chân bật debug của protus lên thì
trisb=0b11110000 : cái này thì đúng rùi
portb=0b00001000 : còn cái này seo kì wá
nhưng nếu em lắp vào đó dộng cơ thì lại khác em lắp vào rb0 động cơ ocn2 mấy cái kia là led thì động cơ way led ở rb3 sáng còn ở rb1 rb2 tắt
nhưng nếu em xài lệnh
portb=0b00001111; thì nó lại sáng bình thường
mấy anh giải thích giùm em với
cám ơn
sphinx9 vẫn chưa có mặt trong diễn đàn  
Old 12-08-2007, 12:09 AM   #282
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Chào mọi người! Em có 1 thắc mắc muốn hỏi : Với ngắt RB4-7 thì dòng lệnh ext_int_edge( H_to_L ) hình như không có tác dụng. Em thử bỏ hoặc thay thế bằng ( L_to_H ) thì thấy không có thay đổi gì. Hình như mặc định là H_to_L . Em có đọc trong datasheet PIC18f4550 thì chỉ thấy nói đến chọn cạnh lên xuống ở ngắt ngoài RB0, còn ở RB4-7 thì không thấy nói rõ. Em không hiểu rõ chỗ này. Mong mọi người chỉ bảo.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 15-08-2007, 05:05 PM   #283
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:
Mình mới học về PIC.Cho hỏi ADC module có chức năng gì,công dụng ntn trên PIC? Mình nghĩ cho một điện thế analog thì nó xuất ra tín hiệu digital.Mình đã có đọc đoạn code này nhưng chưa hiểu rõ :
Code:
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8 
#use delay(clock=10000000)
Int8 adc;
main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(10);
while(true)
{
adc=read_adc();
output_B(adc);
}
}
Bạn nào đã đi trước thì giải thích giùm mình nhé,mình cần luôn file mô phỏng proteuss để hiểu rõ hơn.Cám ơn nhiều.Chúc vui.

thay đổi nội dung bởi: namqn, 15-08-2007 lúc 05:44 PM.
cuopbienquin vẫn chưa có mặt trong diễn đàn  
Old 15-08-2007, 11:15 PM   #284
thaithienanh
Đệ tử 7 túi
 
thaithienanh's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 189
:
Send a message via Yahoo to thaithienanh
Red face Ui sao hông có anh nào replay luồng này hết vậy

To @c828 : việc quét 2 led rất đơn giản, chắc là do bạn chưa nắm đuợc quét led là gì rồi, bây giờ mình sẽ cho bạn một ví dụ cơ bản nhất về quét led (có kèm file Proteus và notepad), sau đó thì bạn nghiền ngẫm code khoảng vài phút chắc sẽ hiểu thui

To @sphinx9 : Cách diễn giải câu hỏi của bạn hơi khó hiểu một chút nhưng mình cũng loáng thoáng hiểu đuợc và xin trả lời là : đó là điểm yếu của Proteus nên không cần thắc mắc và cũng không thể giải thích (mình nói thật đó đừng nghe giọng văn trả lời cụt ngủn mà hiểu lầm nhá )

To @dvnccbmacbt : Ngắt RB dùng để ghi nhận sự kiện "có sự thay đổi bất kỳ" trên các chân từ RB4 đến RB7 cho nên việc chọn sườn ngắt không có vai trò ý nghĩa ở đây

To @cuopbienquin : ADC = Analog Digital Convert như vậy ý nghĩa của nó là một bộ chuyển đổi từ tín hiệu "tương tự" sang giá trị "số" tương ứng. Tuỳ vào việc lựa chọn điện áp tham chiếu và độ phân giải mà giá trị cho ra sẽ khác, ví dụ khi ta lựa chọn là ADC=8 và Vref = 5V thì khi đó nếu tín hiệu đưa vào bộ ADC là 5V thì giá trị số trả ra là 11111111 (8bit) = 255, công thức tổng quát lúc này sẽ là :
Value (giá trị "số") = 255 (max value của 8 bit) * X (tín hiệu đưa vào) / 5 (Vref)
Bạn tham khảo thêm tại bài trước nhá link đây :
http://www.picvietnam.com/forum//sho...?t=357&page=17
File Kèm Theo
File Type: zip New Folder.zip (6.8 KB, 385 lần tải)
__________________
_____________________________Tri nhân tri tự bất tri tâm_____________________________
_ _ _ _ _ _ _ _ Yêu mến tất cả anh em Picvietnam.com _ _ _ _ _ _ _ _
. . . . . . . . . . . . . . . . Để post đuợc một câu hỏi rõ ràng xin tham khảo link sau : . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . http://www.picvietnam.com/forum/showthread.php?t=1263. . . . . . . . . . . . . . . .
thaithienanh vẫn chưa có mặt trong diễn đàn  
Old 17-08-2007, 04:45 PM   #285
cuopbienquin
Đệ tử 2 túi
 
cuopbienquin's Avatar
 
Tham gia ngày: Jun 2007
Bài gửi: 43
:
PWm là bộ điều chế đọ rộng xung.Mình đang tìm hiểu cái module này nó hoạt độnh ntn?Mình đã đọc tổng quan về nó là dùng để điều khiển động cơ như tốc độ,tần số..
Mình muốn hiểu rõ hơn cấu trúc mạch ntn trong VDK PIC,kết nối với động cơ ra sao.BẠn nào đã tìm hiểu rồi thì hướng dẫn gíp mình nha.Mình đang rất cần.Chúc vui
cuopbienquin vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề 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


Múi giờ GMT. Hiện tại là 01:09 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam