View Full Version : Cần Giúp đỡ về Pic 16f887
shoknshok
03-10-2012, 11:14 PM
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
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
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
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
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
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
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.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.