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

📄 调试程序.s

📁 这段程序是步进电机的细分驱动程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	xjmp L50
L49:
	.dbline 439
; 	    else{
	.dbline 440
; 	       PORTB=DATA_LOW;
	out 0x18,R10
	.dbline 441
; 	       PORTB=DATA_LOW|CLOK_HIG;
	mov R2,R10
	or R2,R22
	out 0x18,R2
	.dbline 442
; 	    } 	
L50:
	.dbline 444
; 	
; 	    if(Bridge1DAC&0x01)
	sbrs R4,0
	rjmp L51
	.dbline 445
; 	    {
	.dbline 446
; 	       PORTB=DATA_HIG;
	out 0x18,R12
	.dbline 447
; 	       PORTB=DATA_HIG|CLOK_HIG;
	mov R2,R12
	or R2,R22
	out 0x18,R2
	.dbline 448
; 	    }
	xjmp L52
L51:
	.dbline 449
; 	    else{
	.dbline 450
; 	       PORTB=DATA_LOW;
	out 0x18,R10
	.dbline 451
; 	       PORTB=DATA_LOW|CLOK_HIG;
	mov R2,R10
	or R2,R22
	out 0x18,R2
	.dbline 452
; 	    }	 	
L52:
	.dbline 454
; 
; 	    PORTB=DATA_LOW;       //D0	数据模式
	out 0x18,R10
	.dbline 455
; 		PORTB=DATA_LOW|CLOK_HIG; 	 		
	mov R2,R10
	or R2,R22
	out 0x18,R2
	.dbline 457
; 		
; 	    PORTE=STRB_HIG;	 
	out 0x3,R20
	.dbline 458
; 	    PORTE=STRB_HIG;
	out 0x3,R20
	.dbline 460
; 		
; 		return 0x01;
	ldi R16,1
	xjmp L13
L14:
	.dbline 462
; 	}
; 	else{
	.dbline 463
; 		return 0x00;
	clr R16
	.dbline -2
L13:
	adiw R28,1
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l CLOK_LOW 0 c
	.dbsym r STRB_LOW 8 c
	.dbsym r STRB_HIG 20 c
	.dbsym r DATA_HIG 12 c
	.dbsym r CLOK_HIG 22 c
	.dbsym r DATA_LOW 10 c
	.dbsym r Bridge2DAC 14 c
	.dbsym r Bridge1DAC 4 c
	.dbsym r Port 6 c
	.dbend
	.dbfunc e outportb _outportb fV
;           Data -> R18
;           Addr -> R16,R17
	.even
_outportb::
	.dbline -1
	.dbline 470
; 	}
; 	
; }
; 
; //输出数据
; void outportb(uint Addr, uchar Data)
; {
	.dbline 471
;    if(Addr==D12_DATA)
	cpi R16,0
	cpc R16,R17
	brne L54
X6:
	.dbline 472
;    {
	.dbline 473
;        USB_DATA = Data;   
	sts 61440,R18
	.dbline 474
;    }
	xjmp L55
L54:
	.dbline 475
;    else if(Addr==D12_COMMAND)
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	brne L56
	.dbline 476
;    {
	.dbline 477
;        USB_COMMAND = Data; 
	sts 61441,R18
	.dbline 478
;    }
L56:
L55:
	.dbline -2
	.dbline 479
; }
L53:
	.dbline 0 ; func end
	ret
	.dbsym r Data 18 c
	.dbsym r Addr 16 i
	.dbend
	.dbfunc e inportb _inportb fc
;           Data -> R20
;           Addr -> R16,R17
	.even
_inportb::
	xcall push_gset1
	.dbline -1
	.dbline 483
; 
; //输入数据
; uchar inportb(uint Addr)
; {
	.dbline 486
;    unsigned char Data;
;    
;    if(Addr==D12_DATA)
	cpi R16,0
	cpc R16,R17
	brne L59
X7:
	.dbline 487
;    {
	.dbline 488
;       Data = USB_DATA;   
	lds R20,61440
	.dbline 489
;    }
	xjmp L60
L59:
	.dbline 490
;    else if(Addr==D12_COMMAND)
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	brne L61
	.dbline 491
;    {
	.dbline 492
;        Data = USB_COMMAND;  
	lds R20,61441
	.dbline 493
;    }
L61:
L60:
	.dbline 495
;    
;    return Data;
	mov R16,R20
	.dbline -2
L58:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r Data 20 c
	.dbsym r Addr 16 i
	.dbend
	.dbfunc e D12_SetAddressEnable _D12_SetAddressEnable fV
;        bEnable -> R22
;       bAddress -> R20
	.even
_D12_SetAddressEnable::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 500
; }
; 
; //设置地址使能
; void D12_SetAddressEnable(uchar bAddress, uchar bEnable)
; {
	.dbline 501
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 502
; 	outportb(D12_COMMAND, 0xD0);//输出指令
	ldi R18,208
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 503
; 	if(bEnable)
	tst R22
	breq L64
	.dbline 504
; 		bAddress |= 0x80;
	ori R20,128
L64:
	.dbline 505
; 	outportb(D12_DATA, bAddress);//设置地址
	mov R18,R20
	clr R16
	clr R17
	xcall _outportb
	.dbline 506
; 	EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline -2
	.dbline 507
; }
L63:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r bEnable 22 c
	.dbsym r bAddress 20 c
	.dbend
	.dbfunc e D12_SetEndpointEnable _D12_SetEndpointEnable fV
;        bEnable -> R20
	.even
_D12_SetEndpointEnable::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 511
; 
; //设置端点使能
; void D12_SetEndpointEnable(uchar bEnable)
; {	
	.dbline 512
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 513
; 	outportb(D12_COMMAND, 0xD8);//输出指令
	ldi R18,216
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 514
; 	if(bEnable)
	tst R20
	breq L67
	.dbline 515
; 		outportb(D12_DATA, 1);//设置端点允许
	ldi R18,1
	clr R16
	clr R17
	xcall _outportb
	xjmp L68
L67:
	.dbline 517
; 	else
; 		outportb(D12_DATA, 0);//设置端点禁止
	clr R18
	clr R16
	clr R17
	xcall _outportb
L68:
	.dbline 518
; 	EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline -2
	.dbline 519
; }
L66:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r bEnable 20 c
	.dbend
	.dbfunc e D12_SetMode _D12_SetMode fV
;        bClkDiv -> R20
;        bConfig -> R22
	.even
_D12_SetMode::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 523
; 
; //模式设置
; void D12_SetMode(uchar bConfig, uchar bClkDiv)
; {
	.dbline 524
; 	outportb(D12_COMMAND, 0xF3);//设置模式
	ldi R18,243
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 525
; 	outportb(D12_DATA, bConfig);
	mov R18,R22
	clr R16
	clr R17
	xcall _outportb
	.dbline 526
; 	outportb(D12_DATA, bClkDiv);
	mov R18,R20
	clr R16
	clr R17
	xcall _outportb
	.dbline -2
	.dbline 527
; }
L69:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r bClkDiv 20 c
	.dbsym r bConfig 22 c
	.dbend
	.dbfunc e D12_SetDMA _D12_SetDMA fV
;          bMode -> R20
	.even
_D12_SetDMA::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 531
; 
; //DMA工作方式设置
; void D12_SetDMA(uchar bMode)
; {
	.dbline 532
;  	outportb(D12_COMMAND, 0xFB);//设置DMA工作方式
	ldi R18,251
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 533
; 	outportb(D12_DATA, bMode);
	mov R18,R20
	clr R16
	clr R17
	xcall _outportb
	.dbline -2
	.dbline 534
; }
L70:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r bMode 20 c
	.dbend
	.dbfunc e D12_ReadInterruptRegister _D12_ReadInterruptRegister fs
;             b1 -> R22
;              j -> R20,R21
	.even
_D12_ReadInterruptRegister::
	xcall push_gset2
	.dbline -1
	.dbline 538
; 
; //读取中断寄存器
; ushort D12_ReadInterruptRegister(void)
; {
	.dbline 542
; 	uchar b1;
; 	uint j;
; 	
; 	outportb(D12_COMMAND, 0xF4);//读取中断寄存器
	ldi R18,244
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 543
; 	b1 = inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	mov R22,R16
	.dbline 544
; 	j = inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	mov R20,R16
	clr R21
	.dbline 545
; 	j <<= 8;
	mov R21,R20
	clr R20
	.dbline 546
; 	j += b1;
	mov R2,R22
	clr R3
	add R20,R2
	adc R21,R3
	.dbline 547
; 	return j;
	movw R16,R20
	.dbline -2
L71:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r b1 22 c
	.dbsym r j 20 i
	.dbend
	.dbfunc e D12_SelectEndpoint _D12_SelectEndpoint fc
;              c -> R20
;          bEndp -> R20
	.even
_D12_SelectEndpoint::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 552
; }
; 
; //端点选择
; uchar D12_SelectEndpoint(uchar bEndp)
; {
	.dbline 555
; 	uchar c;
; 	
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 556
;  	outportb(D12_COMMAND, bEndp);//端点选择
	mov R18,R20
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 557
; 	c = inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	mov R20,R16
	.dbline 558
;  	EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline 559
;   	return c;
	.dbline -2
L72:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r c 20 c
	.dbsym r bEndp 20 c
	.dbend
	.dbfunc e D12_ReadLastTransactionStatus _D12_ReadLastTransactionStatus fc
;          bEndp -> R20
	.even
_D12_ReadLastTransactionStatus::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 564
; }
; 
; //读取最后传输状态
; uchar D12_ReadLastTransactionStatus(uchar bEndp)
; {
	.dbline 565
; 	outportb(D12_COMMAND, 0x40 + bEndp);//返回最后传输状态
	mov R18,R20
	subi R18,192    ; addi 64
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 566
; 	return inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	.dbline -2
L73:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r bEndp 20 c
	.dbend
	.dbfunc e D12_SetEndpointStatus _D12_SetEndpointStatus fV
;       bStalled -> R20
;          bEndp -> R22
	.even
_D12_SetEndpointStatus::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 571
; }
; 
; //设置端点状态
; void D12_SetEndpointStatus(uchar bEndp, uchar bStalled)
; {
	.dbline 572
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 573
;  	outportb(D12_COMMAND, 0x40 + bEndp);//设置端点状态
	mov R18,R22
	subi R18,192    ; addi 64
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 574
; 	outportb(D12_DATA, bStalled);
	mov R18,R20
	clr R16
	clr R17
	xcall _outportb
	.dbline 575
; 	EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline -2
	.dbline 576
; }
L74:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r bStalled 20 c
	.dbsym r bEndp 22 c
	.dbend
	.dbfunc e D12_ReadEndpoint _D12_ReadEndpoint fc
;              j -> R20
;              i -> R22
;            buf -> R10,R11
;            len -> R22
;           endp -> R20
	.even
_D12_ReadEndpoint::
	xcall push_gset3
	mov R22,R18
	mov R20,R16
	ldd R10,y+6
	ldd R11,y+7
	.dbline -1
	.dbline 580
; 
; //读取端点数据
; uchar D12_ReadEndpoint(uchar endp, uchar len, uchar * buf)
; {                                        //端点号  长度  缓冲区
	.dbline 582
; 	unsigned char i, j;
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 583
; 	outportb(D12_COMMAND, endp);
	mov R18,R20
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 584
; 	if((inportb(D12_DATA) & 0x01) == 0)   //读缓冲区是否为空
	clr R16
	clr R17
	xcall _inportb
	sbrc R16,0
	rjmp L76
	.dbline 585
; 	{
	.dbline 586
; 		EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline 587
; 		return 0;
	clr R16
	xjmp L75
L76:
	.dbline 589
; 	}
;  	outportb(D12_COMMAND, 0xF0);          //读缓冲区指针自动加1
	ldi R18,240
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 590
; 	j = inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	.dbline 591
; 	j = inportb(D12_DATA);
	clr R16
	clr R17
	xcall _inportb
	mov R20,R16
	.dbline 592
;  	if(j > len)                           //最大长度
	cp R22,R16
	brsh L78
	.dbline 593
; 		j = len;
	mov R20,R22
L78:
	.dbline 594
;  	for(i=0; i<j; i++)
	clr R22
	xjmp L83
L80:
	.dbline 595
	clr R16
	clr R17
	xcall _inportb
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
L81:
	.dbline 594
	inc R22
L83:
	.dbline 594
	cp R22,R20
	brlo L80
	.dbline 596
; 		*(buf+i) = inportb(D12_DATA);     //数据送入缓冲区
; 	outportb(D12_COMMAND, 0xF2);          //清缓冲区
	ldi R18,242
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 597
;  	return j;
	mov R16,R20
	.dbline -2
L75:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 22 c
	.dbsym r buf 10 pc
	.dbsym r len 22 c
	.dbsym r endp 20 c
	.dbend
	.dbfunc e Isr_D12_ReadEndpoint _Isr_D12_ReadEndpoint fc
;              j -> R20
;              i -> R22
;            buf -> R10,R11
;            len -> R22
;           endp -> R20
	.even
_Isr_D12_ReadEndpoint::
	xcall push_gset3
	mov R22,R18
	mov R20,R16
	ldd R10,y+6
	ldd R11,y+7
	.dbline -1
	.dbline 601
; }
; //----------------------------------------------------------------------------
; uchar Isr_D12_ReadEndpoint(uchar endp, uchar len, uchar * buf)  //读取双缓冲区数据
; {                             
	.dbline 604
; 	unsigned char i, j;
; 	
; 	EIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 605
; 	outportb(D12_COMMAND, endp);
	mov R18,R20
	ldi R16,1
	ldi R17,0
	xcall _outportb
	.dbline 606
; 	if((inportb(D12_DATA) & 0x01) == 0) 
	clr R16
	clr R17
	xcall _inportb
	sbrc R16,0
	rjmp L85
	.dbline 607
; 	{
	.dbline 608
; 		EIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline 609
; 		return 0;
	clr R16
	xjmp L84
L85:
	.dbline 611
; 	}
;  	outportb(D12_COMMAND, 0xF0);

⌨️ 快捷键说明

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