Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <REG51F380.H> ;INCLUDE
- CHAR_A EQU 088h ;DEFINE
- CHAR_O EQU 0C0h
- CHAR_N EQU 0ABh
- CHAR_X EQU 089h
- CHAR_P EQU 08Ch
- CHAR_M EQU 0C8h
- CHAR_RL EQU 0E7h
- CHAR_RR EQU 0AFh
- LOAD_B EQU P0.6 ;BUTOES
- SET_B EQU P0.7
- OP_1 DATA 30h ;ARMAZENAR OPERANDOS
- OP_2 DATA 31h
- CHAR_R EQU 0CEh ;=
- CHAR_R_CY EQU 04Eh
- OPERATION DATA 35h ;ARMAZENAR OPERACAO
- CHAR_EQUAL EQU 0B7h
- CHAR_EQUAL_OV EQU 04Eh
- CSEG AT 0H
- JMP INIT_STATE ;CONFIG
- CSEG AT 1000h
- INIT_STATE:
- MOV OP_1,#1 ;passing value to op1
- MOV OP_2,#2 ;passing value to op2
- MOV P1MDOUT, #0FFh
- MOV P4MDOUT, #0FFh ;OUTPUT DIGITAL LAB P4 1-> push-pull
- MOV PCA0MD, #0 ;turn off WD
- MOV P0MDIN, #0FFh ;turn on p0 as digital INPUT MODE: 0-> analog
- MOV P2MDIN, #0FFh ;turn on p2 as digital " " 1-> digital
- MOV P0MDOUT, #0 ;turn on p0 as input OUTPUT MODE: 0-> open-drain
- MOV P2MDOUT, #0FFh ;turn on p2 as output " " 1-> push-pull
- SETB LOAD_B ;=PB1
- SETB SET_B ;=PB2
- MOV XBR1, #40h ;enable crossbar1, activate port 2: Xbare2, Xbare1, Xbare0
- JMP READY ;jump to main
- CHAR_DISP: DB CHAR_A, CHAR_O, CHAR_N, CHAR_X, CHAR_P, CHAR_M, CHAR_RL, CHAR_RR ;ARRAY
- WAIT_LOAD:
- JB LOAD_B, $
- JNB LOAD_B, $
- RET
- WAIT_SET:
- JB SET_B, $
- JNB SET_B, $
- RET
- WAIT_INPUT_SELECT:
- JNB SET_B, CHANGE_OP
- JNB LOAD_B, ENCODE_FSM0
- JMP WAIT_INPUT_SELECT
- WAIT_INPUT_RESTART:
- JNB SET_B, INPUT_RES_OP1
- JNB LOAD_B, EXIT
- JMP WAIT_INPUT_RESTART
- INPUT_RES_OP1:
- MOV OP_1, A
- CLR A ;LIMPAR A PARA NAO AFETAR OUTRAS SUB-ROTINAS
- JMP READY
- CHANGE_OP:
- ADD A, #1
- ANL A, #7
- MOV OPERATION, A
- JMP LOOP
- READY:
- MOV P2, #CHAR_R
- ;MOV OP_1, P1
- ACALL WAIT_LOAD
- JMP SELECT
- SELECT:
- MOV OPERATION, #0
- MOV DPTR, #CHAR_DISP
- LOOP:
- MOV A, OPERATION
- MOVC A, @A+DPTR
- MOV P2, A
- MOV A, OPERATION
- JMP WAIT_INPUT_SELECT
- ENCODE_FSM0:
- MOV DPTR, #TABLE_FSM0
- ;MOV A, STATE
- RL A ; A x 2
- JMP @A+DPTR
- TABLE_FSM0:
- AJMP CODE_AND
- AJMP CODE_OR
- AJMP CODE_XOR
- AJMP CODE_NOT
- AJMP CODE_PLUS
- AJMP CODE_MINUS
- AJMP CODE_RL
- AJMP CODE_RR
- CODE_AND:
- MOV A, OP_1
- ANL A, OP_2
- JMP RESULTADO
- CODE_OR:
- MOV A, OP_1
- ORL A, OP_2
- JMP RESULTADO
- CODE_XOR:
- MOV A, OP_1
- XRL A, OP_2
- JMP RESULTADO
- CODE_NOT:
- MOV A, OP_1
- CPL A
- ACALL RESULTADO
- CODE_PLUS:
- MOV A, OP_1
- ADD A, OP_2
- JMP RESULTADO
- CODE_MINUS:
- MOV A, OP_1
- CLR C
- SUBB A, OP_2
- JMP RESULTADO
- CODE_RL:
- MOV A, OP_1
- XRL A, OP_2
- JMP RESULTADO
- CODE_RR:
- MOV A, OP_1
- XRL A, OP_2
- JMP RESULTADO
- RESULTADO:
- MOV P3, A
- JC RESULTADO_OV
- MOV P2, #CHAR_EQUAL
- JMP WAIT_INPUT_RESTART
- RESULTADO_OV:
- MOV P2, #CHAR_EQUAL_OV
- JMP WAIT_INPUT_RESTART
- EXIT:
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement