📄 queue_2d.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 + -