|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
24-12-2006, 06:50 PM | #4 |
Đệ tử 1 túi
Tham gia ngày: Jul 2006
Bài gửi: 17
: |
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 thay đổi nội dung bởi: namqn, 24-12-2006 lúc 08:40 PM. |
|
|