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

📄 m16eeprom.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0089 C00D      RJMP	0x0097
(0051)   	while (num) 
(0052)  	{ 
(0053)    	  	while ( EECR&0x01 );  //判断EEWE是否为0 
    008A 99E0      SBIC	0x1C,0
    008B CFFE      RJMP	0x008A
(0054)    		EEAR = addr; 
    008C BB3F      OUT	0x1F,R19
    008D BB2E      OUT	0x1E,R18
(0055)    		EECR = EECR|0x01;     //置EERE为1 
    008E 9AE0      SBI	0x1C,0
(0056)    		*val = EEDR; 
    008F B22D      IN	R2,0x1D
    0090 01FA      MOVW	R30,R20
    0091 8220      STD	Z+0,R2
(0057)    		addr++; 
    0092 5F2F      SUBI	R18,0xFF
    0093 4F3F      SBCI	R19,0xFF
(0058)    		val++;  
    0094 5F4F      SUBI	R20,0xFF
    0095 4F5F      SBCI	R21,0xFF
(0059)    		num--; 
    0096 950A      DEC	R16
    0097 2300      TST	R16
    0098 F789      BNE	0x008A
    0099 940E0168  CALL	pop_gset1
    009B 9508      RET
(0060)  	} 
(0061) } 
(0062) /*-----------------------------------------------------------------
(0063) 函数名称: void Uart0Init(void) 
(0064) 函数功能: 串口初始化
(0065) 		  波特率 600 0.2% 字符长度 8bit 无奇偶校验
(0066) 参    数: 
(0067) 返 回 值: 无
(0068) -----------------------------------------------------------------*/
(0069) void Uart0Init(void)
(0070) {
(0071)  	UCSRB = 0x00; 					//关串口
_Uart0Init:
    009C 2422      CLR	R2
    009D B82A      OUT	0x0A,R2
(0072)  	UCSRA = 0x02;					//倍速模式   M16中文P151
    009E E082      LDI	R24,2
    009F B98B      OUT	0x0B,R24
(0073)  	UCSRC = BIT(URSEL) | 0x06;		//写UCSRC寄存器,设定8个bit
    00A0 E886      LDI	R24,0x86
    00A1 BD80      OUT	0x20,R24
(0074)  	UBRR  = 206;	 	  	   		//设定串口波特率为600
    00A2 EC8E      LDI	R24,0xCE
    00A3 B989      OUT	0x09,R24
(0075)  	UCSRB = 0x98;					//开串口
    00A4 E988      LDI	R24,0x98
    00A5 B98A      OUT	0x0A,R24
    00A6 9508      RET
_UartRecvData:
    00A7 922A      ST	R2,-Y
    00A8 938A      ST	R24,-Y
    00A9 B62F      IN	R2,0x3F
    00AA 922A      ST	R2,-Y
(0076) }
(0077) /*-----------------------------------------------------------------
(0078) 函数名称: void UartRecvData(void)
(0079) 函数功能: 
(0080) 参    数: 
(0081) 返 回 值: 无
(0082) -----------------------------------------------------------------*/
(0083) #pragma interrupt_handler UartRecvData:12
(0084) void UartRecvData(void)
(0085) {
(0086)  	temp1 = UDR;
    00AB B02C      IN	R2,0x0C
    00AC 92200065  STS	temp1,R2
(0087) 	RecvFlag = 1;
    00AE E081      LDI	R24,1
    00AF 93800060  STS	RecvFlag,R24
    00B1 9029      LD	R2,Y+
    00B2 BE2F      OUT	0x3F,R2
    00B3 9189      LD	R24,Y+
    00B4 9029      LD	R2,Y+
    00B5 9518      RETI
_UartTransmitData:
  i                    --> R20
  len                  --> R18
  SendData             --> R16
    00B6 940E0165  CALL	push_gset1
(0088) }
(0089) /*-----------------------------------------------------------------
(0090) 函数名称: void UartTransmitData(uchar *SendData, uchar len)
(0091) 函数功能: 发送字符串
(0092) 参    数: SendData  发送字符串的首地址
(0093) 	  	  len		发送字符串的长度
(0094) 返 回 值: 无
(0095) -----------------------------------------------------------------*/
(0096) void UartTransmitData(uchar *SendData, uint len)
(0097) {
(0098)  	uint i;
(0099) 	for( i = 0; i < len; i++)
    00B8 2744      CLR	R20
    00B9 2755      CLR	R21
    00BA C009      RJMP	0x00C4
(0100) 	{
(0101)   		while(!(UCSRA&0x20));  				//判断数据寄存器是否为空
    00BB 9B5D      SBIS	0x0B,5
    00BC CFFE      RJMP	0x00BB
(0102) 			UDR = SendData[i];
    00BD 01FA      MOVW	R30,R20
    00BE 0FE0      ADD	R30,R16
    00BF 1FF1      ADC	R31,R17
    00C0 8020      LDD	R2,Z+0
    00C1 B82C      OUT	0x0C,R2
    00C2 5F4F      SUBI	R20,0xFF
    00C3 4F5F      SBCI	R21,0xFF
    00C4 1742      CP	R20,R18
    00C5 0753      CPC	R21,R19
    00C6 F3A0      BCS	0x00BB
    00C7 940E0168  CALL	pop_gset1
    00C9 9508      RET
(0103) 	}
(0104) }
(0105) /*-----------------------------------------------------------------
(0106) 函数名称: void InitDevices(void) 
(0107) 函数功能: 初始化各种信息
(0108) 参    数: 
(0109) 返 回 值: 无
(0110) -----------------------------------------------------------------*/
(0111) void InitDevices(void)
(0112) {
(0113)  	CLI(); 			  					//关全部中断
_InitDevices:
    00CA 94F8      BCLR	7
(0114)  	Uart0Init();
    00CB DFD0      RCALL	_Uart0Init
(0115)  	SEI();   	 	   					//开全中断
    00CC 9478      BSET	7
    00CD 9508      RET
_main:
  j                    --> R20
  EepromData           --> Y+2
    00CE 97EF      SBIW	R28,0x3F
    00CF 97EF      SBIW	R28,0x3F
    00D0 97EF      SBIW	R28,0x3F
    00D1 97EF      SBIW	R28,0x3F
    00D2 9725      SBIW	R28,5
(0116) }
(0117) 
(0118) void main(void)
(0119) {
(0120)  	uchar EepromData[255] ;
(0121) 	uint j;
(0122)  	InitDevices();		  
    00D3 DFF6      RCALL	_InitDevices
(0123) 	while(j++);			
    00D4 011A      MOVW	R2,R20
    00D5 5F4F      SUBI	R20,0xFF
    00D6 4F5F      SBCI	R21,0xFF
    00D7 2022      TST	R2
    00D8 F7D9      BNE	0x00D4
    00D9 2033      TST	R3
    00DA F7C9      BNE	0x00D4
(0124) 	EepromRead (255, 0, EepromData);	//读取上次断电前程序存储的数据
    00DB 01CE      MOVW	R24,R28
    00DC 9602      ADIW	R24,2
    00DD 8399      STD	Y+1,R25
    00DE 8388      STD	Y+0,R24
    00DF 2722      CLR	R18
    00E0 2733      CLR	R19
    00E1 EF0F      LDI	R16,0xFF
    00E2 DFA2      RCALL	_EepromRead
(0125) 	UartTransmitData(EepromData, 255);	//通过串口显示
    00E3 EF2F      LDI	R18,0xFF
    00E4 E030      LDI	R19,0
    00E5 018E      MOVW	R16,R28
    00E6 5F0E      SUBI	R16,0xFE
    00E7 4F1F      SBCI	R17,0xFF
    00E8 DFCD      RCALL	_UartTransmitData
    00E9 C054      RJMP	0x013E
(0126) 	while(1)
(0127) 	{
(0128) 	 	if( Flag == 2)
    00EA 91800061  LDS	R24,Flag
    00EC 3082      CPI	R24,2
    00ED F4A1      BNE	0x0102
(0129) 		{
(0130) 		 	Flag = 0;
    00EE 2422      CLR	R2
    00EF 92200061  STS	Flag,R2
(0131) 			EepromRead (EEpromAdd, 0, EepromData);//读取本次存储的数据,串口输出
    00F1 01CE      MOVW	R24,R28
    00F2 9602      ADIW	R24,2
    00F3 8399      STD	Y+1,R25
    00F4 8388      STD	Y+0,R24
    00F5 2722      CLR	R18
    00F6 2733      CLR	R19
    00F7 91000062  LDS	R16,EEpromAdd
    00F9 DF8B      RCALL	_EepromRead
(0132) 			UartTransmitData(EepromData, EEpromAdd);
    00FA 91200062  LDS	R18,EEpromAdd
    00FC 91300063  LDS	R19,EEpromAdd+1
    00FE 018E      MOVW	R16,R28
    00FF 5F0E      SUBI	R16,0xFE
    0100 4F1F      SBCI	R17,0xFF
    0101 DFB4      RCALL	_UartTransmitData
(0133) 		}
(0134) 		if( RecvFlag)
    0102 90200060  LDS	R2,RecvFlag
    0104 2022      TST	R2
    0105 F1C1      BEQ	0x013E
(0135) 		{
(0136) 		 	RecvFlag = 0;
    0106 2422      CLR	R2
    0107 92200060  STS	RecvFlag,R2
(0137) 		 	if( temp1 == '@')
    0109 91800065  LDS	R24,temp1
    010B 3480      CPI	R24,0x40
    010C F421      BNE	0x0111
(0138) 				Flag = 1;
    010D E081      LDI	R24,1
    010E 93800061  STS	Flag,R24
    0110 C02D      RJMP	0x013E
(0139) 			else if(((temp1 == 'R')||(temp1 == 'r'))&&( Flag == 1))//连续接收到@R
    0111 91800065  LDS	R24,temp1
    0113 3582      CPI	R24,0x52
    0114 F011      BEQ	0x0117
    0115 3782      CPI	R24,0x72
    0116 F441      BNE	0x011F
    0117 91800061  LDS	R24,Flag
    0119 3081      CPI	R24,1
    011A F421      BNE	0x011F
(0140) 		 	{
(0141) 		  	 	Flag = 2;
    011B E082      LDI	R24,2
    011C 93800061  STS	Flag,R24
(0142) 		 	}
    011E C01F      RJMP	0x013E
(0143) 			else 
(0144) 			{
(0145) 	 		 	Flag = 0;
    011F 2422      CLR	R2
    0120 92200061  STS	Flag,R2
(0146) 				EepromWrite ( EEpromAdd++, temp1); 
    0122 91200065  LDS	R18,temp1
    0124 90200062  LDS	R2,EEpromAdd
    0126 90300063  LDS	R3,EEpromAdd+1
    0128 01C1      MOVW	R24,R2
    0129 9601      ADIW	R24,1
    012A 93900063  STS	EEpromAdd+1,R25
    012C 93800062  STS	EEpromAdd,R24
    012E 0181      MOVW	R16,R2
    012F DF4B      RCALL	_EepromWrite
(0147) 				if( EEpromAdd >= 255) 
    0130 91800062  LDS	R24,EEpromAdd
    0132 91900063  LDS	R25,EEpromAdd+1
    0134 3F8F      CPI	R24,0xFF
    0135 E0E0      LDI	R30,0
    0136 079E      CPC	R25,R30
    0137 F030      BCS	0x013E
(0148) 					EEpromAdd = 0;
FILE: <library>
    0138 2422      CLR	R2
    0139 2433      CLR	R3
    013A 92300063  STS	EEpromAdd+1,R3
    013C 92200062  STS	EEpromAdd,R2
    013E CFAB      RJMP	0x00EA
    013F 96EF      ADIW	R28,0x3F
    0140 96EF      ADIW	R28,0x3F
    0141 96EF      ADIW	R28,0x3F
    0142 96EF      ADIW	R28,0x3F
    0143 9625      ADIW	R28,5
    0144 9508      RET
mod8u:
    0145 9468      BSET	6
    0146 C001      RJMP	xdiv8u
div8u:
    0147 94E8      BCLR	6
xdiv8u:
    0148 932A      ST	R18,-Y
    0149 92FA      ST	R15,-Y
    014A 92EA      ST	R14,-Y
    014B 24FF      CLR	R15
    014C 24EE      CLR	R14
    014D E120      LDI	R18,0x10
    014E 0F00      LSL	R16
    014F 1CFF      ROL	R15
    0150 1CEE      ROL	R14
    0151 16E1      CP	R14,R17
    0152 F010      BCS	0x0155
    0153 1AE1      SUB	R14,R17
    0154 9503      INC	R16
    0155 952A      DEC	R18
    0156 F7B9      BNE	0x014E
    0157 F40E      BRTC	0x0159
    0158 2D0E      MOV	R16,R14
    0159 90E9      LD	R14,Y+
    015A 90F9      LD	R15,Y+
    015B 9129      LD	R18,Y+
    015C 9508      RET
push_gset5:
    015D 92FA      ST	R15,-Y
    015E 92EA      ST	R14,-Y
push_gset4:
    015F 92DA      ST	R13,-Y
    0160 92CA      ST	R12,-Y
push_gset3:
    0161 92BA      ST	R11,-Y
    0162 92AA      ST	R10,-Y
push_gset2:
    0163 937A      ST	R23,-Y
    0164 936A      ST	R22,-Y
push_gset1:
    0165 935A      ST	R21,-Y
    0166 934A      ST	R20,-Y
    0167 9508      RET
pop_gset1:
    0168 E0E1      LDI	R30,1
pop:
    0169 9149      LD	R20,Y+
    016A 9159      LD	R21,Y+
    016B FDE0      SBRC	R30,0
    016C 9508      RET
    016D 9169      LD	R22,Y+
    016E 9179      LD	R23,Y+
    016F FDE1      SBRC	R30,1
    0170 9508      RET
    0171 90A9      LD	R10,Y+
    0172 90B9      LD	R11,Y+
    0173 FDE2      SBRC	R30,2
    0174 9508      RET
    0175 90C9      LD	R12,Y+
    0176 90D9      LD	R13,Y+
    0177 FDE3      SBRC	R30,3
    0178 9508      RET
    0179 90E9      LD	R14,Y+
    017A 90F9      LD	R15,Y+
    017B 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -