📄 zlg7290.lis
字号:
.module zlg7290.C
.area text(rom, con, rel)
0000 .dbfile E:\PQ-1A\我的AVR\zlg7290/TWI.C
0000 .dbfunc e delay _delay fV
0000 ; x -> R20,R21
0000 ; y -> R22,R23
0000 ; z -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 15
0004 ; #include <iom128v.h>
0004 ; #include <iom128.h>
0004 ; #include <macros.h>
0004 ; #include <stdio.h>
0004 ; #include "TWI.C"
0004 ; #include "zlg7290.h"
0004 ;
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ;
0004 ; /*
0004 ; 函数:ZLG7290_WriteReg()
0004 ; 功能:向ZLG7290的某个内部寄存器写入数据
0004 ; 参数:
0004 .dbline 17
0004 ; RegAddr:ZLG7290的内部寄存器地址
0004 ; dat:要写入的数据
0004 A801 movw R20,R16
0006 0AC0 xjmp L5
0008 L2:
0008 .dbline 18
0008 6CE4 ldi R22,1100
000A 74E0 ldi R23,4
000C 02C0 xjmp L9
000E L6:
000E .dbline 18
000E L7:
000E .dbline 18
000E 6150 subi R22,1
0010 7040 sbci R23,0
0012 L9:
0012 .dbline 18
0012 6030 cpi R22,0
0014 6707 cpc R22,R23
0016 D9F7 brne L6
0018 X0:
0018 L3:
0018 .dbline 17
0018 4150 subi R20,1
001A 5040 sbci R21,0
001C L5:
001C .dbline 17
001C 4030 cpi R20,0
001E 4507 cpc R20,R21
0020 99F7 brne L2
0022 X1:
0022 .dbline -2
0022 .dbline 19
0022 ; 返回:
0022 ; 1:正常
0022 L1:
0022 0E940000 xcall pop_gset2
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r x 20 i
0028 .dbsym r y 22 i
0028 .dbsym r z 16 i
0028 .dbend
0028 .dbfunc e TWI_init _TWI_init fV
.even
0028 _TWI_init::
0028 .dbline -1
0028 .dbline 28
0028 ; 0:访问ZLG7290时出现异常
0028 ; */
0028 ; uchar ZLG7290_WriteReg(uchar RegAddr, uchar dat)
0028 ; {
0028 ; uchar b;
0028 ; b = TWI_write(ZLG7290_I2C_ADDR,RegAddr,1,&dat);
0028 ; return b;
0028 ; }
0028 ;
0028 .dbline 29
0028 ; /*
0028 80E2 ldi R24,32
002A 80937000 sts 112,R24
002E .dbline 30
002E ; 函数:ZLG7290_ReadReg()
002E 2224 clr R2
0030 20927100 sts 113,R2
0034 .dbline 31
0034 ; 功能:从ZLG7290的某个内部寄存器读出数据
0034 84E4 ldi R24,68
0036 80937400 sts 116,R24
003A .dbline -2
003A .dbline 32
003A ; 参数:
003A L10:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e TWI_start _TWI_start fc
.even
003C _TWI_start::
003C .dbline -1
003C .dbline 42
003C ; RegAddr:ZLG7290的内部寄存器地址
003C ; *dat:保存读出的数据
003C ; 返回:
003C ; 1:正常
003C ; 0:访问ZLG7290时出现异常
003C ; */
003C ; uchar ZLG7290_ReadReg(uchar RegAddr, uchar *dat)
003C ; {
003C ; uchar b;
003C ; b=TWI_read(ZLG7290_I2C_ADDR,RegAddr,1,dat);
003C .dbline 43
003C ; return b;
003C 84EA ldi R24,164
003E 80937400 sts 116,R24
0042 L12:
0042 .dbline 44
0042 L13:
0042 .dbline 44
0042 ; }
0042 20907400 lds R2,116
0046 27FE sbrs R2,7
0048 FCCF rjmp L12
004A .dbline 45
004A ;
004A 01E0 ldi R16,1
004C .dbline -2
004C L11:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e TWI_stop _TWI_stop fV
.even
004E _TWI_stop::
004E .dbline -1
004E .dbline 49
004E ; /*
004E ; 函数:ZLG7290_cmd()
004E ; 功能:向ZLG7290发送控制命令
004E ; 参数:
004E .dbline 50
004E ; cmd0:写入CmdBuf0寄存器的命令字(第1字节)
004E 84E9 ldi R24,148
0050 80937400 sts 116,R24
0054 .dbline -2
0054 .dbline 51
0054 ; cmd1:写入CmdBuf1寄存器的命令字(第2字节)
0054 L15:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
0056 .dbfunc e TWI_writeB _TWI_writeB fc
0056 ; ack -> R20
0056 ; c -> R16
.even
0056 _TWI_writeB::
0056 0E940000 xcall push_gset1
005A .dbline -1
005A .dbline 63
005A ; 返回:
005A ; 1:正常
005A ; 0:访问ZLG7290时出现异常
005A ; */
005A ; uchar ZLG7290_cmd(uchar cmd0, uchar cmd1)
005A ; {
005A ; uchar b;
005A ; uchar buf[2];
005A ; buf[0] = cmd0;
005A ; buf[1] = cmd1;
005A ; b=TWI_write(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,2,buf);
005A ; return b;
005A .dbline 64
005A ; }
005A 41E0 ldi R20,1
005C .dbline 65
005C ;
005C 00937300 sts 115,R16
0060 .dbline 66
0060 ; /*
0060 84E8 ldi R24,132
0062 80937400 sts 116,R24
0066 L17:
0066 .dbline 67
0066 L18:
0066 .dbline 67
0066 ; 函数:ZLG7290_SegOnOff()
0066 20907400 lds R2,116
006A 27FE sbrs R2,7
006C FCCF rjmp L17
006E .dbline 68
006E ; 功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段
006E 80917100 lds R24,113
0072 887F andi R24,248
0074 8831 cpi R24,24
0076 09F0 breq L20
0078 .dbline 69
0078 ; 参数:
0078 4427 clr R20
007A L20:
007A .dbline 70
007A ; seg:取值0~63,表示数码管(或LED)的段号
007A 042F mov R16,R20
007C .dbline -2
007C L16:
007C 0E940000 xcall pop_gset1
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r ack 20 c
0082 .dbsym r c 16 c
0082 .dbend
0082 .dbfunc e TWI_readB _TWI_readB fc
0082 ; ack -> R16
.even
0082 _TWI_readB::
0082 .dbline -1
0082 .dbline 81
0082 ; b:0表示熄灭,1表示点亮
0082 ; 返回:
0082 ; 1:正常
0082 ; 0:访问ZLG7290时出现异常
0082 ; 说明:
0082 ; 在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行
0082 ; */
0082 ; uchar ZLG7290_SegOnOff(uchar seg, uchar b)
0082 ; {
0082 ; uchar cmd,a;
0082 ; cmd = seg & 0x3F;
0082 .dbline 82
0082 ; if ( b ) cmd |= 0x80;
0082 0023 tst R16
0084 21F0 breq L23
0086 .dbline 83
0086 ; a=ZLG7290_cmd(0x01,cmd);
0086 84EC ldi R24,196
0088 80937400 sts 116,R24
008C 03C0 xjmp L26
008E L23:
008E .dbline 85
008E ; return a;
008E ; }
008E 84E8 ldi R24,132
0090 80937400 sts 116,R24
0094 L25:
0094 .dbline 86
0094 L26:
0094 .dbline 86
0094 ; /*
0094 20907400 lds R2,116
0098 27FE sbrs R2,7
009A FCCF rjmp L25
009C .dbline 87
009C ; 函数:ZLG7290_Download()
009C 00917300 lds R16,115
00A0 .dbline -2
00A0 L22:
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r ack 16 c
00A2 .dbend
00A2 .dbfunc e TWI_page_write _TWI_page_write fc
00A2 ; i -> R20
00A2 ; b -> R22
00A2 ; arr -> R10,R11
00A2 ; n -> R12
00A2 ; addr -> R20
00A2 ; devadd -> R14
.even
00A2 _TWI_page_write::
00A2 0E940000 xcall push_gset5
00A6 422F mov R20,R18
00A8 E02E mov R14,R16
00AA CA84 ldd R12,y+10
00AC AC84 ldd R10,y+12
00AE BD84 ldd R11,y+13
00B0 .dbline -1
00B0 .dbline 106
00B0 ; 功能:下载数据并译码
00B0 ; 参数:
00B0 ; addr:取值0~7,显示缓存DpRam0~DpRam7的编号
00B0 ; dp:是否点亮该位的小数点,0-熄灭,1-点亮
00B0 ; flash:控制该位是否闪烁,0-不闪烁,1-闪烁
00B0 ; dat:取值0~31,表示要显示的数据
00B0 ; 返回:
00B0 ; 1:正常
00B0 ; 0:访问ZLG7290时出现异常
00B0 ; 说明:
00B0 ; 显示数据具体的译码方式请参见ZLG7290的数据手册
00B0 ; */
00B0 ; uchar ZLG7290_Download(uchar addr, uchar dp, uchar f, uchar dat)
00B0 ; {
00B0 ; uchar cmd0;
00B0 ; uchar cmd1;
00B0 ; uchar b;
00B0 ; cmd0 = addr & 0x0F;
00B0 ; cmd0 |= 0x60;
00B0 .dbline 107
00B0 ; cmd1 = dat & 0x1F;
00B0 6627 clr R22
00B2 .dbline 108
00B2 ; if ( dp==1 ) cmd1 |= 0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -