การเชื่อมต่อ LED เป็นสิ่งแรกที่เราควรทำในขณะที่เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ ดังนั้นในบทช่วยสอนนี้เราจะเชื่อมต่อ LED กับไมโครคอนโทรลเลอร์ 8051และจะเขียนโปรแกรม C เพื่อกะพริบ LED เราได้ใช้ไมโครคอนโทรลเลอร์ AT89S52 ที่เป็นที่นิยมอย่างมากจากตระกูล 8051 โดย ATMEL
ก่อนที่จะเข้าไปดูรายละเอียดที่เราควรจะได้รับบางส่วนคิดสรุปเกี่ยวกับAT89S52 ไมโครคอนโทรลเลอร์เป็นไมโครคอนโทรลเลอร์ 40 พินและมี 4 พอร์ต (P0, P1, P2, P3) แต่ละพอร์ตมี 8 พิน เราสามารถพิจารณาแต่ละพอร์ตเป็นรีจิสเตอร์ 8 บิตจากมุมมองของซอฟต์แวร์ แต่ละพินมีสายอินพุต / เอาต์พุตหนึ่งเส้นหมายความว่าทุกพินสามารถใช้สำหรับอินพุตและเอาต์พุตเช่นเพื่ออ่านข้อมูลจากอุปกรณ์บางอย่างเช่นเซ็นเซอร์หรือเพื่อให้เอาต์พุตไปยังอุปกรณ์เอาต์พุตบางตัว พินบางตัวมีฟังก์ชัน Dual ซึ่งได้รับการกล่าวถึงในวงเล็บใน Pin Diagram ด้านล่าง ฟังก์ชั่นคู่เช่นการขัดจังหวะตัวนับตัวจับเวลา ฯลฯ
AT89S52 มีหน่วยความจำสองประเภทประเภทแรกคือ RAM ซึ่งมีหน่วยความจำ 256 ไบต์และที่สองคือ EEPROM (Electronically Erasable และ Programmable Read Only Memory) ซึ่งมีหน่วยความจำ 8k ไบต์ RAM ใช้ในการจัดเก็บข้อมูลระหว่างการทำงานของโปรแกรมและ EEPROM ใช้ในการจัดเก็บโปรแกรม EEPROM คือหน่วยความจำแฟลชที่เราใช้ในการเบิร์นโปรแกรมลงใน
แผนภาพวงจรและคำอธิบาย
เราใช้พินหนึ่งในพอร์ต 1 เพื่อเชื่อมต่อ LED ในการเขียนโปรแกรม C แบบฝังเราสามารถเข้าถึง PIN 1 ของพอร์ต 1 ได้โดยใช้ P1_0 เราได้เชื่อมต่อคริสตัลออสซิลเลเตอร์ความถี่ 11.0592MHz กับ PIN 19 และ 18 เช่น XTAL1 และ XTAL2 คริสตัลออสซิลเลเตอร์ใช้ในการสร้างพัลส์นาฬิกาและพัลส์นาฬิกาใช้เพื่อระบุค่าเฉลี่ยสำหรับการคำนวณเวลาซึ่งจำเป็นในการซิงโครไนซ์เหตุการณ์ทั้งหมด คริสตัลประเภทนี้ใช้ในอุปกรณ์ดิจิทัลสมัยใหม่เกือบทุกชนิดเช่นในคอมพิวเตอร์นาฬิกา ฯลฯ ส่วนใหญ่คริสตัลที่ใช้คือควอตซ์มันเป็นวงจรออสซิลเลเตอร์เรโซแนนซ์และตัวเก็บประจุใช้ในการแกว่งคริสตัลดังนั้นเราจึงเชื่อมต่อตัวเก็บประจุ 22pf ที่นี่ คุณสามารถอ่านเกี่ยวกับ "วงจรเรโซแนนซ์" เพื่อทราบข้อมูลเพิ่มเติม
วงจรสำหรับ LED การเชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 89S52จะแสดงในรูปด้านบน Pin 31 (EA) เชื่อมต่อกับ Vcc ซึ่งเป็นพินต่ำที่ใช้งานอยู่ สิ่งนี้ควรเชื่อมต่อกับ Vcc เมื่อเราไม่ได้ใช้หน่วยความจำภายนอกใด ๆ Pin 30 (ALE) และพิน 29 (PSEN) ใช้เพื่อเชื่อมต่อไมโครคอนโทรลเลอร์กับหน่วยความจำภายนอกและพิน 31 บอกให้ไมโครคอนโทรลเลอร์ใช้หน่วยความจำภายนอกเมื่อเชื่อมต่อกับกราวด์ เราไม่ได้ใช้หน่วยความจำภายนอกดังนั้นเราจึงเชื่อมต่อ Pin31 กับ Vcc
Pin 9 (RST) คือ PIN รีเซ็ตซึ่งใช้เพื่อรีเซ็ตไมโครคอนโทรลเลอร์และโปรแกรมอีกครั้งจะเริ่มตั้งแต่ต้น รีเซ็ตไมโครคอนโทรลเลอร์เมื่อเชื่อมต่อกับ HIGH เราใช้วงจรรีเซ็ตมาตรฐานตัวต้านทาน 10k โอห์มและตัวเก็บประจุ 1uF เพื่อเชื่อมต่อขา RST
ตอนนี้ส่วนที่น่าสนใจคือเราเชื่อมต่อ LED ในทางกลับกันหมายถึงขาลบด้วย PIN ของไมโครคอนโทรลเลอร์เนื่องจากไมโครคอนโทรลเลอร์ให้พลังงานไม่เพียงพอที่จะเรืองแสง LED ดังนั้นที่นี่ LED จะทำงานบนลอจิกเชิงลบเช่นเมื่อพิน P1_0 คือ 1 จากนั้น LED จะถูกปรับปิดและเมื่อเอาต์พุตพินเป็น 0 ไฟ LED จะเปิดขึ้น เมื่อเอาต์พุต PIN เป็น 0 จะทำงานเหมือนกราวด์และไฟ LED จะสว่างขึ้น
คำอธิบายรหัส
ส่วนหัว REGX52.h ถูกรวมไว้เพื่อรวมนิยามการลงทะเบียนพื้นฐาน มีตัวแปรและค่าคงที่ใน C ที่ฝังอยู่หลายประเภทเช่น int, char, int ที่ไม่ได้ลงนาม, float เป็นต้นคุณสามารถเรียนรู้ได้อย่างง่ายดาย ที่นี่เรากำลังใช้ int ที่ไม่ได้ลงชื่อซึ่งมีช่วงตั้งแต่ 0 ถึง 65535 เรากำลังใช้ "for loop" ในการสร้างการหน่วงเวลาดังนั้น LED จะเปิดเป็นระยะเวลาหนึ่ง (P1_0 = 0, ลอจิก LED เชิงลบ) และปิด (P1_0 = 1, ลอจิก LED เชิงลบ) สำหรับเวลาล่าช้า โดยทั่วไปเมื่อ "for loop" ทำงานเป็นเวลา 1275 ครั้งจะมีการหน่วงเวลา 1ms ดังนั้นเราจึงสร้างฟังก์ชัน "delay" สำหรับสร้าง DELAY และเรียกใช้จากโปรแกรมหลัก (main ()) เราสามารถส่งเวลา DELAY (หน่วยเป็นมิลลิวินาที) ในขณะที่เรียกฟังก์ชัน "ดีเลย์" จากฟังก์ชันหลัก ในโปรแกรม“ While (1)” หมายความว่าโปรแกรมจะทำงานอย่างไม่มีที่สิ้นสุด
ฉันกำลังอธิบายสั้น ๆ ว่าลูป "for" ทำงาน 1275 ครั้งให้ความล่าช้า 1ms อย่างไร:
ใน 8051 1 รอบเครื่องต้องใช้พัลส์คริสตัล 12 อันในการดำเนินการและเราใช้คริสตัล 11.0592Mhz
ดังนั้นต้องใช้เวลา 1 รอบเครื่อง: 12 / 11.0592 = 1.085us
ดังนั้น 1275 * 1.085 = 1.3ms, 1275 เท่าของลูป "for" ให้ดีเลย์เกือบ 1ms
การหน่วงเวลาที่แน่นอนเกิดจากโปรแกรม“ C” นั้นคำนวณได้ยากมากเมื่อวัดจากออสซิลโลสโคป (CRO) สำหรับ (j = 0; j <1275; j ++) ให้ความล่าช้าเกือบ 1 มิลลิวินาที
ดังนั้นเราจึงสามารถเข้าใจได้โดยการเชื่อมต่อ LED กับไมโครคอนโทรลเลอร์ 8051ซึ่งด้วยการเข้ารหัสแบบง่ายๆที่เราสามารถโต้ตอบและควบคุมฮาร์ดแวร์ผ่านซอฟต์แวร์ (การเขียนโปรแกรม) โดยใช้ไมโครคอนโทรลเลอร์ นอกจากนี้เรายังสามารถจัดการกับแต่ละพอร์ตและพินของไมโครคอนโทรลเลอร์ผ่านการเขียนโปรแกรม