
asdf
By: a guest on
May 16th, 2012 | syntax:
ASM (NASM) | size: 3.73 KB | hits: 16 | expires: Never
;.TITLE 'STOPER'
;============================
STOS EQU 60H ;warto† wska«nika stosu w RAMie
SEG_ON EQU P1.6 ;linia wygaszania wywietlacza
;Pami©† wywietlacza
DISPLAY EQU 30H
LEDS EQU DISPLAY+6
DOTS EQU LEDS+1
NEXT EQU DOTS+1
;Timer 0 przeglĄdanie wska«nik˘w
;uaktywniany co ok. 1ms - niľszy priorytet
;1ms =~30 * 32 cykli
;Mod 0 - starszy bajt liczy do 30
;Timer 1 odliczanie czasu 10 ms
;10ms = 36*256 cykli
;Mod 1 - przestawiam tylko starszy bajt
TMOD_SET EQU 00010000B
TH0_SET EQU 256-30
TH1_SET EQU 256-36
IE_SET EQU 10001010B ;przerwania T0 i T1
IP_SET EQU 00001000B ;wyľszy priorytet T1
TCON_SET EQU 00010000B ;start timer T0
;(setb TR1 - start Timer 1)
;BANK0 MACRO
;CLR RS0
;MACEND
;BANK1 MACRO
;SETB RS0
;MACEND
LJMP START
ORG 0BH
;przerwanie Timer 0
PUSH ACC
PUSH PSW
SETB RS0
MOV TH0,#TH0_SET
AJMP CONT_INTT0
ORG 1BH
;przerwanie Timer 1
PUSH ACC
PUSH PSW
MOV TH1,#TH1_SET
INC DISPLAY
MOV A,#10
CJNE A,DISPLAY,INTT1_END
MOV DISPLAY,#0
INC DISPLAY+1
MOV A,#10
CJNE A,DISPLAY+1,INTT1_END
MOV DISPLAY+1,#0
INC DISPLAY+2
MOV A,#10
CJNE A,DISPLAY+2,INTT1_END
MOV DISPLAY+2,#0
INC DISPLAY+3
MOV A,#6
CJNE A,DISPLAY+3,INTT1_END
MOV DISPLAY+3,#0
INC DISPLAY+4
MOV A,#10
CJNE A,DISPLAY+4,INTT1_END
MOV DISPLAY+4,#0
INC DISPLAY+5
MOV A,#6
CJNE A,DISPLAY+5,INTT1_END
MOV DISPLAY+5,#0
INTT1_END:
POP PSW
POP ACC
RETI
CONT_INTT0:
MOV R0,#CSDB ;R0 - adres bufora wyswietlaczy
SETB SEG_ON
MOV A,@R1
CJNE R1,#LEDS,D7SEG
;wywietlenie Led˘w
SJMP DISP_SET
D7SEG:
ACALL CODE7_GET
;dodanie kropki
PUSH ACC
CLR C
MOV A,R2
ANL A,DOTS
JZ DOT_NO
SETB C
DOT_NO:
POP ACC
MOV ACC.7,C
DISP_SET:
MOVX @R0,A
MOV A,R2 ;kolejny wska«nik
LCALL LCD_CLR
MOV DPTR,#TEXT1
LCALL WRITE_TEXT
;===========================
MOV R3, #0
WYSWIETL:
MOV A, R3
CLR C
ADD A,#30H
MOV R0, A
MOV A, @R0
INC R3
;==========
LCALL CODE7_GET
LCALL WRITE_DATA
CJNE R3, #36H, WYSWIETL
;===========================
MOV R0,#CSDS ;R0 - adres wyboru wska«nika
MOVX @R0,A
CLR SEG_ON
RL A
MOV R2,A
INC R1
CJNE R1,#DOTS,NEXT_SEG
;ustaw segment 0
MOV R2,#1
MOV R1,#DISPLAY ;wska«nik na pami©† wywietlacza
NEXT_SEG:
POP PSW
POP ACC
RETI
ORG 100H
START:
MOV SP,#STOS ;wskaznik stosu
ACALL STOPPER_CLEAR
MOV TMOD,#TMOD_SET
MOV TH0,#TH0_SET
MOV TH1,#TH1_SET
MOV TL1,#0
MOV IE,#IE_SET
MOV IP,#IP_SET
MOV TCON,#TCON_SET
SETB RS0
MOV R2,#1 ;wyb˘r wskaľnika - 0 (kod 1 z 7)
MOV R1,#DISPLAY ;wska«nik na pami©† wywietlacza
CLR RS0
LOOP: ;; main
LCALL LCD_CLR
MOV DPTR,#TEXT1
LCALL WRITE_TEXT
;===========================
MOV R3, #0
WYSWIETL1:
MOV A, R3
CLR C
ADD A,#30H
MOV R0, A
MOV A, @R0
INC R3
;==========
LCALL CODE7_GET
LCALL WRITE_DATA
CJNE R3, #36H, WYSWIETL1
;===========================
LCALL WAIT_ENTER_NW
;start timer
SETB TR1
MOV LEDS,#10H
LCALL LCD_CLR
MOV DPTR,#TEXT2
LCALL WRITE_TEXT
;JAK COŚ TUTAJ WKLEIĆ
LCALL WAIT_ENTER_NW
;stop timer
CLR TR1
MOV LEDS,#20H
AJMP LOOP
CODE7_GET:
INC A
MOVC A,@A+PC
RET
DB '0' ;0
DB '1' ;1
DB '2' ;2
DB '3' ;3
DB '4' ;4
DB '5' ;5
DB '6' ;6
DB '7' ;7
DB '8' ;8
DB '9' ;9
DB 'A' ;A
DB 'b' ;b
DB 'C' ;C
DB 'd' ;d
DB 'E' ;E
DB 'F' ;F
STOPPER_CLEAR:
CLR A
MOV DISPLAY,A
MOV DISPLAY+1,A
MOV DISPLAY+2,A
MOV DISPLAY+3,A
MOV DISPLAY+4,A
MOV DISPLAY+5,A
MOV LEDS,#20H
MOV DOTS,#00010100B
RET
TEXT1:
DB ' '
DB 'ENT-STAR ESC-CLR', 0
TEXT2:
DB ' '
DB 'ENTER -> STOP', 0