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

📄 boot128.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
    F250 DE7C      RCALL	_quit
    F251 C07B      RJMP	0xF2CD
(0294) 
(0295) 	while(1) 
(0296)      	{
(0297)      		Rec_Len = 0;
    F252 2744      CLR	R20
    F253 2755      CLR	R21
(0298)      		Rec_Len = Uart_Receive_Frame(ReceiveBuf,10);
    F254 E02A      LDI	R18,0xA
    F255 E030      LDI	R19,0
    F256 E006      LDI	R16,6
    F257 E012      LDI	R17,2
    F258 940EF36B  CALL	_Uart_Receive_Frame
    F25A 2F40      MOV	R20,R16
    F25B 2755      CLR	R21
(0299)         	if(Rec_Len)//接收命令信号
    F25C 3040      CPI	R20,0
    F25D 0745      CPC	R20,R21
    F25E F409      BNE	0xF260
    F25F C06D      RJMP	0xF2CD
(0300) 		{
(0301) 		    	if(Verify_Command(ReceiveBuf,Rec_Len))
    F260 019A      MOVW	R18,R20
    F261 E006      LDI	R16,6
    F262 E012      LDI	R17,2
    F263 940EF306  CALL	_Verify_Command
    F265 2300      TST	R16
    F266 F011      BEQ	0xF269
(0302) 	            		Ret_Value = ERR_COMMANDCRC;				
    F267 E161      LDI	R22,0x11
    F268 C05D      RJMP	0xF2C6
(0303) 	        	else
(0304) 			{
(0305) 			   	switch(ReceiveBuf[2])	//根据不同指令执行不同的操作
    F269 90A00208  LDS	R10,ReceiveBuf+2
    F26B 24BB      CLR	R11
    F26C 01C5      MOVW	R24,R10
    F26D 3081      CPI	R24,1
    F26E E0E0      LDI	R30,0
    F26F 079E      CPC	R25,R30
    F270 F0B1      BEQ	0xF287
    F271 3082      CPI	R24,2
    F272 E0E0      LDI	R30,0
    F273 079E      CPC	R25,R30
    F274 F0A9      BEQ	0xF28A
    F275 3083      CPI	R24,3
    F276 E0E0      LDI	R30,0
    F277 079E      CPC	R25,R30
    F278 F0B1      BEQ	0xF28F
    F279 3084      CPI	R24,4
    F27A E0E0      LDI	R30,0
    F27B 079E      CPC	R25,R30
    F27C F0B9      BEQ	0xF294
    F27D 3085      CPI	R24,5
    F27E E0E0      LDI	R30,0
    F27F 079E      CPC	R25,R30
    F280 F181      BEQ	0xF2B1
    F281 3086      CPI	R24,6
    F282 E0E0      LDI	R30,0
    F283 079E      CPC	R25,R30
    F284 F409      BNE	0xF286
    F285 C03A      RJMP	0xF2C0
    F286 C03E      RJMP	0xF2C5
(0306) 	                 	{
(0307) 		              		case 0x01:	//程序下载
(0308) 			              		Ret_Value = Flow_Control(); 
    F287 DE4D      RCALL	_Flow_Control
    F288 2F60      MOV	R22,R16
(0309) 						break;
    F289 C03C      RJMP	0xF2C6
(0310)                     			case 0x02:  	//设置组地址,接点地址					     	//Read_Eeprom(POINT,data,14);
(0311) 						Ret_Value = Setting_Param(ReceiveBuf);
    F28A E006      LDI	R16,6
    F28B E012      LDI	R17,2
    F28C DF06      RCALL	_Setting_Param
    F28D 2F60      MOV	R22,R16
(0312) 						break;
    F28E C037      RJMP	0xF2C6
(0313)                       			case 0x03:	//上传表具信息
(0314) 					     	Ret_Value = Read_Param(SendData);
    F28F E000      LDI	R16,0
    F290 E013      LDI	R17,3
    F291 DF3B      RCALL	_Read_Param
    F292 2F60      MOV	R22,R16
(0315) 						break;
    F293 C032      RJMP	0xF2C6
(0316) 					case 0x04: 	//硬件检测
(0317) 						SendData[0] = 'R';
    F294 E582      LDI	R24,0x52
    F295 93800300  STS	SendData,R24
(0318) 						SendData[1] = 'T';
    F297 E584      LDI	R24,0x54
    F298 93800301  STS	SendData+1,R24
(0319) 						SendData[2] = 'C';
    F29A E483      LDI	R24,0x43
    F29B 93800302  STS	SendData+2,R24
(0320) 						SendData[3] = 'O';
    F29D E48F      LDI	R24,0x4F
    F29E 93800303  STS	SendData+3,R24
(0321) 						SendData[4] = 'K';
    F2A0 E48B      LDI	R24,0x4B
    F2A1 93800304  STS	0x304,R24
(0322) 						PC_Send_Ok(SendData,0x00,SendBuf,5);	//向上位机发送硬件检测情况       
    F2A3 E085      LDI	R24,5
    F2A4 E090      LDI	R25,0
    F2A5 839B      STD	Y+3,R25
    F2A6 838A      STD	Y+2,R24
    F2A7 E98C      LDI	R24,0x9C
    F2A8 E092      LDI	R25,2
    F2A9 8399      STD	Y+1,R25
    F2AA 8388      STD	Y+0,R24
    F2AB 2722      CLR	R18
    F2AC E000      LDI	R16,0
    F2AD E013      LDI	R17,3
    F2AE 940EF3CD  CALL	_PC_Send_Ok
(0323) 					        break;	
    F2B0 C015      RJMP	0xF2C6
(0324)                       			case 0x05: 	//复位命令   
(0325)                       				PC_Send_Ok(SendData,0x00,SendBuf,0);	//向上位机发送复位成功命令 
    F2B1 2422      CLR	R2
    F2B2 2433      CLR	R3
    F2B3 823B      STD	Y+3,R3
    F2B4 822A      STD	Y+2,R2
    F2B5 E98C      LDI	R24,0x9C
    F2B6 E092      LDI	R25,2
    F2B7 8399      STD	Y+1,R25
    F2B8 8388      STD	Y+0,R24
    F2B9 2722      CLR	R18
    F2BA E000      LDI	R16,0
    F2BB E013      LDI	R17,3
    F2BC 940EF3CD  CALL	_PC_Send_Ok
(0326) 					        quit();      
    F2BE DE0E      RCALL	_quit
(0327) 					        break;
    F2BF C006      RJMP	0xF2C6
(0328) 					case 0x06:	//读取系统时钟
(0329) 						Ret_Value = Read_SystemTime(SendData);
    F2C0 E000      LDI	R16,0
    F2C1 E013      LDI	R17,3
    F2C2 DF31      RCALL	_Read_SystemTime
    F2C3 2F60      MOV	R22,R16
(0330) 						break;   
    F2C4 C001      RJMP	0xF2C6
(0331)                       			default:	//没有找到相应的指令,返回指令错误
(0332) 					        Ret_Value = ERR_NOCOMMAND;
    F2C5 E164      LDI	R22,0x14
(0333) 			               	        break;
(0334) 				}
(0335) 			}
(0336) 	        	if(Ret_Value)			//执行的子程返回0时表示,成功执行命令
    F2C6 2366      TST	R22
    F2C7 F029      BEQ	0xF2CD
(0337) 		        	PC_Send_Err(Ret_Value,SendBuf); 
    F2C8 E92C      LDI	R18,0x9C
    F2C9 E032      LDI	R19,2
    F2CA 2F06      MOV	R16,R22
    F2CB 940EF3A8  CALL	_PC_Send_Err
    F2CD CF84      RJMP	0xF252
    F2CE 9624      ADIW	R28,4
    F2CF 9508      RET
_CRC16:
  ACC                  --> R20
  byte                 --> R22
  TOPBIT               --> R10
  k                    --> R14
  remainder            --> R12
  Len                  --> R18
  Message              --> R16
    F2D0 940EF5F7  CALL	push_gset5
FILE: E:\程序\AVR程序\BOOTLoadICC\Crc.c
(0001) #include	<iom128v.h>
(0002) #include	"Crc.h"
(0003) 
(0004) //============================================================
(0005) //函	数:unsigned short CRC16(unsigned char *Message, int Len)
(0006) //功	能:CRC16计算
(0007) //入口参数:Message 要进行CRC16计算字符串,Len字符串长度  
(0008) //返 回 值:CRC16计算结果  
(0009) //设 计 者:覃道堂 
(0010) //创作时间:2004-03-30
(0011) //修改时间:
(0012) //修改目的:
(0013) //============================================================
(0014) unsigned short CRC16(unsigned char *Message, int Len)
(0015) {
(0016) 	int 		byte;
(0017) 	unsigned char  	k;
(0018) 	unsigned short 	ACC,TOPBIT;
(0019)     	unsigned short 	remainder = 0x0000;
    F2D2 24CC      CLR	R12
    F2D3 24DD      CLR	R13
(0020) 
(0021) 	TOPBIT = 0x8000;
    F2D4 E080      LDI	R24,0
    F2D5 E890      LDI	R25,0x80
    F2D6 015C      MOVW	R10,R24
(0022)    	for (byte = 0; byte < Len; ++byte)
    F2D7 2766      CLR	R22
    F2D8 2777      CLR	R23
    F2D9 C025      RJMP	0xF2FF
(0023)    	{
(0024) 		ACC = Message[byte];
    F2DA 01FB      MOVW	R30,R22
    F2DB 0FE0      ADD	R30,R16
    F2DC 1FF1      ADC	R31,R17
    F2DD 8140      LDD	R20,Z+0
    F2DE 2755      CLR	R21
(0025) 		remainder ^= (ACC <<8);
    F2DF 011A      MOVW	R2,R20
    F2E0 2C32      MOV	R3,R2
    F2E1 2422      CLR	R2
    F2E2 24C2      EOR	R12,R2
    F2E3 24D3      EOR	R13,R3
(0026)        	for (k = 8; k > 0; --k)
    F2E4 E088      LDI	R24,0x8
    F2E5 2EE8      MOV	R14,R24
    F2E6 C013      RJMP	0xF2FA
(0027)        	{
(0028)            	if (remainder & TOPBIT)
    F2E7 0116      MOVW	R2,R12
    F2E8 202A      AND	R2,R10
    F2E9 203B      AND	R3,R11
    F2EA 2022      TST	R2
    F2EB F411      BNE	0xF2EE
    F2EC 2033      TST	R3
    F2ED F049      BEQ	0xF2F7
(0029) 			{
(0030)                	remainder = (remainder << 1) ^0x8005;
    F2EE E085      LDI	R24,5
    F2EF E890      LDI	R25,0x80
    F2F0 0116      MOVW	R2,R12
    F2F1 0C22      LSL	R2
    F2F2 1C33      ROL	R3
    F2F3 2628      EOR	R2,R24
    F2F4 2639      EOR	R3,R25
    F2F5 0161      MOVW	R12,R2
(0031) 			}
    F2F6 C002      RJMP	0xF2F9
(0032)            	else
(0033) 			{
(0034)            	 	remainder = (remainder << 1);
    F2F7 0CCC      LSL	R12
    F2F8 1CDD      ROL	R13
    F2F9 94EA      DEC	R14
    F2FA 2422      CLR	R2
    F2FB 142E      CP	R2,R14
    F2FC F350      BCS	0xF2E7
    F2FD 5F6F      SUBI	R22,0xFF
    F2FE 4F7F      SBCI	R23,0xFF
    F2FF 1762      CP	R22,R18
    F300 0773      CPC	R23,R19
    F301 F2C4      BLT	0xF2DA
(0035) 			}
(0036) 		}
(0037)  	}
(0038)     	return (remainder^0x0000);
    F302 0186      MOVW	R16,R12
    F303 940EF5F5  CALL	pop_gset5
    F305 9508      RET
_Verify_Command:
  Crc_Tmp              --> R20
  Len                  --> R10
  ReceiveBuf           --> R22
    F306 940EF5FB  CALL	push_gset3
    F308 0159      MOVW	R10,R18
    F309 01B8      MOVW	R22,R16
(0039) } 
(0040) 
(0041) //============================================================
(0042) //函	数:unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
(0043) //功	能:CRC校验处理
(0044) //入口参数:校验数据,校验数据长度
(0045) //返 回 值:0校验成功。否则不正确
(0046) //设 计 者:覃道堂 
(0047) //创作时间:2006-03-16
(0048) //修改时间:
(0049) //修改目的:
(0050) //============================================================
(0051) unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
(0052) {
(0053) 	unsigned short 	Crc_Tmp;
(0054) 
(0055) 	if(ReceiveBuf[4] != (Len - 2))//整包数据长度减去校验和为命令长度
    F30A 01C5      MOVW	R24,R10
    F30B 9702      SBIW	R24,2
    F30C 01FB      MOVW	R30,R22
    F30D 8024      LDD	R2,Z+4
    F30E 2433      CLR	R3
    F30F 1628      CP	R2,R24
    F310 0639      CPC	R3,R25
    F311 F011      BEQ	0xF314
(0056) 		return 1;
    F312 E001      LDI	R16,1
    F313 C01E      RJMP	0xF332
(0057) 
(0058) 	Crc_Tmp = ReceiveBuf[Len-2]*0x100 + ReceiveBuf[Len-1];
    F314 01F5      MOVW	R30,R10
    F315 9732      SBIW	R30,2
    F316 0FE6      ADD	R30,R22
    F317 1FF7      ADC	R31,R23
    F318 8120      LDD	R18,Z+0
    F319 2733      CLR	R19
    F31A E000      LDI	R16,0
    F31B E011      LDI	R17,1
    F31C 940EF5DF  CALL	empy16s
    F31E 01A8      MOVW	R20,R16
    F31F 01F5      MOVW	R30,R10
    F320 9731      SBIW	R30,1
    F321 0FE6      ADD	R30,R22
    F322 1FF7      ADC	R31,R23
    F323 8020      LDD	R2,Z+0
    F324 2433      CLR	R3
    F325 0D42      ADD	R20,R2
    F326 1D53      ADC	R21,R3
(0059) 	
(0060) 	if((CRC16(ReceiveBuf, Len-2)) !=Crc_Tmp)
    F327 0195      MOVW	R18,R10
    F328 5022      SUBI	R18,2
    F329 4030      SBCI	R19,0
    F32A 018B      MOVW	R16,R22
    F32B DFA4      RCALL	_CRC16
    F32C 1704      CP	R16,R20
    F32D 0715      CPC	R17,R21
    F32E F011      BEQ	0xF331
(0061) 		return 3;
    F32F E003      LDI	R16,3
    F330 C001      RJMP	0xF332
(0062) 	return 0;
    F331 2700      CLR	R16
    F332 940EF5F1  CALL	pop_gset3
    F334 9508      RET
FILE: E:\程序\AVR程序\BOOTLoadICC\Uart.c
(0001) #include	<iom128v.h>
(0002) #include	"Uart.h"
(0003) #include	"Crc.h"
(0004) 
(0005) //============================================================
(0006) //计算和设置128的波特率参数	chenzuan 2006-03-16
(0007) #define   BAUD 		19200
(0008) #define   CRYSTAL 	7372800
(0009) #define   BAUD_SETTING 	(unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
(0010) #define   BAUD_H 	(unsigned char)(BAUD_SETTING>>8)
(0011) #define   BAUD_L 	(unsigned char)BAUD_SETTING
(0012) 
(0013) //============================================================
(0014) //函	数:void Init_Com(void)
(0015) //功	能:初始化串口设置
(0016) //入口参数:无 
(0017) //返 回 值:无  
(0018) //设 计 者:覃道堂 
(0019) //创作时间:2006-03-16
(0020) //修改时间:
(0021) //修改目的:
(0022) //============================================================
(0023) void Init_Com(void)
(0024) {
(0025) 	UBRR0H = BAUD_H;
_Init_Com:
    F335 2422      CLR	R2
    F336 92200090  STS	0x90,R2
(0026) 	UBRR0L = BAUD_L;
    F338 E187      LDI	R24,0x17
    F339 B989      OUT	0x09,R24
(0027) 	UCSR0B = 0x18;
    F33A E188      LDI	R24,0x18
    F33B B98A      OUT	0x0A,R24
(0028) 	UCSR0C = 0x0E;
    F33C E08E      LDI	R24,0xE
    F33D 93800095  STS	0x95,R24
(0029) 	OCR0  = 0xEA;
    F33F EE8A      LDI	R24,0xEA
    F340 BF81      OUT	0x31,R24
(0030) 	TCCR0 = 0x0F;
    F341 E08F      LDI	R24,0xF
    F342 BF83      OUT	0x33,R24
    F343 9508      RET
(0031) }
(0032) 		   		 
(0033) //============================================================
(0034) //函	数:void Uart_PutChar(unsigned char Data)
(0035) //功	能:发送一个字符
(0036) //入口参数:发送的字符数据  
(0037) //返 回 值:无 
(0038) //设 计 者:覃道堂 
(0039) //创作时间:2006-03-16
(0040) //修改时间:
(0041) //修改目的:
(0042) //============================================================
(0043) void Uart_PutChar(unsigned char Data)

⌨️ 快捷键说明

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