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

📄 atmega16l_uart.s

📁 电梯楼层采集器代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	xjmp L10
L26:
	.dbline 363
;       case 6:                                              /*数据包接收*/
;          *p_uart++ = tmp;                                  /*接收数据*/
	lds R30,L8
	lds R31,L8+1
	st Z+,R22
	sts L8+1,R31
	sts L8,R30
	.dbline 364
;          CRC16(&CRC,tmp);                                  /*数据校验*/
	mov R18,R22
	ldi R16,<L6
	ldi R17,>L6
	xcall _CRC16
	.dbline 365
;          if (--Count == 0)  Status++;                   /*数据包发送完毕?*/
	lds R24,L7
	lds R25,L7+1
	sbiw R24,1
	movw R12,R24
	sts L7+1,R13
	sts L7,R12
	cpi R24,0
	cpc R24,R25
	breq X26
	xjmp L10
X26:
X14:
	.dbline 365
	lds R24,L5
	subi R24,255    ; addi 1
	sts L5,R24
	.dbline 366
;          break;
	xjmp L10
L29:
	.dbline 368
;       case 7:                                              /*高位校验码接收*/
;          CRC16(&CRC,tmp);                                  /*数据校验*/
	mov R18,R22
	ldi R16,<L6
	ldi R17,>L6
	xcall _CRC16
	.dbline 369
;          Status++;
	lds R24,L5
	subi R24,255    ; addi 1
	sts L5,R24
	.dbline 370
;          break;
	xjmp L10
L30:
	.dbline 372
;       case 8:                                                         /*低位校验码接收*/
;          CRC16(&CRC,tmp);                                              /*数据校验*/
	mov R18,R22
	ldi R16,<L6
	ldi R17,>L6
	xcall _CRC16
	.dbline 373
;          p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R20,<_Buffer485
	ldi R21,>_Buffer485
	.dbline 374
;          if (!CRC && (p_buf->Address == Device_Address || p_buf->Address == 0xff))
	lds R2,L6
	lds R3,L6+1
	tst R2
	brne L31
	tst R3
	brne L31
X15:
	movw R30,R20
	ldd R20,z+0
	clr R21
	lds R2,_Device_Address
	cp R20,R2
	breq L33
X16:
	cpi R20,255
	brne L31
X17:
L33:
	.dbline 375
;          {//接收完数据
	.dbline 376
; 		  	communication->pc_rxd = 1;
	ldi R24,1
	movw R30,R10
	std z+0,R24
	.dbline 377
;          }
L31:
	.dbline 378
;          Status = 0;
	clr R2
	sts L5,R2
	.dbline 379
;          break;
	xjmp L10
L9:
	.dbline 381
;       default:
;          Status = 0;
	clr R2
	sts L5,R2
	.dbline 382
;          break;
L10:
	.dbline -2
L4:
	.dbline 0 ; func end
	xcall pop_xgsetF03C
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r communication 10 pS[data]
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbsym r tmp 22 c
	.dbend
	.area vector(rom, abs)
	.org 52
	jmp _Uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
L35:
	.blkb 1
L36:
	.blkb 2
L37:
	.blkb 2
L38:
	.blkb 2
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\ATmega16L_Uart.C
	.dbfunc e Uart0_tx_isr _Uart0_tx_isr fV
	.dbsym s p_uart L38 pc
	.dbsym s Count L37 i
	.dbsym s CRC L36 i
	.dbsym s Status L35 c
;          p_buf -> R20,R21
;            tmp -> R10
	.even
_Uart0_tx_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	xcall push_xgset300C
	.dbline -1
	.dbline 389
;     }
; } 
; //------------------------------------------------------------------------------
; //发送数据
; #pragma interrupt_handler Uart0_tx_isr:14 
; void Uart0_tx_isr(void) 
; { 
	.dbline 395
;   unsigned char tmp;
;   static unsigned char Status;
;   static unsigned int CRC,Count;
;   static unsigned char *p_uart;
;   struct StructOfProtocol *p_buf;
;   max485_on();
	sbi 0x12,5
	.dbline 396
;   switch(Status)
	lds R20,L35
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L42
X27:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L43
X28:
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	brne X37
	xjmp L46
X37:
X29:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	brne X38
	xjmp L49
X38:
X30:
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	brne X39
	xjmp L52
X39:
X31:
	cpi R20,5
	ldi R30,0
	cpc R21,R30
	brne X40
	xjmp L53
X40:
X32:
	xjmp L39
L42:
	.dbline 399
;   {
;      case 0:
; 	   Count = 1;
	ldi R24,1
	ldi R25,0
	sts L37+1,R25
	sts L37,R24
	.dbline 400
; 	   Status++;
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
L43:
	.dbline 402
; 	 case 1:	  	  			/*同步码发送*/
; 	   UDR = BOOT_CODE; 		/*发送同步码*/	
	ldi R24,254
	out 0xc,R24
	.dbline 403
; 	   if(++Count>=2) Status++;/*发送2 byte同步码*/
	lds R24,L37
	lds R25,L37+1
	adiw R24,1
	movw R2,R24
	sts L37+1,R3
	sts L37,R2
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brsh X41
	xjmp L40
X41:
X33:
	.dbline 403
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
	.dbline 404
; 	   break;
	xjmp L40
L46:
	.dbline 406
;      case 2:
; 	   UDR = DEVICE_NUMBER;
	ldi R24,2
	out 0xc,R24
	.dbline 407
; 	   *p_uart = *Buffer485;
	lds R2,_Buffer485
	lds R30,L38
	lds R31,L38+1
	std z+0,R2
	.dbline 408
; 	   p_buf = (struct StructOfProtocol *)Buffer485;
	ldi R20,<_Buffer485
	ldi R21,>_Buffer485
	.dbline 409
;        Count = p_buf->Length;
	movw R30,R20
	ldd R2,z+1
	ldd R3,z+2
	sts L37+1,R3
	sts L37,R2
	.dbline 410
;        if (Count && Count <= (256 - 8)) /*包长度检查*/
	tst R2
	brne X34
	tst R3
	breq L47
X34:
	ldi R24,248
	ldi R25,0
	cp R24,R2
	cpc R25,R3
	brlo L47
X35:
	.dbline 411
;        {
	.dbline 412
;          p_uart = Buffer485;              /*初始化数据发送指针*/
	ldi R24,<_Buffer485
	ldi R25,>_Buffer485
	sts L38+1,R25
	sts L38,R24
	.dbline 413
;          CRC = 0xffff;                    /*初始化校验码*/
	ldi R24,65535
	ldi R25,255
	sts L36+1,R25
	sts L36,R24
	.dbline 414
;          Count += 3;
	movw R24,R2
	adiw R24,3
	sts L37+1,R25
	sts L37,R24
	.dbline 415
;          Status++;
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
	.dbline 416
;        }
	xjmp L40
L47:
	.dbline 418
;        else                               /*包长度异常*/
; 	   {
	.dbline 419
; 	     Status = 0;                      /*清状态标志*/
	clr R2
	sts L35,R2
	.dbline 420
; 	   }
	.dbline 421
;        break;
	xjmp L40
L49:
	.dbline 423
;      case 3:                               /*数据包发送*/
;        tmp = *p_uart++;                    /*取发送数据*/
	lds R30,L38
	lds R31,L38+1
	ld R10,Z+
	sts L38+1,R31
	sts L38,R30
	.dbline 424
;        UDR = tmp;                          /*发送数据*/
	out 0xc,R10
	.dbline 425
;        CRC16(&CRC,tmp);                    /*数据校验*/
	mov R18,R10
	ldi R16,<L36
	ldi R17,>L36
	xcall _CRC16
	.dbline 426
;        if (--Count == 0) Status++;     /*数据包发送完毕*/
	lds R20,L37
	lds R21,L37+1
	subi R20,1
	sbci R21,0
	sts L37+1,R21
	sts L37,R20
	cpi R20,0
	cpc R20,R21
	brne L40
X36:
	.dbline 426
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
	.dbline 427
;        break;
	xjmp L40
L52:
	.dbline 429
; 	 case 4:                            /*高位校验码发送*/
;        UDR = CRC >> 8;
	lds R2,L36
	lds R3,L36+1
	mov R2,R3
	clr R3
	out 0xc,R2
	.dbline 430
;        Status++;
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
	.dbline 431
;        break;
	xjmp L40
L53:
	.dbline 433
;      case 5:                            /*低位校验码发送*/
;        UDR = CRC;
	lds R2,L36
	lds R3,L36+1
	out 0xc,R2
	.dbline 434
;        Status++;
	lds R24,L35
	subi R24,255    ; addi 1
	sts L35,R24
	.dbline 435
;        break;
	xjmp L40
L39:
	.dbline 437
;      default:                          /*结束发送*/
;        Status = Count = 0;
	clr R2
	clr R3
	sts L37+1,R3
	sts L37,R2
	sts L35,R2
	.dbline 438
; 	   max485_off();
	cbi 0x12,5
	.dbline 439
;        break;
L40:
	.dbline -2
L34:
	.dbline 0 ; func end
	xcall pop_xgset300C
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r p_buf 20 pS[StructOfProtocol]
	.dbsym r tmp 10 c
	.dbend
;   }
; } 

⌨️ 快捷键说明

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