$mod51
A0 EQU P1.0
A1 EQU P1.1
A2 EQU P1.2
SHCP EQU P1.3
STCP EQU P1.4
DANE EQU P1.5
ZNAK EQU 30H ;początek bufora na znaki do wyświetlania
LJMP START
ORG 100H
START:
CLR SHCP
CLR STCP
MOV DPTR,#TABLICA_ASCII ;ładuj tablice ASCII do DPTR
MOV R0,#ZNAK ;adresowanie rejestrowe buforu znaków
MOV A,#31H ;zapisuje ciąg znaków 1234567890ABCDEF
ACALL WPISZ_DO_R0 ;do kolejnych komórek pamięci spod adresu R0
MOV A,#32H
ACALL WPISZ_DO_R0
MOV A,#33H
ACALL WPISZ_DO_R0
MOV A,#34H
ACALL WPISZ_DO_R0
MOV A,#35H
ACALL WPISZ_DO_R0
MOV A,#36H
ACALL WPISZ_DO_R0
MOV A,#37H
ACALL WPISZ_DO_R0
MOV A,#38H
ACALL WPISZ_DO_R0
MOV A,#39H
ACALL WPISZ_DO_R0
MOV A,#30H
ACALL WPISZ_DO_R0
MOV A,#41H
ACALL WPISZ_DO_R0
MOV A,#42H
ACALL WPISZ_DO_R0
MOV A,#43H
ACALL WPISZ_DO_R0
MOV A,#44H
ACALL WPISZ_DO_R0
MOV A,#45H
ACALL WPISZ_DO_R0
MOV A,#46H
ACALL WPISZ_DO_R0
MOV R4,#1EH
LINIA_1: ;przemiatanie wiersza 1
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#00H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ1 ;zapal wiersz 1
DJNZ R4,LINIA_1
MOV R4,#1EH
LINIA_2: ;przemiatanie wiersza 2
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#01H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ2 ;zapal wiersz 2
DJNZ R4,LINIA_2
MOV R4,#1EH
LINIA_3: ;przemiatanie wiersza 3
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#02H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ3 ;zapal wiersz 3
DJNZ R4,LINIA_3
MOV R4,#1EH
LINIA_4: ;przemiatanie wiersza 4
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#03H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ4 ;zapal wiersz 4
DJNZ R4,LINIA_4
MOV R4,#1EH
LINIA_5: ;przemiatanie wiersza 5
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#04H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ5 ;zapal wiersz 5
DJNZ R4,LINIA_5
MOV R4,#1EH
LINIA_6: ;przemiatanie wiersza 6
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#05H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ6 ;zapal wiersz 6
DJNZ R4,LINIA_6
MOV R4,#1EH
LINIA_7: ;przemiatanie wiersza 7
MOV R0,#3FH ;ustaw R0 od 16stego znaku
MOV R3,#06H ;który wiersz zacząć
ACALL WYSWIETLANIE ;pobierz 5 bitów znaku
ACALL POTRAKTUJ_STCP
ACALL WIERSZ7 ;zapal wiersz 7
DJNZ R4,LINIA_7
MOV R4,#1EH
LJMP LINIA_1
WYSWIETLANIE:
LCALL PRZEKODOWANIE ;pobierz znak z pamięci (czyta od ostatniej komórki w dół)
ADD A,R3 ;które bity pobrać
MOVC A,@A+DPTR ;pobranie bajta
MOV R2,#05H
ACALL W_PRAWO_PRZEZ_C
DEC R0
CJNE R0,#30H,WYSWIETLANIE
RET
W_PRAWO_PRZEZ_C:
RRC A ;kopiuj po 1 bicie i wysyłaj
MOV DANE,C ;do zatrzasków rejestrów.
ACALL POTRAKTUJ_SHCP
DJNZ R2,W_PRAWO_PRZEZ_C
RET
POTRAKTUJ_SHCP:
CLR SHCP
NOP
SETB SHCP
NOP
CLR SHCP
RET
POTRAKTUJ_STCP:
SETB STCP
NOP
CLR STCP
NOP
RET
;tablica kodów BCD na numer wiersza (demultiplexowanie)
WIERSZ1:
CLR A0
NOP
CLR A1
NOP
CLR A2
RET
WIERSZ2:
SETB A0
NOP
CLR A1
NOP
CLR A2
RET
WIERSZ3:
CLR A0
NOP
SETB A1
NOP
CLR A2
RET
WIERSZ4:
SETB A0
NOP
SETB A1
NOP
CLR A2
RET
WIERSZ5:
CLR A0
NOP
CLR A1
NOP
SETB A2
RET
WIERSZ6:
SETB A0
NOP
CLR A1
NOP
SETB A2
RET
WIERSZ7:
CLR A0
NOP
SETB A1
NOP
SETB A2
RET
WPISZ_DO_R0:
MOV @R0,A
INC R0
RET
PRZEKODOWANIE: ;przekodowuje znak ASCII na odpowiednią wartość hex
;dzięki temu program wie, który znak ma pobierać
MOV A,@R0
ZNAK_0:
CJNE A,#30H,ZNAK_1
MOV A,#01H
RET
ZNAK_1:
CJNE A,#31H,ZNAK_2
MOV A,#09H
RET
ZNAK_2:
CJNE A,#32H,ZNAK_3
MOV A,#11H
RET
ZNAK_3:
CJNE A,#33H,ZNAK_4
MOV A,#19H
RET
ZNAK_4:
CJNE A,#34H,ZNAK_5
MOV A,#21H
RET
ZNAK_5:
CJNE A,#35H,ZNAK_6
MOV A,#29H
RET
ZNAK_6:
CJNE A,#36H,ZNAK_7
MOV A,#31H
RET
ZNAK_7:
CJNE A,#37H,ZNAK_8
MOV A,#39H
RET
ZNAK_8:
CJNE A,#38H,ZNAK_9
MOV A,#41H
RET
ZNAK_9:
CJNE A,#39H,ZNAK_A
MOV A,#49H
RET
ZNAK_A:
CJNE A,#41H,ZNAK_B
MOV A,#51H
RET
ZNAK_B:
CJNE A,#42H,ZNAK_C
MOV A,#59H
RET
ZNAK_C:
CJNE A,#43H,ZNAK_D
MOV A,#61H
RET
ZNAK_D:
CJNE A,#44H,ZNAK_E
MOV A,#69H
RET
ZNAK_E:
CJNE A,#45H,ZNAK_F
MOV A,#71H
RET
ZNAK_F:
CJNE A,#46H,ZADEN_ZNAK
MOV A,#79H
RET
ZADEN_ZNAK:
CLR A
RET
TABLICA_ASCII: ;tablica znaków ASCII
DB 11110001B
DB 11101110B
DB 11101100B
DB 11101010B
DB 11100110B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11110111B
DB 11100111B
DB 11110111B
DB 11110111B
DB 11110111B
DB 11110111B
DB 11100011B
DB 11111111B
DB 11110001B
DB 11101110B
DB 11111110B
DB 11111101B
DB 11111011B
DB 11110111B
DB 11100000B
DB 11111111B
DB 11100000B
DB 11111101B
DB 11111011B
DB 11111101B
DB 11111110B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11111101B
DB 11111001B
DB 11110101B
DB 11101101B
DB 11100000B
DB 11111101B
DB 11111101B
DB 11111111B
DB 11100000B
DB 11101111B
DB 11100001B
DB 11111110B
DB 11111110B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11111001B
DB 11110111B
DB 11101111B
DB 11100001B
DB 11101110B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11100000B
DB 11111110B
DB 11111101B
DB 11111011B
DB 11110111B
DB 11110111B
DB 11110111B
DB 11111111B
DB 11110001B
DB 11101110B
DB 11101110B
DB 11110001B
DB 11101110B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11110001B
DB 11101110B
DB 11101110B
DB 11110000B
DB 11111110B
DB 11111101B
DB 11110011B
DB 11111111B
DB 11110001B
DB 11101110B
DB 11101110B
DB 11101110B
DB 11100000B
DB 11101110B
DB 11101110B
DB 11111111B
DB 11100001B
DB 11101110B
DB 11101110B
DB 11100001B
DB 11101110B
DB 11101110B
DB 11100001B
DB 11111111B
DB 11110001B
DB 11101110B
DB 11101111B
DB 11101111B
DB 11101111B
DB 11101110B
DB 11110001B
DB 11111111B
DB 11100011B
DB 11101101B
DB 11101110B
DB 11101110B
DB 11101110B
DB 11101101B
DB 11100011B
DB 11111111B
DB 11100000B
DB 11101111B
DB 11101111B
DB 11100001B
DB 11101111B
DB 11101111B
DB 11100000B
DB 11111111B
DB 11100000B
DB 11101111B
DB 11101111B
DB 11100001B
DB 11101111B
DB 11101111B
DB 11101111B
DB 11111111B
END