📄 ac15-4.lst
字号:
(0176) 如果读失败返回0
(0177) *******************************************/
(0178) unsigned char i2c_Read(unsigned char RomAddress)
(0179) {
(0180) unsigned char temp;
(0181) Start();
0110 EA84 LDI R24,0xA4
0111 BF86 OUT 0x36,R24
(0182) Wait();
0112 B626 IN R2,0x36
0113 FE27 SBRS R2,7
0114 CFFD RJMP 0x0112
(0183) if (TestAck()!=START) return 0;
0115 B181 IN R24,0x01
0116 7F88 ANDI R24,0xF8
0117 3088 CPI R24,0x8
0118 F011 BEQ 0x011B
0119 2700 CLR R16
011A C040 RJMP 0x015B
(0184) Write8Bit(wr_device_add);
011B EA80 LDI R24,0xA0
011C B983 OUT 0x03,R24
011D E884 LDI R24,0x84
011E BF86 OUT 0x36,R24
(0185) Wait();
011F B626 IN R2,0x36
0120 FE27 SBRS R2,7
0121 CFFD RJMP 0x011F
(0186) if (TestAck()!=MT_SLA_ACK) return 0;
0122 B181 IN R24,0x01
0123 7F88 ANDI R24,0xF8
0124 3188 CPI R24,0x18
0125 F011 BEQ 0x0128
0126 2700 CLR R16
0127 C033 RJMP 0x015B
(0187) Write8Bit(RomAddress);
0128 B903 OUT 0x03,R16
0129 E884 LDI R24,0x84
012A BF86 OUT 0x36,R24
(0188) Wait();
012B B626 IN R2,0x36
012C FE27 SBRS R2,7
012D CFFD RJMP 0x012B
(0189) if (TestAck()!=MT_DATA_ACK) return 0;
012E B181 IN R24,0x01
012F 7F88 ANDI R24,0xF8
0130 3288 CPI R24,0x28
0131 F011 BEQ 0x0134
0132 2700 CLR R16
0133 C027 RJMP 0x015B
(0190) Start();
0134 EA84 LDI R24,0xA4
0135 BF86 OUT 0x36,R24
(0191) Wait();
0136 B626 IN R2,0x36
0137 FE27 SBRS R2,7
0138 CFFD RJMP 0x0136
(0192) if (TestAck()!=RE_START) return 0;
0139 B181 IN R24,0x01
013A 7F88 ANDI R24,0xF8
013B 3180 CPI R24,0x10
013C F011 BEQ 0x013F
013D 2700 CLR R16
013E C01C RJMP 0x015B
(0193) Write8Bit(rd_device_add);
013F EA81 LDI R24,0xA1
0140 B983 OUT 0x03,R24
0141 E884 LDI R24,0x84
0142 BF86 OUT 0x36,R24
(0194) Wait();
0143 B626 IN R2,0x36
0144 FE27 SBRS R2,7
0145 CFFD RJMP 0x0143
(0195) if(TestAck()!=MR_SLA_ACK) return 0;
0146 B181 IN R24,0x01
0147 7F88 ANDI R24,0xF8
0148 3480 CPI R24,0x40
0149 F011 BEQ 0x014C
014A 2700 CLR R16
014B C00F RJMP 0x015B
(0196) Twi();
014C E884 LDI R24,0x84
014D BF86 OUT 0x36,R24
(0197) Wait();
014E B626 IN R2,0x36
014F FE27 SBRS R2,7
0150 CFFD RJMP 0x014E
(0198) if(TestAck()!=MR_DATA_NOACK) return 0;
0151 B181 IN R24,0x01
0152 7F88 ANDI R24,0xF8
0153 3588 CPI R24,0x58
0154 F011 BEQ 0x0157
0155 2700 CLR R16
0156 C004 RJMP 0x015B
(0199) temp=TWDR;
0157 B143 IN R20,0x03
(0200) Stop();
0158 E984 LDI R24,0x94
0159 BF86 OUT 0x36,R24
(0201) return temp;
015A 2F04 MOV R16,R20
015B 940E03A4 CALL pop_gset1
015D 9508 RET
_i2c_Write:
Wdata --> R20
RomAddress --> R22
015E 940E039F CALL push_gset2
0160 2F42 MOV R20,R18
0161 2F60 MOV R22,R16
(0202) }
(0203)
(0204) /******************************************
(0205) I2C总线写一个字节
(0206) 返回0:写成功
(0207) 返回非0:写失败
(0208) *******************************************/
(0209) unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata)
(0210) {
(0211) Start();
0162 EA84 LDI R24,0xA4
0163 BF86 OUT 0x36,R24
(0212) Wait();
0164 B626 IN R2,0x36
0165 FE27 SBRS R2,7
0166 CFFD RJMP 0x0164
(0213) if(TestAck()!=START) return 1;
0167 B181 IN R24,0x01
0168 7F88 ANDI R24,0xF8
0169 3088 CPI R24,0x8
016A F011 BEQ 0x016D
016B E001 LDI R16,1
016C C02B RJMP 0x0198
(0214) Write8Bit(wr_device_add);
016D EA80 LDI R24,0xA0
016E B983 OUT 0x03,R24
016F E884 LDI R24,0x84
0170 BF86 OUT 0x36,R24
(0215) Wait();
0171 B626 IN R2,0x36
0172 FE27 SBRS R2,7
0173 CFFD RJMP 0x0171
(0216) if(TestAck()!=MT_SLA_ACK) return 1;
0174 B181 IN R24,0x01
0175 7F88 ANDI R24,0xF8
0176 3188 CPI R24,0x18
0177 F011 BEQ 0x017A
0178 E001 LDI R16,1
0179 C01E RJMP 0x0198
(0217) Write8Bit(RomAddress);
017A B963 OUT 0x03,R22
017B E884 LDI R24,0x84
017C BF86 OUT 0x36,R24
(0218) Wait();
017D B626 IN R2,0x36
017E FE27 SBRS R2,7
017F CFFD RJMP 0x017D
(0219) if(TestAck()!=MT_DATA_ACK) return 1;
0180 B181 IN R24,0x01
0181 7F88 ANDI R24,0xF8
0182 3288 CPI R24,0x28
0183 F011 BEQ 0x0186
0184 E001 LDI R16,1
0185 C012 RJMP 0x0198
(0220) Write8Bit(Wdata);
0186 B943 OUT 0x03,R20
0187 E884 LDI R24,0x84
0188 BF86 OUT 0x36,R24
(0221) Wait();
0189 B626 IN R2,0x36
018A FE27 SBRS R2,7
018B CFFD RJMP 0x0189
(0222) if(TestAck()!=MT_DATA_ACK) return 1;
018C B181 IN R24,0x01
018D 7F88 ANDI R24,0xF8
018E 3288 CPI R24,0x28
018F F011 BEQ 0x0192
0190 E001 LDI R16,1
0191 C006 RJMP 0x0198
(0223) Stop();
0192 E984 LDI R24,0x94
0193 BF86 OUT 0x36,R24
(0224) delay_ms(10);
0194 E00A LDI R16,0xA
0195 E010 LDI R17,0
0196 D1CA RCALL _delay_ms
(0225) return 0;
0197 2700 CLR R16
0198 940E0390 CALL pop_gset2
019A 9508 RET
(0226) }
(0227)
(0228) /*****************定时器1初始化*************/
(0229) void timer1_init(void)
(0230) {
(0231) TCNT1H = 0xF3; //setup
_timer1_init:
019B EF83 LDI R24,0xF3
019C BD8D OUT 0x2D,R24
(0232) TCNT1L = 0xCB;
019D EC8B LDI R24,0xCB
019E BD8C OUT 0x2C,R24
(0233) TCCR1B = 0x04; //start Timer
019F E084 LDI R24,4
01A0 BD8E OUT 0x2E,R24
01A1 9508 RET
_main:
key_val --> R22
01A2 9722 SBIW R28,2
(0234) }
(0235)
(0236) //******************************************
(0237) void main(void)
(0238) {
(0239) uchar key_val;
(0240) init_devices();
01A3 D1B3 RCALL _init_devices
(0241) delay_ms(400);
01A4 E900 LDI R16,0x90
01A5 E011 LDI R17,1
01A6 D1BA RCALL _delay_ms
(0242) InitLcd();
01A7 DEFF RCALL _InitLcd
(0243) LcdWriteCommand(0x01,1);
01A8 E021 LDI R18,1
01A9 E001 LDI R16,1
01AA DF1E RCALL _LcdWriteCommand
(0244) LcdWriteCommand(0x0c,1);
01AB E021 LDI R18,1
01AC E00C LDI R16,0xC
01AD DF1B RCALL _LcdWriteCommand
(0245) ePutstr(0,0,str0);
01AE E584 LDI R24,0x54
01AF E090 LDI R25,0
01B0 8399 STD Y+1,R25
01B1 8388 STD Y+0,R24
01B2 2722 CLR R18
01B3 2700 CLR R16
01B4 DEA7 RCALL _ePutstr
(0246) delay_ms(10);
01B5 E00A LDI R16,0xA
01B6 E010 LDI R17,0
01B7 D1A9 RCALL _delay_ms
(0247) ePutstr(0,1,str1);
01B8 E685 LDI R24,0x65
01B9 E090 LDI R25,0
01BA 8399 STD Y+1,R25
01BB 8388 STD Y+0,R24
01BC E021 LDI R18,1
01BD 2700 CLR R16
01BE DE9D RCALL _ePutstr
(0248) delay_ms(10);
01BF E00A LDI R16,0xA
01C0 E010 LDI R17,0
01C1 D19F RCALL _delay_ms
01C2 C142 RJMP 0x0305
(0249) /********************************************/
(0250) while(1)
(0251) {
(0252) DisplayOneChar(6,0,(time1.hour/10)+0x30);
01C3 E01A LDI R17,0xA
01C4 91000064 LDS R16,time1
01C6 940E037A CALL div8u
01C8 2F80 MOV R24,R16
01C9 5D80 SUBI R24,0xD0
01CA 8388 STD Y+0,R24
01CB 2722 CLR R18
01CC E006 LDI R16,6
01CD DECD RCALL _DisplayOneChar
(0253) delay_ms(10);
01CE E00A LDI R16,0xA
01CF E010 LDI R17,0
01D0 D190 RCALL _delay_ms
(0254) DisplayOneChar(7,0,(time1.hour%10)+0x30);
01D1 E01A LDI R17,0xA
01D2 91000064 LDS R16,time1
01D4 940E0378 CALL mod8u
01D6 2F80 MOV R24,R16
01D7 5D80 SUBI R24,0xD0
01D8 8388 STD Y+0,R24
01D9 2722 CLR R18
01DA E007 LDI R16,7
01DB DEBF RCALL _DisplayOneChar
(0255) delay_ms(10);
01DC E00A LDI R16,0xA
01DD E010 LDI R17,0
01DE D182 RCALL _delay_ms
(0256) DisplayOneChar(9,0,(time1.min/10)+0x30);
01DF E01A LDI R17,0xA
01E0 91000065 LDS R16,time1+1
01E2 940E037A CALL div8u
01E4 2F80 MOV R24,R16
01E5 5D80 SUBI R24,0xD0
01E6 8388 STD Y+0,R24
01E7 2722 CLR R18
01E8 E009 LDI R16,0x9
01E9 DEB1 RCALL _DisplayOneChar
(0257) delay_ms(10);
01EA E00A LDI R16,0xA
01EB E010 LDI R17,0
01EC D174 RCALL _delay_ms
(0258) DisplayOneChar(10,0,(time1.min%10)+0x30);
01ED E01A LDI R17,0xA
01EE 91000065 LDS R16,time1+1
01F0 940E0378 CALL mod8u
01F2 2F80 MOV R24,R16
01F3 5D80 SUBI R24,0xD0
01F4 8388 STD Y+0,R24
01F5 2722 CLR R18
01F6 E00A LDI R16,0xA
01F7 DEA3 RCALL _DisplayOneChar
(0259) delay_ms(10);
01F8 E00A LDI R16,0xA
01F9 E010 LDI R17,0
01FA D166 RCALL _delay_ms
(0260) DisplayOneChar(12,0,(time1.sec/10)+0x30);
01FB E01A LDI R17,0xA
01FC 91000066 LDS R16,time1+2
01FE 940E037A CALL div8u
0200 2F80 MOV R24,R16
0201 5D80 SUBI R24,0xD0
0202 8388 STD Y+0,R24
0203 2722 CLR R18
0204 E00C LDI R16,0xC
0205 DE95 RCALL _DisplayOneChar
(0261) delay_ms(10);
0206 E00A LDI R16,0xA
0207 E010 LDI R17,0
0208 D158 RCALL _delay_ms
(0262) DisplayOneChar(13,0,(time1.sec%10)+0x30);
0209 E01A LDI R17,0xA
020A 91000066 LDS R16,time1+2
020C 940E0378 CALL mod8u
020E 2F80 MOV R24,R16
020F 5D80 SUBI R24,0xD0
0210 8388 STD Y+0,R24
0211 2722 CLR R18
0212 E00D LDI R16,0xD
0213 DE87 RCALL _DisplayOneChar
(0263) delay_ms(10);
0214 E00A LDI R16,0xA
0215 E010 LDI R17,0
0216 D14A RCALL _delay_ms
(0264)
(0265) DisplayOneChar(7,1,(time2.hour/10)+0x30);
0217 E01A LDI R17,0xA
0218 91000060 LDS R16,time2
021A 940E037A CALL div8u
021C 2F80 MOV R24,R16
021D 5D80 SUBI R24,0xD0
021E 8388 STD Y+0,R24
021F E021 LDI R18,1
0220 E007 LDI R16,7
0221 DE79 RCALL _DisplayOneChar
(0266) delay_ms(10);
0222 E00A LDI R16,0xA
0223 E010 LDI R17,0
0224 D13C RCALL _delay_ms
(0267) DisplayOneChar(8,1,(time2.hour%10)+0x30);
0225 E01A LDI R17,0xA
0226 91000060 LDS R16,time2
0228 940E0378 CALL mod8u
022A 2F80 MOV R24,R16
022B 5D80 SUBI R24,0xD0
022C 8388 STD Y+0,R24
022D E021 LDI R18,1
022E E008 LDI R16,0x8
022F DE6B RCALL _DisplayOneChar
(0268) delay_ms(10);
0230 E00A LDI R16,0xA
0231 E010 LDI R17,0
0232 D12E RCALL _delay_ms
(0269) DisplayOneChar(10,1,(time2.min/10)+0x30);
0233 E01A LDI R17,0xA
0234 91000061 LDS R16,time2+1
0236 940E037A CALL div8u
0238 2F80 MOV R24,R16
0239 5D80 SUBI R24,0xD0
023A 8388 STD Y+0,R24
023B E021 LDI R18,1
023C E00A LDI R16,0xA
023D DE5D RCALL _DisplayOneChar
(0270) delay_ms(10);
023E E00A LDI R16,0xA
023F E010 LDI R17,0
0240 D120 RCALL _delay_ms
(0271) DisplayOneChar(11,1,(time2.min%10)+0x30);
0241 E01A LDI R17,0xA
0242 91000061 LDS R16,time2+1
0244 940E0378 CALL mod8u
0246 2F80 MOV R24,R16
0247 5D80 SUBI R24,0xD0
0248 8388 STD Y+0,R24
0249 E021 LDI R18,1
024A E00B LDI R16,0xB
024B DE4F RCALL _DisplayOneChar
(0272) delay_ms(10);
024C E00A LDI R16,0xA
024D E010 LDI R17,0
024E D112 RCALL _delay_ms
(0273) key_val=scan_key();
024F DEBC RCALL _scan_key
0250 2F60 MOV R22,R16
(0274) switch(key_val)
0251 2F46 MOV R20,R22
0252 2755 CLR R21
0253 3D4F CPI R20,0xDF
0254 E0E0 LDI R30,0
0255 075E CPC R21,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -