Em cần giao tiếp giữa 2 kit vdk, có dạng hoạt động như thế này:
(trên KIT có ADC bằng VR( có địa chỉ 4000h), cổng RS232, Led7 ( 4 led nối chung)( địa chỉ 0000h), động cơ DC( địa chỉ 0E000h))
- KIT 1 đọc tính hiệu từ VR1 ( 000-255) và phát ra 4 led7, đồng thời gửi qua KIT 2 để điều khiển động cơ DC = cách điều chế độ rộng xung (PMW) dựa vào tính hiệu đã gửi đó.
Và ngược lại. ( yêu cầu KÍT 1 và KIT 2 phải làm được như nhau)
Em viết đoạn code dưới đây, mà sao nó chỉ hiển thị được 4led7 thôi, chưa điều khiển được DC bên kit còn lại.
Các bác coi dùm em với, xin cảm ơn trước !!!
ORG 2000H
LJMP MAIN
ORG 0023H
LJMP SERIAL
ORG 2030H
MAIN:
MOV TMOD,#20H
MOV TH1,#-3
MOV SCON,#50H
MOV IE,10010000B
SETB TR1
BACK: CALL ADC ; READ ADC
MOV SBUF,A
XUATLED7:
MOV R7,A
CALL BINTOBCD
MOV DPTR,#0000H
MOV A,R2
ORL A,#0E0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R3
ORL A,#0D0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R4
ORL A,#0B0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R7
SJMP BACK
SERIAL:
JB TI,TRANS
MOV A,SBUF
CALL RUNDC
RETI
TRANS:
CLR TI
RETI
;=======================================
RUNDC: PUSH ACC
MOV A,#01H
MOV DPTR,#0E000H
MOVX @DPTR,A
POP ACC
CALL DELAY1
PUSH ACC
MOV A,#00H
MOVX @DPTR,A
POP ACC
CALL DELAY2
RET
;========================================
DELAY1: PUSH 01H
L1: MOV TMOD,#01H
MOV TH0,#HIGH(-4)
MOV TL0,#LOW(-4)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CJNE R1,#0,NHAY
JMP THOAT
NHAY: DJNZ R1,L1
THOAT: POP 01H
RET
DELAY2:
CLR C
MOV A,#255
SUBB A,R1
MOV R1,A
L2: MOV TMOD,#01H
MOV TH0,#HIGH(-4)
MOV TL0,#LOW(-4)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
DJNZ R1,L2
RET
;==========================================
BINTOBCD:
MOV B,#10 ;432
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV R3,B
MOV R4,A
RET
;==========================================
DELAY3MS:
MOV R5,#10
LOOP1:
MOV R6,#150
DJNZ R6,$
DJNZ R5,LOOP1
RET
;==========================================
ADC:
MOV DPTR,#4000H
MOV A,#00H
MOVX @DPTR,A
CALL DELAY3MS
MOVX A,@DPTR
MOV R1,A
RET
END
(trên KIT có ADC bằng VR( có địa chỉ 4000h), cổng RS232, Led7 ( 4 led nối chung)( địa chỉ 0000h), động cơ DC( địa chỉ 0E000h))
- KIT 1 đọc tính hiệu từ VR1 ( 000-255) và phát ra 4 led7, đồng thời gửi qua KIT 2 để điều khiển động cơ DC = cách điều chế độ rộng xung (PMW) dựa vào tính hiệu đã gửi đó.
Và ngược lại. ( yêu cầu KÍT 1 và KIT 2 phải làm được như nhau)
Em viết đoạn code dưới đây, mà sao nó chỉ hiển thị được 4led7 thôi, chưa điều khiển được DC bên kit còn lại.
Các bác coi dùm em với, xin cảm ơn trước !!!
ORG 2000H
LJMP MAIN
ORG 0023H
LJMP SERIAL
ORG 2030H
MAIN:
MOV TMOD,#20H
MOV TH1,#-3
MOV SCON,#50H
MOV IE,10010000B
SETB TR1
BACK: CALL ADC ; READ ADC
MOV SBUF,A
XUATLED7:
MOV R7,A
CALL BINTOBCD
MOV DPTR,#0000H
MOV A,R2
ORL A,#0E0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R3
ORL A,#0D0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R4
ORL A,#0B0H
MOVX @DPTR,A
CALL DELAY3MS
MOV A,R7
SJMP BACK
SERIAL:
JB TI,TRANS
MOV A,SBUF
CALL RUNDC
RETI
TRANS:
CLR TI
RETI
;=======================================
RUNDC: PUSH ACC
MOV A,#01H
MOV DPTR,#0E000H
MOVX @DPTR,A
POP ACC
CALL DELAY1
PUSH ACC
MOV A,#00H
MOVX @DPTR,A
POP ACC
CALL DELAY2
RET
;========================================
DELAY1: PUSH 01H
L1: MOV TMOD,#01H
MOV TH0,#HIGH(-4)
MOV TL0,#LOW(-4)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CJNE R1,#0,NHAY
JMP THOAT
NHAY: DJNZ R1,L1
THOAT: POP 01H
RET
DELAY2:
CLR C
MOV A,#255
SUBB A,R1
MOV R1,A
L2: MOV TMOD,#01H
MOV TH0,#HIGH(-4)
MOV TL0,#LOW(-4)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
DJNZ R1,L2
RET
;==========================================
BINTOBCD:
MOV B,#10 ;432
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV R3,B
MOV R4,A
RET
;==========================================
DELAY3MS:
MOV R5,#10
LOOP1:
MOV R6,#150
DJNZ R6,$
DJNZ R5,LOOP1
RET
;==========================================
ADC:
MOV DPTR,#4000H
MOV A,#00H
MOVX @DPTR,A
CALL DELAY3MS
MOVX A,@DPTR
MOV R1,A
RET
END