??? 01/04/06 01:23 Read: times |
#106429 - 8051 keypad input |
This is a part of my program.the micro-C is taking in BCD values from a 74C922.and output to a 4511(bcd to 7segment decoder).The problem is,after i hook up the system,the display only shows "00" and the keypad is not working at all.Could it be because my Check Data Available Subroutine is wrong?
thx for your help. org 0000h ;start instruction at address 0000 PR2 EQU 48H ; PR1 EQU 49H ; PUR EQU 52H ; TEMP EQU 50H ; DIGIT1 EQU 54H ; DIGIT2 EQU 55H INIT: MOV P1,#FFH ; SET PORT1 AS INPUT MOV P2,#00H ; SET PORT2 AS OUTPUT ;*************************************************************** ; KEYPAD INPUT ;*************************************************************** START: LCALL CHECK ; EXIT: MOV A,TEMP CJNE A, #0DH,MODE_SEL ; JMP CONT ; MODE_SEL: LCALL CHECK ; CHECK IF KEY IS PRESSED MOV A, TEMP ; RECEIVE BCD INPUT FROM KEYPAD CJNE A, #0AH,GETP ; MODE COMPARE CPL P3.7 ; JMP START ; GETP: CJNE A, #0CH,START ; PRESSURE SET COMP LCALL PSET2 ; JMP START ; PSET2: LCALL CHECK ; MOV PR2,TEMP ; LCALL CHECK ; MOV A,TEMP ; CJNE A, #0EH,PSET1 ; JMP PSAVE ; PSET1: MOV PR1,TEMP ; PSAVE: RET ; ;*************************************************************** ; CHECK DATA AVAILABLE ;*************************************************************** CHECK: JNB P1.4, CHECK ; IF DAV IS SET, PROCEED TO GET KEY CLR P1.5 ; CLR P1.6 ; CLR P1.7 ; MOV TEMP, P1 ; RET ; CONT: MOV b,#10 ;SET REGISTER b TO MULTIPLY 10 THE msb MOV A,PR1 MUL AB ADD A,PR2 MOV PUR,A END ;*************************************************************** ; PRESET & MONITORED PRESSURE ; *************************************************************** MOV A,PUR ; MOV B, #AH ; DIV AB ; MOV DIGIT1, B ; MOV DIGIT2, A ; JMP DISPLAY ; ;*************************************************************** ; DISPLAY ON 7 SEGMENT ;*************************************************************** DISPLAY: MOV P2, DIGIT2 ;SEGMENT DATA PORT 1 CLR P2.4 ;SECOND DIGIT TURNED ON ACALL DELAY ;DIGIT HOLD DELAY SETB P2.4 ;SECOND DIGIT TURNED OFF MOV P2, DIGIT1 ;SEGMENT DATA PORT 1 CLR P2.5 ;FIRST DIGIT TURNED ON ACALL DELAY ;DIGIT HOLD DELAY SETB P2.5 ;FIRST DIGIT TURNED OFF ;**************************************************************** ;DIGIT HOLD DELAY ;*************************************************************** DELAY: MOV R1, #0FFH ;HEX FF INTO REGISTER R1 TAKE: DJNZ R1, TAKE ;DECREMENT R1 UNTILL IT IS ZERO RET ;RETURN FROM DELAY SUBROUTINE END ;ASSEMBLER DIRECTIVE |
Topic | Author | Date |
8051 keypad input | 01/01/70 00:00 | |
try this![]() | 01/01/70 00:00 |