ภาษาแอสเซมบลีเป็นภาษาโปรแกรมระดับต่ำที่ใช้ในการเขียนโค้ดโปรแกรมในแง่ของการจำ แม้ว่าจะมีภาษาระดับสูงจำนวนมากที่เป็นที่ต้องการในปัจจุบัน แต่ภาษาโปรแกรมแอสเซมบลีก็นิยมใช้ในหลาย ๆ แอปพลิเคชันสามารถใช้สำหรับการปรับแต่งฮาร์ดแวร์โดยตรง นอกจากนี้ยังใช้ในการเขียนไฟล์ รหัสการเขียนโปรแกรม 8051 อย่างมีประสิทธิภาพด้วยจำนวนรอบนาฬิกาที่น้อยลงโดยใช้หน่วยความจำน้อยลงเมื่อเทียบกับภาษาระดับสูงอื่น ๆ
8051 การเขียนโปรแกรม
8051 การเขียนโปรแกรมภาษาแอสเซมบลี
ภาษาแอสเซมบลีเป็นภาษาโปรแกรมที่เกี่ยวข้องกับฮาร์ดแวร์โดยสมบูรณ์ นักออกแบบแบบฝังต้องมีความรู้เพียงพอเกี่ยวกับฮาร์ดแวร์ของโปรเซสเซอร์หรือคอนโทรลเลอร์เฉพาะก่อนที่จะเขียนโปรแกรม ภาษาแอสเซมบลีได้รับการพัฒนาโดยช่วยจำดังนั้นผู้ใช้จึงไม่สามารถเข้าใจได้โดยง่ายในการแก้ไขโปรแกรม
8051 การเขียนโปรแกรมภาษาแอสเซมบลี
ภาษาโปรแกรมแอสเซมบลีได้รับการพัฒนาโดยคอมไพเลอร์ต่างๆและ ที่“ลานโบว์ลิ่ง' เหมาะที่สุดสำหรับ ไมโครคอนโทรลเลอร์การเขียนโปรแกรม การพัฒนา. มicrocontrollersหรือตัวประมวลผลสามารถเข้าใจเฉพาะภาษาไบนารีในรูปแบบ '0s หรือ 1s' แอสเซมเบลอร์จะแปลงภาษาแอสเซมบลีเป็นภาษาไบนารีจากนั้นเก็บไว้ในไมโครคอนโทรลเลอร์หน่วยความจำในการทำงานเฉพาะ
8051 ไมโครคอนโทรลเลอร์ Architecuture
8051ไมโครคอนโทรลเลอร์คือ CISC ตามสถาปัตยกรรม Harvard และมีอุปกรณ์ต่อพ่วงเช่น 32 I / O ตัวจับเวลา / ตัวนับการสื่อสารแบบอนุกรมและความทรงจำไมโครคอนโทรลเลอร์ต้องใช้โปรแกรมเพื่อดำเนินการที่ต้องใช้หน่วยความจำสำหรับบันทึกและอ่านฟังก์ชัน 8051ไมโครคอนโทรลเลอร์ประกอบด้วยหน่วยความจำ RAM และ ROM เพื่อจัดเก็บคำแนะนำ
8051 ไมโครคอนโทรลเลอร์ Architecuture
การลงทะเบียนเป็นส่วนหลักใน โปรเซสเซอร์และไมโครคอนโทรลเลอร์ ซึ่งมีอยู่ในหน่วยความจำที่ช่วยให้รวบรวมและจัดเก็บข้อมูลได้เร็วขึ้น การเขียนโปรแกรมภาษาแอสเซมบลี 8051 ขึ้นอยู่กับรีจิสเตอร์หน่วยความจำ หากเราต้องการจัดการข้อมูลไปยังโปรเซสเซอร์หรือคอนโทรลเลอร์โดยการลบการบวก ฯลฯ เราไม่สามารถทำได้โดยตรงในหน่วยความจำ แต่ต้องมีการลงทะเบียนเพื่อประมวลผลและจัดเก็บข้อมูลไมโครคอนโทรลเลอร์ประกอบด้วยการลงทะเบียนหลายประเภทที่สามารถจำแนกได้ตามคำแนะนำหรือเนื้อหาที่ดำเนินการอยู่
8051 โปรแกรมไมโครคอนโทรลเลอร์ในภาษาแอสเซมบลี
ภาษาแอสเซมบลีประกอบด้วยองค์ประกอบที่ใช้ในการเขียนโปรแกรมทั้งหมดลักษณะตามลำดับ. ปฏิบัติตามกฎที่กำหนดเพื่อเขียนโปรแกรมในภาษาแอสเซมบลี
กฎของภาษาแอสเซมบลี
- รหัสการประกอบต้องเขียนด้วยตัวอักษรตัวพิมพ์ใหญ่
- ป้ายกำกับต้องตามด้วยเครื่องหมายจุดคู่ (ป้ายกำกับ :)
- สัญลักษณ์และป้ายกำกับทั้งหมดต้องขึ้นต้นด้วยตัวอักษร
- ความคิดเห็นทั้งหมดพิมพ์เป็นตัวพิมพ์เล็ก
- บรรทัดสุดท้ายของโปรแกรมต้องเป็นคำสั่ง END
ตัวช่วยจำภาษาแอสเซมบลีอยู่ในรูปแบบของ op-code เช่น MOV, ADD, JMP และอื่น ๆ ซึ่งใช้ในการดำเนินการ
รหัส Op: op-code เป็นคำสั่งเดียวที่ CPU สามารถเรียกใช้งานได้ ที่นี่ op-code คือคำสั่ง MOV
ตัวดำเนินการ: ตัวถูกดำเนินการเป็นข้อมูลชิ้นเดียวที่สามารถดำเนินการได้โดยใช้รหัส op ตัวอย่างการดำเนินการคูณจะดำเนินการโดยตัวถูกดำเนินการที่คูณด้วยตัวถูกดำเนินการ
ไวยากรณ์: MUL a,ข
องค์ประกอบของการเขียนโปรแกรมภาษาแอสเซมบลี:
- รวบรวมแนวทาง
- ชุดคำสั่ง
- โหมดที่อยู่
ประกอบคำแนะนำ:
คำสั่งในการประกอบจะบอกทิศทางไปยัง CPU 8051ไมโครคอนโทรลเลอร์ประกอบด้วยคำสั่งการประกอบหลายประเภทเพื่อกำหนดทิศทางไปยังชุดควบคุม คำสั่งที่มีประโยชน์ที่สุดคือการเขียนโปรแกรม 8051 เช่น:
- ORG
- DB
- EQU
- สิ้นสุด
ORG(ต้นกำเนิด): คำสั่งนี้ระบุจุดเริ่มต้นของโปรแกรม ใช้เพื่อตั้งค่าที่อยู่รีจิสเตอร์ระหว่างการประกอบ ตัวอย่างเช่น ORG 0000h บอกคอมไพเลอร์โค้ดที่ตามมาทั้งหมดเริ่มต้นที่ที่อยู่ 0000h
ไวยากรณ์: ORG 0000 ชม
DB(กำหนดไบต์): กำหนดไบต์ใช้เพื่ออนุญาตสตริงไบต์ ตัวอย่างเช่นพิมพ์“ EDGEFX” โดยแต่ละอักขระจะถูกยึดตามที่อยู่และสุดท้ายพิมพ์“ สตริง” โดยฐานข้อมูลโดยตรงด้วยเครื่องหมายคำพูดคู่
ไวยากรณ์:
ORG 0000 ชม
MOV a, # 00h
————-
————-
DB“ EDGEFX”
EQU (เทียบเท่า): คำสั่งสมมูลใช้เพื่อหาค่าที่อยู่ของตัวแปร
ไวยากรณ์:
reg เท่ากับ,09 น
—————–
—————–
MOVreg,# 2 ชม
สิ้นสุด: คำสั่ง END ใช้เพื่อระบุจุดสิ้นสุดของโปรแกรม
ไวยากรณ์:
reg เท่ากับ,09 น
—————–
—————–
MOVreg,# 2 ชม
สิ้นสุด
โหมดที่อยู่:
วิธีการเข้าถึงข้อมูลเรียกว่าโหมดกำหนดแอดเดรส CPU สามารถเข้าถึงข้อมูลได้หลายวิธีโดยใช้โหมดกำหนดแอดเดรส 8051ไมโครคอนโทรลเลอร์ประกอบด้วยห้าโหมดการกำหนดแอดเดรสเช่น:
- โหมดกำหนดแอดเดรสทันที
- ลงทะเบียนโหมดการกำหนดที่อยู่
- โหมดที่อยู่โดยตรง
- โหมดที่อยู่ทางอ้อม
- ดัชนีฐานที่อยู่โหมด
โหมดกำหนดแอดเดรสทันที:
ในโหมดการกำหนดแอดเดรสนี้ต้นทางจะต้องเป็นค่าที่สามารถตามด้วย '#' ได้และปลายทางต้องเป็น การลงทะเบียน SFR การลงทะเบียนสำหรับวัตถุประสงค์ทั่วไป และที่อยู่. ใช้สำหรับจัดเก็บค่าในการลงทะเบียนหน่วยความจำทันที
ไวยากรณ์:
MOV A, # 20h // A คือกการลงทะเบียนสะสม 20 ถูกเก็บไว้ใน A //
MOV R0,# 15 // R0 เป็นรีจิสเตอร์วัตถุประสงค์ทั่วไป 15 ถูกเก็บไว้ในทะเบียน R0 //
MOV P0, # 07h // P0 คือ SFR register07 ถูกเก็บไว้ใน P0 //
MOV 20 ชม,# 05h // 20h คือที่อยู่ของ register 05 ที่เก็บไว้ใน 20h //
อดีต:
MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20 ค่าสุดท้ายจะถูกเก็บไว้ใน R0 //
ลงทะเบียนโหมดที่อยู่:
ในโหมดการกำหนดแอดเดรสนี้ต้นทางและปลายทางต้องเป็นรีจิสเตอร์ แต่ไม่ใช่รีจิสเตอร์วัตถุประสงค์ทั่วไป ดังนั้นข้อมูลจะไม่ถูกย้ายภายในไฟล์ การลงทะเบียนธนาคารเพื่อวัตถุประสงค์ทั่วไป .
ไวยากรณ์:
MOV A, B // A คือการลงทะเบียน SFR, B คือการลงทะเบียนเอนกประสงค์ //
MOV R0, R1 // คำสั่งไม่ถูกต้อง GPR เป็น GPR ไม่ได้ //
อดีต:
MOV R0, # 02 ชม
MOV A, # 30 ชม
เพิ่ม R0, A // R0<—R0+A, the final value is stored in the R0 register//
โหมดที่อยู่โดยตรง
ในโหมดการกำหนดแอดเดรสนี้ต้นทางหรือปลายทาง (หรือทั้งต้นทางและปลายทาง) ต้องเป็นแอดเดรส แต่ไม่ใช่ค่า
ไวยากรณ์:
MOV ก,20h // 20h คือที่อยู่ A คือ register //
MOV 00h, 07h // ทั้งสองระบุถึงการลงทะเบียน GPS //
อดีต:
MOV 07 ชม,# 01h
MOV A, # 08 น
เพิ่ม,07 ชม. // ก<—A+07h the final value is stored in A//
โหมดที่อยู่ทางอ้อม:
ในโหมดการกำหนดแอดเดรสนี้ต้นทางหรือปลายทาง (หรือปลายทางหรือต้นทาง) ต้องเป็นถึงที่อยู่ทางอ้อม แต่ไม่ใช่ค่า โหมดการกำหนดแอดเดรสนี้สนับสนุนแนวคิดตัวชี้ พอยน์เตอร์คือตัวแปรที่ใช้เก็บแอดเดรสของตัวแปรอื่น แนวคิดตัวชี้นี้ใช้สำหรับรีจิสเตอร์ R0 และ R1 เท่านั้น
ไวยากรณ์:
MOVR0, # 01h // 01 ค่าถูกเก็บไว้ในทะเบียน R0 ที่อยู่ R0 คือ 08h //
MOV R1, # 08h // R1 คือตัวแปรตัวชี้ที่ร้านค้าที่อยู่ (08h) ของ R0 //
MOV 20 ชม,@ R1 // 01 ค่าถูกเก็บไว้ในที่อยู่ 20 ชั่วโมงของทะเบียน GP //
โหมดที่อยู่ทางอ้อม
ดัชนีฐานที่อยู่โหมด:
โหมดการกำหนดแอดเดรสนี้ใช้เพื่ออ่านข้อมูลจากไฟล์ หน่วยความจำภายนอกหรือหน่วยความจำ ROM . โหมดการกำหนดแอดเดรสทั้งหมดไม่สามารถอ่านข้อมูลจากหน่วยความจำรหัสได้ รหัสต้องอ่านผ่านการลงทะเบียน DPTR DPTR ใช้เพื่อชี้ข้อมูลในรหัสหรือหน่วยความจำภายนอก
ไวยากรณ์:
MOVC A, @ A + DPTR // C ระบุหน่วยความจำรหัส //
MOCX A, @ A + DPTR // X ระบุหน่วยความจำภายนอก //
EX: MOV A, # 00H // 00H ถูกเก็บไว้ในทะเบียน A //
MOV DPTR, # 0500H // DPTR ชี้ที่อยู่ 0500h ในหน่วยความจำ //
MOVC A, @ A + DPTR // ส่งค่าถึงทะเบียน A //
MOV P0, A // วันที่ A ส่งให้นายทะเบียน PO //
ชุดคำสั่ง:
ชุดคำสั่งคือโครงสร้างของคอนโทรลเลอร์หรือโปรเซสเซอร์ที่จัดเตรียมคำสั่งให้กับคอนโทรลเลอร์เพื่อเป็นแนวทางให้คอนโทรลเลอร์สำหรับการประมวลผลข้อมูล ชุดคำสั่งประกอบด้วยคำสั่งประเภทข้อมูลดั้งเดิมโหมดการกำหนดแอดเดรสการลงทะเบียนขัดจังหวะการจัดการพิเศษและสถาปัตยกรรมหน่วยความจำ 8051ไมโครคอนโทรลเลอร์ สามารถปฏิบัติตามคำแนะนำ CISC ด้วยสถาปัตยกรรม Harvard ในกรณีของการเขียนโปรแกรม 8051 คำแนะนำ CISC ประเภทต่างๆ ได้แก่ :
- ชุดคำสั่งการถ่ายโอนข้อมูล
- ชุดคำสั่งตามลำดับ
- ชุดคำสั่งเลขคณิต
- แตกแขนง Iคำแนะนำชุด
- ชุดคำสั่งวนซ้ำ
- ชุดคำสั่งเงื่อนไข
- ชุดคำสั่งที่ไม่มีเงื่อนไข
- ชุดคำสั่งเชิงตรรกะ
- ชุดคำสั่งบูลีน
ชุดคำสั่งเลขคณิต:
คำแนะนำทางคณิตศาสตร์ดำเนินการขั้นพื้นฐานเช่น:
- ส่วนที่เพิ่มเข้าไป
- การคูณ
- การลบ
- แผนก
ส่วนที่เพิ่มเข้าไป:
ORG 0000 ชม
MOV R0, # 03H // ย้ายค่า 3 ไปที่รีจิสเตอร์ R0 //
MOV A, # 05H // ย้ายค่า 5 ไปที่ตัวสะสม A //
เพิ่ม A, 00H //เพิ่มมูลค่าด้วยค่า R0 และเก็บผลลัพธ์ใน//
สิ้นสุด
การคูณ:
ORG 0000 ชม
MOV R0, # 03H // ย้ายค่า 3 ไปที่รีจิสเตอร์ R0 //
MOV A, # 05H // ย้ายค่า 5 ไปที่ตัวสะสม A //
MUL A, 03H //ทวีคูณผลลัพธ์จะถูกเก็บไว้ใน Accumulator A //
สิ้นสุด
การลบ:
ORG 0000 ชม
MOV R0, # 03H // ย้ายค่า 3 เพื่อลงทะเบียน R0 //
MOV A, # 05H // ย้ายค่า 5 ไปที่ตัวสะสม A //
SUBB A, 03H // ค่าผลลัพธ์ถูกเก็บไว้ใน Accumulator A //
สิ้นสุด
แผนก:
ORG 0000 ชม
MOV R0, # 03H // ย้ายค่า 3 เพื่อลงทะเบียน R0 //
MOV A, # 15H // ย้ายค่า 5 ไปที่ตัวสะสม A //
DIV A, 03H // ค่าสุดท้ายจะถูกเก็บไว้ใน Accumulator A //
สิ้นสุด
คำแนะนำตามเงื่อนไข
CPU รันคำสั่งตามเงื่อนไขโดยการตรวจสอบสถานะบิตเดียวหรือสถานะไบต์ 8051ไมโครคอนโทรลเลอร์ประกอบด้วยคำแนะนำเงื่อนไขต่างๆเช่น:
- เจบี -> กระโดดลงไปด้านล่าง
- JNB -> กระโดดหากไม่อยู่ด้านล่าง
- JC -> กระโดดถ้าพกพา
- JNC -> กระโดดถ้าไม่พก
- JZ -> กระโดดถ้าเป็นศูนย์
- JNZ -> กระโดดถ้าไม่ศูนย์
คำแนะนำตามเงื่อนไข
1. ไวยากรณ์:
JB P1.0, ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
2. ไวยากรณ์:
JNB P1.0 ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
3. ไวยากรณ์:
JC, ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
4. ไวยากรณ์:
JNC ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
5. ไวยากรณ์:
JZ, ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
6. ไวยากรณ์:
JNZ, ฉลาก
- - - - - - - -
- - - - - - - -
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
สิ้นสุด
คำแนะนำในการโทรและกระโดด:
คำแนะนำการโทรและการกระโดดใช้เพื่อหลีกเลี่ยงการจำลองโค้ดของโปรแกรม เมื่อรหัสเฉพาะบางรหัสใช้มากกว่าหนึ่งครั้งในที่ต่างๆในโปรแกรมถ้าเราพูดถึงชื่อเฉพาะถึงรหัสแล้วเราสามารถใช้ชื่อนั้นได้ทุกที่ในโปรแกรมโดยไม่ต้องป้อนรหัสทุกครั้ง ซึ่งจะช่วยลดความซับซ้อนของโปรแกรม การเขียนโปรแกรม 8051 ประกอบด้วยคำสั่งการโทรและการกระโดดเช่น LCALL, SJMP
- LCALL
- โทร
- SJMP
- LJMP
1. ไวยากรณ์:
ORG 0000 ชม
- - - - - - - -
- - - - - - - -
ACALL, ฉลาก
- - - - - - - -
- - - - - - - -
หยุด SJMP
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
- - - - - - - -
ขวา
หยุด:นพ
2. ไวยากรณ์:
ORG 0000 ชม
- - - - - - - -
- - - - - - - -
LCALL, ฉลาก
- - - - - - - -
- - - - - - - -
หยุด SJMP
ป้ายกำกับ: - - - - - - - -
- - - - - - - -
- - - - - - - -
ขวา
หยุด:นพ
คำแนะนำในการโทรและกระโดด
คำแนะนำแบบวนซ้ำ:
คำแนะนำการวนซ้ำใช้เพื่อทำซ้ำบล็อกทุกครั้งในขณะที่ดำเนินการเพิ่มและลด 8051ไมโครคอนโทรลเลอร์ประกอบด้วยคำแนะนำการวนซ้ำสองประเภท:
- CJNE -> เปรียบเทียบและกระโดดหากไม่เท่ากัน
- DJNZ -> ลดลงและกระโดดถ้าไม่ใช่ศูนย์
1. ไวยากรณ์:
ของCJNE
MOV A, # 00H
MOV B, # 10H
ฉลาก: INC A.
- - - - - -
- - - - - -
CJNE A ฉลาก
2. ไวยากรณ์:
ของDJNE
MOV R0, # 10 ชม
ฉลาก: - - - - - -
- - - - - -
DJNE R0 ฉลาก
- - - - - -
- - - - - -
สิ้นสุด
ชุดคำสั่งเชิงตรรกะ:
ชุดคำสั่งไมโครคอนโทรลเลอร์ 8051 ให้คำสั่ง AND, OR, XOR, TEST, NOT และ Boolean logic สำหรับตั้งค่าและล้างบิตตามความต้องการในโปรแกรม
ชุดคำสั่งเชิงตรรกะ
1. ไวยากรณ์:
MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //
2. ไวยากรณ์:
MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0
3. ไวยากรณ์:
MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0
ตัวดำเนินการเปลี่ยนเกียร์
ตัวดำเนินการกะใช้สำหรับการส่งและรับข้อมูลอย่างมีประสิทธิภาพ 8051ไมโครคอนโทรลเลอร์ประกอบด้วยตัวดำเนินการกะสี่ตัว:
- RR -> หมุนไปทางขวา
- RRC -> หมุนขวาผ่านการพกพา
- RL -> หมุนไปทางซ้าย
- RLC -> หมุนซ้ายผ่านการพกพา
หมุนไปทางขวา (RR):
ในการดำเนินการเปลี่ยนนี้ MSB จะกลายเป็น LSB และบิตทั้งหมดจะเลื่อนไปทางด้านขวาทีละบิตตามลำดับ
ไวยากรณ์:
MOV A, # 25 ชม
RR ก
หมุนซ้าย (RL):
ในการดำเนินการเปลี่ยนนี้ MSB จะกลายเป็น LSB และบิตทั้งหมดจะเลื่อนไปทางด้านซ้ายทีละบิตตามลำดับ
ไวยากรณ์:
MOV A, # 25 ชม
RL ก
RRC หมุนขวาผ่านการพกพา:
ในการดำเนินการเปลี่ยนเกียร์ LSB จะเคลื่อนที่ไปมาและการพกพาจะกลายเป็น MSB และบิตทั้งหมดจะเลื่อนไปทางด้านขวาทีละตำแหน่ง
ไวยากรณ์:
MOV A, # 27 ชม
RRC ก
RLC หมุนซ้ายผ่าน Carry:
ในการดำเนินการเปลี่ยนเกียร์ MSB จะเคลื่อนที่ไปมาและการพกพาจะกลายเป็น LSB และบิตทั้งหมดจะเลื่อนไปทางด้านซ้ายในตำแหน่งทีละบิต
ไวยากรณ์:
MOV A, # 27 ชม
RLC ก
โปรแกรม C แบบฝังตัวพื้นฐาน:
ไมโครคอนโทรลเลอร์การเขียนโปรแกรมแตกต่างกันไปสำหรับระบบปฏิบัติการแต่ละประเภท มี ระบบปฏิบัติการจำนวนมาก เช่น Linux, Windows, RTOS เป็นต้น อย่างไรก็ตาม RTOS มีข้อดีหลายประการสำหรับการพัฒนาระบบฝังตัว ตัวอย่างการเขียนโปรแกรมระดับ Assembly บางส่วนได้รับด้านล่าง
ไฟ LED กะพริบโดยใช้ 8051ไมโครคอนโทรลเลอร์:
- ตัวเลขแสดงบนจอแสดงผล 7 ส่วนโดยใช้ไมโครคอนโทรลเลอร์ 8051
- การคำนวณตัวจับเวลา / ตัวนับและโปรแกรมโดยใช้ 8051ไมโครคอนโทรลเลอร์
- การคำนวณและโปรแกรมการสื่อสารแบบอนุกรมโดยใช้ 8051ไมโครคอนโทรลเลอร์
โปรแกรม LED 8051 มicrocontrller
1. WAP เพื่อสลับไฟ LED PORT1
ORG 0000H
TOGLE: MOV P1, # 01 //ย้าย00000001 ไปยังทะเบียน p1 //
CALL DELAY // ดำเนินการล่าช้า //
MOV A, P1 // ย้ายค่า p1ไปยังตัวสะสม //
CPL A // เสริมค่า //
MOV P1, A // ย้าย 11111110 ไปที่ port1 register //
CALL DELAY // ดำเนินการล่าช้า //
SJMP TOGLE
DELAY: MOV R5, # 10H // โหลด register R5 ด้วย 10 //
สอง: MOV R6, # 200 // โหลด register R6 ด้วย 200 //
ONE: MOV R7, # 200 // โหลด register R7 ด้วย 200 //
DJNZ R7, $ // ลดลง R7 จนกว่าจะเป็นศูนย์ //
DJNZ R6, ONE // ลด R7 จนกว่าจะเป็นศูนย์ //
DJNZ R5, TWO // ลด R7 จนกว่าจะเป็นศูนย์ //
RET // กลับไปที่โปรแกรมหลัก //
สิ้นสุด
การคำนวณและโปรแกรมจับเวลา / ตัวนับโดยใช้ 8051 มicrocontroller:
ความล่าช้าเป็นปัจจัยสำคัญอย่างหนึ่งในการพัฒนาซอฟต์แวร์ประยุกต์ ตัวจับเวลาและตัวนับ เป็นส่วนประกอบฮาร์ดแวร์ของไฟล์ไมโครคอนโทรลเลอร์ซึ่งใช้ในหลาย ๆ แอพพลิเคชั่นเพื่อให้การหน่วงเวลาที่แม่นยำด้วยการนับพัล. ขทั้งสองงานจะดำเนินการโดยเทคนิคซอฟต์แวร์
1. WAP เพื่อคำนวณเวลาล่าช้า 500us
MOV TMOD, # 10H // เลือกโหมดจับเวลาโดยรีจิสเตอร์ //
MOV TH1, # 0FEH // เก็บเวลาหน่วงในบิตที่สูงขึ้น //
MOV TL1, # 32H // เก็บเวลาหน่วงในบิตต่ำ //
JNB TF1, $ // ลดค่าของตัวจับเวลาจนเป็นศูนย์ //
CLR TF1 // ล้างค่าสถานะตัวจับเวลานิดหน่อย//
CLR TR1 // ปิดตัวจับเวลา //
2. WAP เพื่อสลับไฟ LEDกับ5วินาทีเวลาล่าช้า
ORG 0000H
ผลตอบแทน: MOV PO, # 00H
ACALL DELAY
MOV P0, # 0FFH
ACALL DELAY
ผลตอบแทนของ SJUMP
DELAY: MOV R5, # 50H // โหลด register R5 ด้วย 50 //
DELAY1: MOV R6, # 200 // โหลด register R6 ด้วย 200 //
DELAY2: MOV R7, # 229 // โหลด register R7 ด้วย 200 //
DJNZ R7, $ // ลดลง R7 จนกว่าจะเป็นศูนย์ //
DJNZ R6, DELAY2 // R6 ลดลงจนเป็นศูนย์ //
DJNZ R5, DELAY1 // R5 ลดลงจนเป็นศูนย์ //
RET // กลับไปที่โปรแกรมหลัก //
สิ้นสุด
3. WAP เพื่อนับ 250 พัลส์โดยใช้ mode0 count0
ไวยากรณ์:
ORG 0000H
MOV TMOD, # 50H // เลือกตัวนับ //
MOV TH0, # 15 // ย้ายพัลส์การนับบิตที่สูงขึ้น //
MOV TH1, # 9FH //ย้ายพัลส์การนับบิตล่าง //
SET TR0 // บนตัวจับเวลา //
JNB $ // ลดค่าการนับจนถึงศูนย์ //
CLR TF0 // ล้างตัวนับตั้งค่าสถานะนิดหน่อย//
CLR TR0 // หยุดตัวจับเวลา //
สิ้นสุด
การเขียนโปรแกรมการสื่อสารแบบอนุกรมโดยใช้ 8051 มicrocontroller:
การสื่อสารแบบอนุกรม มักใช้ในการส่งและรับข้อมูล 8051ไมโครคอนโทรลเลอร์ประกอบด้วยการสื่อสารแบบอนุกรม UART / USART และสัญญาณจะถูกส่งและรับโดยTxและหมุด Rx การสื่อสาร UART ถ่ายโอนข้อมูลแบบอนุกรมทีละบิต UART เป็นโปรโตคอลแบบ half-duplex ที่ถ่ายโอนและรับข้อมูล แต่ไม่ใช่ในเวลาเดียวกัน
1. WAP เพื่อส่งอักขระไปยัง Hyper Terminal
MOV SCON, # 50H // ตั้งค่าการสื่อสารแบบอนุกรม //
MOV TMOD, # 20H // เลือกโหมดจับเวลา //
MOV TH1, # -3 // กำหนดอัตรารับส่งข้อมูล //
SET TR1 // บนตัวจับเวลา //
MOV SBUF, # 'S' // ส่ง S ไปยังหน้าต่างอนุกรม //
JNB TI, $ // ค่าลดลงของตัวจับเวลาจนกว่าจะเป็นศูนย์ //
CLR RI // ล้างรับการขัดจังหวะ //
CLR TR1 // ล้างตัวจับเวลา //
2. WAP เพื่อส่งอักขระรับโดย Hyper Terminal
MOV SCON, # 50H // ตั้งค่าการสื่อสารแบบอนุกรม //
MOV TMOD, # 20H // เลือกโหมดจับเวลา //
MOV TH1, # -6 // กำหนดอัตรารับส่งข้อมูล //
SET TR1 // บนตัวจับเวลา //
MOV SBUF, # 'S' // ส่ง S ไปยังหน้าต่างอนุกรม //
JNB RI, $ // ค่าลดลงของตัวจับเวลาจนกว่าจะเป็นศูนย์ //
CLR RI // ล้างรับการขัดจังหวะ //
MOV P0, SBUF // ส่งค่าลงทะเบียน SBUF ไปยังพอร์ต 0 //
CLR TR1 // ล้างตัวจับเวลา //
ทั้งหมดนี้เกี่ยวกับการเขียนโปรแกรมภาษาแอสเซมบลี 8051 โดยสังเขปด้วยโปรแกรมตามตัวอย่าง เราหวังว่าข้อมูลที่เพียงพอเกี่ยวกับภาษาแอสเซมบลีนี้จะเป็นประโยชน์สำหรับผู้อ่านอย่างแน่นอนและเราหวังว่าจะได้รับความคิดเห็นที่มีค่าของพวกเขาในส่วนความคิดเห็นด้านล่าง