📄 ad7416.lst
字号:
__text_start:
__start:
0030 E5CF LDI R28,0x5F
0031 E0D4 LDI R29,4
0032 BFCD OUT P3D,R28
0033 BFDE OUT P3E,R29
0034 51C0 SUBI R28,0x10
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD R16,0+Y
0038 2400 CLR R0
0039 E6E0 LDI R30,0x60
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 36E2 CPI R30,0x62
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD R16,0+Z
0042 E6E0 LDI R30,0x60
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 36E0 CPI R30,0x60
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E 940E009B CALL _main
_exit:
0050 CFFF RJMP _exit
FILE: F:\程序—实验板\AD7416\AD7416.C
(0001)
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include <stdlib.h>
(0005)
(0006) #define SLD_R_AK 0xC4
(0007) #define SLD_R_NK 0x83
(0008)
(0009) //TWI status
(0010) #define START_OK 0x08
(0011) #define R_STAR_OK 0x10
(0012) #define SLA_W_OK 0x18
(0013) #define SLD_W_OK 0x28
(0014) #define SLA_R_OK 0x40
(0015) #define SLD_R_AK_OK 0x50
(0016) #define SLD_R_NK_OK 0x58
(0017)
(0018) #define uchar unsigned char
(0019) #define uint unsigned int
(0020)
(0021) #define start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0022) #define stop() (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO))
(0023) #define wait() {while(!(TWCR&(1<<TWINT) ));}
(0024) #define writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);}
(0025) #define testack() (TWSR&0Xf8)
(0026) #define twi() (TWCR=(1<<TWINT)|(1<<TWEN))
(0027)
(0028) uchar Tmp_data_high, Tmp_data_low;
(0029)
(0030) void twi_init()
(0031) {
(0032) TWBR=0X0C;
_twi_init:
0051 E08C LDI R24,0xC
0052 B980 OUT P00,R24
(0033) // TWCR=0X44;
(0034) TWSR=0X00;
0053 2422 CLR R2
0054 B821 OUT P01,R2
(0035) }
0055 9508 RET
(0036) //~~~~~~~~~~~~~~~~~~~~~~
(0037)
(0038) uchar AD7416_read(void)
(0039) {
(0040)
(0041) start(); //Generate START condition
_AD7416_read:
0056 EA84 LDI R24,0xA4
0057 BF86 OUT P36,R24
(0042) wait(); //START_OK (0x08) valified
0058 B626 IN R2,P36
0059 FE27 SBRS R2,7
005A CFFD RJMP 0x0058
(0043)
(0044)
(0045) writebyte(0X90);
005B E980 LDI R24,0x90
005C B983 OUT P03,R24
005D E884 LDI R24,0x84
005E BF86 OUT P36,R24
(0046) wait(); //SLA_R_OK (0x40) verified
005F B626 IN R2,P36
0060 FE27 SBRS R2,7
0061 CFFD RJMP 0x005F
(0047)
(0048) writebyte(0);
0062 2422 CLR R2
0063 B823 OUT P03,R2
0064 E884 LDI R24,0x84
0065 BF86 OUT P36,R24
(0049) wait(); //ALD_W_OK (0x28) verified
0066 B626 IN R2,P36
0067 FE27 SBRS R2,7
0068 CFFD RJMP 0x0066
(0050)
(0051) start(); //Generate RESTART condition
0069 EA84 LDI R24,0xA4
006A BF86 OUT P36,R24
(0052) wait(); //RESTART_OK (0x10) valified
006B B626 IN R2,P36
006C FE27 SBRS R2,7
006D CFFD RJMP 0x006B
(0053)
(0054) writebyte(0X91);
006E E981 LDI R24,0x91
006F B983 OUT P03,R24
0070 E884 LDI R24,0x84
0071 BF86 OUT P36,R24
(0055) wait();
0072 B626 IN R2,P36
0073 FE27 SBRS R2,7
0074 CFFD RJMP 0x0072
(0056)
(0057) twi();
0075 E884 LDI R24,0x84
0076 BF86 OUT P36,R24
(0058) //writebyte(SLD_R_AK );
(0059) wait();
0077 B626 IN R2,P36
0078 FE27 SBRS R2,7
0079 CFFD RJMP 0x0077
(0060)
(0061) Tmp_data_high=TWDR;
007A B023 IN R2,P03
007B 92200061 STS R2,_Tmp_data_high
(0062) wait();
007D B626 IN R2,P36
007E FE27 SBRS R2,7
007F CFFD RJMP 0x007D
(0063) //TWCR=SLD_R_AK; //Read the pointed reg: low byte
(0064) wait(); //DLD_R_AK_OK (0x50) verified
0080 B626 IN R2,P36
0081 FE27 SBRS R2,7
0082 CFFD RJMP 0x0080
(0065) Tmp_data_low = TWDR;
0083 B023 IN R2,P03
0084 92200060 STS R2,_Tmp_data_low
(0066)
(0067) stop(); //Generate STOP condition
0086 E984 LDI R24,0x94
0087 BF86 OUT P36,R24
(0068) }
0088 9508 RET
_delay:
x --> R20
z --> R16
0089 940E00A7 CALL push_gset1
(0069)
(0070) void delay(uchar z)
(0071) {
(0072) uint x;
(0073) for(;z>0;z--)
008B C009 RJMP 0x0095
(0074) for(x=20000;x>0;x--);
008C E240 LDI R20,0x20
008D E45E LDI R21,0x4E
008E C002 RJMP 0x0091
008F 5041 SUBI R20,1
0090 4050 SBCI R21,0
0091 3040 CPI R20,0
0092 0745 CPC R20,R21
0093 F7D9 BNE 0x008F
0094 950A DEC R16
0095 2422 CLR R2
0096 1620 CP R2,R16
0097 F3A0 BCS 0x008C
(0075) }
0098 940E00AA CALL pop_gset1
009A 9508 RET
(0076)
(0077) void main(void)
(0078) {
(0079) DDRD=0xff;
_main:
009B EF8F LDI R24,0xFF
009C BB81 OUT P11,R24
(0080) twi_init();
009D DFB3 RCALL _twi_init
009E C006 RJMP 0x00A5
(0081) while(1)
(0082) {
(0083)
(0084) AD7416_read();
009F DFB6 RCALL _AD7416_read
(0085) PORTD=Tmp_data_high;
00A0 90200061 LDS R2,_Tmp_data_high
00A2 BA22 OUT P12,R2
(0086) delay(10);
00A3 E00A LDI R16,0xA
00A4 DFE4 RCALL _delay
00A5 CFF9 RJMP 0x009F
(0087) }
(0088) }
FILE: <library>
00A6 9508 RET
push_gset1:
00A7 935A ST R21,-Y
00A8 934A ST R20,-Y
00A9 9508 RET
pop_gset1:
00AA E0E1 LDI R30,1
pop:
00AB 9149 LD R20,Y+
00AC 9159 LD R21,Y+
00AD FDE0 SBRC R30,0
00AE 9508 RET
00AF 9169 LD R22,Y+
00B0 9179 LD R23,Y+
00B1 FDE1 SBRC R30,1
00B2 9508 RET
00B3 90A9 LD R10,Y+
00B4 90B9 LD R11,Y+
00B5 FDE2 SBRC R30,2
00B6 9508 RET
00B7 90C9 LD R12,Y+
00B8 90D9 LD R13,Y+
00B9 FDE3 SBRC R30,3
00BA 9508 RET
00BB 90E9 LD R14,Y+
00BC 90F9 LD R15,Y+
00BD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -