📄 ade7759.lst
字号:
.equ ADE_RSTSTATUS_ADR =5
.equ ADE_MODE_ADR =6
.equ ADE_CH1OS_ADR =8
.equ ADE_CH2OS_ADR =9
.equ ADE_GAIN_ADR =0x0A
.equ ADE_APGAIN_ADR =0x0B
.equ ADE_PHCAL_ADR =0x0C
.equ ADE_APOS_ADR =0x0D
.equ ADE_ZXTOUT_ADR =0x0E
.equ ADE_SAGCYC_ADR =0x0F
.equ ADE_IRQEN_ADR =0x10
.equ ADE_SAGLVL_ADR =0x11
.equ ADE_TEMP_ADR =0x12
.equ ADE_CHKSUM_ADR =0x1E
.equ ADE_DIEREV_ADR =0x1F
;.equ ADE_READ =0
;.equ ADE_WRITE =0b10000000
.equ I_WSMP =3
.equ I_SAG =1
.equ M_DISSAG =3
.equ M_DTRT0 =3
.equ M_DTRT1 =4
;--------------------------------------
;-------- TWI, DS1307 -----------------
.equ TWI_WRITE =0
.equ TWI_READ =1
.equ TWI_BR =70 ; bit rate: 32 dla 100kHz, 72 dla 50kHz
; 98 i (TWI_SR=1) dla 10kHz
.equ TWI_SR =0 ; preskaler: 1 -> /4
.equ TWIS_START =0x08 ; kody statusu (dla poprawnej transmisji)
.equ TWIS_MT_SLA_ACK =0x18
.equ TWIS_MT_DATA_ACK =0x28
.equ TWIS_MR_SLA_ACK =0x40
.equ TWIS_MR_DATA_ACK =0x50
.equ TWIS_MR_DATA_NOACK =0x58
.equ DS1307_ADRES =0b11010000
;--------------------------------------
;-------- KLAWISZE --------------------
.equ KLAW_PORT =PORTC ; port do ktorego podpiete sa klawisze
.equ KLAW_PIN =KLAW_PORT-2 ; wejscie klawiszy
.equ KLAW_MASKA =0b11111100 ; maska portu do wyluskania klawiszy
.equ KLAW_TAK =2 ; klawisz TAK
.equ KLAW_NIE =3 ; klawisz NIE
.equ KLAW_L =4 ; klawisz LEWO
.equ KLAW_P =5 ; klawisz PRAWO
.equ KLAW_D =6 ; klawisz DOL
.equ KLAW_G =7 ; klawisz GORA
;--------------------------------------
;------------------------------------------------------------------------------
; kolejnosc zmiennych jest BARDZO WAZNA!
;======== Z M I E N N E =======================================================
.dseg
.org RAM
;----------------------------------------------------------
; zmienne odczytywane z EEPROMu
;----------------------------------------------------------
000068 Ade_ch1os: .byte 1
000069 Ade_ch2os: .byte 1
00006a Ade_gain: .byte 1
00006b Ade_apgain: .byte 2
00006d Ade_phcal: .byte 1
00006e Ade_apos: .byte 2
000070 Ade_zxtout: .byte 2
000072 Ade_sagcyc: .byte 1
000073 Ade_saglvl: .byte 1
000074 Ade_irqen: .byte 1
000075 Ade_mode: .byte 2
000077 Okresy_ile: .byte 1 ; ilosc okresow w ciagu ktorych maja byc zbierane probki
000078 Hist_zera_ile: .byte 1 ; wartosc oczekiwana Hist_zera wymagana do stwierdzenia przejscia U przez zero
000079 Hist_przepel_I_ile: .byte 1 ; - || - przepelnienia probki pradu
00007a Hist_przepel_U_ile: .byte 1 ; - || - analogicznie
;====== definicja: ====================
; Hist_zera_ile =7 | 0x80 ; ilosc KOLEJNYCH probek dodatnich do rozpoznania przejscia przez 0
; ; wartosc 0x80 to bit testowania przejscia przez zero
; Hist_przepel_I_ile =10 ; ilosc KOLEJNYCH przepelnionych probek ktore nie ustawia
; Hist_przepel_U_ile =10 ; flagi przepelnienia
;======================================
00007b Wsp_I: .byte 2 ; wspolczynnik korekcji pradu do rozdzielczosci [mA] (20000)
00007d Wsp_U: .byte 2 ; wspolczynnik korekcji napiecia do rozdzielczosci [0,1V] (3960)
00007f Wsp_P: .byte 2 ; wspolczynnik korekcji mocy do rozdzielczosci [0,1W] (36000) -nie zmieniac!
000081 Wsp_E: .byte 3 ; wspolczynnik korekcji probki energii do rozdz. [Wh] (675770)
000084 Wsp_F: .byte 2 ; wsp. korekcji (offset) mierzonej czestotliwosci napiecia (0)
000086 Off_I_dc: .byte 2 ; ... 14-bit kod U2 +-0x2FFF
000088 Off_Ir_z: .byte 1
000089 Off_Im_z: .byte 1
00008a Off_Ia_z: .byte 1
00008b Off_U_dc: .byte 2 ; offset symetrii probek, 11-bit kod U2 (-767 +767)
00008d Off_Ur_z: .byte 1 ; offset zera wyniku RMS (0-255)
00008e Off_Um_z: .byte 1 ; offset zera wyniku MAV
00008f Off_Ua_z: .byte 1 ; offset zera wyniku amplitudy
000090 Flagi2: .byte 1 ; dodatkowy bajt znacznikow
000091 T21_dzien_st: .byte 1 ; zmienne czasowe w formacie BCD dla taryfy 2
000092 T21_dzien_sp: .byte 1
000093 T21_godz_st: .byte 1
000094 T21_godz_sp: .byte 1
000095 T21_min_st: .byte 1
000096 T21_min_sp: .byte 1
000097 T22_dzien_st: .byte 1
000098 T22_dzien_sp: .byte 1
000099 T22_godz_st: .byte 1 ; w przypadku zmiany kolejnosci, przerobic proc. ZAPISZ_
00009a T22_godz_sp: .byte 1
00009b T22_min_st: .byte 1
00009c T22_min_sp: .byte 1
00009d T23_dzien_st: .byte 1
00009e T23_dzien_sp: .byte 1
00009f T23_godz_st: .byte 1
0000a0 T23_godz_sp: .byte 1
0000a1 T23_min_st: .byte 1
0000a2 T23_min_sp: .byte 1
0000a3 T24_dzien_st: .byte 1
0000a4 T24_dzien_sp: .byte 1
0000a5 T24_godz_st: .byte 1
0000a6 T24_godz_sp: .byte 1
0000a7 T24_min_st: .byte 1
0000a8 T24_min_sp: .byte 1
0000a9 Od_rok_st: .byte 1 ; dane czasowe dla Energii_od
0000aa Od_mies_st: .byte 1
0000ab Od_dzien_st: .byte 1
0000ac Od_godz_st: .byte 1
0000ad Od_min_st: .byte 1
0000ae Oddo_rok_st: .byte 1 ; dane czasowe dla Energii_oddo
0000af Oddo_rok_sp: .byte 1
0000b0 Oddo_mies_st: .byte 1
0000b1 Oddo_mies_sp: .byte 1
0000b2 Oddo_dzien_st: .byte 1
0000b3 Oddo_dzien_sp: .byte 1
0000b4 Oddo_godz_st: .byte 1
0000b5 Oddo_godz_sp: .byte 1
0000b6 Oddo_min_st: .byte 1
0000b7 Oddo_min_sp: .byte 1
;----------------------------------------------------------
; ------- zmienne ustawiane po resecie --------------------
;----------------------------------------------------------
; !!! Ds_adr -pierwsza zmienna ulotna !!!
0000b8 Ds_adr: .byte 1 ; adres ds1307 (zmienna pomocna przy transm. TWI)
0000b9 Sekundy_bcd: .byte 1 ; aktualny czas
0000ba Minuty_bcd: .byte 1
0000bb Godziny_bcd: .byte 1 ; kolejnosc zmiennych MUSI byc zachowana
0000bc Dzien_tyg: .byte 1
0000bd Dzien_bcd: .byte 1
0000be Miesiac_bcd: .byte 1
0000bf Rok_bcd: .byte 1
0000c0 Sekundy_bin: .byte 1 ; binarna wartosc sekund
; ---- test! ---\/-------
;Prb: .byte 2 ; test! ilosc probek
;Prb_z: .byte 1 ;
;Okr: .byte 1 ;
; ---- test! ---/\-------
0000c1 Wsp_LPF1: .byte 2 ; wspolczynnik korekcji nap. w zaleznosci od czestotliwosci (34410) -automatyka!
0000c3 Prb_na_okr_x2: .byte 2 ; ilosc probek na okres x2 (1/50Hz) zalezna od DTRT
0000c5 Probek_ile: .byte 2 ; maks. ilosc probek do odebrania = DTRT * (Okresy_ile+1)
; ...DTRT to bity rejestru MODE (predkosc przesylu probek)
0000c7 Prb_0xff: .byte 2 ; liczenie ilosci probek gdy okresow=0xFF (przebieg napiecia nieokresowy)
0000c9 Hist_zera: .byte 1 ; b7 -ustawiony znaczy trwa testowanie histerezy przejscia U przez zero
; b5-b0 -wartosc histerezy (licznik)
0000ca Hist_przepel_I: .byte 1 ; licznik histerezy przepelnienia probki pradu
0000cb Hist_przepel_U: .byte 1 ; - || - napiecia
; --/\ /\ /\ ----- te zmienne musza sie miescic w adresie 0x00FF -- /\ /\ /\ ----
0000cc Ak_mavI: .byte 4 ; akumulator wartosci sredniej
0000d0 Ak_mavU: .byte 4
0000d4 Prad_min: .byte 2 ; amplituda min
0000d6 Prad_max: .byte 2 ; ...i max (probka)
0000d8 Napiecie_min: .byte 2
0000da Napiecie_max: .byte 2 ; j.w.
0000dc Bufor: .byte 16 ; 16-bajtowy bufor
0000ec Klawisze: .byte 1 ; stan klawiatury
0000ed Klaw_dlugo: .byte 1 ; czas trzymania klawisza
0000ee Klaw_pusz: .byte 2 ; czas puszczenia klawisza
0000f0 Prad_rms: .byte 2 ; przechowuje wartosc pradu - nie trzeba zerowac
0000f2 Prad_mav: .byte 2
0000f4 Napiecie_rms: .byte 2 ; - || - napiecia
0000f6 Napiecie_mav: .byte 2
0000f8 Prad_am: .byte 2
0000fa Prad_ap: .byte 2
0000fc Napiecie_am: .byte 2
0000fe Napiecie_ap: .byte 2
000100 Moc_P: .byte 2 ; - || - mocy czynnej
000102 Moc_S: .byte 2 ; - || - mocy pozornej
000104 Moc_Q: .byte 2 ; - || - mocy biernej
000106 Pf_mocy: .byte 1 ; wspolczynnik mocy
000107 Wypeln: .byte 1 ; wypelnienie okresu napiecia
000108 Czestosc: .byte 2 ; czestotliwosc napiecia
00010a Energia_sek: .byte 4 ; energia sekundowa (probka po korekcji Wsp_E)
00010e Status: .byte 1 ; zmienna zawierajaca bit wyboru pomiaru do wyswietlenia
00010f Status_I: .byte 1 ; ...
000110 Status_U: .byte 1
000111 Status_M: .byte 1
000112 Status_E1: .byte 1
000113 Status_E2: .byte 1 ; ... szczegoly wyzej
000114 Energia1: .byte 7 ; akumulator energii calkowitej (niekasowalnej) -wartosc ze znakiem
00011b Energia2: .byte 7 ; j.w. taryfa 2
000122 Energia1_od: .byte 7 ; - || - od czasu...
000129 Energia2_od: .byte 7 ; j.w. taryfa 2
000130 Energia1_oddo: .byte 7 ; - || - od czasu do czasu
000137 Energia2_oddo: .byte 7 ; j.w. taryfa 2
00013e Energia1_poz: .byte 7 ; energia pozorna
000145 Energia2_poz: .byte 7 ;
00014c Energia1_ses: .byte 7 ; akumulator energii sesji (zerowac po resecie)
000153 Energia2_ses: .byte 7 ; j.w. taryfa 2
00015a Flagi3: .byte 1 ; trzeci bajt flag
00015b Flagi4: .byte 1
00015c Off_x1: .byte 2 ; zmienna tymczasowa do wyliczenia offsetu
00015e Off_x2: .byte 2 ; zmienna tymczasowa do wyliczenia offsetu
000160 Cykli: .byte 1
.exit
.def temp =r16
.def flagi =r17
.equ fKAL =0 ; =1 -> procedura kalibracji
.equ fINT2 =1 ; informacja o stanie przerwania INT2; =1 -> zezwolenie na zbieranie probek
.equ fOVER_I =2 ; =1 -> przepelnienie probki pradu
.equ fOVER_U =3 ; =1 -> przepelnienie probki napiecia
.equ fKLAW_WCIS =4 ; =1 -> klawisz wcisniety
.equ fTARYFY =5 ; =1 -> licznik dwutaryfowy
.equ fTARYFA2 =6 ; biezaca taryfa (zalezne od pory dnia), =0 -> taryfa 1
.equ fMENU =7 ; =1 -> trwa obsluga MENU
;==============================================================================
;======== S T A R T P R O G R A M U =========================================
;==============================================================================
.cseg
.org 0
000000 940c 0c47 jmp RESET ; reset
000002 940c 002a jmp INT0_INT ; int0
000004 940c 0c47 jmp RESET ; int1
000006 940c 0c47 jmp RESET ; timer2_comp
000008 940c 0c47 jmp RESET ; timer2_ovf
00000a 940c 0c47 jmp RESET ; timer1_capt
00000c 940c 0c47 jmp RESET ; timer1_compa
00000e 940c 0c47 jmp RESET ; timer1_compb
000010 940c 0c47 jmp RESET ; timer1_ovf
000012 940c 0a21 jmp TIMER0_INT ; timer0_ovf
000014 940c 0c47 jmp RESET ; spi_stc
000016 940c 0c47 jmp RESET ; usart_rxc
000018 940c 0c47 jmp RESET ; usart_udre
00001a 940c 0c47 jmp RESET ; usart_txc
00001c 940c 0c47 jmp RESET ; adc
00001e 940c 0c47 jmp RESET ; ee_rdy
000020 940c 0c47 jmp RESET ; ana_comp
000022 940c 0c47 jmp RESET ; twi
000024 940c 0177 jmp INT2_INT ; int2 przerwanie z ADE7759
000026 940c 0c47 jmp RESET ; timer0_comp
000028 940c 0c47 jmp RESET ; spm_rdy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -