📄 zlg7290.s
字号:
.module zlg7290.C
.area text(rom, con, rel)
.dbfile E:\PQ-1A\我的AVR\zlg7290/TWI.C
.dbfunc e delay _delay fV
; x -> R20,R21
; y -> R22,R23
; z -> R16,R17
.even
_delay::
xcall push_gset2
.dbline -1
.dbline 15
; #include <iom128v.h>
; #include <iom128.h>
; #include <macros.h>
; #include <stdio.h>
; #include "TWI.C"
; #include "zlg7290.h"
;
; #define uchar unsigned char
; #define uint unsigned int
;
;
; /*
; 函数:ZLG7290_WriteReg()
; 功能:向ZLG7290的某个内部寄存器写入数据
; 参数:
.dbline 17
; RegAddr:ZLG7290的内部寄存器地址
; dat:要写入的数据
movw R20,R16
xjmp L5
L2:
.dbline 18
ldi R22,1100
ldi R23,4
xjmp L9
L6:
.dbline 18
L7:
.dbline 18
subi R22,1
sbci R23,0
L9:
.dbline 18
cpi R22,0
cpc R22,R23
brne L6
X0:
L3:
.dbline 17
subi R20,1
sbci R21,0
L5:
.dbline 17
cpi R20,0
cpc R20,R21
brne L2
X1:
.dbline -2
.dbline 19
; 返回:
; 1:正常
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r x 20 i
.dbsym r y 22 i
.dbsym r z 16 i
.dbend
.dbfunc e TWI_init _TWI_init fV
.even
_TWI_init::
.dbline -1
.dbline 28
; 0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_WriteReg(uchar RegAddr, uchar dat)
; {
; uchar b;
; b = TWI_write(ZLG7290_I2C_ADDR,RegAddr,1,&dat);
; return b;
; }
;
.dbline 29
; /*
ldi R24,32
sts 112,R24
.dbline 30
; 函数:ZLG7290_ReadReg()
clr R2
sts 113,R2
.dbline 31
; 功能:从ZLG7290的某个内部寄存器读出数据
ldi R24,68
sts 116,R24
.dbline -2
.dbline 32
; 参数:
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TWI_start _TWI_start fc
.even
_TWI_start::
.dbline -1
.dbline 42
; RegAddr:ZLG7290的内部寄存器地址
; *dat:保存读出的数据
; 返回:
; 1:正常
; 0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_ReadReg(uchar RegAddr, uchar *dat)
; {
; uchar b;
; b=TWI_read(ZLG7290_I2C_ADDR,RegAddr,1,dat);
.dbline 43
; return b;
ldi R24,164
sts 116,R24
L12:
.dbline 44
L13:
.dbline 44
; }
lds R2,116
sbrs R2,7
rjmp L12
.dbline 45
;
ldi R16,1
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TWI_stop _TWI_stop fV
.even
_TWI_stop::
.dbline -1
.dbline 49
; /*
; 函数:ZLG7290_cmd()
; 功能:向ZLG7290发送控制命令
; 参数:
.dbline 50
; cmd0:写入CmdBuf0寄存器的命令字(第1字节)
ldi R24,148
sts 116,R24
.dbline -2
.dbline 51
; cmd1:写入CmdBuf1寄存器的命令字(第2字节)
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TWI_writeB _TWI_writeB fc
; ack -> R20
; c -> R16
.even
_TWI_writeB::
xcall push_gset1
.dbline -1
.dbline 63
; 返回:
; 1:正常
; 0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_cmd(uchar cmd0, uchar cmd1)
; {
; uchar b;
; uchar buf[2];
; buf[0] = cmd0;
; buf[1] = cmd1;
; b=TWI_write(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,2,buf);
; return b;
.dbline 64
; }
ldi R20,1
.dbline 65
;
sts 115,R16
.dbline 66
; /*
ldi R24,132
sts 116,R24
L17:
.dbline 67
L18:
.dbline 67
; 函数:ZLG7290_SegOnOff()
lds R2,116
sbrs R2,7
rjmp L17
.dbline 68
; 功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段
lds R24,113
andi R24,248
cpi R24,24
breq L20
.dbline 69
; 参数:
clr R20
L20:
.dbline 70
; seg:取值0~63,表示数码管(或LED)的段号
mov R16,R20
.dbline -2
L16:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r ack 20 c
.dbsym r c 16 c
.dbend
.dbfunc e TWI_readB _TWI_readB fc
; ack -> R16
.even
_TWI_readB::
.dbline -1
.dbline 81
; b:0表示熄灭,1表示点亮
; 返回:
; 1:正常
; 0:访问ZLG7290时出现异常
; 说明:
; 在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行
; */
; uchar ZLG7290_SegOnOff(uchar seg, uchar b)
; {
; uchar cmd,a;
; cmd = seg & 0x3F;
.dbline 82
; if ( b ) cmd |= 0x80;
tst R16
breq L23
.dbline 83
; a=ZLG7290_cmd(0x01,cmd);
ldi R24,196
sts 116,R24
xjmp L26
L23:
.dbline 85
; return a;
; }
ldi R24,132
sts 116,R24
L25:
.dbline 86
L26:
.dbline 86
; /*
lds R2,116
sbrs R2,7
rjmp L25
.dbline 87
; 函数:ZLG7290_Download()
lds R16,115
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbsym r ack 16 c
.dbend
.dbfunc e TWI_page_write _TWI_page_write fc
; i -> R20
; b -> R22
; arr -> R10,R11
; n -> R12
; addr -> R20
; devadd -> R14
.even
_TWI_page_write::
xcall push_gset5
mov R20,R18
mov R14,R16
ldd R12,y+10
ldd R10,y+12
ldd R11,y+13
.dbline -1
.dbline 106
; 功能:下载数据并译码
; 参数:
; addr:取值0~7,显示缓存DpRam0~DpRam7的编号
; dp:是否点亮该位的小数点,0-熄灭,1-点亮
; flash:控制该位是否闪烁,0-不闪烁,1-闪烁
; dat:取值0~31,表示要显示的数据
; 返回:
; 1:正常
; 0:访问ZLG7290时出现异常
; 说明:
; 显示数据具体的译码方式请参见ZLG7290的数据手册
; */
; uchar ZLG7290_Download(uchar addr, uchar dp, uchar f, uchar dat)
; {
; uchar cmd0;
; uchar cmd1;
; uchar b;
; cmd0 = addr & 0x0F;
; cmd0 |= 0x60;
.dbline 107
; cmd1 = dat & 0x1F;
clr R22
.dbline 108
; if ( dp==1 ) cmd1 |= 0x80;
xcall _TWI_start
.dbline 109
; if ( f==1 ) cmd1 |= 0x40;
mov R16,R14
xcall _TWI_writeB
mov R22,R16
.dbline 110
; b=ZLG7290_cmd(cmd0,cmd1);
tst R16
brne L29
.dbline 111
; return b;
.dbline 112
; }
xcall _TWI_stop
.dbline 113
;
mov R16,R22
xjmp L28
L29:
.dbline 115
; /*void main()
; {
mov R16,R20
xcall _TWI_writeB
mov R22,R16
.dbline 116
; uchar a=0;
tst R16
brne L31
.dbline 117
; TWI_init();
.dbline 118
; DDRA=0XFF;
xcall _TWI_stop
.dbline 119
; a=ZLG7290_Download(1,0,0,31);;
mov R16,R22
xjmp L28
L31:
.dbline 121
; PORTA=a;
; while(1);
ldi R20,1
xjmp L36
L33:
.dbline 122
; }*/
.dbline 123
; }*/
movw R30,R10
ldd R16,z+0
xcall _TWI_writeB
mov R22,R16
.dbline 124
; }*/
tst R16
brne L37
.dbline 125
; }*/
.dbline 126
; }*/
xcall _TWI_stop
.dbline 127
; }*/
mov R16,R22
xjmp L28
L37:
.dbline 129
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 130
L34:
.dbline 121
inc R20
L36:
.dbline 121
cp R12,R20
brsh L33
.dbline 131
; }*/
; }*/
; }*/
; }*/
xcall _TWI_stop
.dbline 132
; }*/
ldi R16,80
ldi R17,0
xcall _delay
.dbline 133
; }*/
mov R16,R22
.dbline -2
L28:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r b 22 c
.dbsym r arr 10 pc
.dbsym r n 12 c
.dbsym r addr 20 c
.dbsym r devadd 14 c
.dbend
.dbfunc e TWI_write _TWI_write fc
; n_tmp -> R14
; b -> R20
; arr -> R22,R23
; n -> R10
; addr -> R12
; devadd -> y+14
.even
_TWI_write::
xcall push_arg4
xcall push_gset5
mov R12,R18
sbiw R28,4
ldd R10,y+18
ldd R22,y+20
ldd R23,y+21
.dbline -1
.dbline 152
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
.dbline 153
; }*/
clr R20
.dbline 154
; }*/
mov R24,R12
clr R25
andi R24,7
andi R25,0
ldi R25,8
mov R14,R25
sub R14,R24
.dbline 155
; }*/
cp R14,R10
brsh L43
tst R14
breq L43
.dbline 156
; }*/
.dbline 157
; }*/
std y+2,R22
std y+3,R23
std y+0,R14
mov R18,R12
ldd R16,y+14
xcall _TWI_page_write
mov R20,R16
.dbline 158
; }*/
add R12,R14
.dbline 159
; }*/
sub R10,R14
.dbline 160
; }*/
mov R2,R14
clr R3
add R22,R2
adc R23,R3
.dbline 161
; }*/
xjmp L43
L42:
.dbline 163
.dbline 164
std y+2,R22
std y+3,R23
ldi R24,8
std y+0,R24
mov R18,R12
ldd R16,y+14
xcall _TWI_page_write
mov R20,R16
.dbline 165
mov R24,R12
subi R24,248 ; addi 8
mov R12,R24
.dbline 166
mov R24,R10
subi R24,8
mov R10,R24
.dbline 167
subi R22,248 ; offset = 8
sbci R23,255
.dbline 168
L43:
.dbline 162
; }*/
mov R24,R10
cpi R24,8
brsh L42
.dbline 169
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
tst R10
breq L45
.dbline 170
; }*/
std y+2,R22
std y+3,R23
std y+0,R10
mov R18,R12
ldd R16,y+14
xcall _TWI_page_write
mov R20,R16
L45:
.dbline 171
; }*/
mov R16,R20
.dbline -2
L39:
adiw R28,4
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r n_tmp 14 c
.dbsym r b 20 c
.dbsym r arr 22 pc
.dbsym r n 10 c
.dbsym r addr 12 c
.dbsym l devadd 14 c
.dbend
.dbfunc e TWI_read _TWI_read fc
; b -> R20
; i -> R22
; arr -> R10,R11
; n -> R12
; addr -> R14
; devadd -> R22
.even
_TWI_read::
xcall push_gset5
mov R14,R18
mov R22,R16
ldd R12,y+10
ldd R10,y+12
ldd R11,y+13
.dbline -1
.dbline 190
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
.dbline 191
; }*/
clr R20
.dbline 192
; }*/
xcall _TWI_start
.dbline 193
; }*/
mov R16,R22
xcall _TWI_writeB
mov R20,R16
.dbline 194
; }*/
tst R16
brne L48
.dbline 195
; }*/
.dbline 196
; }*/
xcall _TWI_stop
.dbline 197
; }*/
mov R16,R20
xjmp L47
L48:
.dbline 199
; }*/
; }*/
mov R16,R14
xcall _TWI_writeB
mov R20,R16
.dbline 200
; }*/
tst R16
brne L50
.dbline 201
; }*/
.dbline 202
; }*/
xcall _TWI_stop
.dbline 203
; }*/
mov R16,R20
xjmp L47
L50:
.dbline 205
; }*/
; }*/
xcall _TWI_start
.dbline 206
; }*/
mov R16,R22
ori R16,1
xcall _TWI_writeB
mov R20,R16
.dbline 207
; }*/
tst R16
brne L52
.dbline 208
; }*/
.dbline 209
; }*/
xcall _TWI_stop
.dbline 210
; }*/
mov R16,R20
xjmp L47
L52:
.dbline 212
; }*/
; }*/
ldi R22,1
xjmp L57
L54:
.dbline 213
.dbline 214
ldi R16,1
xcall _TWI_readB
movw R30,R10
std z+0,R16
.dbline 215
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 216
L55:
.dbline 212
inc R22
L57:
.dbline 212
mov R24,R12
subi R24,1
cp R24,R22
brsh L54
.dbline 217
; }*/
; }*/
; }*/
; }*/
; }*/
clr R16
xcall _TWI_readB
movw R30,R10
std z+0,R16
.dbline 218
; }*/
xcall _TWI_stop
.dbline 219
; }*/
mov R16,R20
.dbline -2
L47:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym r i 22 c
.dbsym r arr 10 pc
.dbsym r n 12 c
.dbsym r addr 14 c
.dbsym r devadd 22 c
.dbend
.dbfile E:\PQ-1A\我的AVR\zlg7290\zlg7290.C
.dbfunc e ZLG7290_WriteReg _ZLG7290_WriteReg fc
; b -> R20
; dat -> y+6
; RegAddr -> R20
.even
_ZLG7290_WriteReg::
st -y,r19
st -y,r18
xcall push_gset1
mov R20,R16
sbiw R28,4
.dbline -1
.dbline 23
.dbline 25
movw R24,R28
adiw R24,6
std y+2,R24
std y+3,R25
ldi R24,1
std y+0,R24
mov R18,R20
ldi R16,56
xcall _TWI_write
mov R20,R16
.dbline 26
.dbline -2
L58:
adiw R28,4
xcall pop_gset1
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym l dat 6 I
.dbsym l dat 6 c
.dbsym r RegAddr 20 c
.dbend
.dbfunc e ZLG7290_ReadReg _ZLG7290_ReadReg fc
; b -> R20
; dat -> R22,R23
; RegAddr -> R20
.even
_ZLG7290_ReadReg::
xcall push_gset2
movw R22,R18
mov R20,R16
sbiw R28,4
.dbline -1
.dbline 40
.dbline 42
std y+2,R22
std y+3,R23
ldi R24,1
std y+0,R24
mov R18,R20
ldi R16,56
xcall _TWI_read
mov R20,R16
.dbline 43
.dbline -2
L59:
adiw R28,4
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym r dat 22 pc
.dbsym r RegAddr 20 c
.dbend
.dbfunc e ZLG7290_cmd _ZLG7290_cmd fc
; b -> R20
; buf -> y+4
; cmd1 -> R20
; cmd0 -> R22
.even
_ZLG7290_cmd::
xcall push_gset2
mov R20,R18
mov R22,R16
sbiw R28,6
.dbline -1
.dbline 57
.dbline 60
std y+4,R22
.dbline 61
std y+5,R20
.dbline 62
movw R24,R28
adiw R24,4
std y+2,R24
std y+3,R25
ldi R24,2
std y+0,R24
ldi R18,7
ldi R16,56
xcall _TWI_write
mov R20,R16
.dbline 63
.dbline -2
L60:
adiw R28,6
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym l buf 4 A[2:2]c
.dbsym r cmd1 20 c
.dbsym r cmd0 22 c
.dbend
.dbfunc e ZLG7290_SegOnOff _ZLG7290_SegOnOff fc
; a -> R20
; cmd -> R20
; b -> R22
; seg -> R20
.even
_ZLG7290_SegOnOff::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 79
.dbline 81
andi R20,63
.dbline 82
tst R22
breq L63
.dbline 82
ori R20,128
L63:
.dbline 83
mov R18,R20
ldi R16,1
xcall _ZLG7290_cmd
mov R20,R16
.dbline 84
.dbline -2
L62:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r a 20 c
.dbsym r cmd 20 c
.dbsym r b 22 c
.dbsym r seg 20 c
.dbend
.dbfunc e ZLG7290_Download _ZLG7290_Download fc
; b -> R20
; cmd1 -> R22
; cmd0 -> R20
; dat -> y+8
; f -> y+6
; dp -> R10
; addr -> R20
.even
_ZLG7290_Download::
xcall push_gset3
mov R10,R18
mov R20,R16
.dbline -1
.dbline 101
.dbline 105
andi R20,15
.dbline 106
ori R20,96
.dbline 107
ldd R22,y+8
andi R22,31
.dbline 108
mov R24,R10
cpi R24,1
brne L66
.dbline 108
ori R22,128
L66:
.dbline 109
ldd R24,y+6
cpi R24,1
brne L68
.dbline 109
ori R22,64
L68:
.dbline 110
mov R18,R22
mov R16,R20
xcall _ZLG7290_cmd
mov R20,R16
.dbline 111
.dbline -2
L65:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym r cmd1 22 c
.dbsym r cmd0 20 c
.dbsym l dat 8 c
.dbsym l f 6 c
.dbsym r dp 10 c
.dbsym r addr 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -