การทดลองสวิทช์ สั่งให้ LED ติดทีละดวงด้วย สวิชต์ตัวเดียว
การ ทดลองนี้เป็นการทดลองของเอาต์พุตทั้งพอร์ตโดยกำหนดให้ขาพอร์ต D เป็นเอาต์พุต โดยต่อขาพอร์ต D ใช้งานตั้งแต่ DB0 - DB7 โดยที่ LED จะติดเรียงไปเรื่อยๆ และวนกลับมาใหม่ เมื่อเรากดสวิชต์ที่ พอร์ต RB0ฟังก์ชั่น rotate_left() เป็นฟังก์ชันการหมุนบิตของข้อมูลไปทางช้าย ของตัวแปร
รูปแบบการใช้งาน: rotate_left(address,bytes);
พารามิเตอร์:
address : แอดเดรสของหน่วยความจำที่พอยน์เตอร์ชี้
bytes : จำนวนไบต์ที่ต่องการหมุน
วงจรที่ใช้ในการทดลอง
โปรแกรมที่ใช้ในกาทดลอง
/*1*/ #include <16F877A.h>/*2*/ #FUSES NOWDT,HS,NOPROTECT,NODEBUG,NOLVP,NOWRT
/*3*/ #use delay(clock=20000000)
/*4*/ int i=0b00000001;
/*5*/ void main()
/*6*/ {
/*7*/ set_tris_b(0b00000000);
/*8*/ while(TRUE)
/*9*/ {
/*10*/ if(input(pin_b0)==0)
/*11*/ {
/*12*/ delay_ms(250);
/*13*/ rotate_left(&i,1) ;
/*14*/ }
/*15*/ output_D(i);
/*16*/ }
/*17*/ }
อธิบายการำทงาน
บรรทัดที่ 1 เป็นการเรียกใช้ 16f887A.h ชึ่งจะเก็บไรบลารีต่างๆของไมโครคอนโทรลเลอร์เบอร์ 16f877Aบรรทัดที่ 2 เป็นการกำหนดค่าคอนฟิกให้กับไมโครคอนโทรลเลอร์
บรรทัดที่ 3 เป็นการเรียกใช้ฟังก์ชันของเวลา
บรรทัดที่ 4 เป็นการกำหนดตัวแปร ชนิด int ชื่อตัวแปล i ให้มตัวแปร i เท่ากับ 0b00000001
บรรทัดที่ 5 เป็นฟังก์ชันเริมต้นการทำงานของโปรแกรม
บรรทัดที 7 เป็นการประกาศใช้งานพอร์ต D ทั้หมดให้เป็นเอาต์พุต
บรรทัดที 8 เป็นคำสั่งวนรอบ While (true) กำหนดให้เป็น TRUE เพื่อให้โปรแกรมทำงานวนรอบต่อเนื่อง
บรรทัด ที่ 10 เป็นคำสั่ง ตัดสินใจ เมื่อเรากดสวิชต์ ก็จะมีการทำงานภายใต้วงเล็บปีกกา คำสั่งในบรรทัดที่ 12 และ13 จะทำงานเมื่อเราปล่อยสวิชต์ ในบรรทัดที่ 12 และ 13 ก็จะหยุดการทำงาน
แสดงความคิดเห็น
Click to see the code!
To insert emoticon you must added at least one space before the code.