📄 test.lst
字号:
__text_start:
__start:
65 E5CF LDI R28,0x5F
66 E0D4 LDI R29,4
67 BFCD OUT 0x3D,R28
68 BFDE OUT 0x3E,R29
69 51C0 SUBI R28,0x10
6A 40D0 SBCI R29,0
6B EA0A LDI R16,0xAA
6C 8308 STD Y+0,R16
6D 2400 CLR R0
6E E7E1 LDI R30,0x71
6F E0F0 LDI R31,0
70 E010 LDI R17,0
71 37E1 CPI R30,0x71
72 07F1 CPC R31,R17
73 F011 BEQ 0x0076
74 9201 ST R0,Z+
75 CFFB RJMP 0x0071
76 8300 STD Z+0,R16
77 EBE8 LDI R30,0xB8
78 E0F0 LDI R31,0
79 E6A0 LDI R26,0x60
7A E0B0 LDI R27,0
7B E010 LDI R17,0
7C E000 LDI R16,0
7D BF0B OUT 0x3B,R16
7E 3CE9 CPI R30,0xC9
7F 07F1 CPC R31,R17
80 F021 BEQ 0x0085
81 95C8 LPM
82 9631 ADIW R30,1
83 920D ST R0,X+
84 CFF9 RJMP 0x007E
85 D17C RCALL _main
_exit:
86 CFFF RJMP _exit
FILE: D:\iccavr\mega16\11\24CXX\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007) asm("nop");
_delay_1us:
87 0000 NOP
88 9508 RET
_delay_us:
t --> R20
89 934A ST R20,-Y
8A 935A ST R21,-Y
8B 01A8 MOVW R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus :长延时函数
(0011) 输入参数: t :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
8C C001 RJMP 0x008E
(0015) while(t--)
(0016) delay_1us();
8D DFF9 RCALL _delay_1us
8E 011A MOVW R2,R20
8F 5041 SUBI R20,1
90 4050 SBCI R21,0
91 2022 TST R2
92 F7D1 BNE 0x008D
93 2033 TST R3
94 F7C1 BNE 0x008D
95 9159 LD R21,Y+
96 9149 LD R20,Y+
97 9508 RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023) unsigned int i;
(0024) for(i=0;i<1140;i++);
_delay_1ms:
i0 --> R16
98 2700 CLR R16
99 2711 CLR R17
9A C002 RJMP 0x009D
9B 5F0F SUBI R16,0xFF
9C 4F1F SBCI R17,0xFF
9D 3704 CPI R16,0x74
9E E0E4 LDI R30,4
9F 071E CPC R17,R30
A0 F3D0 BCS 0x009B
A1 9508 RET
_delay_ms:
t --> R20
A2 934A ST R20,-Y
A3 935A ST R21,-Y
A4 01A8 MOVW R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms :长延时函数
(0028) 输入参数: t :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
A5 C001 RJMP 0x00A7
(0032) while(t--)
(0033) delay_1ms();
A6 DFF1 RCALL _delay_1ms
A7 011A MOVW R2,R20
A8 5041 SUBI R20,1
A9 4050 SBCI R21,0
AA 2022 TST R2
AB F7D1 BNE 0x00A6
AC 2033 TST R3
AD F7C1 BNE 0x00A6
AE 9159 LD R21,Y+
AF 9149 LD R20,Y+
B0 9508 RET
_WriteByte:
ltg --> Y,+0
Wdata --> R10
RomAddress --> R12
B1 D1D9 RCALL push_xgset003C
B2 2EA2 MOV R10,R18
B3 0168 MOVW R12,R16
B4 9722 SBIW R28,2
FILE: D:\iccavr\mega16\11\24CXX\24cxx_twi.h
(0001) typedef unsigned char uint8;
(0002) typedef unsigned int uint16;
(0003)
(0004) typedef union reccnt
(0005) {
(0006) uint16 rcnt;
(0007) uint8 rcntl[2];
(0008) }LngToChar;
(0009)
(0010) #define wr_24c64_cmd 0xA0
(0011) #define rd_24c64_cmd 0xA1
(0012)
(0013) #define START 0x08
(0014) #define RE_START 0x10
(0015) #define MT_SLA_ACK 0x18
(0016) //#define MT_SLA_ACK 0x38
(0017) #define MT_SLA_NOACK 0x20
(0018) #define MT_DATA_ACK 0x28
(0019) #define MT_DATA_NOACK 0x30
(0020) #define MR_SLA_ACK 0x40
(0021) #define MR_SLA_NOACK 0x48
(0022) #define MR_DATA_ACK 0x50
(0023) #define MR_DATA_NOACK 0x58
(0024)
(0025) #define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0026) #define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
(0027) #define Wait() {while(!(TWCR&(1<<TWINT)));}
(0028) #define TestAck() (TWSR&0xf8)
(0029) #define SetAck() (TWCR|=(1<<TWEA))
(0030) #define SetNoAck() (TWCR&=~(1<<TWEA))
(0031) #define Twi() (TWCR=(1<<TWINT)|(1<<TWEN))
(0032) #define Write8Bit(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
(0033)
(0034) uint8 WriteByte(uint16 RomAddress,uint8 Wdata);
(0035) uint8 ReadByte(uint16 RomAddress);
(0036)
(0037) //******************************************
(0038) uint8 WriteByte(uint16 RomAddress,uint8 Wdata)
(0039) {
(0040) LngToChar ltg;
(0041)
(0042) ltg.rcnt=RomAddress;
B5 82D9 STD Y+1,R13
B6 82C8 STD Y+0,R12
(0043)
(0044) _CLI();
B7 94F8 BCLR 7
(0045) Start();//twi
B8 EA84 LDI R24,0xA4
B9 940E 02CF CALL <created procedures>
(0046) Wait();
(0047) if(TestAck()!=START) goto wr_exit;//ACK 0x08
BB 3088 CPI R24,0x8
BC F009 BEQ 0x00BE
BD C027 RJMP 0x00E5
(0048)
(0049) Write8Bit(wr_24c64_cmd);//
BE EA80 LDI R24,0xA0
BF B983 OUT 0x03,R24
C0 E884 LDI R24,0x84
C1 940E 02CF CALL <created procedures>
(0050) Wait();
(0051) if(TestAck()!=MT_SLA_ACK) goto wr_exit;//ACK MT_SLA_ACK 0x18
C3 3188 CPI R24,0x18
C4 F009 BEQ 0x00C6
C5 C01F RJMP 0x00E5
(0052)
(0053) Write8Bit(ltg.rcntl[1]); //写操作单元的高8位地址
C6 8029 LDD R2,Y+1
C7 B823 OUT 0x03,R2
C8 E884 LDI R24,0x84
C9 940E 02CF CALL <created procedures>
(0054) Wait();
(0055) if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK
CB 3288 CPI R24,0x28
CC F009 BEQ 0x00CE
CD C017 RJMP 0x00E5
(0056)
(0057) Write8Bit(ltg.rcntl[0]); //写操作单元的低8位地址
CE 8028 LDD R2,Y+0
CF B823 OUT 0x03,R2
D0 E884 LDI R24,0x84
D1 940E 02CF CALL <created procedures>
(0058) Wait();
(0059) if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK
D3 3288 CPI R24,0x28
D4 F009 BEQ 0x00D6
D5 C00F RJMP 0x00E5
(0060)
(0061) Write8Bit(Wdata);//
D6 B8A3 OUT 0x03,R10
D7 E884 LDI R24,0x84
D8 940E 02CF CALL <created procedures>
(0062) Wait();
(0063) if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK
DA 3288 CPI R24,0x28
DB F009 BEQ 0x00DD
DC C008 RJMP 0x00E5
(0064)
(0065) Stop();//
DD E984 LDI R24,0x94
DE BF86 OUT 0x36,R24
(0066) delay_ms(30);//
DF E10E LDI R16,0x1E
E0 E010 LDI R17,0
E1 DFC0 RCALL _delay_ms
(0067) _SEI();
E2 9478 BSET 7
(0068) return 0;
E3 2700 CLR R16
E4 C004 RJMP 0x00E9
(0069) wr_exit://出错退出
(0070) Stop();//
E5 E984 LDI R24,0x94
E6 BF86 OUT 0x36,R24
(0071) _SEI();
E7 9478 BSET 7
(0072) return 1;
E8 E001 LDI R16,1
E9 9622 ADIW R28,2
EA C190 RJMP pop_xgset003C
_ReadByte:
ltg --> Y,+0
temp0 --> R10
RomAddress --> R16
EB 92AA ST R10,-Y
EC 9722 SBIW R28,2
(0073) }
(0074)
(0075) //******************************************
(0076) uint8 ReadByte(uint16 RomAddress)
(0077) {
(0078) uint8 temp;
(0079) LngToChar ltg;
(0080) _CLI();
ED 94F8 BCLR 7
(0081) ltg.rcnt=RomAddress;
EE 8319 STD Y+1,R17
EF 8308 STD Y+0,R16
(0082)
(0083) Start();
F0 EA84 LDI R24,0xA4
F1 940E 02CF CALL <created procedures>
(0084) Wait();
(0085) if (TestAck()!=START) goto re_exit;//ACK
F3 3088 CPI R24,0x8
F4 F009 BEQ 0x00F6
F5 C032 RJMP 0x0128
(0086)
(0087) Write8Bit(wr_24c64_cmd);//
F6 EA80 LDI R24,0xA0
F7 B983 OUT 0x03,R24
F8 E884 LDI R24,0x84
F9 940E 02CF CALL <created procedures>
(0088) Wait();
(0089) if (TestAck()!=MT_SLA_ACK) goto re_exit;//ACK
FB 3188 CPI R24,0x18
FC F009 BEQ 0x00FE
FD C02A RJMP 0x0128
(0090)
(0091) Write8Bit(ltg.rcntl[1]); //写操作单元的高8位地址
FE 8029 LDD R2,Y+1
FF B823 OUT 0x03,R2
100 E884 LDI R24,0x84
101 940E 02CF CALL <created procedures>
(0092) Wait();
(0093) if (TestAck()!=MT_DATA_ACK) goto re_exit;
103 3288 CPI R24,0x28
104 F009 BEQ 0x0106
105 C022 RJMP 0x0128
(0094)
(0095) Write8Bit(ltg.rcntl[0]); //写操作单元的低8位地址
106 8028 LDD R2,Y+0
107 B823 OUT 0x03,R2
108 E884 LDI R24,0x84
109 940E 02CF CALL <created procedures>
(0096) Wait();
(0097) if (TestAck()!=MT_DATA_ACK) goto re_exit;
10B 3288 CPI R24,0x28
10C F009 BEQ 0x010E
10D C01A RJMP 0x0128
(0098)
(0099) Start();//twi
10E EA84 LDI R24,0xA4
10F 940E 02CF CALL <created procedures>
(0100) Wait();
(0101) if (TestAck()!=RE_START) goto re_exit;
111 3180 CPI R24,0x10
112 F009 BEQ 0x0114
113 C014 RJMP 0x0128
(0102)
(0103) Write8Bit(rd_24c64_cmd);//
114 EA81 LDI R24,0xA1
115 B983 OUT 0x03,R24
116 E884 LDI R24,0x84
117 940E 02CF CALL <created procedures>
(0104) Wait();
(0105) if(TestAck()!=MR_SLA_ACK) goto re_exit;//ACK
119 3480 CPI R24,0x40
11A F009 BEQ 0x011C
11B C00C RJMP 0x0128
(0106)
(0107) Twi();//启动主I2C读方式
11C E884 LDI R24,0x84
11D 940E 02CF CALL <created procedures>
(0108) Wait();
(0109) if(TestAck()!=MR_DATA_NOACK) goto re_exit;//ACK MR_DATA_NOACK 0x58
11F 3588 CPI R24,0x58
120 F009 BEQ 0x0122
121 C006 RJMP 0x0128
(0110)
(0111) temp=TWDR;// 读取I2C接收的数据
122 B0A3 IN R10,0x03
(0112) Stop();//I2C停止
123 E984 LDI R24,0x94
124 BF86 OUT 0x36,R24
(0113)
(0114) _SEI();
125 9478 BSET 7
(0115) return temp;
126 2D0A MOV R16,R10
127 C004 RJMP 0x012C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -