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

📄 erase_card.lis

📁 环保型IC卡门禁系统的C程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B8           ;     Erase_flag -> R20
 00B8           ;              i -> R22
 00B8           ;           flag -> R10
                        .even
 00B8           _Erase_Card::
 00B8 00D0              rcall push_gset3
 00BA                   .dbline -1
 00BA                   .dbline 60
 00BA           ; }
 00BA           ; 
 00BA           ; void Erase_Card(void)       //  检测擦除位操作
 00BA           ; {
 00BA                   .dbline 62
 00BA           ;                    //移位标志   // 擦除位置标志
 00BA           ;   unsigned char i=0 , flag=0 , Erase_flag=0 ;
 00BA 6627              clr R22
 00BC                   .dbline 62
 00BC AA24              clr R10
 00BE                   .dbline 62
 00BE 4427              clr R20
 00C0                   .dbline 64
 00C0           ; 
 00C0           ;   flag=0x01 ;
 00C0 AA24              clr R10
 00C2 A394              inc R10
 00C4                   .dbline 66
 00C4           ;   
 00C4           ;   if( IC_Codes_8[11] != 0 )
 00C4 20900B00          lds R2,_IC_Codes_8+11
 00C8 2220              tst R2
 00CA 71F0              breq L7
 00CC                   .dbline 67
 00CC           ;   {                                  // 检测该位是否为0,不为0则擦除该位
 00CC                   .dbline 68
 00CC           ;     for(i=0;i<8;i++)
 00CC 0AC0              rjmp L13
 00CE           L10:
 00CE                   .dbline 69
 00CE           ;       {
 00CE                   .dbline 70
 00CE           ;       if ( (IC_Codes_8[12]&flag) != 0 )     // 检测到不为0的位则进行下面操作
 00CE 20900C00          lds R2,_IC_Codes_8+12
 00D2 2A20              and R2,R10
 00D4 21F0              breq L14
 00D6                   .dbline 71
 00D6           ;         {
 00D6                   .dbline 72
 00D6           ;           Erase_flag = 95-i ;                      //  确定要擦除的位
 00D6 4FE5              ldi R20,95
 00D8 461B              sub R20,R22
 00DA                   .dbline 73
 00DA           ;               Erase_bit(Erase_flag);                    //  擦除位
 00DA 042F              mov R16,R20
 00DC 91DF              rcall _Erase_bit
 00DE                   .dbline 74
 00DE           ;         }
 00DE           L14:
 00DE                   .dbline 75
 00DE AA0C              lsl R10
 00E0                   .dbline 76
 00E0           L11:
 00E0                   .dbline 68
 00E0 6395              inc R22
 00E2           L13:
 00E2                   .dbline 68
 00E2 6830              cpi R22,8
 00E4 A0F3              brlo L10
 00E6                   .dbline 77
 00E6           ;         flag=flag<<1;
 00E6           ;       }
 00E6           ;   }
 00E6 2EC0              rjmp L8
 00E8           L7:
 00E8                   .dbline 80
 00E8           ;   
 00E8           ;   else             // 检测个位是否为0,为0则先擦除高字节数据再写位
 00E8           ;   {
 00E8                   .dbline 81
 00E8           ;     flag=0x01 ;
 00E8 AA24              clr R10
 00EA A394              inc R10
 00EC                   .dbline 82
 00EC           ;     if( IC_Codes_8[10] != 0 )
 00EC 20900A00          lds R2,_IC_Codes_8+10
 00F0 2220              tst R2
 00F2 79F0              breq L17
 00F4                   .dbline 83
 00F4           ;     {                                  // 检测该位是否为0,不为0则擦除该位
 00F4                   .dbline 84
 00F4           ;       for(i=0;i<8;i++)
 00F4 6627              clr R22
 00F6 0AC0              rjmp L23
 00F8           L20:
 00F8                   .dbline 85
 00F8           ;         {
 00F8                   .dbline 86
 00F8           ;         if ( (IC_Codes_8[10]&flag) != 0 )     // 检测到不为0的位则进行下面操作
 00F8 20900A00          lds R2,_IC_Codes_8+10
 00FC 2A20              and R2,R10
 00FE 21F0              breq L24
 0100                   .dbline 87
 0100           ;           {
 0100                   .dbline 88
 0100           ;             Erase_flag = 87-i ;                      //  确定要擦除的位
 0100 47E5              ldi R20,87
 0102 461B              sub R20,R22
 0104                   .dbline 89
 0104           ;                 Erase_bit(Erase_flag);                   //  擦除位
 0104 042F              mov R16,R20
 0106 7CDF              rcall _Erase_bit
 0108                   .dbline 90
 0108           ;           }
 0108           L24:
 0108                   .dbline 91
 0108 AA0C              lsl R10
 010A                   .dbline 92
 010A           L21:
 010A                   .dbline 84
 010A 6395              inc R22
 010C           L23:
 010C                   .dbline 84
 010C 6830              cpi R22,8
 010E A0F3              brlo L20
 0110                   .dbline 93
 0110           ;           flag=flag<<1;
 0110           ;         }
 0110           ;     }
 0110 19C0              rjmp L18
 0112           L17:
 0112                   .dbline 96
 0112           ;       
 0112           ;       else             // 检测个位是否为0,为0则先擦除高字节数据再写位
 0112           ;       {
 0112                   .dbline 97
 0112           ;         flag=0x01 ;
 0112 AA24              clr R10
 0114 A394              inc R10
 0116                   .dbline 98
 0116           ;       if( IC_Codes_8[9] != 0 )
 0116 20900900          lds R2,_IC_Codes_8+9
 011A 2220              tst R2
 011C 79F0              breq L27
 011E                   .dbline 99
 011E           ;       {                                  // 检测该位是否为0,不为0则擦除该位
 011E                   .dbline 100
 011E           ;         for(i=0;i<8;i++)
 011E 6627              clr R22
 0120 0AC0              rjmp L33
 0122           L30:
 0122                   .dbline 101
 0122           ;           {
 0122                   .dbline 102
 0122           ;           if ( (IC_Codes_8[9]&flag) != 0 )     // 检测到不为0的位则进行下面操作
 0122 20900900          lds R2,_IC_Codes_8+9
 0126 2A20              and R2,R10
 0128 21F0              breq L34
 012A                   .dbline 103
 012A           ;             {
 012A                   .dbline 104
 012A           ;               Erase_flag = 79-i ;                      //  确定要擦除的位
 012A 4FE4              ldi R20,79
 012C 461B              sub R20,R22
 012E                   .dbline 105
 012E           ;                   Erase_bit(Erase_flag);                   //  擦除位
 012E 042F              mov R16,R20
 0130 67DF              rcall _Erase_bit
 0132                   .dbline 106
 0132           ;             }
 0132           L34:
 0132                   .dbline 107
 0132 AA0C              lsl R10
 0134                   .dbline 108
 0134           L31:
 0134                   .dbline 100
 0134 6395              inc R22
 0136           L33:
 0136                   .dbline 100
 0136 6830              cpi R22,8
 0138 A0F3              brlo L30
 013A                   .dbline 109
 013A           ;             flag=flag<<1;
 013A           ;           }
 013A           ;       }
 013A 04C0              rjmp L28
 013C           L27:
 013C                   .dbline 112
 013C           ;         
 013C           ;         else             // 若无数据可擦写,则显示0
 013C           ;         {
 013C                   .dbline 113
 013C           ;           Erase_IC_FLAG=0;
 013C 2224              clr R2
 013E 20920000          sts _Erase_IC_FLAG,R2
 0142                   .dbline 114
 0142           ;           Write_Card_Value();
 0142 00D0              rcall _Write_Card_Value
 0144                   .dbline 115
 0144           ;         }
 0144           L28:
 0144                   .dbline 116
 0144           ;       }
 0144           L18:
 0144                   .dbline 117
 0144           L8:
 0144                   .dbline -2
 0144           L6:
 0144 00D0              rcall pop_gset3
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r Erase_flag 20 c
 0148                   .dbsym r i 22 c
 0148                   .dbsym r flag 10 c
 0148                   .dbend

⌨️ 快捷键说明

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