PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Cần Giúp đỡ về Pic 16f887 (http://www.picvietnam.com/forum/showthread.php?t=30647)

shoknshok 03-10-2012 11:14 PM

Cần Giúp đỡ về Pic 16f887
 
1 Attachment(s)
Tình hình là em đang làm mạch Led ma trận dùng Pic 16f887, không hiểu sao mắc mạch như thế này mà chạy một hồi lại bị lỗi.
Em đang xài Mikro C ạ! Mong các bác giúp đỡ!
P/s: các bác tải về sửa lại đường dẫn tới file hex để mạch nó nhận code nha! :)

shoknshok 04-10-2012 11:41 AM

Sao ko ai biết hết vậy??? :((

handsometran 05-10-2012 03:59 PM

Trích:

Nguyên văn bởi shoknshok (Post 78125)
Sao ko ai biết hết vậy??? :((

Chương trình của bạn sao lạ quá, mảng hinh[]-> không có kích thước.
Muốn P
//======================================//
unsigned long t, i;
unsigned int hinh[] =
{
0b11111111,
0b10010000,
0b10010000,
0b11110000,
};
void main()
{
ANSEL = 0; // CAU HINH NGO RA DIGITAL
ANSELH = 0;
trisc=0x00; //portc là output
portc=0; // xoá portc
trisb = 0xff;
trisd = 0;
portd=0;
LOOP: i = 0;
for(t = 1; t != 16 ; t = t * 2 )//????? vòng lặp này lạ quá chĩ thấy for(int i =0; i<10; i++)-> vòng lặp này thực hiện 10 lần.
{
portc = hinh[i];
portd = t;
i = i + 1;
delay_ms(100);
portc = portd = 0;
}
goto LOOP;
}

Bạn xem lại ngôn ngữ C có đúng không, và datasheet nữa.

shoknshok 05-10-2012 06:31 PM

Em đang xài mikro C bác ạ!
Vòng lặp đó ý em muốn nó quét mã hình lên ma trận LED. Portc điều khiển hàng, portd điều khiển cột. Biến t nhảy từ 1 2 4 8 tương ứng với 4 pin đầu của portd, khi quét đến hết chân 4 thì t =16 => thì bắt đầu quét lại.
Mảng hình em tính còn nhiều nữa nên chưa kích thước, để khơi khơi luôn :D
Em mới chỉ học qua nhập môn lập trình = C++ trên trường dạy nên áp dụng qua đây thôi.
Đang cố tìm hiểu mà sao khó quá bác ạ :((
Mong bác giúp em, thanks bác nhiều :)

shoknshok 10-10-2012 11:25 AM

Một tuần trôi qua mà vẫn không có ai giúp em hết? :(

handsometran 16-11-2012 12:27 AM

Trích:

Nguyên văn bởi shoknshok (Post 78156)
Em đang xài mikro C bác ạ!
Vòng lặp đó ý em muốn nó quét mã hình lên ma trận LED. Portc điều khiển hàng, portd điều khiển cột. Biến t nhảy từ 1 2 4 8 tương ứng với 4 pin đầu của portd, khi quét đến hết chân 4 thì t =16 => thì bắt đầu quét lại.
Mảng hình em tính còn nhiều nữa nên chưa kích thước, để khơi khơi luôn :D
Em mới chỉ học qua nhập môn lập trình = C++ trên trường dạy nên áp dụng qua đây thôi.
Đang cố tìm hiểu mà sao khó quá bác ạ :((
Mong bác giúp em, thanks bác nhiều :)

Ngôn ngữ cho VDK là C chứ không phải C++ bạn ah.

youaremylife 16-11-2012 02:54 AM

cái mạch mở bằng cái gì mà sao mình mở không được vậy

youaremylife 16-11-2012 02:57 AM

Trích:

Nguyên văn bởi handsometran (Post 78154)
Chương trình của bạn sao lạ quá, mảng hinh[]-> không có kích thước.
Muốn P
//======================================//
unsigned long t, i;
unsigned int hinh[] =
{
0b11111111,
0b10010000,
0b10010000,
0b11110000,
};
void main()
{
ANSEL = 0; // CAU HINH NGO RA DIGITAL
ANSELH = 0;
trisc=0x00; //portc là output
portc=0; // xoá portc
trisb = 0xff;
trisd = 0;
portd=0;
LOOP: i = 0;
for(t = 1; t != 16 ; t = t * 2 )//????? vòng lặp này lạ quá chĩ thấy for(int i =0; i<10; i++)-> vòng lặp này thực hiện 10 lần.
{
portc = hinh[i];
portd = t;
i = i + 1;
delay_ms(100);
portc = portd = 0;
}
goto LOOP;
}

Bạn xem lại ngôn ngữ C có đúng không, và datasheet nữa.

Thứ nhất mảng hằng số thế này thì không cần phải ghi kích thước tự trình biên dịch nó xử lý.
Thứ hai for(t = 1; t != 16 ; t = t * 2 ) chẳng có gì là sai cả. cái này bác nên xem lại ý nghĩa các trường trong lệnh for. trường thứ hai chỉ là điều kiện có thể (t =1; i != 100;c++) cũng chẳng có gì sai.

lab.cdt 18-11-2012 10:36 AM

Nhờ giúp đỡ về thuật ngữ trong PIC
 
Tớ đọc tài liệu trên mạng thấy họ có sử dụng thuật ngữ là "kích âm" và "kích dương". Tớ thắc mắc không biết "kích âm" có phải là tích cực mức thấp không và "kích dương" có phải là tích cực mức cao không? Nhờ các cậu giải thích hộ tớ..Thanks...

handsometran 20-11-2012 03:06 PM

Trích:

Nguyên văn bởi lab.cdt (Post 79442)
Tớ đọc tài liệu trên mạng thấy họ có sử dụng thuật ngữ là "kích âm" và "kích dương". Tớ thắc mắc không biết "kích âm" có phải là tích cực mức thấp không và "kích dương" có phải là tích cực mức cao không? Nhờ các cậu giải thích hộ tớ..Thanks...

Khác nhau chứ bạn, kích dương tức là >0V, kích âm là <0V. Khi dùng trans hay mosfet có loại thuận, loại nghịch tương ứng với xung dương và âm để nó hoạt động.

handsometran 20-11-2012 03:47 PM

Trích:

Nguyên văn bởi youaremylife (Post 79423)
Thứ nhất mảng hằng số thế này thì không cần phải ghi kích thước tự trình biên dịch nó xử lý.
Thứ hai for(t = 1; t != 16 ; t = t * 2 ) chẳng có gì là sai cả. cái này bác nên xem lại ý nghĩa các trường trong lệnh for. trường thứ hai chỉ là điều kiện có thể (t =1; i != 100;c++) cũng chẳng có gì sai.

Vì mới tìm hiểu C có hơn 1 tháng nên chưa hiểu lắm. Bạn có biết cách nhóm bit bằng struct và union không. Đọc tài liệu nhiều nhưng do chỉ vắn tắt quá nên không nắm hết.


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam