Witam, czy mógłby mi ktoś sprawdzić poniższy kod? Czy składnia jest ok?
WDTCN DATA 0FFH ; WATCHDOG TIMER CONTROL
AMX0CF DATA 0BAH ; ADC 0 MUX CONFIGURATION
AMX0SL DATA 0BBH ; ADC 0 MUX CHANNEL SELECTION
ADC0CN DATA 0E8H ; ADC 0 CONTROL
ADC0H DATA 0BFH ; ADC 0 DATA - HIGH BYTE
REF0CN DATA 0D1H ; VOLTAGE REFERENCE 0 CONTROL
ADC0CF DATA 0BCH ; ADC 0 CONFIGURATION
IE DATA 0A8H
EA BIT IE.7
ADBUSY BIT ADC0CN.4
DELAY_TEMP EQU 00H ; Deklaracja stalej pomocniczej do funkcji opozn.
P4 DATA 84H ; Adres portu P4 (bo do P4 jest podlaczona dioda D2)
CSEG AT 0 ; Ustawienie offsetu dla kodu programu (lub ORG 0 )
LJMP MAIN ; Bezwarunkowy skok do etykiety MAIN
MAIN: ; Poczatek programu glownego
;-------- wylaczenie watchdoga ----------------------
CLR EA ; Wylaczenie wszystkich przerwan
MOV WDTCN,#0DEh
MOV WDTCN,#0ADh
SETB EA ; Wlaczenie zezwolenia na przerwania
;----------------------------------------------------
; Ustawienie rejestrow przetwornika ADC
MOV AMX0CF,#00H ; Ustawienie rejestru konfiguracyjnego
MOV AMX0SL,#00H ; Ustawienie rejestru wyboru portu AIN0
MOV ADC0CF,#00H ; Ustawienie rejestru wzmocnienia G=1
MOV ADC0CN,#10000001B ; Ustawienie rejestru kontrolnego przetwornika ADC
; bit 7 - Przetwornik aktywny i gotowy do przetwarzania
; bit 0 - Dane w rejestrze ADC0H sa wyrownane do lewej strony
MOV REF0CN,#00000010B ; Ustawienie rejestru napiecia referencyjnego bitu
WOJ:
ORL ADC0CN,#00010000B ; Ustawienie bitu AD0BUSY na 1 - przetwarzanie danych
XRL P4,#02H ; Negacja stanu linii nr 1 portu P4
MOV A,ADC0H ; Ustawienie wartosci parametru funkcji DELAY
LCALL DELAY ; Wywolanie funkcji opozniajacej
JB ADBUSY,$ ; Petla skoku przez siebie
JMP WOJ ; Skok bezwarunkowy do etykiety WOJ
; Funkcje pomocnicze
DELAY:
;----------------------------------------------------------------------------
; Procedura opozniajaca, wartosc opoznienia regulowana przez parametr
; zapisany w rejestrze A
;----------------------------------------------------------------------------
PUSH 0 ; zapis rejestru R0 (z banku 0) na stos
PUSH 1
MOV R0,A
LOOP_DELAY:
MOV R1,#DELAY_TEMP
DJNZ R1,$
MOV R1,#DELAY_TEMP
DJNZ R1,$
DJNZ R0,LOOP_DELAY
POP 1 ; odczyt ze stosu rejestru R1
POP 0
RET ; powrot z funkcji
END