logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.
  • #1 6518148
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38916
    Pomógł: 3177
    Ocena: 6565
    Nie ma czegoś takiego jak mikrokontroler DSM-51, albo jest mikrokontroler 8051 (lub jego klony), albo jest Dydaktyczny System Mikroprocesorowy DSM-51...

    To jak - ma to być kompletny projekt urządzenia na mikrokontrolerze '51 czy też projekt zaliczeniowy na laboratoria z architektury komputerów? Jaka dokładność pomiaru Cię interesuje, jak ma być rozwiązane sterownie (fotokomórka?), na czym mają być wyświetlane wyniki ("tablica świetlna", wyświetlacz LED 7seg)?
  • #2 6518362
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38916
    Pomógł: 3177
    Ocena: 6565
    Tu masz kod stopera z jednym międzyczasem, dodanie kolejnych to nie problem, ale nie chce mi się tego pisać. Program bazuje na przykładowym kodzie załączonym na płycie CD/dyskietce do zestawu DSM-51:
    STOS	EQU	60H
    SEG_ON	EQU	P1.6
    DISPLAY	EQU	30H
    LEDS	EQU	DISPLAY+6
    DOTS	EQU	LEDS+1
    NEXT	EQU	DOTS+1
    BUFFER	EQU	NEXT+1
    ;Timer 0 przeglądanie wskaźników co ok. 1ms - niższy priorytet
    ;Timer 1 odliczanie czasu 10 ms
    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)
    	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
    ;wyświetlenie 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
    	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ęć wyświetlacza
    NEXT_SEG:
    	POP	PSW
    	POP	ACC
    	RETI
    ;/////
    	ORG	100H
    START:
    	MOV	SP,#STOS	;wskaźnik 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ęć wyświetlacza
    	CLR	RS0
    LOOP:
    	LCALL	WAIT_ENTER_NW
    ;start timer
    	SETB	TR1
    	MOV	LEDS,#10H
    	LCALL	WAIT_ENTER_NW
    ;store meantime
    	MOV	A, DISPLAY
    	MOV	BUFFER, A
    	MOV	A, DISPLAY+1
    	MOV	BUFFER+1,A
    	MOV	A, DISPLAY+2
    	MOV	BUFFER+2, A
    	MOV	A, DISPLAY+3
    	MOV	BUFFER+3, A
    	MOV	A, DISPLAY+4
    	MOV	BUFFER+4,A
    	MOV	A, DISPLAY+5
    	MOV	BUFFER+5,A
    	MOV	LEDS, #11H
    	LCALL	WAIT_ENTER_NW
    ;stop timer
    	CLR	TR1
    	MOV	LEDS,#21H
    	LCALL	WAIT_ENTER_NW
    ;display stored meantime
    	MOV	LEDS, #01H
    	MOV	A,BUFFER
    	MOV	DISPLAY,A
    	MOV	A,BUFFER+1
    	MOV	DISPLAY+1,A
    	MOV	A,BUFFER+2
    	MOV	DISPLAY+2,A
    	MOV	A,BUFFER+3
    	MOV	DISPLAY+3,A
    	MOV	A,BUFFER+4
    	MOV	DISPLAY+4,A
    	MOV	A,BUFFER+5
    	MOV	DISPLAY+5,A
    	LCALL	WAIT_ENTER_NW
    ;restart timer
    	ACALL	STOPPER_CLEAR
    	AJMP	LOOP	
    CODE7_GET:
    	INC	A
    	MOVC	A,@A+PC
    	RET
    	DB	03FH	;0
    	DB	006H	;1
    	DB	05BH	;2
    	DB	04FH	;3
    	DB	066H	;4
    	DB	06DH	;5
    	DB	07DH	;6
    	DB	007H	;7
    	DB	07FH	;8
    	DB	06FH	;9
    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


    Obsługuje się go tylko jednym klawiszem - ENTER, w razie konieczności można zrestartować przyciskiem RESET RAM.
    Enter (START) -> ENTER (zapamiętanie międzyczasu) -> ENTER (Stop) -> Enter (wyświetlanie zapamiętanego międzyczasu) -> Enter (Zerowanie) -> Enter (Start) -> ...

    Modyfikacja dla większej ilości międzyczasów sprowadzi się tylko do powielenia odpowiednich fragmentów głównej pętli programu (LOOP) i dodania kolejnych buforów.
REKLAMA