📄 twi.lst
字号:
__start:
__text_start:
002F E5CF LDI R28,0x5F
0030 E0D4 LDI R29,4
0031 BFCD OUT 0x3D,R28
0032 BFDE OUT 0x3E,R29
0033 51C0 SUBI R28,0x10
0034 40D0 SBCI R29,0
0035 EA0A LDI R16,0xAA
0036 8308 STD Y+0,R16
0037 2400 CLR R0
0038 E8EF LDI R30,0x8F
0039 E0F0 LDI R31,0
003A E010 LDI R17,0
003B 38EF CPI R30,0x8F
003C 07F1 CPC R31,R17
003D F011 BEQ 0x0040
003E 9201 ST R0,Z+
003F CFFB RJMP 0x003B
0040 8300 STD Z+0,R16
0041 E2EE LDI R30,0x2E
0042 E0F0 LDI R31,0
0043 E6A0 LDI R26,0x60
0044 E0B0 LDI R27,0
0045 E010 LDI R17,0
0046 35ED CPI R30,0x5D
0047 07F1 CPC R31,R17
0048 F021 BEQ 0x004D
0049 95C8 LPM
004A 9631 ADIW R30,1
004B 920D ST R0,X+
004C CFF9 RJMP 0x0046
004D D061 RCALL _main
_exit:
004E CFFF RJMP _exit
FILE: D:\AVR\代码\ICCdaima\TWI\delay.c
(0001)
(0002)
(0003) void Delay_nus(unsigned int i)
(0004) {
(0005) for(;i>1;i--){;}
_Delay_nus:
i --> R16
004F C002 RJMP 0x0052
0050 5001 SUBI R16,1
0051 4010 SBCI R17,0
0052 E081 LDI R24,1
0053 E090 LDI R25,0
0054 1780 CP R24,R16
0055 0791 CPC R25,R17
0056 F3C8 BCS 0x0050
(0006) }
0057 9508 RET
_Delay_1ms:
i --> R20
0058 D0FB RCALL push_gset1
(0007) void Delay_1ms(void)
(0008) {unsigned i;
(0009) for(i=1000;i>1;i--)
0059 EE48 LDI R20,0xE8
005A E053 LDI R21,3
005B C005 RJMP 0x0061
(0010) {Delay_nus(1);
005C E001 LDI R16,1
005D E010 LDI R17,0
005E DFF0 RCALL _Delay_nus
005F 5041 SUBI R20,1
0060 4050 SBCI R21,0
0061 D12A RCALL 0x018C
0062 F3C8 BCS 0x005C
(0011) }
(0012) }
0063 D0F3 RCALL pop_gset1
0064 9508 RET
_Delay_nms:
i --> R20
0065 D0EE RCALL push_gset1
0066 01A8 MOVW R20,R16
(0013) void Delay_nms(unsigned int i)
(0014) {
(0015) for(;i>1;i--)
0067 C003 RJMP 0x006B
(0016) {Delay_1ms();}
0068 DFEF RCALL _Delay_1ms
0069 5041 SUBI R20,1
006A 4050 SBCI R21,0
006B D120 RCALL 0x018C
006C F3D8 BCS 0x0068
(0017) }
006D D0E9 RCALL pop_gset1
006E 9508 RET
FILE: D:\AVR\代码\ICCdaima\TWI\master_1.c
(0001) #include"iom8v.h"
(0002) #include"UART.h"
(0003) #define uchar unsigned char
(0004) #define STATUS (TWSR&0xf8)
(0005) #define SLA_W 0x32
(0006) #define SLA_R 0x33
(0007) #define SLAVER_ADDRESS 0x32
(0008) #define START 0x08
(0009) #define RE_START 0x10
(0010) #define MT_SLA_WRITE_ACK 0x18
(0011) #define MT_SLA_READ_ACK 0x40
(0012) #define MT_DATA_ACK 0x28
(0013) #define MT_READ_ACK 0x58
(0014)
(0015)
(0016) void Start(void)
(0017) {
(0018) TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
_Start:
006F EA84 LDI R24,0xA4
0070 D116 RCALL <created procedures>
(0019) while(!(TWCR&(1<<TWINT)));
(0020) }
0071 9508 RET
(0021) void Stop(void)
(0022) {
(0023) TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
_Stop:
0072 E984 LDI R24,0x94
0073 BF86 OUT 0x36,R24
(0024) }
0074 9508 RET
(0025) void Load(uchar i)
(0026) {
(0027) TWDR=i;
_Load:
i --> R16
0075 B903 OUT 0x03,R16
(0028) TWCR=(1<<TWINT)|(1<<TWEN);
0076 E884 LDI R24,0x84
0077 D10F RCALL <created procedures>
(0029) while(!(TWCR&(1<<TWINT)));
(0030)
(0031) }
0078 9508 RET
(0032)
(0033) void Get(unsigned char *d)
(0034) {
(0035) TWCR=(1<<TWINT)|(1<<TWEN);
_Get:
d --> R16
0079 E884 LDI R24,0x84
007A D10C RCALL <created procedures>
(0036) while(!(TWCR&(1<<TWINT)));
(0037) *d= TWDR;
007B B023 IN R2,0x03
007C 01F8 MOVW R30,R16
007D 8220 STD Z+0,R2
(0038) }
007E 9508 RET
_ERROR:
state --> R20
007F D0D4 RCALL push_gset1
0080 2F40 MOV R20,R16
(0039) void ERROR(uchar state)
(0040) {Stop();
0081 DFF0 RCALL _Stop
(0041) }
0082 D0D4 RCALL pop_gset1
0083 9508 RET
_SendByte:
data --> R20
0084 D0CF RCALL push_gset1
0085 2F40 MOV R20,R16
(0042)
(0043) /*写一个字节data,成功则返回1,否则
(0044) 返回0*/
(0045) uchar SendByte(uchar data)
(0046) {
(0047) //启动I2C
(0048) Start();
0086 DFE8 RCALL _Start
(0049) if(STATUS!=START) //{ERROR(STATUS);return 0;}
0087 B181 IN R24,0x01
0088 7F88 ANDI R24,0xF8
0089 3088 CPI R24,0x8
008A F019 BEQ 0x008E
(0050) puts("Start ERRor");
008B E803 LDI R16,0x83
008C E010 LDI R17,0
008D D07F RCALL _puts
(0051) //发送从机地址(写),等待回应, 错误检测
(0052) Load(0);
008E 2700 CLR R16
008F DFE5 RCALL _Load
(0053) if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
0090 B181 IN R24,0x01
0091 7F88 ANDI R24,0xF8
0092 3188 CPI R24,0x18
0093 F019 BEQ 0x0097
(0054) puts("SLA_W RROR");
0094 E708 LDI R16,0x78
0095 E010 LDI R17,0
0096 D076 RCALL _puts
(0055) /*
(0056) //发送EEPROM地址,等待回应,错误检测
(0057) Load(addr);
(0058) if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
(0059) */
(0060) //发送数据,等待回应,错误检测
(0061) Load(data);
0097 2F04 MOV R16,R20
0098 DFDC RCALL _Load
(0062) if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
0099 B181 IN R24,0x01
009A 7F88 ANDI R24,0xF8
009B 3288 CPI R24,0x28
009C F019 BEQ 0x00A0
(0063) puts("Date Error");
009D E60D LDI R16,0x6D
009E E010 LDI R17,0
009F D06D RCALL _puts
(0064) Stop();
00A0 DFD1 RCALL _Stop
(0065) return 1;//发送成功,返回1;
00A1 E001 LDI R16,1
00A2 D0B4 RCALL pop_gset1
00A3 9508 RET
(0066)
(0067) }
(0068)
(0069) void Init_Io(void)
(0070) {
(0071) DDRC&=~((1<<PC4)&(1<<PC5)&(1<<PC2));
_Init_Io:
00A4 B384 IN R24,0x14
00A5 7F8F ANDI R24,0xFF
00A6 BB84 OUT 0x14,R24
(0072) PORTC|= (1<<PC4)|(1<<PC5)|(1<<PC2);
00A7 B385 IN R24,0x15
00A8 6384 ORI R24,0x34
00A9 BB85 OUT 0x15,R24
(0073) TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
00AA E484 LDI R24,0x44
00AB BF86 OUT 0x36,R24
(0074) TWBR=32;//波特率 100K 8M晶振
00AC E280 LDI R24,0x20
00AD B980 OUT 0x00,R24
(0075) }
00AE 9508 RET
(0076) void main()
(0077) {
(0078) uchar temp;
(0079) Init_Io();
_main:
temp --> R20
00AF DFF4 RCALL _Init_Io
(0080) uart_init();
00B0 D07C RCALL _uart_init
(0081) puts("串口工作");
00B1 E604 LDI R16,0x64
00B2 E010 LDI R17,0
00B3 D059 RCALL _puts
00B4 C00B RJMP 0x00C0
(0082) while(1)
(0083) for(temp=0;temp<10;temp++)
00B5 2744 CLR R20
00B6 C007 RJMP 0x00BE
(0084) {
(0085) SendByte(temp+0x30);
00B7 2F04 MOV R16,R20
00B8 5D00 SUBI R16,0xD0
00B9 DFCA RCALL _SendByte
(0086) Delay_nms(10);
00BA E00A LDI R16,0xA
00BB E010 LDI R17,0
00BC DFA8 RCALL _Delay_nms
00BD 9543 INC R20
00BE 304A CPI R20,0xA
00BF F3B8 BCS 0x00B7
00C0 CFF4 RJMP 0x00B5
(0087) }
(0088)
(0089) }
00C1 9508 RET
_put:
d --> Y+0
i --> R20
00C2 D091 RCALL push_gset1
00C3 01A8 MOVW R20,R16
00C4 9728 SBIW R28,0x8
FILE: D:\AVR\代码\ICCdaima\TWI\UART.c
(0001) #include <iom8v.h>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -