📄 ac15-2.lst
字号:
014A 0000 NOP
014B 0000 NOP
014C 0000 NOP
014D 0000 NOP
014E 0000 NOP
014F 0000 NOP
0150 0000 NOP
(0177) SDA_0;Some_NOP();
0151 98A9 CBI 0x15,1
0152 0000 NOP
0153 0000 NOP
0154 0000 NOP
0155 0000 NOP
0156 0000 NOP
0157 0000 NOP
0158 0000 NOP
0159 0000 NOP
(0178) SCL_0;Some_NOP();
015A 98A8 CBI 0x15,0
015B 0000 NOP
015C 0000 NOP
015D 0000 NOP
015E 0000 NOP
015F 0000 NOP
0160 0000 NOP
0161 0000 NOP
0162 0000 NOP
0163 9508 RET
(0179) }
(0180) //********************停止操作子函数*********************
(0181) void stop(void)
(0182) { DDRC=0x03;
_stop:
0164 E083 LDI R24,3
0165 BB84 OUT 0x14,R24
(0183) SDA_0;Some_NOP();
0166 98A9 CBI 0x15,1
0167 0000 NOP
0168 0000 NOP
0169 0000 NOP
016A 0000 NOP
016B 0000 NOP
016C 0000 NOP
016D 0000 NOP
016E 0000 NOP
(0184) SCL_1;Some_NOP();
016F 9AA8 SBI 0x15,0
0170 0000 NOP
0171 0000 NOP
0172 0000 NOP
0173 0000 NOP
0174 0000 NOP
0175 0000 NOP
0176 0000 NOP
0177 0000 NOP
(0185) SDA_1;Some_NOP();
0178 9AA9 SBI 0x15,1
0179 0000 NOP
017A 0000 NOP
017B 0000 NOP
017C 0000 NOP
017D 0000 NOP
017E 0000 NOP
017F 0000 NOP
0180 0000 NOP
0181 9508 RET
(0186) }
(0187) //************应答子函数*************
(0188) void ack(void)
(0189) { DDRC=0x03;
_ack:
0182 E083 LDI R24,3
0183 BB84 OUT 0x14,R24
(0190) SCL_1;Some_NOP();
0184 9AA8 SBI 0x15,0
0185 0000 NOP
0186 0000 NOP
0187 0000 NOP
0188 0000 NOP
0189 0000 NOP
018A 0000 NOP
018B 0000 NOP
018C 0000 NOP
(0191) SCL_0;Some_NOP();
018D 98A8 CBI 0x15,0
018E 0000 NOP
018F 0000 NOP
0190 0000 NOP
0191 0000 NOP
0192 0000 NOP
0193 0000 NOP
0194 0000 NOP
0195 0000 NOP
0196 9508 RET
_shift8:
j --> R20
i --> R22
a --> R16
0197 940E044A CALL push_gset2
(0192) }
(0193) //*************写入8位子函数*************
(0194) void shift8(char a)
(0195) {
(0196) uchar i,j;
(0197) DDRC=0x03;
0199 E083 LDI R24,3
019A BB84 OUT 0x14,R24
(0198) com_data=a;
019B 93000061 STS com_data,R16
(0199) for(i=0;i<8;i++)
019D 2766 CLR R22
019E C01F RJMP 0x01BE
(0200) {
(0201) j=com_data&0x80;
019F 91400061 LDS R20,com_data
01A1 7840 ANDI R20,0x80
(0202) if(j==0)SDA_0;
01A2 F411 BNE 0x01A5
01A3 98A9 CBI 0x15,1
01A4 C001 RJMP 0x01A6
(0203) else SDA_1;
01A5 9AA9 SBI 0x15,1
(0204)
(0205) SCL_1;Some_NOP();
01A6 9AA8 SBI 0x15,0
01A7 0000 NOP
01A8 0000 NOP
01A9 0000 NOP
01AA 0000 NOP
01AB 0000 NOP
01AC 0000 NOP
01AD 0000 NOP
01AE 0000 NOP
(0206) SCL_0;Some_NOP();
01AF 98A8 CBI 0x15,0
01B0 0000 NOP
01B1 0000 NOP
01B2 0000 NOP
01B3 0000 NOP
01B4 0000 NOP
01B5 0000 NOP
01B6 0000 NOP
01B7 0000 NOP
(0207) com_data=com_data<<1;
01B8 90200061 LDS R2,com_data
01BA 0C22 LSL R2
01BB 92200061 STS com_data,R2
01BD 9563 INC R22
01BE 3068 CPI R22,0x8
01BF F2F8 BCS 0x019F
01C0 940E043B CALL pop_gset2
01C2 9508 RET
_rd_24c01:
command --> R20
i --> R20
a --> R22
01C3 940E044A CALL push_gset2
01C5 2F60 MOV R22,R16
(0208) }
(0209) }
(0210) //**************读24C01A中a地址单元的数据************
(0211) uchar rd_24c01(char a)
(0212) {
(0213) uchar i,command;
(0214) DDRC=0x03;
01C6 E083 LDI R24,3
01C7 BB84 OUT 0x14,R24
(0215) SDA_1;Some_NOP();
01C8 9AA9 SBI 0x15,1
01C9 0000 NOP
01CA 0000 NOP
01CB 0000 NOP
01CC 0000 NOP
01CD 0000 NOP
01CE 0000 NOP
01CF 0000 NOP
01D0 0000 NOP
(0216) SCL_0;Some_NOP();
01D1 98A8 CBI 0x15,0
01D2 0000 NOP
01D3 0000 NOP
01D4 0000 NOP
01D5 0000 NOP
01D6 0000 NOP
01D7 0000 NOP
01D8 0000 NOP
01D9 0000 NOP
(0217) start();
01DA DF62 RCALL _start
(0218) command=160;
01DB EA40 LDI R20,0xA0
(0219) shift8(command);
01DC 2F04 MOV R16,R20
01DD DFB9 RCALL _shift8
(0220) ack();
01DE DFA3 RCALL _ack
(0221) shift8(a);
01DF 2F06 MOV R16,R22
01E0 DFB6 RCALL _shift8
(0222) ack();
01E1 DFA0 RCALL _ack
(0223) start();
01E2 DF5A RCALL _start
(0224) command=161;
01E3 EA41 LDI R20,0xA1
(0225) shift8(command);
01E4 2F04 MOV R16,R20
01E5 DFB1 RCALL _shift8
(0226) ack();
01E6 DF9B RCALL _ack
(0227)
(0228) SDA_1;Some_NOP();
01E7 9AA9 SBI 0x15,1
01E8 0000 NOP
01E9 0000 NOP
01EA 0000 NOP
01EB 0000 NOP
01EC 0000 NOP
01ED 0000 NOP
01EE 0000 NOP
01EF 0000 NOP
(0229) for(i=0;i<8;i++)
01F0 2744 CLR R20
01F1 C026 RJMP 0x0218
(0230) {
(0231) DDRC=0x01;
01F2 E081 LDI R24,1
01F3 BB84 OUT 0x14,R24
(0232) com_data=com_data<<1;
01F4 90200061 LDS R2,com_data
01F6 0C22 LSL R2
01F7 92200061 STS com_data,R2
(0233) SCL_1;Some_NOP();
01F9 9AA8 SBI 0x15,0
01FA 0000 NOP
01FB 0000 NOP
01FC 0000 NOP
01FD 0000 NOP
01FE 0000 NOP
01FF 0000 NOP
0200 0000 NOP
0201 0000 NOP
(0234) if(PIN_SDA==0)com_data&=0xfe;
0202 9999 SBIC 0x13,1
0203 C005 RJMP 0x0209
0204 2D82 MOV R24,R2
0205 7F8E ANDI R24,0xFE
0206 93800061 STS com_data,R24
0208 C005 RJMP 0x020E
(0235) else com_data|=0x01;
0209 91800061 LDS R24,com_data
020B 6081 ORI R24,1
020C 93800061 STS com_data,R24
(0236) SCL_0;Some_NOP();
020E 98A8 CBI 0x15,0
020F 0000 NOP
0210 0000 NOP
0211 0000 NOP
0212 0000 NOP
0213 0000 NOP
0214 0000 NOP
0215 0000 NOP
0216 0000 NOP
0217 9543 INC R20
0218 3048 CPI R20,0x8
0219 F2C0 BCS 0x01F2
(0237) }
(0238) stop();
021A DF49 RCALL _stop
(0239) return(com_data);
021B 91000061 LDS R16,com_data
021D 940E043B CALL pop_gset2
021F 9508 RET
_wr_24c01:
command --> R10
b --> R20
a --> R22
0220 940E0448 CALL push_gset3
0222 2F42 MOV R20,R18
0223 2F60 MOV R22,R16
(0240) }
(0241) //********将RAM中b地址单元的数据写入24C01A中a地址单元中***********
(0242) void wr_24c01(char a,char b)
(0243) {
(0244) uchar command;
(0245) DDRC=0x03;
0224 E083 LDI R24,3
0225 BB84 OUT 0x14,R24
(0246) SDA_1;Some_NOP();
0226 9AA9 SBI 0x15,1
0227 0000 NOP
0228 0000 NOP
0229 0000 NOP
022A 0000 NOP
022B 0000 NOP
022C 0000 NOP
022D 0000 NOP
022E 0000 NOP
(0247) SCL_0;Some_NOP();
022F 98A8 CBI 0x15,0
0230 0000 NOP
0231 0000 NOP
0232 0000 NOP
0233 0000 NOP
0234 0000 NOP
0235 0000 NOP
0236 0000 NOP
0237 0000 NOP
(0248) start();
0238 DF04 RCALL _start
(0249) command=160;
0239 EA80 LDI R24,0xA0
023A 2EA8 MOV R10,R24
(0250) shift8(command);
023B 2F08 MOV R16,R24
023C DF5A RCALL _shift8
(0251) ack();
023D DF44 RCALL _ack
(0252) shift8(a);
023E 2F06 MOV R16,R22
023F DF57 RCALL _shift8
(0253) ack();
0240 DF41 RCALL _ack
(0254) shift8(b);
0241 2F04 MOV R16,R20
0242 DF54 RCALL _shift8
(0255) ack();
0243 DF3E RCALL _ack
(0256) stop();
0244 DF1F RCALL _stop
(0257) Some_NOP();
0245 0000 NOP
0246 0000 NOP
0247 0000 NOP
0248 0000 NOP
0249 0000 NOP
024A 0000 NOP
024B 0000 NOP
024C 0000 NOP
024D 940E043E CALL pop_gset3
024F 9508 RET
_delay_iic:
i --> R20
n --> R16
0250 940E044C CALL push_gset1
(0258) }
(0259) //**************延时子函数***********
(0260) void delay_iic(int n)
(0261) {
(0262) int i;
(0263) for(i=1;i<n;i++){;}
0252 E041 LDI R20,1
0253 E050 LDI R21,0
0254 C002 RJMP 0x0257
0255 5F4F SUBI R20,0xFF
0256 4F5F SBCI R21,0xFF
0257 1740 CP R20,R16
0258 0751 CPC R21,R17
0259 F3DC BLT 0x0255
025A 940E044F CALL pop_gset1
025C 9508 RET
(0264) }
(0265)
(0266) /**************定时器1初始化****************/
(0267) void timer1_init(void)
(0268) {
(0269) TCNT1H = 0xF3; //setup
_timer1_init:
025D EF83 LDI R24,0xF3
025E BD8D OUT 0x2D,R24
(0270) TCNT1L = 0xCB;
025F EC8B LDI R24,0xCB
0260 BD8C OUT 0x2C,R24
(0271) TCCR1B = 0x04; //start Timer
0261 E084 LDI R24,4
0262 BD8E OUT 0x2E,R24
0263 9508 RET
_main:
key_val --> R22
0264 9722 SBIW R28,2
(0272) }
(0273) //******************************************
(0274) void main(void)
(0275) {
(0276) uchar key_val;
(0277) init_devices();
0265 D1B3 RCALL _init_devices
(0278) Delay_nms(400);
0266 E900 LDI R16,0x90
0267 E011 LDI R17,1
0268 DEA0 RCALL _Delay_nms
(0279) InitLcd();
0269 DE3D RCALL _InitLcd
(0280) LcdWriteCommand(0x01,1);
026A E021 LDI R18,1
026B E001 LDI R16,1
026C DE5C RCALL _LcdWriteCommand
(0281) LcdWriteCommand(0x0c,1);
026D E021 LDI R18,1
026E E00C LDI R16,0xC
026F DE59 RCALL _LcdWriteCommand
(0282) ePutstr(0,0,str0);
0270 E584 LDI R24,0x54
0271 E090 LDI R25,0
0272 8399 STD Y+1,R25
0273 8388 STD Y+0,R24
0274 2722 CLR R18
0275 2700 CLR R16
0276 DDE5 RCALL _ePutstr
(0283) Delay_nms(10);
0277 E00A LDI R16,0xA
0278 E010 LDI R17,0
0279 DE8F RCALL _Delay_nms
(0284) ePutstr(0,1,str1);
027A E685 LDI R24,0x65
027B E090 LDI R25,0
027C 8399 STD Y+1,R25
027D 8388 STD Y+0,R24
027E E021 LDI R18,1
027F 2700 CLR R16
0280 DDDB RCALL _ePutstr
(0285) Delay_nms(10);
0281 E00A LDI R16,0xA
0282 E010 LDI R17,0
0283 DE85 RCALL _Delay_nms
0284 C142 RJMP 0x03C7
(0286) /********************************************/
(0287) while(1)
(0288) {
(0289) DisplayOneChar(6,0,(time1.hour/10)+0x30);
0285 E01A LDI R17,0xA
0286 91000066 LDS R16,time1
0288 940E0425 CALL div8u
028A 2F80 MOV R24,R16
028B 5D80 SUBI R24,0xD0
028C 8388 STD Y+0,R24
028D 2722 CLR R18
028E E006 LDI R16,6
028F DE0B RCALL _DisplayOneChar
(0290) Delay_nms(10);
0290 E00A LDI R16,0xA
0291 E010 LDI R17,0
0292 DE76 RCALL _Delay_nms
(0291) DisplayOneChar(7,0,(time1.hour%10)+0x30);
0293 E01A LDI R17,0xA
0294 91000066 LDS R16,time1
0296 940E0423 CALL mod8u
0298 2F80 MOV R24,R16
0299 5D80 SUBI R24,0xD0
029A 8388 STD Y+0,R24
029B 2722 CLR R18
029C E007 LDI R16,7
029D DDFD RCALL _DisplayOneChar
(0292) Delay_nms(10);
029E E00A LDI R16,0xA
029F E010 LDI R17,0
02A0 DE68 RCALL _Delay_nms
(0293) DisplayOneChar(9,0,(time1.min/10)+0x30);
02A1 E01A LDI R17,0xA
02A2 91000067 LDS R16,time1+1
02A4 940E0425 CALL div8u
02A6 2F80 MOV R24,R16
02A7 5D80 SUBI R24,0xD0
02A8 8388 STD Y+0,R24
02A9 2722 CLR R18
02AA E009 LDI R16,0x9
02AB DDEF RCALL _DisplayOneChar
(0294) Delay_nms(10);
02AC E00A LDI R16,0xA
02AD E010 LDI R17,0
02AE DE5A RCALL _Delay_nms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -