PDA

View Full Version : Gặp vấn đề với với điều khiển các port của PIC 16F877A


firstlove05
21-03-2010, 11:19 PM
Em mới học về PIC nên chưa hiểu rõ một số vấn đề mong các bác chỉ giúp :
Em có mấy Bt lập trình để điều khiển các cổng của PIC nhưng gặp một số vấn đề khó hiểu ,em lập trình bằng pm mikroC và mô phỏng bằng Protues ,BT của em như sau :

BT1 :Viết ct để làm sáng đèn theo kiểu đuổi ( sáng từ chân 0-7 ,sáng 1 đèn xong tắt rồi sáng đèn tiếp theo )

void main() {
PORTD = 0;
TRISD = 0;

while(1) {
PORTD=0x80;;
Delay_ms(500);
PORTD=0x40;
Delay_ms(500);
PORTD=0x20;
Delay_ms(500);
PORTD=0x10;
Delay_ms(500);
PORTD=0x08;
Delay_ms(500);
PORTD=0x04;
Delay_ms(500);
PORTD=0x02;
Delay_ms(500);
PORTD=0x01;
Delay_ms(500);

}
}

Ở bài này Ra port D nhưng chỉ chạy từ chân 1-3 .Khi đổi sang port C thì vẫn chạy ở port D

BT2 :Viết ct để làm sáng đèn theo kiểu lan ( sáng từ chân 0-7 ,từng đèn sáng lên một )

void main() {
PORTB = 0;
TRISB = 0;

while(true) {
PORTB.F0=1;
Delay_ms(1000);
PORTB.F1=1;
Delay_ms(1000);
PORTB.F2=1;
Delay_ms(1000);
PORTB.F3=1;
Delay_ms(1000);
PORTB.F4=1;
Delay_ms(1000);
PORTB.F4=1;
Delay_ms(1000);
PORTB.F5=1;
Delay_ms(1000);
PORTB.F6=1;
Delay_ms(1000);
}
}

Ở bài này Lại ra port D và chỉ chạy từ chân 1-5 .Đổi sang port C nhưng vẫn chạy ở port D

BT3 :Viết ct để làm sáng đèn theo kiểu dồn ( sáng dồn từ ngoài vào đến giữa rồi quay ngược ra )

void main() {
PORTC = 0;
TRISC = 0;

while(1) {
PORTC=0x81;
Delay_ms(500);
PORTC=0x42;
Delay_ms(500);
PORTC=0x24;
Delay_ms(500);
PORTC=0x18;
Delay_ms(500);
PORTC=0x24;
Delay_ms(500);
PORTC=0x42;
Delay_ms(500);
PORTC=0x81;
Delay_ms(500);
}
}


Ở bài này Chạy ở port C nhưng khi chuyển qua Port D thì vẫn chạy ở port C ,chạy từ ngoài vào ok nhưng từ trong ra chỉ đến cặp đèn thứ 3


Rất mong mọi người chỉ giúp em với ạ ,Thanks !

Mạch và bài lập trình em để trong file đính kèm .

http://www.mediafire.com/?hvjrwyulrlh