📄 slave.lis
字号:
.module slave.c
.area text(rom, con, rel)
0000 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
0000 .dbfunc e IoInit _IoInit fV
.even
0000 _IoInit::
0000 .dbline -1
0000 .dbline 27
0000 ; /*
0000 ; 文件名:slave.c
0000 ; 两个Mega8间的TWI通信实验从模式单片机程序
0000 ;
0000 ; 外部4MHz晶振
0000 ;
0000 ; 芯艺 2004-09-02 --- 2004-09-03
0000 ; */
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <stdio.h>
0000 ; #include"delay.h"
0000 ; #include"twi.h"
0000 ; #define uint unsigned int
0000 ; #define uchar unsigned char
0000 ; #define uchar unsigned char
0000 ;
0000 ; #define TWI_ADDRESS 0X32
0000 ;
0000 ; /*
0000 ; #define TW_STATUS (TWSR&0xf8)
0000 ; #define TW_WRITE 0xa0
0000 ; #define TW_READ 0xa1
0000 ; */
0000 ; //初始化
0000 ; void IoInit(void)
0000 ; {
0000 .dbline 29
0000 ; //使能SCL、SDA引脚内部上拉电阻
0000 ; DDRC=0;
0000 2224 clr R2
0002 24BA out 0x14,R2
0004 .dbline 30
0004 ; PORTC=0X30;
0004 80E3 ldi R24,48
0006 85BB out 0x15,R24
0008 .dbline 33
0008 ;
0008 ; //TWI接口初始化,从器件模式
0008 ; TWAR=TWI_ADDRESS | (1<<TWGCE);
0008 83E3 ldi R24,51
000A 82B9 out 0x2,R24
000C .dbline 34
000C ; TWCR=(1<<TWEA) | (1<<TWEN);
000C 84E4 ldi R24,68
000E 86BF out 0x36,R24
0010 .dbline -2
0010 .dbline 35
0010 ; }
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e main _main fV
0012 ; j -> R20
0012 ; i -> R10
.even
0012 _main::
0012 .dbline -1
0012 .dbline 38
0012 ;
0012 ; void main(void)
0012 ; {
0012 .dbline 39
0012 ; uchar i,j=0;
0012 4427 clr R20
0014 .dbline 41
0014 ;
0014 ; IoInit();
0014 F5DF rcall _IoInit
0016 .dbline 42
0016 ; uart_init();
0016 00D0 rcall _uart_init
0018 .dbline 43
0018 ; printf("START\n");
0018 00E0 ldi R16,<L3
001A 10E0 ldi R17,>L3
001C 00D0 rcall _printf
001E 3AC0 rjmp L5
0020 L4:
0020 .dbline 45
0020 ; while(1)
0020 ; {
0020 .dbline 47
0020 ; //while ((TWCR & (1<<TWINT)) == 0); //完成一次接收
0020 ; i=TW_STATUS; //看看状态
0020 81B1 in R24,0x1
0022 887F andi R24,248
0024 A82E mov R10,R24
0026 .dbline 48
0026 ; Delay_nms(100);
0026 04E6 ldi R16,100
0028 10E0 ldi R17,0
002A 00D0 rcall _Delay_nms
002C .dbline 49
002C ; switch(i)
002C 6A2D mov R22,R10
002E 7727 clr R23
0030 6038 cpi R22,128
0032 E0E0 ldi R30,0
0034 7E07 cpc R23,R30
0036 99F0 breq L12
0038 80E8 ldi R24,128
003A 90E0 ldi R25,0
003C 8617 cp R24,R22
003E 9707 cpc R25,R23
0040 2CF0 brlt L21
0042 L20:
0042 6036 cpi R22,96
0044 E0E0 ldi R30,0
0046 7E07 cpc R23,R30
0048 31F0 breq L10
004A 1DC0 rjmp L7
004C L21:
004C 603A cpi R22,160
004E E0E0 ldi R30,0
0050 7E07 cpc R23,R30
0052 A1F0 breq L17
0054 18C0 rjmp L7
0056 X0:
0056 .dbline 50
0056 ; {
0056 L10:
0056 .dbline 52
0056 ; case TW_SR_SLA_ACK:
0056 ; printf("START\nSLA+W\n");
0056 00E0 ldi R16,<L11
0058 10E0 ldi R17,>L11
005A 00D0 rcall _printf
005C .dbline 53
005C ; break;
005C 19C0 rjmp L8
005E L12:
005E .dbline 55
005E ; case TW_SR_DATA_ACK:
005E ; if(j==0)
005E 4423 tst R20
0060 31F4 brne L13
0062 .dbline 56
0062 ; printf("收到:%d",TWDR);
0062 23B1 in R18,0x3
0064 3327 clr R19
0066 00E0 ldi R16,<L15
0068 10E0 ldi R17,>L15
006A 00D0 rcall _printf
006C 05C0 rjmp L14
006E L13:
006E .dbline 58
006E ; else
006E ; printf(" %d",TWDR);
006E 23B1 in R18,0x3
0070 3327 clr R19
0072 00E0 ldi R16,<L16
0074 10E0 ldi R17,>L16
0076 00D0 rcall _printf
0078 L14:
0078 .dbline 59
0078 ; j++;
0078 4395 inc R20
007A .dbline 60
007A ; break;
007A 0AC0 rjmp L8
007C L17:
007C .dbline 62
007C ; case TW_SR_STOP:
007C ; printf(";\nSTOP\n\n");
007C 00E0 ldi R16,<L18
007E 10E0 ldi R17,>L18
0080 00D0 rcall _printf
0082 .dbline 63
0082 ; j=0;
0082 4427 clr R20
0084 .dbline 64
0084 ; break;
0084 05C0 rjmp L8
0086 L7:
0086 .dbline 66
0086 ; default:
0086 ; printf("error:%x",(int)i);
0086 2A2D mov R18,R10
0088 3327 clr R19
008A 00E0 ldi R16,<L19
008C 10E0 ldi R17,>L19
008E 00D0 rcall _printf
0090 .dbline 67
0090 ; break;
0090 L8:
0090 .dbline 69
0090 84EC ldi R24,196
0092 86BF out 0x36,R24
0094 .dbline 70
0094 L5:
0094 .dbline 44
0094 C5CF rjmp L4
0096 X1:
0096 .dbline -2
0096 .dbline 72
0096 ; }
0096 ; TWCR=(1<<TWEA) | (1<<TWEN)|(1<<TWINT); //清除TWINT位
0096 ; }
0096 ;
0096 ; }
0096 L2:
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r j 20 c
0098 .dbsym r i 10 c
0098 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
0000 L19:
0000 .blkb 9
.area idata
0000 6572726F723A257800 .byte 'e,'r,'r,'o,'r,58,37,'x,0
.area data(ram, con, rel)
0009 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
0009 L18:
0009 .blkb 9
.area idata
0009 3B0A53544F500A0A00 .byte 59,10,'S,'T,'O,'P,10,10,0
.area data(ram, con, rel)
0012 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
0012 L16:
0012 .blkb 4
.area idata
0012 20256400 .byte 32,37,'d,0
.area data(ram, con, rel)
0016 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
0016 L15:
0016 .blkb 8
.area idata
0016 CAD5B5BD3A256400 .byte 202,213,181,189,58,37,'d,0
.area data(ram, con, rel)
001E .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
001E L11:
001E .blkb 13
.area idata
001E 53544152540A534C412B570A00 .byte 'S,'T,'A,'R,'T,10,'S,'L,'A,43,'W,10,0
.area data(ram, con, rel)
002B .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
002B L3:
002B .blkb 7
.area idata
002B 53544152540A00 .byte 'S,'T,'A,'R,'T,10,0
.area data(ram, con, rel)
0032 .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -