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

📄 queue_2d.s

📁 AVR控制的SAB82525——HDLC通信 循环队列处理 完全是自己写的
💻 S
字号:
	.module queue_2D.c
	.area text(rom, con, rel)
	.dbfile E:\Projects\AVR\Timer_Send\queue_2D.c
	.dbfunc e InitQueue _InitQueue fV
	.even
_InitQueue::
	.dbline -1
	.dbline 6
; extern unsigned char pre_txd[33];
; unsigned char Buffer_Send[20][33];
; unsigned char front,rear;
; extern unsigned char count;
; void InitQueue()
; 	{
	.dbline 7
; 		front=0;
	clr R2
	sts _front,R2
	.dbline 8
; 		rear=0;
	sts _rear,R2
	.dbline 9
; 		count=0;
	sts _count,R2
	.dbline -2
	.dbline 10
; 	}
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e QueueEmpty _QueueEmpty fc
	.even
_QueueEmpty::
	.dbline -1
	.dbline 12
; unsigned char QueueEmpty()
; 	{
	.dbline 13
; 		if(count!=0)
	lds R2,_count
	tst R2
	breq L3
	.dbline 14
; 			return 0;
	clr R16
	xjmp L2
L3:
	.dbline 16
; 		else 
; 			return 1;
	ldi R16,1
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e QueueFull _QueueFull fc
	.even
_QueueFull::
	.dbline -1
	.dbline 20
; 	}
; 
; unsigned char QueueFull()
; 	{
	.dbline 21
; 		if(count==20)
	lds R24,_count
	cpi R24,20
	brne L6
	.dbline 22
; 			return 1;
	ldi R16,1
	xjmp L5
L6:
	.dbline 24
; 		else
; 			return 0;
	clr R16
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e EnQueue _EnQueue fV
;          i_enQ -> R20
;        num_enQ -> R18
;       txd_data -> R16,R17
	.even
_EnQueue::
	xcall push_gset1
	.dbline -1
	.dbline 28
; 	}
; 
; void EnQueue(unsigned char txd_data[32],unsigned char num_enQ)    //////入队
; 	{
	.dbline 29
; 		unsigned char i_enQ=0;
	clr R20
	.dbline 31
; 		
; 		for(i_enQ=0;i_enQ<num_enQ;i_enQ++)
	xjmp L12
L9:
	.dbline 32
	.dbline 33
	lds R2,_rear
	ldi R24,33
	mul R24,R2
	movw R2,R0
	ldi R24,<_Buffer_Send
	ldi R25,>_Buffer_Send
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	mov R26,R20
	clr R27
	add R26,R16
	adc R27,R17
	ld R2,x
	std z+0,R2
	.dbline 34
L10:
	.dbline 31
	inc R20
L12:
	.dbline 31
	cp R20,R18
	brlo L9
	.dbline 36
; 		{
; 			Buffer_Send[rear][i_enQ]=txd_data[i_enQ];
; 		}
; 		
; 		Buffer_Send[rear][32]=num_enQ;
	lds R2,_rear
	ldi R24,33
	mul R24,R2
	movw R30,R0
	ldi R24,<_Buffer_Send+32
	ldi R25,>_Buffer_Send+32
	add R30,R24
	adc R31,R25
	std z+0,R18
	.dbline 39
; 			
; 		//count++;
; 		if(rear>=19)
	mov R24,R2
	cpi R24,19
	brlo L14
	.dbline 40
; 			{
	.dbline 41
; 				rear=0;
	clr R2
	sts _rear,R2
	.dbline 42
; 				count=20+rear-front;
	lds R2,_front
	lds R24,_rear
	subi R24,236    ; addi 20
	sub R24,R2
	sts _count,R24
	.dbline 43
; 			}
	xjmp L15
L14:
	.dbline 45
	.dbline 46
	lds R24,_rear
	subi R24,255    ; addi 1
	sts _rear,R24
	.dbline 47
	lds R2,_front
	mov R3,R24
	sub R3,R2
	sts _count,R3
	.dbline 48
L15:
	.dbline -2
	.dbline 49
; 		else
; 			{
; 				rear++;
; 				count=rear-front;
; 			}
; 	}
L8:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i_enQ 20 c
	.dbsym r num_enQ 18 c
	.dbsym r txd_data 16 pc
	.dbend
	.dbfunc e DeQueue _DeQueue fV
;        num_deQ -> R16
;          i_deQ -> R18
	.even
_DeQueue::
	.dbline -1
	.dbline 52
; 	  
; void DeQueue()        ///////出队
; 	{
	.dbline 53
; 		unsigned char i_deQ=0;
	clr R18
	.dbline 54
; 		unsigned char num_deQ=0;
	clr R16
	.dbline 56
; 		
; 		num_deQ=Buffer_Send[front][32];
	lds R2,_front
	ldi R24,33
	mul R24,R2
	movw R30,R0
	ldi R24,<_Buffer_Send+32
	ldi R25,>_Buffer_Send+32
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	.dbline 58
; 		
; 		for(i_deQ=0;i_deQ<num_deQ;i_deQ++)
	xjmp L21
L18:
	.dbline 59
	.dbline 60
	lds R2,_front
	ldi R24,33
	mul R24,R2
	movw R2,R0
	ldi R24,<_Buffer_Send
	ldi R25,>_Buffer_Send
	add R2,R24
	adc R3,R25
	mov R30,R18
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_pre_txd
	ldi R25,>_pre_txd
	mov R30,R18
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 61
L19:
	.dbline 58
	inc R18
L21:
	.dbline 58
	cp R18,R16
	brlo L18
	.dbline 63
; 		{
; 			pre_txd[i_deQ]=Buffer_Send[front][i_deQ];
; 		}
; 		
; 		pre_txd[32]=Buffer_Send[front][32];
	lds R2,_front
	ldi R24,33
	mul R24,R2
	movw R30,R0
	ldi R24,<_Buffer_Send+32
	ldi R25,>_Buffer_Send+32
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _pre_txd+32,R2
	.dbline 72
; 		//Plus------------------------------------------------
; 		/*for(i_deQ=0;i_deQ<33;i_deQ++)
; 		{
; 			Buffer_Send[front][i_deQ]=0;
; 		}*/
; 		//----------------------------------------------------
;               
; 		//count--;
; 		if(front>=19)
	lds R24,_front
	cpi R24,19
	brlo L24
	.dbline 73
; 			{
	.dbline 74
; 				front=0;
	clr R2
	sts _front,R2
	.dbline 75
; 				count=rear-front;
	lds R3,_rear
	sub R3,R2
	sts _count,R3
	.dbline 76
; 			}
	xjmp L25
L24:
	.dbline 78
	.dbline 79
	lds R24,_front
	subi R24,255    ; addi 1
	sts _front,R24
	.dbline 80
	lds R3,_rear
	sub R3,R24
	sts _count,R3
	.dbline 81
L25:
	.dbline -2
	.dbline 82
; 		else
; 			{
; 				front++;
; 				count=rear-front;
; 			}
; 	}
L16:
	.dbline 0 ; func end
	ret
	.dbsym r num_deQ 16 c
	.dbsym r i_deQ 18 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\Projects\AVR\Timer_Send\queue_2D.c
_rear::
	.blkb 1
	.dbsym e rear _rear c
_front::
	.blkb 1
	.dbsym e front _front c
_Buffer_Send::
	.blkb 660
	.dbsym e Buffer_Send _Buffer_Send A[660:20:33]c

⌨️ 快捷键说明

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