📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\atmega16子函数\TWI_master\main.c
0000 .dbfunc e Start _Start fV
.even
0000 _Start::
0000 .dbline -1
0000 .dbline 20
0000 ; #include"iom16v.h"
0000 ; #include <iom16v.h>
0000 ; #include<macros.h>
0000 ; #include"UART.h"
0000 ; #include"DELAY.h"
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define STATUS (TWSR&0xf8)
0000 ; #define SLA_W 0x32
0000 ; #define SLA_R 0x33
0000 ; #define SLAVER_ADDRESS 0x32
0000 ; #define START 0x08
0000 ; #define RE_START 0x10
0000 ; #define MT_SLA_WRITE_ACK 0x18
0000 ; #define MT_SLA_READ_ACK 0x40
0000 ; #define MT_DATA_ACK 0x28
0000 ; #define MT_READ_ACK 0x58
0000 ;
0000 ; void Start(void)
0000 ; {
0000 .dbline 21
0000 ; TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
0000 84EA ldi R24,164
0002 86BF out 0x36,R24
0004 L2:
0004 .dbline 22
0004 L3:
0004 .dbline 22
0004 ; while(!(TWCR&(1<<TWINT)));
0004 26B6 in R2,0x36
0006 27FE sbrs R2,7
0008 FDCF rjmp L2
000A .dbline -2
000A .dbline 23
000A ; }
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e Stop _Stop fV
.even
000C _Stop::
000C .dbline -1
000C .dbline 25
000C ; void Stop(void)
000C ; {
000C .dbline 26
000C ; TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
000C 84E9 ldi R24,148
000E 86BF out 0x36,R24
0010 .dbline -2
0010 .dbline 27
0010 ; }
0010 L5:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e Load _Load fV
0012 ; i -> R16
.even
0012 _Load::
0012 .dbline -1
0012 .dbline 29
0012 ; void Load(uchar i)
0012 ; {
0012 .dbline 30
0012 ; TWDR=i;
0012 03B9 out 0x3,R16
0014 .dbline 31
0014 ; TWCR=(1<<TWINT)|(1<<TWEN);
0014 84E8 ldi R24,132
0016 86BF out 0x36,R24
0018 L7:
0018 .dbline 32
0018 L8:
0018 .dbline 32
0018 ; while(!(TWCR&(1<<TWINT)));
0018 26B6 in R2,0x36
001A 27FE sbrs R2,7
001C FDCF rjmp L7
001E .dbline -2
001E .dbline 34
001E ;
001E ; }
001E L6:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r i 16 c
0020 .dbend
0020 .dbfunc e Get _Get fV
0020 ; d -> R16,R17
.even
0020 _Get::
0020 .dbline -1
0020 .dbline 37
0020 ;
0020 ; void Get(unsigned char *d)
0020 ; {
0020 .dbline 38
0020 ; TWCR=(1<<TWINT)|(1<<TWEN);
0020 84E8 ldi R24,132
0022 86BF out 0x36,R24
0024 L11:
0024 .dbline 39
0024 L12:
0024 .dbline 39
0024 ; while(!(TWCR&(1<<TWINT)));
0024 26B6 in R2,0x36
0026 27FE sbrs R2,7
0028 FDCF rjmp L11
002A .dbline 40
002A ; *d= TWDR;
002A 23B0 in R2,0x3
002C F801 movw R30,R16
002E 2082 std z+0,R2
0030 .dbline -2
0030 .dbline 41
0030 ; }
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r d 16 pc
0032 .dbend
0032 .dbfunc e ERROR _ERROR fV
0032 ; state -> R20
.even
0032 _ERROR::
0032 00D0 rcall push_gset1
0034 402F mov R20,R16
0036 .dbline -1
0036 .dbline 43
0036 ; void ERROR(uchar state)
0036 ; {Stop();
0036 .dbline 43
0036 EADF rcall _Stop
0038 .dbline -2
0038 .dbline 44
0038 ; }
0038 L14:
0038 00D0 rcall pop_gset1
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r state 20 c
003C .dbend
003C .dbfunc e SendByte _SendByte fc
003C ; data -> R20
.even
003C _SendByte::
003C 00D0 rcall push_gset1
003E 402F mov R20,R16
0040 .dbline -1
0040 .dbline 49
0040 ;
0040 ; /*写一个字节data,成功则返回1,否则
0040 ; 返回0*/
0040 ; uchar SendByte(uchar data)
0040 ; {
0040 .dbline 51
0040 ; //启动I2C
0040 ; Start();
0040 DFDF rcall _Start
0042 .dbline 52
0042 ; if(STATUS!=START) //{ERROR(STATUS);return 0;}
0042 81B1 in R24,0x1
0044 887F andi R24,248
0046 8830 cpi R24,8
0048 19F0 breq L16
004A .dbline 53
004A ; puts("Start ERRor");
004A 00E0 ldi R16,<L18
004C 10E0 ldi R17,>L18
004E 00D0 rcall _puts
0050 L16:
0050 .dbline 55
0050 ; //发送从机地址(写),等待回应, 错误检测
0050 ; Load(0);
0050 0027 clr R16
0052 DFDF rcall _Load
0054 .dbline 56
0054 ; if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
0054 81B1 in R24,0x1
0056 887F andi R24,248
0058 8831 cpi R24,24
005A 19F0 breq L19
005C .dbline 57
005C ; puts("SLA_W RROR");
005C 00E0 ldi R16,<L21
005E 10E0 ldi R17,>L21
0060 00D0 rcall _puts
0062 L19:
0062 .dbline 64
0062 ; /*
0062 ; //发送EEPROM地址,等待回应,错误检测
0062 ; Load(addr);
0062 ; if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
0062 ; */
0062 ; //发送数据,等待回应,错误检测
0062 ; Load(data);
0062 042F mov R16,R20
0064 D6DF rcall _Load
0066 .dbline 65
0066 ; if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
0066 81B1 in R24,0x1
0068 887F andi R24,248
006A 8832 cpi R24,40
006C 19F0 breq L22
006E .dbline 66
006E ; puts("Date Error");
006E 00E0 ldi R16,<L24
0070 10E0 ldi R17,>L24
0072 00D0 rcall _puts
0074 L22:
0074 .dbline 67
0074 ; Stop();
0074 CBDF rcall _Stop
0076 .dbline 68
0076 ; return 1;//发送成功,返回1;
0076 01E0 ldi R16,1
0078 .dbline -2
0078 L15:
0078 00D0 rcall pop_gset1
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r data 20 c
007C .dbend
007C .dbfunc e Init_Io _Init_Io fV
.even
007C _Init_Io::
007C .dbline -1
007C .dbline 73
007C ;
007C ; }
007C ;
007C ; void Init_Io(void)
007C ; {
007C .dbline 74
007C ; DDRC&=~((1<<PC0)&(1<<PC1)&(1<<PC2));
007C 84B3 in R24,0x14
007E 8F7F andi R24,255
0080 84BB out 0x14,R24
0082 .dbline 75
0082 ; PORTC|= (1<<PC0)|(1<<PC1)|(1<<PC2);
0082 85B3 in R24,0x15
0084 8760 ori R24,7
0086 85BB out 0x15,R24
0088 .dbline 76
0088 ; TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
0088 84E4 ldi R24,68
008A 86BF out 0x36,R24
008C .dbline 77
008C ; TWBR=32;//波特率 100K 8M晶振
008C 80E2 ldi R24,32
008E 80B9 out 0x0,R24
0090 .dbline -2
0090 .dbline 78
0090 ; }
0090 L25:
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbend
0092 .dbfunc e main _main fV
0092 ; temp -> <dead>
.even
0092 _main::
0092 .dbline -1
0092 .dbline 80
0092 ; void main()
0092 ; {
0092 .dbline 82
0092 ; uchar temp;
0092 ; Init_Io();
0092 F4DF rcall _Init_Io
0094 .dbline 83
0094 ; uart_init();
0094 00D0 rcall _uart_init
0096 .dbline 85
0096 ; // puts("串口工作");
0096 ; SendByte(0x30);
0096 00E3 ldi R16,48
0098 D1DF rcall _SendByte
009A L27:
009A .dbline 87
009A .dbline 88
009A .dbline 89
009A L28:
009A .dbline 86
009A FFCF rjmp L27
009C X0:
009C .dbline -2
009C .dbline 96
009C ; while(1)
009C ; {
009C ; ;
009C ; }
009C ; /*for(temp=0;temp<10;temp++)
009C ; {
009C ; SendByte(temp+0x30);
009C ; Delay_nms(10);
009C ; }
009C ; */
009C ; }
009C L26:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbsym l temp 1 c
009E .dbend
.area data(ram, con, rel)
0000 .dbfile E:\atmega16子函数\TWI_master\main.c
0000 L24:
0000 .blkb 11
.area idata
0000 44617465204572726F7200 .byte 'D,'a,'t,'e,32,'E,'r,'r,'o,'r,0
.area data(ram, con, rel)
000B .dbfile E:\atmega16子函数\TWI_master\main.c
000B L21:
000B .blkb 11
.area idata
000B 534C415F572052524F5200 .byte 'S,'L,'A,95,'W,32,'R,'R,'O,'R,0
.area data(ram, con, rel)
0016 .dbfile E:\atmega16子函数\TWI_master\main.c
0016 L18:
0016 .blkb 12
.area idata
0016 5374617274204552526F7200 .byte 'S,'t,'a,'r,'t,32,'E,'R,'R,'o,'r,0
.area data(ram, con, rel)
0022 .dbfile E:\atmega16子函数\TWI_master\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -