การทดลองสวิทช์ สั่งให้ 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 ก็จะหยุดการทำงาน
แสดงความคิดเห็น