#include ;-------------------------------------------------------------------------------------------------------------------; ;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: JB KSET, START JNB KSET, $ RET OPER1: 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, $ JB KSET, BUTT_OPER INC_OPER: JNB KSET, $ INC R3 CJNE R3, #8, SELECT_2 JMP SELECT ;------------------------------------------------------------------------ PCA_Init: MOV PCA0MD, #000h RET Port_IO_Init: MOV XBR1, #040h RET Init_Device: lcall PCA_Init lcall Port_IO_Init ret ;------------------------------------------------------------------------ END