⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ade7759.lst

📁 实现对ADE7759电能芯片的读写和校准,AVR单片机源码与电路图,单相电能表读写程序和初始化程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
          .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 + -