ในตอนที่แล้วเป็นการสแกนปุ่มกด ครั้งนี้จะเป็นการจำแนกสัญญาณ IR เพื่อรับคำสั่งด้วย Remote Control
Remote Control ส่งคำสั่งด้วยสัญญาณ IR มีการแยกรหัส 0 และ 1 ด้วยความยาวของพัลส์ และมีคลื่นพาห์ประมาณ 38-40 kHz. การแยกรหัส 0 และ 1 มีอยู่ 3 มาตรฐาน ดังนี้
1. Pulse Coded ในมาตรฐานนี้ รหัส 0 และ 1 พัลส์จะมีความยาวไม่เท่ากัน โดยรหัส 0 จะมีความยาวพัลส์สั้นกว่าพัลส์รหัส 1
2. Space Coded แบบนี้จะตรงกันข้ามกับแบบแรก กล่าวคือ รหัส 0 และ 1 ช่องว่างระหว่างพัลส์จะยาวไม่เท่ากัน โดยรหัส 0 จะมีช่องว่างระหว่างพัลส์สั้นกว่ารหัส 1
3. Shift Coded รหัส 0 พัลส์จะเปลี่ยนจาก Low เป็น High ในทางกลับกันรหัส 1 พัลส์จะเปลี่ยนจาก High เป็น Low
ในการเขียนโปรแกรมเพื่อจำแนกสัญญาณ IR ออกเป็นคำสั่งต่าง ๆ ดังนี้
เริ่มจาก Label ที่มีชื่อว่า Remote ซึ่งในตอนที่แล้ว ผมได้เขียนคำสั่งเรียก Label นี้ เมื่อ P3.2 เป็น 0
Remote: mov RCode, #0h (เป็นการให้ค่า RCode เป็น 0)
mov Period, #0h (เป็นการให้ค่า Period เป็น 0 ตัวแปรตัวนี้มีหน้าที่วัดความยาวของพัลส์หรือช่องว่าง เพื่อจำแนกว่าเป็นรหัส 0 หรือ 1)
RMC1: inc Period (คำสั่ง inc เป็นคำสั่ง +1 ให้กับตัวแปร)
jnb RM, RMC1 (RM คือสัญญาณที่รับเข้ามาทาง P3.2, คำสั่ง jnb เป็นคำสั่งวน Loop ในกรณีที่ RM เป็น 0 จะกระโดดกลับไปที่ RMC1)
ใน loop ข้างต้นนี้เป็น loop ที่รอรับพัลส์เริ่มต้นหรือ Head ของสัญญาณที่ส่งมาจาก Remote Control
mov Period, #0h
RMS1: inc Period
mov A, Period
cjne A, #10h, RMS2 (cjne เป็นคำสั่งเปรียบเทียบค่า ในกรณีที่ Period มีค่าเท่ากับ 10h จะจบการทำงานของการรับคำสั่งจาก Romote Control เนื่องจากไม่ใช่สัญญาณที่มาจาก Remote Control ที่เป็นคู่ของมัน)
sjmp RMEnd
RMS2: jb RM, RMS1 (เป็นคำสั่งวน Loop ในกรณีที่ RM เป็น 1 กระโดดกลับไปที่ RMS1
ใน loop ข้างต้นนี้เป็น loop วัดความยาวพัลส์ของสัญญาณที่ส่งมาจาก Remote Control
mov Period, #0h
RMC2: inc Period
jnb RM, RMC2
mov A, Period
mov Period, #0h
cjne A, #8Bh, INT_C1
sjmp RMS3
INT_C1: jc RMEnd
cjne A, #0A5h, INT_C2
sjmp RMS3
INT_C2: jnc RMEnd
RMEnd: ret
ใน loop ข้างต้นนี้เป็น loop วัดความยาวช่องว่างของสัญญาณที่ส่งมาจาก Remote Control
ในการเขียนโปรแกรมสำหรับสัญญาณจาก Remote Control จะต้องตรวจจับสัญญาณด้วย Loop ต่าง ๆ ตามข้างต้นไปเรื่อย ๆ จนถึงพัลส์สุดท้ายของสัญญาณที่ Remote Control ส่งมา
และเมื่อนำมาเปรียบเทียบจะพบว่ารหัสของแต่ละปุ่มจะไม่เหมือนกัน ซึ่งจะสามารถแยกได้ว่าผู้ใช้งานกดปุ่มใด เพื่อใช้สั่งงานต่อไป