📄 main.lst
字号:
704 delay_ms:
210:main.c **** while (time>1);
211:main.c **** }
212:main.c **** void delay_ms(unsigned int time)//毫秒级延时程序
213:main.c **** {
706 .LM82:
707 /* prologue: frame size=0 */
708 017e CF93 push r28
709 0180 DF93 push r29
710 /* prologue end (size=2) */
711 0182 EC01 movw r28,r24
214:main.c **** while(time!=0)
215:main.c **** {
216:main.c **** delay_us(1000);
217:main.c **** time--;
713 .LM83:
714 0184 892B or r24,r25
715 0186 31F0 breq .L44
716 .L42:
718 .LM84:
719 0188 88EE ldi r24,lo8(1000)
720 018a 93E0 ldi r25,hi8(1000)
721 018c 0E94 0000 call delay_us
723 .LM85:
724 0190 2197 sbiw r28,1
725 0192 D1F7 brne .L42
726 .L44:
727 /* epilogue: frame size=0 */
728 0194 DF91 pop r29
729 0196 CF91 pop r28
730 0198 0895 ret
731 /* epilogue end (size=3) */
732 /* function delay_ms size 15 (10) */
734 .Lscope15:
738 .global i2c_Write
740 i2c_Write:
218:main.c **** }
219:main.c **** }
220:main.c **** unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress)
221:main.c **** {
742 .LM86:
743 /* prologue: frame size=0 */
744 /* prologue end (size=0) */
745 019a 282F mov r18,r24
222:main.c **** Start();//I2C启动
747 .LM87:
748 019c 84EA ldi r24,lo8(-92)
749 019e 86BF out 86-0x20,r24
750 .L46:
223:main.c **** Wait();
752 .LM88:
753 01a0 06B6 in __tmp_reg__,86-0x20
754 01a2 07FE sbrs __tmp_reg__,7
755 01a4 FDCF rjmp .L46
224:main.c **** if(TestAck()!=START) return 1;//ACK
757 .LM89:
758 01a6 81B1 in r24,33-0x20
759 01a8 9927 clr r25
760 01aa 887F andi r24,lo8(248)
761 01ac 9070 andi r25,hi8(248)
762 01ae 0897 sbiw r24,8
763 01b0 19F0 breq .L49
764 01b2 81E0 ldi r24,lo8(1)
765 01b4 90E0 ldi r25,hi8(1)
766 01b6 0895 ret
767 .L49:
225:main.c **** Write8Bit(wr_device_add);//写I2C从器件地址和写方式
769 .LM90:
770 01b8 80ED ldi r24,lo8(-48)
771 01ba 83B9 out 35-0x20,r24
772 01bc 84E8 ldi r24,lo8(-124)
773 01be 86BF out 86-0x20,r24
774 .L50:
226:main.c **** Wait();
776 .LM91:
777 01c0 06B6 in __tmp_reg__,86-0x20
778 01c2 07FE sbrs __tmp_reg__,7
779 01c4 FDCF rjmp .L50
227:main.c **** if(TestAck()!=MT_SLA_ACK) return 1;//ACK
781 .LM92:
782 01c6 81B1 in r24,33-0x20
783 01c8 9927 clr r25
784 01ca 887F andi r24,lo8(248)
785 01cc 9070 andi r25,hi8(248)
786 01ce 4897 sbiw r24,24
787 01d0 19F0 breq .L53
788 01d2 81E0 ldi r24,lo8(1)
789 01d4 90E0 ldi r25,hi8(1)
790 01d6 0895 ret
791 .L53:
228:main.c **** Write8Bit(RomAddress);//写24C02的ROM地址
793 .LM93:
794 01d8 63B9 out 35-0x20,r22
795 01da 84E8 ldi r24,lo8(-124)
796 01dc 86BF out 86-0x20,r24
797 .L54:
229:main.c **** Wait();
799 .LM94:
800 01de 06B6 in __tmp_reg__,86-0x20
801 01e0 07FE sbrs __tmp_reg__,7
802 01e2 FDCF rjmp .L54
230:main.c **** if(TestAck()!=MT_DATA_ACK) return 1;//ACK
804 .LM95:
805 01e4 81B1 in r24,33-0x20
806 01e6 9927 clr r25
807 01e8 887F andi r24,lo8(248)
808 01ea 9070 andi r25,hi8(248)
809 01ec 8897 sbiw r24,40
810 01ee 19F0 breq .L57
811 01f0 81E0 ldi r24,lo8(1)
812 01f2 90E0 ldi r25,hi8(1)
813 01f4 0895 ret
814 .L57:
231:main.c **** Write8Bit(Wdata);//写数据到24C02的ROM
816 .LM96:
817 01f6 23B9 out 35-0x20,r18
818 01f8 84E8 ldi r24,lo8(-124)
819 01fa 86BF out 86-0x20,r24
820 .L58:
232:main.c **** Wait();
822 .LM97:
823 01fc 06B6 in __tmp_reg__,86-0x20
824 01fe 07FE sbrs __tmp_reg__,7
825 0200 FDCF rjmp .L58
233:main.c **** if(TestAck()!=MT_DATA_ACK) return 1;//ACK
827 .LM98:
828 0202 81B1 in r24,33-0x20
829 0204 9927 clr r25
830 0206 887F andi r24,lo8(248)
831 0208 9070 andi r25,hi8(248)
832 020a 8897 sbiw r24,40
833 020c 19F0 breq .L61
834 020e 81E0 ldi r24,lo8(1)
835 0210 90E0 ldi r25,hi8(1)
836 0212 0895 ret
837 .L61:
234:main.c **** Stop();//I2C停止
839 .LM99:
840 0214 84E9 ldi r24,lo8(-108)
841 0216 86BF out 86-0x20,r24
235:main.c **** delay_ms(10);//延时等EEPROM写完
843 .LM100:
844 0218 8AE0 ldi r24,lo8(10)
845 021a 90E0 ldi r25,hi8(10)
846 021c 0E94 0000 call delay_ms
236:main.c **** return 0;
848 .LM101:
849 0220 80E0 ldi r24,lo8(0)
850 0222 90E0 ldi r25,hi8(0)
237:main.c **** }
852 .LM102:
853 0224 0895 ret
854 /* epilogue: frame size=0 */
855 0226 0895 ret
856 /* epilogue end (size=1) */
857 /* function i2c_Write size 75 (74) */
859 .Lscope16:
862 .global i2c_Read
864 i2c_Read:
238:main.c **** unsigned char i2c_Read(unsigned char RomAddress)
239:main.c **** {
866 .LM103:
867 /* prologue: frame size=0 */
868 /* prologue end (size=0) */
869 0228 282F mov r18,r24
240:main.c **** unsigned char temp;
241:main.c **** Start();//I2C启动
871 .LM104:
872 022a 84EA ldi r24,lo8(-92)
873 022c 86BF out 86-0x20,r24
874 .L63:
242:main.c **** Wait();
876 .LM105:
877 022e 06B6 in __tmp_reg__,86-0x20
878 0230 07FE sbrs __tmp_reg__,7
879 0232 FDCF rjmp .L63
243:main.c **** if (TestAck()!=START) return 0;//ACK
881 .LM106:
882 0234 81B1 in r24,33-0x20
883 0236 9927 clr r25
884 0238 887F andi r24,lo8(248)
885 023a 9070 andi r25,hi8(248)
886 023c 0897 sbiw r24,8
887 023e 19F0 breq .L66
888 0240 80E0 ldi r24,lo8(0)
889 0242 90E0 ldi r25,hi8(0)
890 0244 0895 ret
891 .L66:
244:main.c **** Write8Bit(wr_device_add);//写I2C从器件地址和写方式
893 .LM107:
894 0246 80ED ldi r24,lo8(-48)
895 0248 83B9 out 35-0x20,r24
896 024a 84E8 ldi r24,lo8(-124)
897 024c 86BF out 86-0x20,r24
898 .L67:
245:main.c **** Wait();
900 .LM108:
901 024e 06B6 in __tmp_reg__,86-0x20
902 0250 07FE sbrs __tmp_reg__,7
903 0252 FDCF rjmp .L67
246:main.c **** if (TestAck()!=MT_SLA_ACK) return 0;//ACK
905 .LM109:
906 0254 81B1 in r24,33-0x20
907 0256 9927 clr r25
908 0258 887F andi r24,lo8(248)
909 025a 9070 andi r25,hi8(248)
910 025c 4897 sbiw r24,24
911 025e 19F0 breq .L70
912 0260 80E0 ldi r24,lo8(0)
913 0262 90E0 ldi r25,hi8(0)
914 0264 0895 ret
915 .L70:
247:main.c **** Write8Bit(RomAddress);//写24C02的ROM地址
917 .LM110:
918 0266 23B9 out 35-0x20,r18
919 0268 84E8 ldi r24,lo8(-124)
920 026a 86BF out 86-0x20,r24
921 .L71:
248:main.c **** Wait();
923 .LM111:
924 026c 06B6 in __tmp_reg__,86-0x20
925 026e 07FE sbrs __tmp_reg__,7
926 0270 FDCF rjmp .L71
249:main.c **** if (TestAck()!=MT_DATA_ACK) return 0;
928 .LM112:
929 0272 81B1 in r24,33-0x20
930 0274 9927 clr r25
931 0276 887F andi r24,lo8(248)
932 0278 9070 andi r25,hi8(248)
933 027a 8897 sbiw r24,40
934 027c 19F0 breq .L74
935 027e 80E0 ldi r24,lo8(0)
936 0280 90E0 ldi r25,hi8(0)
937 0282 0895 ret
938 .L74:
250:main.c **** Start();//I2C重新启动
940 .LM113:
941 0284 84EA ldi r24,lo8(-92)
942 0286 86BF out 86-0x20,r24
943 .L75:
251:main.c **** Wait();
945 .LM114:
946 0288 06B6 in __tmp_reg__,86-0x20
947 028a 07FE sbrs __tmp_reg__,7
948 028c FDCF rjmp .L75
252:main.c **** if (TestAck()!=RE_START) return 0;
950 .LM115:
951 028e 81B1 in r24,33-0x20
952 0290 9927 clr r25
953 0292 887F andi r24,lo8(248)
954 0294 9070 andi r25,hi8(248)
955 0296 4097 sbiw r24,16
956 0298 19F0 breq .L78
957 029a 80E0 ldi r24,lo8(0)
958 029c 90E0 ldi r25,hi8(0)
959 029e 0895 ret
960 .L78:
253:main.c **** Write8Bit(rd_device_add);//写I2C从器件地址和读方式
962 .LM116:
963 02a0 81ED ldi r24,lo8(-47)
964 02a2 83B9 out 35-0x20,r24
965 02a4 84E8 ldi r24,lo8(-124)
966 02a6 86BF out 86-0x20,r24
967 .L79:
254:main.c **** Wait();
969 .LM117:
970 02a8 06B6 in __tmp_reg__,86-0x20
971 02aa 07FE sbrs __tmp_reg__,7
972 02ac FDCF rjmp .L79
255:main.c **** if(TestAck()!=MR_SLA_ACK) return 0;//ACK
974 .LM118:
975 02ae 81B1 in r24,33-0x20
976 02b0 9927 clr r25
977 02b2 887F andi r24,lo8(248)
978 02b4 9070 andi r25,hi8(248)
979 02b6 8034 cpi r24,64
980 02b8 9105 cpc r25,__zero_reg__
981 02ba 19F0 breq .L82
982 02bc 80E0 ldi r24,lo8(0)
983 02be 90E0 ldi r25,hi8(0)
984 02c0 0895 ret
985 .L82:
256:main.c **** Twi();//启动主I2C读方式
987 .LM119:
988 02c2 84E8 ldi r24,lo8(-124)
989 02c4 86BF out 86-0x20,r24
990 .L83:
257:main.c **** Wait();
992 .LM120:
993 02c6 06B6 in __tmp_reg__,86-0x20
994 02c8 07FE sbrs __tmp_reg__,7
995 02ca FDCF rjmp .L83
258:main.c **** if(TestAck()!=MR_DATA_NOACK) return 0;//ACK
997 .LM121:
998 02cc 81B1 in r24,33-0x20
999 02ce 9927 clr r25
1000 02d0 887F andi r24,lo8(248)
1001 02d2 9070 andi r25,hi8(248)
1002 02d4 8835 cpi r24,88
1003 02d6 9105 cpc r25,__zero_reg__
1004 02d8 19F0 breq .L86
1005 02da 80E0 ldi r24,lo8(0)
1006 02dc 90E0 ldi r25,hi8(0)
1007 02de 0895 ret
1008 .L86:
259:main.c **** temp=TWDR;//读取I2C接收数据
1010 .LM122:
1011 02e0 93B1 in r25,35-0x20
260:main.c **** Stop();//I2C停止
1013 .LM123:
1014 02e2 84E9 ldi r24,lo8(-108)
1015 02e4 86BF out 86-0x20,r24
261:main.c **** return temp;
1017 .LM124:
1018 02e6 892F mov r24,r25
1019 02e8 9927 clr r25
262:main.c **** }
1021 .LM125:
1022 02ea 0895 ret
1023 /* epilogue: frame size=0 */
1024 02ec 0895 ret
1025 /* epilogue end (size=1) */
1026 /* function i2c_Read size 103 (102) */
1031 .Lscope17:
1033 .global Gettime
1035 Gettime:
263:main.c **** void Gettime(void)
264:main.c **** {
1037 .LM126:
1038 /* prologue: frame size=0 */
1039 /* prologue end (size=0) */
265:main.c **** if(N==1)
1041 .LM127:
1042 02ee 8091 0000 lds r24,N
1043 02f2 8130 cpi r24,lo8(1)
1044 02f4 A9F4 brne .L88
266:main.c **** {
267:main.c **** month=(i2c_Read(5) & 0x1f);
1046 .LM128:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -