⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 我学习AVR的代码例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -