Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <REG51F380.H>
- ;-------------------------------------------------------------------------------------------------------------------;
- ;CONSTANT DEFINES FOR CHAR_NUM AND CHAR_STATE
- ;-------------------------------------------------------------------------------------------------------------------;
- CHAR_0 EQU 0C0H ;DEFINE CHARS FOR 8BITSEG
- CHAR_1 EQU 0F9H
- CHAR_2 EQU 0A4H
- CHAR_3 EQU 0B0H
- CHAR_4 EQU 099H
- CHAR_5 EQU 092H
- CHAR_6 EQU 082H
- CHAR_7 EQU 0F8H
- CHAR_8 EQU 080H
- CHAR_9 EQU 090H
- CHAR_A EQU 088H
- CHAR_B EQU 083H
- CHAR_C EQU 0C6H
- CHAR_D EQU 0A1H
- CHAR_E EQU 086H
- CHAR_F EQU 08EH
- ;-------------------------------------------------------------
- AND_OP EQU 88H
- OR_OP EQU 0C0H
- NOT_OP EQU 0ABH
- XOR_OP EQU 89H
- ADD_OP EQU 8CH
- SUB_OP EQU 0EAH
- ROTL_OP EQU 0C7H
- ROTR_OP EQU 0CEH
- S_READY EQU 0
- S_SELECT EQU 1
- S_OP2 EQU 2
- S_PROCESS EQU 3
- OP_1 DATA 30H
- OP_2 DATA 31H
- OPER DATA 32H
- STATE DATA 33H
- N_STATE DATA 34H
- KSET EQU P0.6
- KLOAD EQU P0.7
- CSEG AT 400H
- OP_TABLE: ;OPERADORES
- DB AND_OP, OR_OP, NOT_OP, XOR_OP, ADD_OP, SUB_OP, ROTL_OP, ROTR_OP
- CSEG AT 500H ;caracteres segmento 8bits
- DIGITS_TABLE:
- DB CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9, CHAR_A, CHAR_B, CHAR_C, CHAR_D, CHAR_E, CHAR_F ;0-F
- CSEG AT 0H
- JMP RESET
- RESET:
- ACALL Init_Device
- SETB KSET ;ATIVAR BOTOES
- SETB KLOAD
- MOV R3, #0H
- MOV A, #0H
- MOV OP_1, #0H
- MOV OP_2, #0H
- MOV STATE, #S_READY
- MOV N_STATE, #S_READY
- ;-----------------------------------------------------
- STATE_MACHINE:
- MOV STATE, N_STATE
- MOV A, STATE
- RL A
- MOV DPTR, #JMP_TABLE
- JMP @A+DPTR
- JMP_TABLE:
- AJMP READY
- AJMP SELECT
- AJMP OP2
- AJMP PROCESS
- ;-----------------------------------------------------STATE READY
- READY:
- MOV DPTR, #DIGITS_TABLE
- MOV P2, #0AFH
- ACALL START
- DISPLAYBCD:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV P2, A
- BUTTONS:
- JNB KLOAD, OPER1
- JB KSET, BUTTONS
- INCREMENT:
- JNB KSET, $
- INC R3
- CJNE R3, #16, DISPLAYBCD
- MOV R3, #0H
- JMP DISPLAYBCD
- START: ;aguarda que o utilizador carregue no kset para iniciar programa
- JB KSET, START
- JNB KSET, $
- RET
- OPER1:
- JNB KLOAD, $
- MOV OP_1, R3
- MOV P1, OP_1
- MOV N_STATE, #S_SELECT
- JMP STATE_MACHINE
- ;---------------------------------------------STATE SELECT
- SELECT:
- MOV DPTR, #OP_TABLE
- MOV R3, #0H
- SELECT_2:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV P2, A
- BUTT_OPER:
- JNB KLOAD, OPERAND
- JB KSET, BUTT_OPER
- INC_OPER:
- JNB KSET, $
- INC R3
- CJNE R3, #8, SELECT_2
- JMP SELECT
- OPERAND:
- JNB KLOAD, $
- MOV OPER, R3
- MOV N_STATE, #S_OP2
- JMP STATE_MACHINE
- ;---------------------------------------------STATE OP2
- OP2:
- MOV DPTR, #DIGITS_TABLE
- MOV R3, #0H
- MOV P2, #0A4H
- ACALL STARTOP2
- DISPLAYOP2:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV P2, A
- BUTTONSOP2:
- JNB KLOAD, OPER2
- JB KSET, BUTTONSOP2
- INCREMENTOP2:
- JNB KSET, $
- INC R3
- CJNE R3, #16, DISPLAYOP2
- MOV R3, #0H
- JMP DISPLAYOP2
- STARTOP2: ;aguarda que o utilizador carregue no kset para iniciar a selecao do op2
- JB KSET, STARTOP2
- JNB KSET, $
- RET
- OPER2:
- JNB KLOAD, $
- MOV OP_2, R3
- MOV P1, OP_2
- MOV N_STATE, #S_PROCESS
- JMP STATE_MACHINE
- ;---------------------------------------------STATE PROCESS
- PROCESS:
- MOV P2, #0FH
- JB KSET, PROCESS
- ;------------------------------------------------------------------------
- PCA_Init:
- MOV PCA0MD, #000h
- RET
- Port_IO_Init:
- MOV XBR1, #040h
- RET
- Init_Device:
- lcall PCA_Init
- lcall Port_IO_Init
- ret
- ;------------------------------------------------------------------------
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement