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

📄 erase_card.s

📁 环保型IC卡门禁系统的C程序
💻 S
字号:
	.module Erase_Card.c
	.area data(ram, con, rel)
_Erase_IC_FLAG::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Erase_Card.c
	.dbsym e Erase_IC_FLAG _Erase_IC_FLAG c
	.area text(rom, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Erase_Card.c
	.dbfunc e Erase_bit _Erase_bit fV
;              i -> R20
;     Erase_flag -> R22
	.even
_Erase_bit::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 14
; /*******************************************************************************
; 
;                             擦除高字节 函数
; 							 
; *******************************************************************************/
; 
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
; 
; unsigned char  Erase_IC_FLAG=0 ;  // 擦除高位标志
; 
; void Erase_bit(unsigned char Erase_flag)         // 擦除位函数
; {
	.dbline 15
;   unsigned char i=0 ;
	clr R20
	.dbline 17
;   
;   Reset_0 ;
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 18
;   CLK_0 ;               //  IC_Card 卡复位
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 19
;   delay_nms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_nms
	.dbline 21
;   
;   Reset_1 ;                   //            把
	sbi 0x18,6
	.dbline 22
;   delay_nus(8) ;
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 23
;   CLK_1 ;                     //            地
	sbi 0x18,7
	.dbline 24
;   delay_nus(44) ;
	ldi R16,44
	ldi R17,0
	rcall _delay_nus
	.dbline 25
;   CLK_0 ;                     //            址
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 26
;   delay_nus(8) ;
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 27
;   Reset_0 ;                   //            加
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 28
;   delay_nus(10) ;
	ldi R16,10
	ldi R17,0
	rcall _delay_nus
	.dbline 29
;   delay_nus(27) ;             //            到
	ldi R16,27
	ldi R17,0
	rcall _delay_nus
	.dbline 31
;   
;   for (i=0;i<Erase_flag;i++)  //            要
	rjmp L5
L2:
	.dbline 32
	.dbline 33
	sbi 0x18,7
	.dbline 34
	ldi R16,40
	ldi R17,0
	rcall _delay_nus
	.dbline 35
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 36
	ldi R16,25
	ldi R17,0
	rcall _delay_nus
	.dbline 37
	ldi R16,20
	ldi R17,0
	rcall _delay_nus
	.dbline 38
L3:
	.dbline 31
	inc R20
L5:
	.dbline 31
	cp R20,R22
	brlo L2
	.dbline 40
;   {
; 	  CLK_1 ;                 //            擦
;       delay_nus(40) ;
; 	  CLK_0 ;                 //            的
; 	  delay_nus(25) ;
; 	  delay_nus(20) ;         //            位
;   }
;   
;   Reset_1 ;            //  擦
	sbi 0x18,6
	.dbline 41
;   delay_nus(50) ;
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 42
;   Reset_0 ;            //  除
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 43
;   delay_nus(10) ;
	ldi R16,10
	ldi R17,0
	rcall _delay_nus
	.dbline 44
;   CLK_1 ;              //  字
	sbi 0x18,7
	.dbline 45
;   delay_nus(15000) ;
	ldi R16,15000
	ldi R17,58
	rcall _delay_nus
	.dbline 46
;   CLK_0 ;              //  节
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 47
;   delay_nus(50) ;
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 48
;   Reset_1 ;            //  
	sbi 0x18,6
	.dbline 49
;   delay_nus(50) ;
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 50
;   Reset_0 ;            //  时
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 51
;   delay_nus(100) ;
	ldi R16,100
	ldi R17,0
	rcall _delay_nus
	.dbline 52
;   CLK_1 ;              //  
	sbi 0x18,7
	.dbline 53
;   delay_nus(50000) ;
	ldi R16,50000
	ldi R17,195
	rcall _delay_nus
	.dbline 54
;   CLK_0 ;              //  序
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 56
;   
;   Read_Card();
	rcall _Read_Card
	.dbline -2
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Erase_flag 22 c
	.dbend
	.dbfunc e Erase_Card _Erase_Card fV
;     Erase_flag -> R20
;              i -> R22
;           flag -> R10
	.even
_Erase_Card::
	rcall push_gset3
	.dbline -1
	.dbline 60
; }
; 
; void Erase_Card(void)       //  检测擦除位操作
; {
	.dbline 62
;                    //移位标志   // 擦除位置标志
;   unsigned char i=0 , flag=0 , Erase_flag=0 ;
	clr R22
	.dbline 62
	clr R10
	.dbline 62
	clr R20
	.dbline 64
; 
;   flag=0x01 ;
	clr R10
	inc R10
	.dbline 66
;   
;   if( IC_Codes_8[11] != 0 )
	lds R2,_IC_Codes_8+11
	tst R2
	breq L7
	.dbline 67
;   {                                  // 检测该位是否为0,不为0则擦除该位
	.dbline 68
;     for(i=0;i<8;i++)
	rjmp L13
L10:
	.dbline 69
; 	{
	.dbline 70
;       if ( (IC_Codes_8[12]&flag) != 0 )     // 检测到不为0的位则进行下面操作
	lds R2,_IC_Codes_8+12
	and R2,R10
	breq L14
	.dbline 71
; 	  {
	.dbline 72
; 	    Erase_flag = 95-i ;                      //  确定要擦除的位
	ldi R20,95
	sub R20,R22
	.dbline 73
; 		Erase_bit(Erase_flag);                    //  擦除位
	mov R16,R20
	rcall _Erase_bit
	.dbline 74
; 	  }
L14:
	.dbline 75
	lsl R10
	.dbline 76
L11:
	.dbline 68
	inc R22
L13:
	.dbline 68
	cpi R22,8
	brlo L10
	.dbline 77
; 	  flag=flag<<1;
; 	}
;   }
	rjmp L8
L7:
	.dbline 80
;   
;   else             // 检测个位是否为0,为0则先擦除高字节数据再写位
;   {
	.dbline 81
;     flag=0x01 ;
	clr R10
	inc R10
	.dbline 82
;     if( IC_Codes_8[10] != 0 )
	lds R2,_IC_Codes_8+10
	tst R2
	breq L17
	.dbline 83
;     {                                  // 检测该位是否为0,不为0则擦除该位
	.dbline 84
;       for(i=0;i<8;i++)
	clr R22
	rjmp L23
L20:
	.dbline 85
; 	  {
	.dbline 86
;         if ( (IC_Codes_8[10]&flag) != 0 )     // 检测到不为0的位则进行下面操作
	lds R2,_IC_Codes_8+10
	and R2,R10
	breq L24
	.dbline 87
; 	    {
	.dbline 88
; 	      Erase_flag = 87-i ;                      //  确定要擦除的位
	ldi R20,87
	sub R20,R22
	.dbline 89
; 		  Erase_bit(Erase_flag);                   //  擦除位
	mov R16,R20
	rcall _Erase_bit
	.dbline 90
; 	    }
L24:
	.dbline 91
	lsl R10
	.dbline 92
L21:
	.dbline 84
	inc R22
L23:
	.dbline 84
	cpi R22,8
	brlo L20
	.dbline 93
; 	    flag=flag<<1;
; 	  }
;     }
	rjmp L18
L17:
	.dbline 96
; 	
; 	else             // 检测个位是否为0,为0则先擦除高字节数据再写位
; 	{
	.dbline 97
; 	  flag=0x01 ;
	clr R10
	inc R10
	.dbline 98
;       if( IC_Codes_8[9] != 0 )
	lds R2,_IC_Codes_8+9
	tst R2
	breq L27
	.dbline 99
;       {                                  // 检测该位是否为0,不为0则擦除该位
	.dbline 100
;         for(i=0;i<8;i++)
	clr R22
	rjmp L33
L30:
	.dbline 101
; 	    {
	.dbline 102
;           if ( (IC_Codes_8[9]&flag) != 0 )     // 检测到不为0的位则进行下面操作
	lds R2,_IC_Codes_8+9
	and R2,R10
	breq L34
	.dbline 103
; 	      {
	.dbline 104
; 	        Erase_flag = 79-i ;                      //  确定要擦除的位
	ldi R20,79
	sub R20,R22
	.dbline 105
; 		    Erase_bit(Erase_flag);                   //  擦除位
	mov R16,R20
	rcall _Erase_bit
	.dbline 106
; 	      }
L34:
	.dbline 107
	lsl R10
	.dbline 108
L31:
	.dbline 100
	inc R22
L33:
	.dbline 100
	cpi R22,8
	brlo L30
	.dbline 109
; 	      flag=flag<<1;
; 	    }
;       }
	rjmp L28
L27:
	.dbline 112
; 	  
; 	  else             // 若无数据可擦写,则显示0
; 	  {
	.dbline 113
; 	    Erase_IC_FLAG=0;
	clr R2
	sts _Erase_IC_FLAG,R2
	.dbline 114
; 	    Write_Card_Value();
	rcall _Write_Card_Value
	.dbline 115
; 	  }
L28:
	.dbline 116
; 	}
L18:
	.dbline 117
L8:
	.dbline -2
L6:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Erase_flag 20 c
	.dbsym r i 22 c
	.dbsym r flag 10 c
	.dbend

⌨️ 快捷键说明

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