วงจรไมโครคอนโทรลเลอร์

วงจรไมโครคอนโทรลเลอร์

Jump to TINA Main Page & General Information 

TINA ให้การสนับสนุนเป็นจำนวนมาก (PIC, AVR, Arduino, 8051, HCS, STM, ARM, TI-Tiva, TI-Sitara, Infineon-XMC) ไมโครคอนโทรลเลอร์ MCUs ใหม่ถูกเพิ่มเข้ามาอย่างต่อเนื่อง คุณสามารถดูแก้ไขและดีบักโปรแกรมที่ทำงานในโปรเซสเซอร์และแน่นอนคุณสามารถสร้างรหัสของคุณเอง

มีสองวิธีในการจัดโปรแกรมสำหรับไมโครคอนโทรลเลอร์ใน TINA คุณสามารถใช้รหัสไบนารี่และไฟล์ดีบั๊กที่สร้างโดยคอมไพเลอร์มาตรฐาน (เช่น MPLAB สำหรับ PICs) หรือคุณสามารถโหลดแอสเซมบลีโค้ดของคุณเพื่อเรียกใช้และดีบักใน TINA โดยใช้แอสเซมเบลอร์

การสร้างวงจรตัวนับอย่างง่ายโดยใช้ไมโครคอนโทรลเลอร์ PIC พร้อมการเขียนโปรแกรมภาษาแอสเซมบลี

การสร้างวงจรตัวนับอย่างง่ายโดยใช้ไมโครคอนโทรลเลอร์ PIC ที่มีการโปรแกรมภาษา C

การดีบักไมโครคอนโทรลเลอร์ขั้นพื้นฐานโดยใช้ TINA

ในไมโครคอนโทรลเลอร์ TINA สามารถจำลองได้ไม่เพียง แต่ตัวเดียว แต่ยังรวมถึงอนาล็อก, ดิจิตอล, HDL หรือรุ่นอื่น ๆ

วิ่งและแก้ไขรหัส MCU

โหลดวงจร PIC Flasher.TSC จากโฟลเดอร์ ExampleMicrocontrollersPic

แผนผังต่อไปนี้ที่ใช้ไมโครคอนโทรลเลอร์ 16F73 PIC จะปรากฏขึ้นพร้อมไมโครคอนโทรลเลอร์ 16F73 PIC:

วงจรไมโครคอนโทรลเลอร์ภาพ 1

วงจรนี้จะนับไปข้างหน้าทีละตัว กด เพื่อดูว่ามันทำงานอย่างไร

จอแสดงผลควรก้าวไปข้างหน้าทีละคน

ดับเบิลคลิกที่ MCU เพื่อดูรหัส ASM (ดูรายละเอียดเพิ่มเติมในคู่มือการเริ่มต้นฉบับย่อ)

TINA มีคุณสมบัติที่ยอดเยี่ยมที่คุณสามารถแก้ไขและเปลี่ยนรหัสต้นฉบับได้โดยตรงใน TINA

ให้ทำการเปลี่ยนแปลงต่อไปนี้ในรหัส:

เปลี่ยนคำสั่ง (เลือกด้านบน) ในบรรทัด 25 (คุณสามารถดูหมายเลขบรรทัดที่มุมล่างขวาของหน้าต่างแก้ไขโค้ด):

จาก addlw 01H

เพื่อเพิ่ม 02H

บันทึกรหัสที่เปลี่ยนแปลงไปยัง TINA โดยกดปุ่ม ไอคอนและปิดหน้าต่าง MCU ที่เปิดอยู่

หากคุณกด ปุ่มตอนนี้การเพิ่มขึ้นจะเป็น 2!

โปรดทราบว่ารหัสที่เปลี่ยนแปลงจะถูกบันทึกโดยอัตโนมัติในไฟล์ TINA .TSC

การใช้ตัวดีบั๊ก

ลองดูแอปพลิเคชั่นอื่นที่มีการโต้ตอบมากขึ้น

โหลดตัวอย่าง PIC16F84interrupt_rb0.TSC ของ TINA จากโฟลเดอร์ ExampleMicrocontrollersPic

กด ปุ่ม. ดูเหมือนว่าในตอนแรกว่าไม่มีอะไรเกิดขึ้น

อย่างไรก็ตามหากคุณคลิกสวิตช์ SW-HL1 หน้าจอจะก้าวไปข้างหน้าโดย 1 ทุกครั้งที่สวิตช์เปลี่ยนจากต่ำไปสูง

ความสามารถในการจัดการอินเตอร์รัปต์ของ PIC จะทำให้เราสามารถตรวจจับการเปลี่ยนแปลงของสวิทช์ได้

ตอนนี้เรามาดูรายละเอียดการทำงานโดยใช้ดีบักเกอร์ ASM เชิงโต้ตอบของ TINA

หากต้องการเปิดใช้งานดีบักเกอร์ให้เลือกตัวเลือกในเมนูการวิเคราะห์ จากนั้นตั้งค่าช่องทำเครื่องหมาย“ เปิดใช้งานการดีบักเกอร์รหัส MCU” ดังที่แสดงด้านล่างในกล่องโต้ตอบตัวเลือกการวิเคราะห์

กดปุ่ม OK จากนั้นตัวดีบัก MCU จะปรากฏขึ้น:

มาติดตามการทำงานของโปรแกรมทีละขั้นตอนโดยกดปุ่ม ปุ่มติดตามไป

หลังจากคลิก 14 ประมาณหนึ่งครั้งเราจะไปที่ PT1: ฉลากที่โปรแกรมดูเหมือนว่าจะอยู่ในวงวนไม่สิ้นสุด

PT1: INCF TEMP, F GOTO PT1

ตอนนี้คลิกที่สวิตช์ SW-HL1 และเปลี่ยนเป็นสูง (คุณควรคลิกเมื่อเคอร์เซอร์เปลี่ยนเป็นลูกศรชี้ขึ้นÎ) กลับไปที่ดีบั๊กเกอร์แล้วคลิก ติดตามไปที่ปุ่มสองครั้ง โปรแกรมจะรับรู้การขัดจังหวะและกระโดดเข้าไป


NT_SERV: label.
INT_SERV: INCF COUNTER, F MOVF COUNTER, 0 MOVWF PORT

เพิ่มค่า COUNTER และคัดลอกไปที่ PORT A และผลลัพธ์จะเป็น 1 หลังจากนี้โปรแกรมจะกลับสู่“ infinite loop” ที่ PT1

การแก้ไขโค้ดในดีบักเกอร์

ทีนี้เรามาลองเปลี่ยนแปลงโปรแกรมกันอีกเล็กน้อยเพื่อสาธิตการใช้งานของดีบั๊ก ทำซ้ำคำสั่ง INCF, F โดยใช้การคัดลอกและวางแบบนี้:

        INT_SERV:
        INCF COUNTER, F 
        INCF COUNTER, F 
        MOVF COUNTER, 0
        MOVWF PORTA    

ตอนนี้เมื่อคุณกดปุ่ม โปรแกรมจะถาม:

กด Yes แล้วกดปุ่ม ปุ่มอีกครั้ง ตอนนี้การเพิ่มขึ้นจะเป็น 2 ในแต่ละการเปลี่ยนแปลงของสวิทช์ต่ำ - สูง

คุณสามารถตรวจสอบวงจรในโหมดการทำงานต่อเนื่องของดีบักเกอร์ได้โดยกดปุ่ม ปุ่ม

ถึงแม้ว่าตัวดีบักเกอร์จะทำงานได้อย่างรวดเร็วคุณยังสามารถเห็น“ วงวนไม่สิ้นสุด” แล้วข้ามไปยังส่วนของเซิร์ฟเวอร์อินเตอร์รัปต์ (INT_SERV:) เมื่อคุณเปลี่ยนสวิตช์

ทำให้เบรกพอยต์

การใช้โหมดทีละขั้นตอนมักเป็นไปไม่ได้ที่จะไปยังจุดใดจุดหนึ่งในโปรแกรม แม้ว่าคุณอดทนพอที่จะทำตามขั้นตอนเป็นพันขั้นตอน แต่การไหลของโปรแกรมอาจไม่อนุญาตให้คุณทำตามขั้นตอนที่คุณต้องการ

หากต้องการหยุดที่บรรทัดใดบรรทัดหนึ่งคุณสามารถทำเครื่องหมายคำสั่งเป้าหมายได้ด้วยการตั้งค่า "เบรกพอยต์"

เรียกใช้โปรแกรมในโหมดต่อเนื่องของดีบักเกอร์โดยใช้ เรียกใช้คำสั่งและตอนนี้โปรแกรมจะหยุดที่บรรทัดที่ต้องการก่อนดำเนินการคำสั่งที่ทำเครื่องหมายไว้

หากต้องการสาธิตสิ่งนี้ให้คลิกคำสั่งที่เพิ่มขึ้นในเซิร์ฟเวอร์อินเตอร์รัปต์ของเราหลังจากที่ INT_SERV: label แล้วกดปุ่ม สลับปุ่มหยุดพัก

ตอนนี้กดปุ่ม ปุ่ม Run โปรแกรมเริ่มทำงานใน“ รอบที่ไม่มีที่สิ้นสุด”

แม้ว่าคุณได้ตั้งค่าเบรกพอยต์การเรียกใช้โค้ดจะไม่หยุดเพราะไม่เคยไปถึงเบรกพอยต์ อย่างไรก็ตามเมื่อคุณเปลี่ยนสวิตช์จากต่ำเป็นสูงโปรแกรมจะหยุดที่คำสั่งที่ทำเครื่องหมายไว้:

   INT_SERV:
             INCF COUNTER, F

ตอนนี้คุณสามารถดำเนินการต่อไปทีละขั้นตอน หรือในโหมดเรียกใช้