วงจรไมโครคอนโทรลเลอร์
วงจรไมโครคอนโทรลเลอร์
Jump to TINA Main Page & General Information
TINA ให้การสนับสนุนเป็นจำนวนมาก (PIC, AVR, Arduino, 8051, HCS, STM, ARM, TI-Tiva, TI-Sitara, Infineon-XMC) ไมโครคอนโทรลเลอร์; MCU ใหม่จะถูกเพิ่มอย่างต่อเนื่อง คุณสามารถดูแก้ไขและดีบักโปรแกรมที่ทำงานในโปรเซสเซอร์และแน่นอนคุณสามารถสร้างโค้ดของคุณเองได้
มีสองวิธีในการจัดโปรแกรมสำหรับไมโครคอนโทรลเลอร์ใน TINA คุณสามารถใช้รหัสไบนารี่และไฟล์ดีบั๊กที่สร้างโดยคอมไพเลอร์มาตรฐาน (เช่น MPLAB สำหรับ PICs) หรือคุณสามารถโหลดแอสเซมบลีโค้ดของคุณเพื่อเรียกใช้และดีบักใน TINA โดยใช้แอสเซมเบลอร์
ในไมโครคอนโทรลเลอร์ TINA สามารถจำลองได้ไม่เพียง แต่ตัวเดียว แต่ยังรวมถึงอนาล็อก, ดิจิตอล, HDL หรือรุ่นอื่น ๆ
วิ่งและแก้ไขรหัส MCU
โหลดวงจร PIC Flasher.TSC จากโฟลเดอร์ ExampleMicrocontrollersPic
แผนผังต่อไปนี้ที่ใช้ไมโครคอนโทรลเลอร์ 16F73 PIC จะปรากฏขึ้นพร้อมไมโครคอนโทรลเลอร์ 16F73 PIC:
วงจรนี้จะนับไปข้างหน้าทีละตัว กด
จอแสดงผลควรก้าวไปข้างหน้าทีละคน
ดับเบิลคลิกที่ MCU เพื่อดูรหัส ASM (ดูรายละเอียดเพิ่มเติมในคู่มือการเริ่มต้นฉบับย่อ)
TINA มีคุณสมบัติที่ยอดเยี่ยมที่คุณสามารถแก้ไขและเปลี่ยนรหัสต้นฉบับได้โดยตรงใน TINA
ให้ทำการเปลี่ยนแปลงต่อไปนี้ในรหัส:
เปลี่ยนคำสั่ง (เลือกด้านบน) ในบรรทัด 25 (คุณสามารถดูหมายเลขบรรทัดที่มุมล่างขวาของหน้าต่างแก้ไขโค้ด):
จาก addlw 01H
เพื่อเพิ่ม 02H
บันทึกรหัสที่เปลี่ยนแปลงไปยัง TINA โดยกดปุ่ม
หากคุณกด
โปรดทราบว่ารหัสที่เปลี่ยนแปลงจะถูกบันทึกโดยอัตโนมัติในไฟล์ TINA .TSC
การใช้ตัวดีบั๊ก
ลองดูแอปพลิเคชั่นอื่นที่มีการโต้ตอบมากขึ้น
โหลดตัวอย่าง PIC16F84interrupt_rb0.TSC ของ TINA จากโฟลเดอร์ ExampleMicrocontrollersPic
กด
อย่างไรก็ตามหากคุณคลิกสวิตช์ SW-HL1 หน้าจอจะก้าวไปข้างหน้าโดย 1 ทุกครั้งที่สวิตช์เปลี่ยนจากต่ำไปสูง
ความสามารถในการจัดการอินเตอร์รัปต์ของ PIC จะทำให้เราสามารถตรวจจับการเปลี่ยนแปลงของสวิทช์ได้
ตอนนี้เรามาดูรายละเอียดการดำเนินการโดยใช้ดีบักเกอร์ ASM แบบโต้ตอบของ TINA
ในการเปิดใช้งานดีบักเกอร์ให้เลือกตัวเลือกบนเมนูการวิเคราะห์ จากนั้นตั้งค่า“ เปิดใช้งานช่องทำเครื่องหมาย MCU Code debugger” ดังที่แสดงด้านล่างในกล่องโต้ตอบตัวเลือกการวิเคราะห์
กดปุ่ม OK จากนั้นตัวดีบัก MCU จะปรากฏขึ้น:
มาติดตามการทำงานของโปรแกรมทีละขั้นตอนโดยกดปุ่ม
หลังจากคลิก 14 ประมาณหนึ่งครั้งเราจะไปที่ PT1: ฉลากที่โปรแกรมดูเหมือนว่าจะอยู่ในวงวนไม่สิ้นสุด
PT1: INCF TEMP, F GOTO PT1
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 แล้วกดปุ่ม
คุณสามารถตรวจสอบวงจรในโหมดการทำงานต่อเนื่องของดีบักเกอร์ได้โดยกดปุ่ม
ถึงแม้ว่าตัวดีบักเกอร์จะทำงานได้อย่างรวดเร็วคุณยังสามารถเห็น“ วงวนไม่สิ้นสุด” แล้วข้ามไปยังส่วนของเซิร์ฟเวอร์อินเตอร์รัปต์ (INT_SERV:) เมื่อคุณเปลี่ยนสวิตช์
ทำให้เบรกพอยต์
การใช้โหมดทีละขั้นตอนมักเป็นไปไม่ได้ที่จะไปยังจุดใดจุดหนึ่งในโปรแกรม แม้ว่าคุณอดทนพอที่จะทำตามขั้นตอนเป็นพันขั้นตอน แต่การไหลของโปรแกรมอาจไม่อนุญาตให้คุณทำตามขั้นตอนที่คุณต้องการ
หากต้องการหยุดที่บรรทัดใดบรรทัดหนึ่งคุณสามารถทำเครื่องหมายคำสั่งเป้าหมายได้ด้วยการตั้งค่า "เบรกพอยต์"
เรียกใช้โปรแกรมในโหมดต่อเนื่องของดีบักเกอร์โดยใช้
หากต้องการสาธิตสิ่งนี้ให้คลิกคำสั่งที่เพิ่มขึ้นในเซิร์ฟเวอร์อินเตอร์รัปต์ของเราหลังจากที่ INT_SERV: label แล้วกดปุ่ม
ตอนนี้กดปุ่ม
แม้ว่าคุณได้ตั้งค่าเบรกพอยต์การเรียกใช้โค้ดจะไม่หยุดเพราะไม่เคยไปถึงเบรกพอยต์ อย่างไรก็ตามเมื่อคุณเปลี่ยนสวิตช์จากต่ำเป็นสูงโปรแกรมจะหยุดที่คำสั่งที่ทำเครื่องหมายไว้:
INT_SERV: INCF COUNTER, F
ตอนนี้คุณสามารถดำเนินการต่อไปทีละขั้นตอน