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

📄 queue_2d.lis

📁 AVR控制的SAB82525——HDLC通信 循环队列处理 完全是自己写的
💻 LIS
字号:
                        .module queue_2D.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\Projects\AVR\Timer_Send\queue_2D.c
 0000                   .dbfunc e InitQueue _InitQueue fV
                        .even
 0000           _InitQueue::
 0000                   .dbline -1
 0000                   .dbline 6
 0000           ; extern unsigned char pre_txd[33];
 0000           ; unsigned char Buffer_Send[20][33];
 0000           ; unsigned char front,rear;
 0000           ; extern unsigned char count;
 0000           ; void InitQueue()
 0000           ;       {
 0000                   .dbline 7
 0000           ;               front=0;
 0000 2224              clr R2
 0002 20920100          sts _front,R2
 0006                   .dbline 8
 0006           ;               rear=0;
 0006 20920000          sts _rear,R2
 000A                   .dbline 9
 000A           ;               count=0;
 000A 20920000          sts _count,R2
 000E                   .dbline -2
 000E                   .dbline 10
 000E           ;       }
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e QueueEmpty _QueueEmpty fc
                        .even
 0010           _QueueEmpty::
 0010                   .dbline -1
 0010                   .dbline 12
 0010           ; unsigned char QueueEmpty()
 0010           ;       {
 0010                   .dbline 13
 0010           ;               if(count!=0)
 0010 20900000          lds R2,_count
 0014 2220              tst R2
 0016 11F0              breq L3
 0018                   .dbline 14
 0018           ;                       return 0;
 0018 0027              clr R16
 001A 01C0              xjmp L2
 001C           L3:
 001C                   .dbline 16
 001C           ;               else 
 001C           ;                       return 1;
 001C 01E0              ldi R16,1
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e QueueFull _QueueFull fc
                        .even
 0020           _QueueFull::
 0020                   .dbline -1
 0020                   .dbline 20
 0020           ;       }
 0020           ; 
 0020           ; unsigned char QueueFull()
 0020           ;       {
 0020                   .dbline 21
 0020           ;               if(count==20)
 0020 80910000          lds R24,_count
 0024 8431              cpi R24,20
 0026 11F4              brne L6
 0028                   .dbline 22
 0028           ;                       return 1;
 0028 01E0              ldi R16,1
 002A 01C0              xjmp L5
 002C           L6:
 002C                   .dbline 24
 002C           ;               else
 002C           ;                       return 0;
 002C 0027              clr R16
 002E                   .dbline -2
 002E           L5:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
 0030                   .dbfunc e EnQueue _EnQueue fV
 0030           ;          i_enQ -> R20
 0030           ;        num_enQ -> R18
 0030           ;       txd_data -> R16,R17
                        .even
 0030           _EnQueue::
 0030 0E940000          xcall push_gset1
 0034                   .dbline -1
 0034                   .dbline 28
 0034           ;       }
 0034           ; 
 0034           ; void EnQueue(unsigned char txd_data[32],unsigned char num_enQ)    //////入队
 0034           ;       {
 0034                   .dbline 29
 0034           ;               unsigned char i_enQ=0;
 0034 4427              clr R20
 0036                   .dbline 31
 0036           ;               
 0036           ;               for(i_enQ=0;i_enQ<num_enQ;i_enQ++)
 0036 14C0              xjmp L12
 0038           L9:
 0038                   .dbline 32
 0038                   .dbline 33
 0038 20900000          lds R2,_rear
 003C 81E2              ldi R24,33
 003E 829D              mul R24,R2
 0040 1001              movw R2,R0
 0042 80E0              ldi R24,<_Buffer_Send
 0044 90E0              ldi R25,>_Buffer_Send
 0046 280E              add R2,R24
 0048 391E              adc R3,R25
 004A E42F              mov R30,R20
 004C FF27              clr R31
 004E E20D              add R30,R2
 0050 F31D              adc R31,R3
 0052 A42F              mov R26,R20
 0054 BB27              clr R27
 0056 A00F              add R26,R16
 0058 B11F              adc R27,R17
 005A 2C90              ld R2,x
 005C 2082              std z+0,R2
 005E                   .dbline 34
 005E           L10:
 005E                   .dbline 31
 005E 4395              inc R20
 0060           L12:
 0060                   .dbline 31
 0060 4217              cp R20,R18
 0062 50F3              brlo L9
 0064                   .dbline 36
 0064           ;               {
 0064           ;                       Buffer_Send[rear][i_enQ]=txd_data[i_enQ];
 0064           ;               }
 0064           ;               
 0064           ;               Buffer_Send[rear][32]=num_enQ;
 0064 20900000          lds R2,_rear
 0068 81E2              ldi R24,33
 006A 829D              mul R24,R2
 006C F001              movw R30,R0
 006E 80E0              ldi R24,<_Buffer_Send+32
 0070 90E0              ldi R25,>_Buffer_Send+32
 0072 E80F              add R30,R24
 0074 F91F              adc R31,R25
 0076 2083              std z+0,R18
 0078                   .dbline 39
 0078           ;                       
 0078           ;               //count++;
 0078           ;               if(rear>=19)
 0078 822D              mov R24,R2
 007A 8331              cpi R24,19
 007C 60F0              brlo L14
 007E                   .dbline 40
 007E           ;                       {
 007E                   .dbline 41
 007E           ;                               rear=0;
 007E 2224              clr R2
 0080 20920000          sts _rear,R2
 0084                   .dbline 42
 0084           ;                               count=20+rear-front;
 0084 20900100          lds R2,_front
 0088 80910000          lds R24,_rear
 008C 8C5E              subi R24,236    ; addi 20
 008E 8219              sub R24,R2
 0090 80930000          sts _count,R24
 0094                   .dbline 43
 0094           ;                       }
 0094 0BC0              xjmp L15
 0096           L14:
 0096                   .dbline 45
 0096                   .dbline 46
 0096 80910000          lds R24,_rear
 009A 8F5F              subi R24,255    ; addi 1
 009C 80930000          sts _rear,R24
 00A0                   .dbline 47
 00A0 20900100          lds R2,_front
 00A4 382E              mov R3,R24
 00A6 3218              sub R3,R2
 00A8 30920000          sts _count,R3
 00AC                   .dbline 48
 00AC           L15:
 00AC                   .dbline -2
 00AC                   .dbline 49
 00AC           ;               else
 00AC           ;                       {
 00AC           ;                               rear++;
 00AC           ;                               count=rear-front;
 00AC           ;                       }
 00AC           ;       }
 00AC           L8:
 00AC 0E940000          xcall pop_gset1
 00B0                   .dbline 0 ; func end
 00B0 0895              ret
 00B2                   .dbsym r i_enQ 20 c
 00B2                   .dbsym r num_enQ 18 c
 00B2                   .dbsym r txd_data 16 pc
 00B2                   .dbend
 00B2                   .dbfunc e DeQueue _DeQueue fV
 00B2           ;        num_deQ -> R16
 00B2           ;          i_deQ -> R18
                        .even
 00B2           _DeQueue::
 00B2                   .dbline -1
 00B2                   .dbline 52
 00B2           ;         
 00B2           ; void DeQueue()        ///////出队
 00B2           ;       {
 00B2                   .dbline 53
 00B2           ;               unsigned char i_deQ=0;
 00B2 2227              clr R18
 00B4                   .dbline 54
 00B4           ;               unsigned char num_deQ=0;
 00B4 0027              clr R16
 00B6                   .dbline 56
 00B6           ;               
 00B6           ;               num_deQ=Buffer_Send[front][32];
 00B6 20900100          lds R2,_front
 00BA 81E2              ldi R24,33
 00BC 829D              mul R24,R2
 00BE F001              movw R30,R0
 00C0 80E0              ldi R24,<_Buffer_Send+32
 00C2 90E0              ldi R25,>_Buffer_Send+32
 00C4 E80F              add R30,R24
 00C6 F91F              adc R31,R25
 00C8 0081              ldd R16,z+0
 00CA                   .dbline 58
 00CA           ;               
 00CA           ;               for(i_deQ=0;i_deQ<num_deQ;i_deQ++)
 00CA 16C0              xjmp L21
 00CC           L18:
 00CC                   .dbline 59
 00CC                   .dbline 60
 00CC 20900100          lds R2,_front
 00D0 81E2              ldi R24,33
 00D2 829D              mul R24,R2
 00D4 1001              movw R2,R0
 00D6 80E0              ldi R24,<_Buffer_Send
 00D8 90E0              ldi R25,>_Buffer_Send
 00DA 280E              add R2,R24
 00DC 391E              adc R3,R25
 00DE E22F              mov R30,R18
 00E0 FF27              clr R31
 00E2 E20D              add R30,R2
 00E4 F31D              adc R31,R3
 00E6 2080              ldd R2,z+0
 00E8 80E0              ldi R24,<_pre_txd
 00EA 90E0              ldi R25,>_pre_txd
 00EC E22F              mov R30,R18
 00EE FF27              clr R31
 00F0 E80F              add R30,R24
 00F2 F91F              adc R31,R25
 00F4 2082              std z+0,R2
 00F6                   .dbline 61
 00F6           L19:
 00F6                   .dbline 58
 00F6 2395              inc R18
 00F8           L21:
 00F8                   .dbline 58
 00F8 2017              cp R18,R16
 00FA 40F3              brlo L18
 00FC                   .dbline 63
 00FC           ;               {
 00FC           ;                       pre_txd[i_deQ]=Buffer_Send[front][i_deQ];
 00FC           ;               }
 00FC           ;               
 00FC           ;               pre_txd[32]=Buffer_Send[front][32];
 00FC 20900100          lds R2,_front
 0100 81E2              ldi R24,33
 0102 829D              mul R24,R2
 0104 F001              movw R30,R0
 0106 80E0              ldi R24,<_Buffer_Send+32
 0108 90E0              ldi R25,>_Buffer_Send+32
 010A E80F              add R30,R24
 010C F91F              adc R31,R25
 010E 2080              ldd R2,z+0
 0110 20922000          sts _pre_txd+32,R2
 0114                   .dbline 72
 0114           ;               //Plus------------------------------------------------
 0114           ;               /*for(i_deQ=0;i_deQ<33;i_deQ++)
 0114           ;               {
 0114           ;                       Buffer_Send[front][i_deQ]=0;
 0114           ;               }*/
 0114           ;               //----------------------------------------------------
 0114           ;               
 0114           ;               //count--;
 0114           ;               if(front>=19)
 0114 80910100          lds R24,_front
 0118 8331              cpi R24,19
 011A 48F0              brlo L24
 011C                   .dbline 73
 011C           ;                       {
 011C                   .dbline 74
 011C           ;                               front=0;
 011C 2224              clr R2
 011E 20920100          sts _front,R2
 0122                   .dbline 75
 0122           ;                               count=rear-front;
 0122 30900000          lds R3,_rear
 0126 3218              sub R3,R2
 0128 30920000          sts _count,R3
 012C                   .dbline 76
 012C           ;                       }
 012C 0AC0              xjmp L25
 012E           L24:
 012E                   .dbline 78
 012E                   .dbline 79
 012E 80910100          lds R24,_front
 0132 8F5F              subi R24,255    ; addi 1
 0134 80930100          sts _front,R24
 0138                   .dbline 80
 0138 30900000          lds R3,_rear
 013C 381A              sub R3,R24
 013E 30920000          sts _count,R3
 0142                   .dbline 81
 0142           L25:
 0142                   .dbline -2
 0142                   .dbline 82
 0142           ;               else
 0142           ;                       {
 0142           ;                               front++;
 0142           ;                               count=rear-front;
 0142           ;                       }
 0142           ;       }
 0142           L16:
 0142                   .dbline 0 ; func end
 0142 0895              ret
 0144                   .dbsym r num_deQ 16 c
 0144                   .dbsym r i_deQ 18 c
 0144                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\Projects\AVR\Timer_Send\queue_2D.c
 0000           _rear::
 0000                   .blkb 1
 0001                   .dbsym e rear _rear c
 0001           _front::
 0001                   .blkb 1
 0002                   .dbsym e front _front c
 0002           _Buffer_Send::
 0002                   .blkb 660
 0296                   .dbsym e Buffer_Send _Buffer_Send A[660:20:33]c

⌨️ 快捷键说明

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