Download
: (N/A)
Source(.asm)
Schematic (.sch) Print
cir. board (.pcb) :This
is draft version for education only
ในตัวอย่างนี้จะเป็นตัวอย่างโปรแกรมการสตาร์ทมอเตอร์
แบบสตาร์-เดลต้า โดยใช้ไมโครคอนโทรเลอร์ โดยตัวอย่างวงจรที่ใช้อ้างอิงในการลองเขียนโปรแกรมก็สามารถโหลดได้จากด้านบน

รูปตัวอย่าง
schematic รูปจำลอง
lay out ของวงจร
โดยการทำงานคร่าวๆก็คือเมื่อกดสวิทช์ S1 จะเป็นการตั้งเวลาหน่วงของช่วงสตาร์
โดยจะตั้งได้จาก 1-10 วินาทีและแสดงผลบน 7 segment และเมื่อกดสวิทช์
S2 ก็จะเริ่มสตาร์ท ช่วงสตาร์โดยเวลาบน 7 segment จะลดค่าลงทีละ 1
จนเมื่อครบเวลาก็จะรันช่วงเดลต้าต่อไป
ในส่วนของโปรแกรมก็จะมีลูปของการแสดง 7 segment และเงื่อนไขการกดสวิตช์ต่างๆ
กำหนดการ declare ค่าให้กับ port และอุปกรณ์
DIGIT1
BIT
P2.0
DIGIT2
BIT
P2.1
START_SW
BIT P3.6
DELAY_SW BIT
P3.7
CHIP_CLK
BIT P2.2
DSP_ASCII
EQU 030H
DSP_NUM
EQU 031H
DELAY_CNT
EQU 032H
FLAG
EQU
02FH
DUMMY
BIT
FLAG.0
DUMMY2
BIT
FLAG.1
ลูปการตรวจสอบการกดสวิตช์
JB
DELAY_SW,START
ACALL
DELAY_10ms
JB
DELAY_SW,START
ACALL
DELAY_PRESS
ลูปของเงื่อนไขการกดสวิตช์เพื่อตั้งเวลาหน่วง
เมื่อกดสวิตช์จะทำการเคลียร์ค่าของพอร์ต 0 ซึ่งเป็น driver ก่อน จากนั้นจะรับค่าของการกดสวิตช์
โดยจะเพิ่มค่าขึ้นครั้งละ 1 และตรวจสอบว่าค่าเป็น 9 หรือไม่ หากเป็น
9 ก็ให้วนค่าไปเริ่มจาก 1 ใหม่
DELAY_PRESS:
MOV P0,#00
ACALL
CHIP_CLK
MOV
DSP_ASCII,#3
MOV
R0,DSP_NUM
CJNE
R0,#9,NEXT3
MOV
DSP_NUM,#0
NEXT3: INC
DSP_NUM
CLR
DUMMY
CLR
DUMMY2
ในส่วนนี้จะเป็นลูปของการแสดงผลทาง
7 segment จะมี 2 หลัก โดยในหลักที่ 1 จะแสดงค่าตัวเลขจากการตั้งเวลา
นับเวลาถอยหลัง และจะแสดงให้แต่ละ segment วิ่งวนไปเรื่อยๆเมื่อเข้าในลูปของการต่อ
delta (คล้ายไฟวิ่ง แต่อันนี้เป็น 7 segment วิ่ง อิอิ) และหลักที่
2 ของ 7 segment จะแสดงเป็นสัญญลักษณ์ในช่วงการทำงานต่างๆ
SEGMENT_SCAN:
JNB DUMMY2,NEXT1
MOV
DPTR,#DOT_A
MOV
A,DSP_NUM
JB
DUMMY2,NEXT2
NEXT1:
MOV A,DSP_NUM
MOV
DPTR,#NUM0
NEXT2:
MOVC
A,@A+DPTR
MOV
P0,A
CLR
DIGIT1
ACALL
DELAY_1ms
SETB
DIGIT1
Reference : base on simulate tool with inex
nx51and manual
|