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

📄 ade7759.asm

📁 实现对ADE7759电能芯片的读写和校准,AVR单片机源码与电路图,单相电能表读写程序和初始化程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
menu_start:		; szczegoly w menu.asm
; "Data i czas"
.dw 0x8101, 2*txt_m4, M_CZAS, 0
.dw   0x0102, 2*txt_1, M_DACZ, 2*da_cz1
; "Podglad zmiennych"
;.db 1,0x84, low(2*txt_m3),high(2*txt_m3), low(M_ZR_W),high(M_ZR_W), 0,0
;.db     2,1, low(2*txt_m3e),high(2*txt_m3e), 0,0, low(Prb_z),1
;.db     2,3, low(2*txt_m3f),high(2*txt_m3f), 0,0, low(Okr),1
;.db     2,4, low(2*txt_m3d),high(2*txt_m3d), 0,0, low(Prb),2
;.db     2,7, low(2*txt_m31),high(2*txt_m31), 0,0, low(Okresy_ile),1	; p0 -adres; p1 -ilosc bajtow
;.db     2,8, low(2*txt_m39),high(2*txt_m39), 0,0, low(Probek_ile),2
;.db     2,4, low(2*txt_m38),high(2*txt_m38), 0,0, low(Wsp_LPF1),2
; "zakres czasu dla energii"
.dw 0x8201, 2*txt_m1a, 0, 0
.dw   0x8102, 2*txt_en_od, M_EN_O_W, 0
.dw     0x0103, 2*txt_1, M_EN_O, 2*da_en_o
.dw   0x8202, 2*txt_en_oddo, M_EN_OO_W, 0
.dw     0x0103, 2*txt_1, M_EN_OO, 2*da_en_oo
; "Taryfa2 -zakres godzin"
.dw 0x8301, 2*txt_m8, M_TAR2, 0
.dw   0x0102, 2*txt_1, M_TAR2ED, 2*da_t21
.dw   0x0202, 2*txt_2, M_TAR2ED, 2*da_t22
.dw   0x0302, 2*txt_3, M_TAR2ED, 2*da_t23
.dw   0x0402, 2*txt_4, M_TAR2ED, 2*da_t24
; "Opcje"
.dw 0x8401, 2*txt_opc, M_OPC_W, 0
.dw   0x0102, 2*txt_o1, M_OPC, 2*da_kwh
.dw   0x0202, 2*txt_o0, M_OPC, 2*da_taryf
.dw   0x0302, 2*txt_o2, M_OPC, 2*da_s
.dw   0x0402, 2*txt_o3, M_OPC, 2*da_akum
; koniec menu
.dw 0

menu_kalibr:
; "Zapisz konfig. w EEPROM"
.dw 0x0101, 2*txt_m5, M_ZEE, 0
; "Podglad zmiennych"
;.db 1,0x84, low(2*txt_m3),high(2*txt_m3), low(M_ZR_W),high(M_ZR_W), 0,0
;.db     2,1, low(2*txt_m3e),high(2*txt_m3e), 0,0, low(Prb_z),1
;.db     2,3, low(2*txt_m3f),high(2*txt_m3f), 0,0, low(Okr),1
;.db     2,4, low(2*txt_m3d),high(2*txt_m3d), 0,0, low(Prb),2
;.db     2,7, low(2*txt_m31),high(2*txt_m31), 0,0, low(Okresy_ile),1	; p0 -adres; p1 -ilosc bajtow
;.db     2,8, low(2*txt_m39),high(2*txt_m39), 0,0, low(Probek_ile),2
;.db     2,4, low(2*txt_m38),high(2*txt_m38), 0,0, low(Wsp_LPF1),2
; "Zerowanie wskazan"
.dw 0x8201, 2*txt_mk1, 0, 0
.dw   0x0102, 2*txt_mk12, M_K_U, 0
.dw   0x0202, 2*txt_mk11, M_K_I, 0
.dw   0x0302, 2*txt_mk13, M_K_E, 0
; "Kalibracja wskazan"
.dw 0x8301, 2*txt_mk2, M_AZR_W, 0
.dw   0x0102, 2*txt_mk12, M_AZR, 2*da_wspu
.dw   0x0202, 2*txt_mk11, M_AZR, 2*da_wspi
.dw   0x0302, 2*txt_mk21, M_AZR, 2*da_wspe0
.dw   0x0402, 2*txt_mk22, M_AZR, 2*da_wspe1
; "Zmiana offsetow i wsp."
.dw 0x8401, 2*txt_mzz, 0, 0
.dw   0x8102, 2*txt_mz1u, M_AZR_W, 0
.dw     0x0103, 2*txt_m35od, M_AZR, 2*da_ofud
.dw     0x0203, 2*txt_m35orz, M_AZR, 2*da_ofurz
.dw     0x0303, 2*txt_m35omz, M_AZR, 2*da_ofumz
.dw     0x0403, 2*txt_m35oaz, M_AZR, 2*da_ofuaz
.dw   0x8202, 2*txt_mz1i, M_AZR_W, 0
.dw     0x0103, 2*txt_m35od, M_AZR, 2*da_ofid
.dw     0x0203, 2*txt_m35orz, M_AZR, 2*da_ofirz
.dw     0x0303, 2*txt_m35omz, M_AZR, 2*da_ofimz
.dw     0x0403, 2*txt_m35oaz, M_AZR, 2*da_ofiaz
.dw   0x8302, 2*txt_mz2, M_AZR_W, 0
.dw     0x0103, 2*txt_m3h, M_AZR, 2*da_wspf
.dw     0x0203, 2*txt_m31, M_AZR, 2*da_okr
.dw     0x0303, 2*txt_m3a, M_AZR, 2*da_hzer
.dw     0x0403, 2*txt_m3b, M_AZR, 2*da_hpi
.dw     0x0503, 2*txt_m3c, M_AZR, 2*da_hpu
; "Obsluga ADE7759"
.dw 0x8501, 2*txt_m1, 0, 0
.dw   0x8102, 2*txt_m11, M_ARM_W, 0
.dw     0x0103, 2*txt_m111, M_ARM, 0x0001	; p1:p0 -maska
.dw     0x0203, 2*txt_m112, M_ARM, 0x0002
.dw     0x0403, 2*txt_m114, M_ARM, 0x0008
.dw     0x0503, 2*txt_m115, M_ARM, 0x0010
.dw     0x0603, 2*txt_m116, M_ARM, 0x0020
.dw     0x0903, 2*txt_m119, M_ARM, 0x0100
.dw     0x0A03, 2*txt_m11a, M_ARM, 0x0200
.dw     0x0B03, 2*txt_m11b, M_ARM, 0x0400
.dw     0x0C03, 2*txt_m11c, M_ARM, 0x0800
.dw     0x0D03, 2*txt_m11d, M_ARM, 0x1000
.dw     0x0E03, 2*txt_m11e, M_ARM, 0x2000
.dw     0x0F03, 2*txt_m11f, M_ARM, 0x4000
.dw   0x8202, 2*txt_m13, M_AOR_W, 0
.dw     0x0103, 2*txt_m131, 0, 0x0206		; p0 -adres; p1 -ilosc bajtow
.dw     0x0203, 2*txt_m132, 0, 0x0104
.dw     0x0303, 2*txt_m13b, 0, 0x0110
.dw     0x0403, 2*txt_m133, 0, 0x0108
.dw     0x0503, 2*txt_m134, 0, 0x0109
.dw     0x0603, 2*txt_m135, 0, 0x010A
.dw     0x0703, 2*txt_m136, 0, 0x020B
.dw     0x0803, 2*txt_m137, 0, 0x010C
.dw     0x0903, 2*txt_m138, 0, 0x020D
.dw     0x0A03, 2*txt_m139, 0, 0x020E
.dw     0x0B03, 2*txt_m13a, 0, 0x010F
.dw     0x0C03, 2*txt_m13c, 0, 0x0111
.dw     0x0D03, 2*txt_m13e, 0, 0x0112
.dw     0x0E03, 2*txt_m13d, 0, 0x011F
.dw   0x8302, 2*txt_m14, M_AZR_W, 0
.dw     0x0103, 2*txt_m133, M_AZR, 2*da_ch1os
.dw     0x0203, 2*txt_m134, M_AZR, 2*da_ch2os
.dw     0x0303, 2*txt_m135, M_AZR, 2*da_gain
.dw     0x0403, 2*txt_m137, M_AZR, 2*da_phcal
.dw     0x0503, 2*txt_m138, M_AZR, 2*da_apos
.dw     0x0603, 2*txt_m139, M_AZR, 2*da_zxtout
.dw     0x0703, 2*txt_m13a, M_AZR, 2*da_sagcyc
.dw     0x0803, 2*txt_m13c, M_AZR, 2*da_saglvl
; "Zerowanie energii"
.dw 0x8601, 2*txt_m9, 0, 0
.dw   0x0102, 2*txt_en_poz, M_CZEN, Energia1_poz
.dw   0x0202, 2*txt_en_sum, M_CZEN, Energia1
; "Zapisz energie w EEPROM"
.dw 0x0701, 2*txt_m10z, M_ZEN, 0
; "Czytaj energie z EEPROM"
.dw 0x0801, 2*txt_m10c, M_CEN, 0
; "Inicjalizacja EEPROM"
.dw 0x0901, 2*txt_m6, M_IE, 0
; koniec menu_kalibr
.dw 0



;--------------------------------------
txt_m1:	.db	"Obs",11,"uga ADE7759", 0
txt_m11:	.db	"Rejestr MODE", 0
txt_m111:	.db	"DISHPF", 0
txt_m112:	.db	"DISLPF2", 0
txt_m114:	.db	"DISSAG", 0
txt_m115:	.db	"ASUSPEND", 0
txt_m116:	.db	"TEMPSEL", 0
txt_m119:	.db	"DISCH1", 0
txt_m11a:	.db	"DISCH2", 0
txt_m11b:	.db	"SWAP", 0
txt_m11c:	.db	"DTRT0", 0
txt_m11d:	.db	"DTRT1", 0
txt_m11e:	.db	"WAVSEL0", 0
txt_m11f:	.db	"WAVSEL1", 0
txt_m13:	.db	"Odczyt rejestr",13,"w", 2,"z ADE7759", 0
txt_m131:	.db	"MODE", 0
txt_m132:	.db	"STATUS", 0
txt_m133:	.db	"CH1OS", 0
txt_m134:	.db	"CH2OS", 0
txt_m135:	.db	"GAIN", 0
txt_m136:	.db	"APGAIN", 0
txt_m137:	.db	"PHCAL", 0
txt_m138:	.db	"APOS", 0
txt_m139:	.db	"ZXTOUT", 0
txt_m13a:	.db	"SAGCYC", 0
txt_m13b:	.db	"IRQEN", 0
txt_m13c:	.db	"SAGLVL", 0
txt_m13d:	.db	"DIEREV", 0
txt_m13e:	.db	"TEMP", 0
txt_m14:	.db	"Zmiana rejestr",13,"w", 0

;tylko dla testow: podglad zmiennych
;txt_m3:	.db	"Podgl",8,"d", 2,"zmiennych", 0
;txt_m3e:	.db	"prb_znak", 0
;txt_m3f:	.db	"okres",13,"w w INT2", 0
;txt_m3d:	.db	"pr",13,"bek w INT2", 0
;txt_m39:	.db	"Pr",13,"bek_ile", 0
;txt_m38:	.db	"Wsp_LPF1", 0

txt_m35od:	.db	"Offset DC", 0
txt_m35orz:	.db	"Offset rms", 0
txt_m35omz:	.db	"Offset ",14,"red", 0
txt_m35oaz:	.db	"Offset ampl", 0
txt_m3h:	.db	"Offset F", 0
txt_m31:	.db	"Ilo",14,9," okres",13,"w", 0
txt_m3a:	.db	"Histereza zera", 0
txt_m3b:	.db	"Hist. przepe",11," I", 0
txt_m3c:	.db	"Hist. przepe",11," U", 0

txt_m4:	.db	"Data i czas", 2, "OK->zmiana", 0
txt_d0:	.db	"nieaktywny", 0
txt_pn:	.db	"Pon", 0
txt_wt:	.db	"Wt ", 0
txt_sr:	.db	"Sr ", 0
txt_cz:	.db	"Czw", 0
txt_pt:	.db	"Pt ", 0
txt_sb:	.db	"Sob", 0
txt_nd:	.db	"Nd ", 0

txt_m5:	.db	"Zapisz", 2,"konfiguracj", 10, 0
txt_m6:	.db	"Domy",14,"lna", 2,"konfiguracja", 0

txt_m8:	.db	"Zakres godzin", 2,"taryfy 2", 0
txt_mzz:	.db	"Zmiana offset",13,"w", 2,"i wsp",13,11,"cz.", 0
txt_mz1i:	.db	"Offsety pr",8,"du", 0
txt_mz1u:	.db	"Offsety napi",10,"cia", 0
txt_mz2:	.db	"Inne parametry", 0

txt_m9:	.db	"Zerowanie liczn.", 2,"energii", 0
txt_m10z:	.db	"Zapisz stan", 2,"licznik",13,"w energi", 0
txt_m10c:	.db	"Przywr",13,"c stan", 2,"licznik",13,"w energi", 0
txt_m1a:	.db	"Zakres zliczania", 2,"energii", 0

txt_mk1:	.db	"Zerowanie", 2,"wskaza",12, 0
txt_mk11:	.db	"pr",8,"du", 0
txt_mk12:	.db	"napi",10,"cia", 0
txt_mk13:	.db	"mocy P", 0
txt_mk2:	.db	"Kalibracja", 2,"wskaza",12, 0
txt_mk21:	.db	"mocy P  (LSB)", 0
txt_mk22:	.db	"mocy P  (MSB)", 0

txt_opc:	.db	"Ustawienia", 0
txt_o0:	.db	"Licznik energii", 0
txt_o00:	.db	"jednotaryfowy", 0
txt_o01:	.db	"dwutaryfowy", 0
txt_o1:	.db	"Pokazuj energi",10, 0
txt_o10:	.db	"kWh", 0
txt_o11:	.db	"Wh", 0
txt_o2:	.db	"Energia pozorna", 0
txt_o20:	.db	"nieliczona", 0
txt_o21:	.db	"liczona", 0
txt_o3:	.db	"Akumuluj energi",10, 0
txt_o30:	.db	"tylko dodatni",8, 0
txt_o31:	.db	"r",13,"wnie",15," ujemn",8, 0

;--------------------------------------
txt_us:	.db	2,"Ustawiony ", 0
txt_ze:	.db	2,"Wyzerowany", 0
txt_zro:	.db	2,"Zrobione        ", 0
txt_pust:	.db	"                ", 0
txt_jp:	.db	2,"czy na pewno?", 0
txt_zdn:	.db	2, "Za du",15,"e napi",10,"cie", 0
txt_1:	.db	"1)", 0
txt_2:	.db	"2)", 0
txt_3:	.db	"3)", 0
txt_4:	.db	"4)", 0

;-------- dane dla "Zmiana rejestrow" -----------------------------------------
; kolejno:	adres zmiennej (2B), wartosc min (2B), wartosc max (2B), adres rejestru ADE,ile bajtow
;	bit7 w "ile_bajtow" informuje o liczbie w kodzie U2
da_ch1os:	.dw	Ade_ch1os, 0, 0x3F, 0x108
da_ch2os:	.dw	Ade_ch2os, 0, 0x3F, 0x109
da_gain:	.dw	Ade_gain, 0, 0xFF, 0x10A
da_phcal:	.dw	Ade_phcal, 0xFF9E, 0x5C, 0x810C
da_apos:	.dw	Ade_apos, 0x8000, 0x7FFF, 0x820D
da_zxtout:	.dw	Ade_zxtout, 0, 0xFFF, 0x20E
da_sagcyc:	.dw	Ade_sagcyc, 0, 0xFF, 0x10F
da_saglvl:	.dw	Ade_saglvl, 0, 0xFF, 0x111

;-------- dane dla "Zmiana zmiennych" -----------------------------------------
da_wspi:	.dw	Wsp_I, 1, 0xFFFF, 0x200
da_wspu:	.dw	Wsp_U, 1, 0xFFFF, 0x200
da_ofid:	.dw	Off_I_dc, 0xFD01, 0x2FF, 0x8200
da_ofud:	.dw	Off_U_dc, 0xFD01, 0x2FF, 0x8200
da_ofirz:	.dw	Off_Ir_z, 0, 0xFF, 0x100
da_ofurz:	.dw	Off_Ur_z, 0, 0xFF, 0x100
da_ofimz:	.dw	Off_Im_z, 0, 0xFF, 0x100
da_ofumz:	.dw	Off_Um_z, 0, 0xFF, 0x100
da_ofiaz:	.dw	Off_Ia_z, 0, 0xFF, 0x100
da_ofuaz:	.dw	Off_Ua_z, 0, 0xFF, 0x100
da_wspf:	.dw	Wsp_F, 0xFE01, 0x1FF, 0x8200
da_wspe0:	.dw	Wsp_E, 1, 0xFFFF, 0x200
da_wspe1:	.dw	Wsp_E+2, 0, 0xFF, 0x100
da_okr:	.dw	Okresy_ile, 1, 40, 0x100
da_hzer:	.dw	Hist_zera_ile, 1, 0x3F, 0x100
da_hpi:	.dw	Hist_przepel_I_ile, 0, 0x3F, 0x100
da_hpu:	.dw	Hist_przepel_U_ile, 0, 0x3F, 0x100

;-------- dane dla "Rozne ustawienia" -----------------------------------------
da_taryf:	.db	Flagi2, 1, low(2*txt_o00), high(2*txt_o00), low(2*txt_o01), high(2*txt_o01)
da_kwh:	.db	Flagi2, 2, low(2*txt_o10), high(2*txt_o10), low(2*txt_o11), high(2*txt_o11)
da_s:	.db	Flagi2, 4, low(2*txt_o20), high(2*txt_o20), low(2*txt_o21), high(2*txt_o21)
da_akum:	.db	Flagi2, 8, low(2*txt_o30), high(2*txt_o30), low(2*txt_o31), high(2*txt_o31)

;-------- dane dla "Daty i czasu" ---------------------------------------------
da_dni:	.dw	2*txt_d0, 2*txt_pn, 2*txt_wt, 2*txt_sr, 2*txt_cz, 2*txt_pt, 2*txt_sb, 2*txt_nd
;		low(zmienna), min, max, (znak_na_lcd OR koniec)  ->koniec=bit7
da_cz1:	.db	Rok_bcd, 0, 99, 3
	.db	Miesiac_bcd, 1, 12, 6
	.db	Dzien_bcd, 1, 31, 9
	.db	Godziny_bcd, 0, 23, 12
	.db	Minuty_bcd, 0, 59, 15
	.db	Dzien_tyg, 1, 7, 0xC0	; koniec serii Czas
da_t21:	.db	T21_dzien_st, 0, 7, 4
	.db	T21_dzien_sp, 1, 7, 8
	.db	T21_godz_st, 0, 23, 0x41
	.db	T21_min_st, 0, 59, 0x44
	.db	T21_godz_sp, 0, 23, 0x47
	.db	T21_min_sp, 0, 59, 0xCA
da_t22:	.db	T22_dzien_st, 0, 7, 4
	.db	T22_dzien_sp, 1, 7, 8
	.db	T22_godz_st, 0, 23, 0x41
	.db	T22_min_st, 0, 59, 0x44
	.db	T22_godz_sp, 0, 23, 0x47
	.db	T22_min_sp, 0, 59, 0xCA
da_t23:	.db	T23_dzien_st, 0, 7, 4
	.db	T23_dzien_sp, 1, 7, 8
	.db	T23_godz_st, 0, 23, 0x41
	.db	T23_min_st, 0, 59, 0x44
	.db	T23_godz_sp, 0, 23, 0x47
	.db	T23_min_sp, 0, 59, 0xCA
da_t24:	.db	T24_dzien_st, 0, 7, 4
	.db	T24_dzien_sp, 1, 7, 8
	.db	T24_godz_st, 0, 23, 0x41
	.db	T24_min_st, 0, 59, 0x44
	.db	T24_godz_sp, 0, 23, 0x47
	.db	T24_min_sp, 0, 59, 0xCA
da_en_o:	.db	Od_rok_st, 0, 99, 3
	.db	Od_mies_st, 1, 12, 6
	.db	Od_dzien_st, 1, 31, 9
	.db	Od_godz_st, 0, 23, 12
	.db	Od_min_st, 0, 59, 0x8F
da_en_oo:	.db	Oddo_rok_st, 0, 99, 3
	.db	Oddo_mies_st, 1, 12, 6
	.db	Oddo_dzien_st, 1, 31, 9
	.db	Oddo_godz_st, 0, 23, 12
	.db	Oddo_min_st, 0, 59, 15
	.db	Oddo_rok_sp, 0, 99, 0x43
	.db	Oddo_mies_sp, 1, 12, 0x46
	.db	Oddo_dzien_sp, 1, 31, 0x49
	.db	Oddo_godz_sp, 0, 23, 0x4C
	.db	Oddo_min_sp, 0, 59, 0xCF

;--------------------------------------
znaki_CGRAM:	; osiem polskich literek (malych): a, c, e, l, n, o, s, z
.db	0, 8, 0x20,0x54,0x54,0x54,0xF8, 0x38,0x44,0x46,0x45,0x20, 0x38,0x54,0x54,0xD4,0x18, 0,0x49,0x7F,0x44,0, 0x7C,0x8,0x6,0x5,0x78, 0x38,0x44,0x46,0x45,0x38, 0x48,0x54,0x56,0x55,0x20, 0x44,0x64,0x55,0x4C,0x44

;-------- dane poczatkowe EEPROMu ---------------------------------------------
EE_ADE_ini:
.db	0, 0, 0x9,	0,0, 0, 0,0, 0x8D,0x04, 3, 0x47, 2, 0x05,0x28, 25, 0x85, 5, 5, low(20000),high(20000), low(3960), high(3960), low(36000),high(36000), low(675770),byte2(675770),byte3(675770), 0,0, 0,0, 0, 0, 0, 0,0, 0, 0, 0, 2, 1,7,0x13,0x14,0,0x59, 1,7,0x22,0x5,0,0x59, 0,1,0x12,0,0,0x59, 0,1,0x12,0,0,0x59, 3,1,1,0,0, 4,3,1,1,1,0x31,0,0x23,0,0x59
;EE_ADE_ini:	; moj miernik po kalibracji
;.db	0x21, 0x23, 9, 0,0, 0, 0xD2,0xF5, 0x8D,0x04, 3, 0x47, 2, 0x05,0x28, 25, 0x85, 5, 5, low(19900),high(19900), low(3995), high(3995), low(36000),high(36000), low(668602),byte2(668602),byte3(668602), 0,0, 0xDA,0xFF, 25, 19, 100, 44,0, 22, 18, 62, 2, 1,7,0x13,0x14,0,0x59, 1,7,0x22,0x5,0,0x59, 0,1,0x12,0,0,0x59, 0,1,0x12,0,0,0x59, 3,1,1,0,0, 4,3,1,1,1,0x31,0,0x23,0,0x59
EE_KON:	; koniec
.db	0


.exit
;==============================================================================


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -