โปรแกรมไฟวิ่ง
บทความนี้เราจะมาศึกษาโปรแกรมไฟวิ่งกันครับ หลังจากที่ได้ทดลองเขียน โปรแกรมไฟกระพริบ LED 2 ดวง กันไปแล้ว ทีนี้เรามาทดลองเขียนโปรแกรมไฟวิ่งกันบ้างครับ ซึ่งจะใช้ LED ทั้งหมด 8 ดวงต่อเข้ากับพอร์ตเอาต์พุต B ทั้งหมด เพื่อที่จะให้ท่านที่เขียนไมโครคอนโทรลเลอร์มือใหม่ ได้เข้าใจการใช้งานเอาต์พุตพอร์ตดิจิตอลทั้ง 8 บิตควบคุม LED 8 ดวง มาเริ่มกันเลยครับ
ขั้นตอนที่ 1
ประกอบวงจรตามรูปด้านล่าง ลงในโปรแกรม Proteus ครับ
คำสั่งที่ใช้ในการโปรแกรม
while() เป็นคำสั่งทำงานซ้ำแบบมีเงื่อนไขครับ ซึ่งจะทำงานวนซ้ำไปเรื่อยๆจนกว่าเงื่อนไขจะเป็นเท็จ
for() เป็นคำสั่งทำงานซ้ำที่มีจำนวนลูปที่แน่นอน และจะหยุดทำซ้ำเมื่อเงื่อนไขเป็นเท็จ เช่น
for(i=1;i<=9;i++)
output_x(...) เป็นคำสั่งส่งข้อมูลออกทางเอาต์พุตในพอร์อตที่ต้องการตามค่าที่กำหนด เช่น output_b(0x01);
delay_ms(...) เป็นคำสั่งหน่วงเวลา เช่น delay_ms(500); โปรแกรมจะหน่วงเวลา 500ms ซึ่งค่านี้เราสามารถเปลี่ยนแปลงได้ตามความต้องการครับ
set_tris_b() เป็นคำสั่งกำหนดให้พอร์ต B เป็นเอาต์พุตทั้งหมดนั่นเอง โดยการกำหนดค่าให้กับฟังก์ชัน set_tris_b() เท่ากับ 0x00 เช่น set_tris_(0x00);
ขั้นตอนที่ 2
เริ่มเขียนโปรแกรมกันเลยครับ
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#use fast_io(A)
#use fast_io(B)
void main()
{
char i,j; // กำหนดตัวแปร i,j
set_tris_b(0x00); // คำสั่งกำหนดพอร์ต B ให้เป็นพอร์ตเอาต์พุตทั้งหมด
output_b(0b00000000); // คำสั่งเคลียร์พอร์ต B ให้เป็น 0 ทุกบิต
while(true) // คำสั่งวนซ้ำแบบมีเงื่อนไข
{
j=1; // กำหนดตัวแปร j=1
for(i=1;i<=8;i++) // คำสั่งทำซ้ำโดยกำหนดให้ i=1,i<=8,i=i+1
{
output_b(j); // กำหนดให้เอาต์พุตพอร์ต B = j
j=j<<1; // ให้ตัวแปร j เลื่อนบิตไปทางซ้าย 1 ตำแหน่ง
delay_ms(1000); // คำสั่งหน่วงเวลา 1 วินาที
}
}
}
ขั้นตอนที่ 1
ประกอบวงจรตามรูปด้านล่าง ลงในโปรแกรม Proteus ครับ
คำสั่งที่ใช้ในการโปรแกรม
while() เป็นคำสั่งทำงานซ้ำแบบมีเงื่อนไขครับ ซึ่งจะทำงานวนซ้ำไปเรื่อยๆจนกว่าเงื่อนไขจะเป็นเท็จ
for() เป็นคำสั่งทำงานซ้ำที่มีจำนวนลูปที่แน่นอน และจะหยุดทำซ้ำเมื่อเงื่อนไขเป็นเท็จ เช่น
for(i=1;i<=9;i++)
output_x(...) เป็นคำสั่งส่งข้อมูลออกทางเอาต์พุตในพอร์อตที่ต้องการตามค่าที่กำหนด เช่น output_b(0x01);
delay_ms(...) เป็นคำสั่งหน่วงเวลา เช่น delay_ms(500); โปรแกรมจะหน่วงเวลา 500ms ซึ่งค่านี้เราสามารถเปลี่ยนแปลงได้ตามความต้องการครับ
set_tris_b() เป็นคำสั่งกำหนดให้พอร์ต B เป็นเอาต์พุตทั้งหมดนั่นเอง โดยการกำหนดค่าให้กับฟังก์ชัน set_tris_b() เท่ากับ 0x00 เช่น set_tris_(0x00);
ขั้นตอนที่ 2
เริ่มเขียนโปรแกรมกันเลยครับ
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#use fast_io(A)
#use fast_io(B)
void main()
{
char i,j; // กำหนดตัวแปร i,j
set_tris_b(0x00); // คำสั่งกำหนดพอร์ต B ให้เป็นพอร์ตเอาต์พุตทั้งหมด
output_b(0b00000000); // คำสั่งเคลียร์พอร์ต B ให้เป็น 0 ทุกบิต
while(true) // คำสั่งวนซ้ำแบบมีเงื่อนไข
{
j=1; // กำหนดตัวแปร j=1
for(i=1;i<=8;i++) // คำสั่งทำซ้ำโดยกำหนดให้ i=1,i<=8,i=i+1
{
output_b(j); // กำหนดให้เอาต์พุตพอร์ต B = j
j=j<<1; // ให้ตัวแปร j เลื่อนบิตไปทางซ้าย 1 ตำแหน่ง
delay_ms(1000); // คำสั่งหน่วงเวลา 1 วินาที
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น