pham_dinh_hung83 |
24-12-2006 06:50 PM |
thực ra thì mình khá bận .
mấy hôm vừa rồi ít ngủ
mình cho bạn chương trình mình dùng 8051 giao tiếp ps2 tay đồ chơi điện tử playstation 2. có hiện thị lcd nhé. cố nghiên cứu ,
chúc vui
Code:
;-------------------------------------------------
ORG 0000h
;-------------------------------------------------
BUTTON1 EQU P3.6
BUTTON2 EQU P3.7
DC2_NGUOC BIT P2.7
DC3_THUAN BIT P0.1
DC3_NGUOC BIT P0.2
DC4_THUAN BIT P0.3
DC4_NGUOC BIT P2.3
DC_BANH1_CHIEU BIT P0.0
DC_BANH1_VOLT BIT P0.7
DC_BANH1_CHAY BIT P0.6
DC_BANH2_CHIEU BIT P2.4
DC_BANH2_VOLT BIT P2.5
DC_BANH2_CHAY BIT P2.6
DC1_THUAN BIT P2.2
DC1_NGUOC BIT P2.1
DC2_THUAN BIT P2.0
;-------------------------------------------------
LCDDATA EQU P1
LCDD7 BIT P1.7
LCDRS BIT P1.0
LCDRW BIT P1.1
LCDE BIT P1.2
;-------------------------------------------------
PsCom BIT P3.4
PsData BIT P3.5
PsClk BIT P3.2
PsATT BIT P3.3
fReady BIT 01h
fAnalog BIT 02h
;-------------------------------------------------
TEMP EQU 30h
TEMP1 EQU 31h
;-------------------------------------------------
PsxStatus EQU 32h
PsxVer EQU 33h
PsxLX EQU 34h
PsxLY EQU 35h
PsxRX EQU 36h
PsxRY EQU 37h
PsxBt1 EQU 28h
PsxBt2 EQU 29h
;-------------------------------------------------
TRAI_TREN BIT PsxBt2.2
TRAI_DUOI BIT PsxBt2.0
PHAI_TREN BIT PsxBt2.3
PHAI_DUOI BIT PsxBt2.1
SANG_TRAI BIT PsxBt1.7
SANG_PHAI BIT PsxBt1.5
LEN_TREN BIT PsxBt1.4
XUONG_DUOI BIT PsxBt1.6
VUONG BIT PsxBt2.7
TRON BIT PsxBt2.5
TAM_GIAC BIT PsxBt2.4
GACH_CHEO BIT PsxBt2.6
SELECT BIT PsxBt1.0
START BIT PsxBt1.3
JOY1 BIT PsxBt1.1
JOY2 BIT PsxBt1.2
;-------------------------------------------------
WDTRST EQU 0A6h
WDTPRG EQU 0A7h
;-------------------------------------------------
ORG 000h
LJMP MAIN
ORG 100H
;-------------------------------------------------
;==================================================
MAIN:
ORL WDTPRG,#06 ; WATCHDOG 1s o THACH ANH 11.0592MHz
CALL INITLCD
CALL MESSAGE
CALL CLRSCR
LOOP_PSX:
CALL Psx_Process
CALL HIENTHI
CALL DKRELAY
CALL DELAY
SJMP LOOP_PSX
SJMP $
;==================================================
;-------------------------------------------------
DKRELAY:
CALL CLRWDT
; ----- DIEU KHIEN ANALOG PHAI ------
MOV A,PsxRY
ADD A,#255 ; SO SANH A VOI 00
JC NEXT_R1 ; NEU A>0 THI KIEM TRA TIEP
CLR DC_BANH2_CHAY ; NEU A=0 THI CHO DONG CO PHAI CHAY TIEN O 24V
SETB DC_BANH2_CHIEU
CLR DC_BANH2_VOLT
SJMP EXIT_R
NEXT_R1:
MOV A,PsxRY
ADD A,#205 ; SO SANH A VOI 50
JC NEXT_R2 ; NEU A>50 THI KIEM TRA TIEP
CLR DC_BANH2_CHAY ; NEU A<=50 THI CHO DONG CO PHAI CHAY TIEN O 12V
SETB DC_BANH2_CHIEU
SETB DC_BANH2_VOLT
SJMP EXIT_R
NEXT_R2:
MOV A,PsxRY
ADD A,#55 ; SO SANH A VOI 200
JC NEXT_R3 ; NEU A>200 THI KIEM TRA TIEP
SETB DC_BANH2_CHAY ; NEU A<=200 THI CHO DONG CO PHAI DUNG
SETB DC_BANH2_CHIEU
SETB DC_BANH2_VOLT
SJMP EXIT_R
NEXT_R3:
MOV A,PsxRY
ADD A,#01 ; SO SANH A VOI 255
JC NEXT_R4 ; NEU A=255 THI CHO DONG CO PHAI LUI O 24V
CLR DC_BANH2_CHAY ; NEU A<255 THI CHO DONG CO PHAI LUI O 12V
CLR DC_BANH2_CHIEU
SETB DC_BANH2_VOLT
SJMP EXIT_R
NEXT_R4:
CLR DC_BANH2_CHAY ; CHO DONG CO PHAI LUI O 24V
CLR DC_BANH2_CHIEU
CLR DC_BANH2_VOLT
EXIT_R:
; ----- KIEM TRA CHE DO CHAY THANG ------
JB PHAI_TREN,KOTHANG
MOV PsxLY,PsxRY
KOTHANG:
; ----- DIEU KHIEN ANALOG TRAI ------
MOV A,PsxLY
ADD A,#255 ; SO SANH A VOI 00
JC NEXT_L1 ; NEU A>0 THI KIEM TRA TIEP
CLR DC_BANH1_CHAY ; NEU A=0 THI CHO DONG CO TRAI CHAY TIEN O 24V
SETB DC_BANH1_CHIEU
CLR DC_BANH1_VOLT
SJMP EXIT_L
NEXT_L1:
MOV A,PsxLY
ADD A,#205 ; SO SANH A VOI 50
JC NEXT_L2 ; NEU A>50 THI KIEM TRA TIEP
CLR DC_BANH1_CHAY ; NEU A<=50 THI CHO DONG CO TRAI CHAY TIEN O 12V
SETB DC_BANH1_CHIEU
SETB DC_BANH1_VOLT
SJMP EXIT_L
NEXT_L2:
MOV A,PsxLY
ADD A,#55 ; SO SANH A VOI 200
JC NEXT_L3 ; NEU A>200 THI KIEM TRA TIEP
SETB DC_BANH1_CHAY ; NEU A<=200 THI CHO DONG CO TRAI DUNG
SETB DC_BANH1_CHIEU
SETB DC_BANH1_VOLT
SJMP EXIT_L
NEXT_L3:
MOV A,PsxLY
ADD A,#01 ; SO SANH A VOI 255
JC NEXT_L4 ; NEU A=255 THI CHO DONG CO TRAI LUI O 24V
CLR DC_BANH1_CHAY ; NEU A<255 THI CHO DONG CO TRAI LUI O 12V
CLR DC_BANH1_CHIEU
SETB DC_BANH1_VOLT
SJMP EXIT_L
NEXT_L4:
CLR DC_BANH1_CHAY ; CHO DONG CO TRAI LUI O 24V
CLR DC_BANH1_CHIEU
CLR DC_BANH1_VOLT
EXIT_L:
; ----- DIEU KHIEN KHOI PHIM BAM ------
MOV C,TRAI_TREN
MOV DC1_THUAN,C
MOV C,TRAI_DUOI
MOV DC1_NGUOC,C
MOV C,LEN_TREN
MOV DC2_THUAN,C
MOV C,XUONG_DUOI
MOV DC2_NGUOC,C
MOV C,VUONG
MOV DC3_THUAN,C
MOV C,TRON
MOV DC3_NGUOC,C
MOV C,TAM_GIAC
MOV DC4_THUAN,C
MOV C,GACH_CHEO
MOV DC4_NGUOC,C
JB START,EXIT_RL
SJMP $
EXIT_RL:
RET
;-------------------------------------------------
HIENTHI:
CALL CLRWDT
CALL CLRSCR
MOV A,PsxLX
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxLY
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxRX
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxRY
CALL PUTS_A
CALL ENTER
MOV A,PsxStatus
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxVer
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxBT1
CALL PUTS_A
MOV A,#'-'
CALL DATAWRT
MOV A,PsxBT2
CALL PUTS_A
RET
;>>>>>>-------------------------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Nhom cac ham xu ly PSX
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Psx_Process:
CALL CLRWDT
SETB fReady
SETB fAnalog
SETB PsCom
SETB PsClk
CLR PsATT ; Dua ATT xuong
MOV A,#01h
CALL Ps_Access
MOV A,#42h
CALL Ps_Access
MOV PsxVer,B ; Expect to read 41h or 73h
MOV R2,B
CJNE R2,#73h,NoEqual01_PP
JMP Cont01_PP ; Analog mode on
NoEqual01_PP:
CLR fAnalog
MOV PsxLX,#128
MOV PsxLY,#128
MOV PsxRX,#128
MOV PsxRY,#128
Cont01_PP:
MOV A,#0h
CALL Ps_Access
MOV PsxStatus,B
MOV R2,B
CJNE R2,#5Ah,NoEqual02_PP
JMP Cont02_PP ; Neu Joystic chua ready thi CLR fReady va thoat
NoEqual02_PP:
CLR fReady
RET
Cont02_PP:
MOV A,#0h ; SLCT JOYR JOYL STRT UP RGHT DOWN LEFT
CALL Ps_Access
MOV PsxBt1,B
MOV A,#0h ; L2 R2 L1 R1 /\ O X |_|
CALL Ps_Access
MOV PsxBt2,B
; Neu khong o analog mode thi khong doc ve nua
JNB fAnalog,EndRead_PP
MOV A,#0h ; Right Joy 0x00 = Left 0xFF = Right
CALL Ps_Access
MOV PsxRX,B
MOV A,#0h ; Right Joy 0x00 = Up 0xFF = Down
CALL Ps_Access
MOV PsxRY,B
MOV A,#0h ; Left Joy 0x00 = Left 0xFF = Right
CALL Ps_Access
MOV PsxLX,B
MOV A,#0h ; Left Joy 0x00 = Up 0xFF = Down
CALL Ps_Access
MOV PsxLY,B
EndRead_PP:
SETB PsATT
RET
;>>>>>>-------------------------------------------------
; Transmit data store in A and record PSX data and store it in B
Ps_Access:
MOV R2,#8
Loop_PA:
RRC A
MOV PsCom,C
CALL CLK_Low
XCH A,B
MOV C,PsData
RRC A
XCH A,B
CALL CLK_High
DJNZ R2,Loop_PA
MOV R2,#50
DJNZ R2,$
RET
;>>>>>>-------------------------------------------------
CLK_Low:
CLR PsCLK ; Dua xung xuong
JB PsCLK,$ ; Doi xung xuong han
RET
;>>>>>>-------------------------------------------------
CLK_High:
SETB PsCLK ; Dua xung len
JNB PsCLK,$ ; Doi xung len han
RET
;-------------------------------------------------
MESSAGE:
CALL CLRSCR
CALL DELAY1S
MOV DPTR,#TEXT1
CALL DISPLAY
CALL ENTER
MOV DPTR,#TEXT2
CALL DISPLAY
CALL DELAY1S
SJMP MESSAGE
JB P3.6,NOCOPYRIGHT
CALL CLRSCR
MOV DPTR,#TEXT3
CALL DISPLAY
CALL ENTER
MOV DPTR,#TEXT4
CALL DISPLAY
WAIT:
CALL CLRWDT
; JNB P3.6,WAIT
CALL DELAY1S
CALL DELAY1S
CALL DELAY1S
CALL DELAY1S
CALL DELAY1S
CALL DELAY1S
NOCOPYRIGHT:
RET
;-------------------------------------------------
INITLCD:
CALL CLRWDT
MOV A,#00000010B
CALL COMNWRT
MOV A,#00101000B
CALL COMNWRT
MOV A,#00001100B
ACALL COMNWRT
RET
;-------------------------------------------------
DISPLAY:
CALL CLRWDT
LOOP:
ACALL DELAY
CLR A
MOVC A,@A+DPTR
JZ EXIT
ACALL DATAWRT
INC DPTR
SJMP LOOP
EXIT:
RET
;-------------------------------------------------
COMNWRT:
MOV TEMP,A ;00000010B
ANL A,#11110000B
MOV LCDDATA,A
SETB LCDE
NOP
CLR LCDE
MOV A,TEMP
SWAP A
ANL A,#11110000B
MOV LCDDATA,A
SETB LCDE
NOP
CLR LCDE
LCALL DELAY50
RET
;-------------------------------------------------
DATAWRT:
MOV TEMP,A
ANL A,#11110000B
SETB ACC.0
MOV LCDDATA,A
SETB LCDE
NOP
CLR LCDE
MOV A,TEMP
SWAP A
ANL A,#11110000B
SETB ACC.0
MOV LCDDATA,A
SETB LCDE
NOP
CLR LCDE
LCALL DELAY50
RET
;-------------------------------------------------
PUTSTRING:
CALL CLRWDT
LOOP_PS:
CLR A
MOVC A,@A+DPTR
JZ EXIT_PS
ACALL DATAWRT
INC DPTR
SJMP LOOP_PS
EXIT_PS:
RET
;-------------------------------------------------
ENTER:
MOV A,#0C0h
CALL COMNWRT
RET
;-------------------------------------------------
POINTER_BACK:
PUSH ACC
MOV A,#0C0h
CALL COMNWRT
POP ACC
RET
;-------------------------------------------------
CLRSCR:
PUSH ACC
MOV A,#01h
CALL COMNWRT
MOV B,#6
CALL DELAYB
POP ACC
RET
;-------------------------------------------------
BACK_SPACE:
RET
;-------------------------------------------------
PUTS_A:
PUSH 0
PUSH 1
PUSH ACC
MOV R0,#3
MOV R1,#TEMP1
LOOP_A:
MOV B,#10
DIV AB
PUSH ACC
MOV A,#30h
ADD A,B
MOV @R1,A
INC R1
POP ACC
DJNZ R0,LOOP_A
MOV R0,#3
LOOP_B:
DEC R1
MOV A,@R1
ACALL DATAWRT
DJNZ R0,LOOP_B
POP ACC
POP 1
POP 0
RET
;-------------------------------------------------
CLRWDT:
MOV WDTRST,#01Eh
MOV WDTRST,#0E1h
RET
;-------------------------------------------------
DELAY:
MOV R3,#50
D1: MOV R4,#250
DJNZ R4,$
DJNZ R3,D1
RET
DELAY50:
PUSH 4
MOV R4,#50
DJNZ R4,$
POP 4
RET
DELAYB:
PUSH 4
DLB: MOV R4,#255
DJNZ R4,$
DJNZ B,DLB
POP 4
RET
DELAY1S:
CALL CLRWDT
MOV R5,#4
D2: MOV R3,#250
D3: MOV R4,#250
DJNZ R4,$
DJNZ R3,D3
DJNZ R5,D2
RET
DELAYuS:
MOV R3,#50
DJNZ R3,$
RET
;-------------------------------------------------
TEXT1:
DB "-d7KQ#1-VO DICH-",0
TEXT2:
DB "--ROBOCON 2007--",0
TEXT3:
DB " VO DICH ",0
TEXT4:
DB " ",0
;--------------------------------------------------
END
|