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

📄 queue.s

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 S
字号:
	.module queue.c
	.area text(rom, con, rel)
	.dbfile D:\桌面\mp3\queue\queue.c
	.dbfunc e InitQueue _InitQueue fV
	.dbstruct 0 9 .1
	.dbfield 0 front c
	.dbfield 1 rear c
	.dbfield 2 count c
	.dbfield 3 data pc
	.dbfield 5 queuesize c
	.dbfield 6 errorcode c
	.dbfield 7 status c
	.dbfield 8 memo c
	.dbend
;              Q -> R16,R17
	.even
_InitQueue::
	.dbline -1
	.dbline 53
; /*********************************************************************************************************
; **				          			QUEUE队列头文件 
; **                                  (c) Copyright 2006-2008, limaokui
; **                                           All Rights Reserved
; **
; **                                             V1.0.0
; **
; **
; **--------------文件信息--------------------------------------------------------------------------------
; **文   件   名:queue.h
; **创   建   人: 李茂奎
; **最后修改日期:  2006年8月29日
; **描        述:  
; **
; **--------------历史版本信息----------------------------------------------------------------------------
; ** 创建人: 李茂奎
; ** 版  本: V1.00
; ** 日 期: 2006年8月29日
; ** 描 述: 原始版本
; **
; **------------------------------------------------------------------------------------------------------
; ** 修改人: 李茂奎
; ** 版  本:
; ** 日 期:
; ** 描 述: 
; **
; **--------------当前版本修订------------------------------------------------------------------------------
; ** 修改人:    李茂奎																					  
; ** 日 期:	 2006年8月29日
; ** 描 述:   
; **
; **------------------------------------------------------------------------------------------------------
; *********************************************************************************************************
; **使用说明:在定义队列时请定义一个静态数组,并将此数组传递给队列的data,并将数据长度传递给queuesize
;   #define TWI_SEND_DATA_BUFFER_SIZE 100
;   static uint8 Twi_SendData[TWI_SEND_DATA_BUFFER_SIZE];
;   CirQueue Twi_SendBuffer={0,0,0,Twi_SendData,TWI_SEND_DATA_BUFFER_SIZE,QUEUE_OK};
; 
; *********************************************************************************************************/
; #include "config.h"
; /*********************************************************************************************************
; ** 函数名称:InitQueue
; ** 功能描述:初始化队列
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************/
; void InitQueue(CirQueue * Q)
; {
	.dbline 55
; //CLI();
; Q->front=Q->rear=0;
	clr R2
	movw R30,R16
	std z+1,R2
	movw R30,R16
	std z+0,R2
	.dbline 56
; Q->count=0;
	std z+2,R2
	.dbline 57
; Q->errorcode= QUEUE_OK;
	movw R30,R16
	std z+6,R2
	.dbline 58
; Q->memo=0;
	movw R30,R16
	std z+8,R2
	.dbline 59
; Q->status=TWI_DATA_FREE;
	movw R30,R16
	std z+7,R2
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r Q 16 pS[.1]
	.dbend
	.dbfunc e EnQueue _EnQueue fV
;              x -> R22
;              Q -> R20,R21
	.even
_EnQueue::
	xcall push_gset2
	mov R22,R18
	movw R20,R16
	.dbline -1
	.dbline 105
; //SEI();
; }
; /*********************************************************************************************************
; ** 函数名称:EmptyQueue(CirQueue *Q)
; ** 功能描述:判断队列是否为空
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************
; uint8 EmptyQueue(CirQueue * Q)
; {
; return Q->count==0;
; }
; /*********************************************************************************************************
; ** 函数名称:FullQueue(CirQueue *Q)
; ** 功能描述:判断队列是否为满
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************
; 
; uint8 FullQueue(CirQueue * Q)
; {
; return (Q->count == Q->queuesize);
; }
; /*********************************************************************************************************
; ** 函数名称:EnQueue
; ** 功能描述:入队
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************/
; void EnQueue(CirQueue * Q,uint8 x)
; {
	.dbline 106
; if(FullQueue(Q))
	movw R30,R20
	ldd R2,z+5
	movw R30,R20
	ldd R3,z+2
	cp R3,R2
	brne L9
	.dbline 107
;    {
	.dbline 108
;    Q->errorcode=QUEUE_OVERFLOW;
	ldi R24,1
	movw R30,R20
	std z+6,R24
	.dbline 109
;    Q->count=Q->queuesize;
	movw R30,R20
	ldd R2,z+5
	movw R30,R20
	std z+2,R2
	.dbline 110
;    return;
	xjmp L8
L9:
	.dbline 113
;    }
; //CLI();
; Q->count++;
	movw R24,R20
	adiw R24,2
	movw R30,R24
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline 114
; Q->data[Q->rear]=x;
	movw R30,R20
	ldd R2,z+3
	ldd R3,z+4
	movw R30,R20
	ldd R30,z+1
	clr R31
	add R30,R2
	adc R31,R3
	std z+0,R22
	.dbline 115
; Q->rear=(Q->rear+1)%Q->queuesize;
	movw R24,R20
	adiw R24,1
	movw R2,R24
	movw R30,R20
	ldd R17,z+5
	movw R30,R24
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R2
	std z+0,R16
	.dbline 116
; Q->errorcode=QUEUE_OK;
	clr R2
	movw R30,R20
	std z+6,R2
	.dbline -2
L8:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r x 22 c
	.dbsym r Q 20 pS[.1]
	.dbend
	.dbfunc e DeQueue _DeQueue fc
;           temp -> R20
;              Q -> R22,R23
	.even
_DeQueue::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 131
; //SEI();
; }
; /*********************************************************************************************************
; ** 函数名称:DeQueue
; ** 功能描述:出队
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************/
; uint8 DeQueue(CirQueue * Q)
; {
	.dbline 133
; uint8 temp;
; if(EmptyQueue(Q))
	movw R30,R22
	ldd R2,z+2
	tst R2
	brne L12
	.dbline 134
;    {
	.dbline 135
;    Q->errorcode=QUEUE_UNDERFLOW;
	ldi R24,2
	movw R30,R22
	std z+6,R24
	.dbline 136
;    return FALSE;
	clr R16
	xjmp L11
L12:
	.dbline 139
;    }
; //CLI();
; Q->count--;
	movw R24,R22
	adiw R24,2
	movw R30,R24
	ldd R24,z+0
	subi R24,1
	std z+0,R24
	.dbline 140
; temp=Q->data[Q->front];
	movw R30,R22
	ldd R2,z+3
	ldd R3,z+4
	movw R30,R22
	ldd R30,z+0
	clr R31
	add R30,R2
	adc R31,R3
	ldd R20,z+0
	.dbline 141
; Q->front=(Q->front+1)%Q->queuesize;
	movw R30,R22
	ldd R17,z+5
	movw R30,R22
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R22
	std z+0,R16
	.dbline 142
; Q->errorcode=QUEUE_OK;
	clr R2
	std z+6,R2
	.dbline 144
; //SEI();
; return temp;
	mov R16,R20
	.dbline -2
L11:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r Q 22 pS[.1]
	.dbend
	.dbfunc e FrontQueueData _FrontQueueData fc
;              Q -> R16,R17
	.even
_FrontQueueData::
	.dbline -1
	.dbline 158
; }
; /*********************************************************************************************************
; ** 函数名称:FrontQueueData
; ** 功能描述:出队
; ** 输 入:  
; ** 输  出:             
; ** 全局变量: 
; ** 调用模块: 
; ** 说明:
; ** 注意:    
; ** 日 期:   2006年8月29日
; ********************************************************************************************************/
; uint8 FrontQueueData(CirQueue * Q)
; {
	.dbline 159
; if(EmptyQueue(Q))
	movw R30,R16
	ldd R2,z+2
	tst R2
	brne L15
	.dbline 160
;    {
	.dbline 161
;    Q->errorcode=QUEUE_UNDERFLOW;
	ldi R24,2
	movw R30,R16
	std z+6,R24
	.dbline 162
;    return FALSE;
	clr R16
	xjmp L14
L15:
	.dbline 164
;    }
; return Q->data[Q->front];
	movw R30,R16
	ldd R2,z+3
	ldd R3,z+4
	movw R30,R16
	ldd R30,z+0
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r Q 16 pS[.1]
	.dbend

⌨️ 快捷键说明

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