Ðiều khiển ra cả cổng

Một phần của tài liệu Ngôn ngữ C theo chuẩn ANSI (Trang 50 - 53)

Nếu các bạn nhàm chán với việc điều khiển từng chân 1 viết code rất tốn công các bạn có thể xuất giá trị ra cả cổng. Trước hết các bạn cần nắm các điều như sau:

- Một cổng có 8 bit tổ hợp, 8bit có 2 = 256 trạng thái. Khi các bạn đưa ra cổng 1 giá trị a (thập phân) từ 0 đến 255 thì số a sẽ được đổi ra hệ nhị phân rồi đưa ra các bit( chân) của cổng. Ví dụ:

Nếu có lệnh: P1=1;

vì 1(10) nên chân P1_0(bit 0) sẽ bằng 1(5V) còn lại các từ P1_1(bit 1) đến P1_7(bit 7) sẽ bằng 0(0V).

P1=10;

vì 10(10) = 0000 0001 = 0000 1001(2)(2) thì sẽ có P1_0 và P1_3 bằng 1(5V) còn lại các chân khác sẽ là 0(0V).

- Các bạn có thể đưa ra cổng 1 giá trị số hex từ 0 đền ff tương ứng từ 0 đến 255. Các số cơ sở trong hệ hex. (HEX)0 1 2 3 4 5 6 7 8 9 A B C D E F (10) 10 11 12 13 14 15 Cách đổ số hex ra số thập phân: có số hex : N=abf1 đổi ra hệ số 10

N(10)=1.160 + 15.161+ 11.162+ 10.163(16). Ðổi số nhị phân sang hex: Gộp 4 số nhị phân thành 1 số hex: Ví dụ: 0010 0001(2)(16) 1 4 số đầu có bit 1 = 1 nên 1x20= 2 4 số sau có bit 0 =1 nên 1x2=1. Cách đưa ra như sau:

Ví dụ lệnh P1=1; tưong dưong với P1=0x01; P1=10; tưong đưong với P1=0x0A;

Chưong trình xuất ra cả cổng tưong đưong với chưong trình điều khiển 8 led từng cái 1 như sau:

void main(void) { while(1)// Lap vo han {

P1=0x01;// Bat led 1

Delay(1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 1

Delay (1000);// Tre 1 khoang thoi gian P1=0x02;// Bat led 2

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 2

Delay (1000);// Tre 1 khoang thoi gian P1=0x04;// Bat led 3

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 3

Delay (1000);// Tre 1 khoang thoi gian P1=0x08;// Bat led 4

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 4

Delay (1000);// Tre 1 khoang thoi gian P1=0x10;// Bat led 5

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 5

Delay (1000);// Tre 1 khoang thoi gian P1=0x20;// Bat led 6

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 6

Delay (1000);// Tre 1 khoang thoi gian P1=0x40;// Bat led 7

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 7

Delay (1000);// Tre 1 khoang thoi gian P1=0x80;// Bat led 8

Delay (1000);// Tre 1 khoang thoi gian P1=0x00;// Tat led 8

Delay (1000);// Tre 1 khoang thoi gian }

}

Như vậy gõ code vẫn mỏi tay lắm dể dạt được mục đích 8 đèn nháy liên tiếp các bạn có thể làm như sau:

/******************Ham chinh****************************/ void main(void) { (adsbygoogle = window.adsbygoogle || []).push({});

unsigned char n; // Khai bao them bien n cho vong for while(1)// Lap vo han

{

P1=0x01;// Bat led 1

for(n=0 ; n<8;n++)// Lap 8 lan {

P1=P1<<1; // Dich trai 1 bit Delay (1000);

} } }

/***********************************************************/

Debug quan sát sự thay đổi của cổng 1 dể thấy được tác dụng phép dịch bit xang trái. Ðể hiểu thao tác xuất ra cổng, chân, các các bạn làm 1 ví dụ nữa như sau:

/***********************Ham chinh*******************************/ void main(void) {

unsigned char n; // Khai bao them bien n cho vong for while(1)// Lap vo han

{

P1=0x01;// Bat led 1

for(n=0 ; n<256;n++)// Lap 8 lan

{

P1=n; // Dich bit xang trai Delay (5000);

} } }

/****************************************************************/ Debug để thấy sự thay đổi các cổng.

Một phần của tài liệu Ngôn ngữ C theo chuẩn ANSI (Trang 50 - 53)