write_card.s

来自「环保型IC卡门禁系统的C程序」· S 代码 · 共 494 行

S
494
字号
	.module Write_Card.c
	.area text(rom, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Write_Card.c
	.dbfunc e Write_bit _Write_bit fV
;              i -> R20
;     Write_flag -> R22
	.even
_Write_bit::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 12
; /*******************************************************************************
; 
;                              写卡 函数
; 							 
; *******************************************************************************/
; 
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
; 
; void Write_bit(unsigned char Write_flag)      //  写卡位标志
; {
	.dbline 13
;   unsigned char i=0 ;
	clr R20
	.dbline 15
;   
;   Reset_0 ;
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 16
;   CLK_0 ;               //  IC_Card 卡复位
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 17
;   delay_nms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_nms
	.dbline 19
;   
;   Reset_1 ;                   //            把
	sbi 0x18,6
	.dbline 20
;   delay_nus(8) ;
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 21
;   CLK_1 ;                     //            地
	sbi 0x18,7
	.dbline 22
;   delay_nus(44) ;
	ldi R16,44
	ldi R17,0
	rcall _delay_nus
	.dbline 23
;   CLK_0 ;                     //            址
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 24
;   delay_nus(8) ;
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 25
;   Reset_0 ;                   //            加
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 26
;   delay_nus(10) ;
	ldi R16,10
	ldi R17,0
	rcall _delay_nus
	.dbline 27
;   delay_nus(27) ;             //            到
	ldi R16,27
	ldi R17,0
	rcall _delay_nus
	.dbline 29
;   
;   for (i=1;i<Write_flag;i++)  //            要
	ldi R20,1
	rjmp L5
L2:
	.dbline 30
	.dbline 31
	sbi 0x18,7
	.dbline 32
	ldi R16,40
	ldi R17,0
	rcall _delay_nus
	.dbline 33
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 34
	ldi R16,25
	ldi R17,0
	rcall _delay_nus
	.dbline 35
	ldi R16,20
	ldi R17,0
	rcall _delay_nus
	.dbline 36
L3:
	.dbline 29
	inc R20
L5:
	.dbline 29
	cp R20,R22
	brlo L2
	.dbline 38
;   {
; 	  CLK_1 ;                 //            写
;       delay_nus(40) ;
; 	  CLK_0 ;                 //            的
; 	  delay_nus(25) ;
; 	  delay_nus(20) ;         //            位
;   }
;   
;   Reset_1 ;            //   写
	sbi 0x18,6
	.dbline 39
;   delay_nus(50) ;      //
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 40
;   Reset_0 ;            //   位   
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 41
;   delay_nus(10) ;      //   
	ldi R16,10
	ldi R17,0
	rcall _delay_nus
	.dbline 42
;   CLK_1 ;              //   时
	sbi 0x18,7
	.dbline 43
;   delay_nus(15000) ;   //
	ldi R16,15000
	ldi R17,58
	rcall _delay_nus
	.dbline 44
;   CLK_0 ;              //   序
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 46
;   
;   Read_Card();         // 读卡
	rcall _Read_Card
	.dbline -2
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Write_flag 22 c
	.dbend
	.dbfunc e Write_Card _Write_Card fV
;              j -> R20
;     Write_flag -> R22
;              i -> R10
;           flag -> R12
;    Write_Value -> R14
	.even
_Write_Card::
	rcall push_gset5
	mov R14,R16
	.dbline -1
	.dbline 50
; }
; 
; void Write_Card(unsigned char Write_Value)       //  检测写位操作
; {
	.dbline 52
;                     //移位标志  //写位位置
;   unsigned char i=0 , j = 0 , flag=0 , Write_flag=0 ;
	clr R10
	.dbline 52
	clr R20
	.dbline 52
	clr R12
	.dbline 52
	clr R22
	.dbline 54
;   
;   for(j=0;j<Write_Value;j++)
	rjmp L10
L7:
	.dbline 55
;   {
	.dbline 56
;     flag=0x01 ;
	clr R12
	inc R12
	.dbline 58
;   
;     if( IC_Codes_8[12] != 0 )             // 检测个位是否为0,不为0则写该位
	lds R2,_IC_Codes_8+12
	tst R2
	breq L11
	.dbline 59
;     {
	.dbline 60
;       for(i=0;i<8;i++)
	clr R10
	rjmp L17
L14:
	.dbline 61
; 	  {
	.dbline 62
;         if ( (IC_Codes_8[12]&flag) != 0 )     // 检测到不为0的位则进行下面操作
	lds R2,_IC_Codes_8+12
	and R2,R12
	breq L18
	.dbline 63
; 	    {
	.dbline 64
; 	      Write_flag = 104-i ;                      //  确定要写的位
	ldi R22,104
	sub R22,R10
	.dbline 65
; 		  Write_bit(Write_flag);                    //  写位
	mov R16,R22
	rcall _Write_bit
	.dbline 66
; 	    }
L18:
	.dbline 67
	lsl R12
	.dbline 68
L15:
	.dbline 60
	inc R10
L17:
	.dbline 60
	mov R24,R10
	cpi R24,8
	brlo L14
	.dbline 69
; 	    flag=flag<<1;
; 	  }
;     }
	rjmp L12
L11:
	.dbline 72
;   
;     else
;     {
	.dbline 73
;       Erase_IC_FLAG=1 ;             // 检测个位是否为0,为0则先擦除高字节数据再写位
	ldi R24,1
	sts _Erase_IC_FLAG,R24
	.dbline 74
;       Erase_Card();
	rcall _Erase_Card
	.dbline 75
;     }
L12:
	.dbline 76
L8:
	.dbline 54
	inc R20
L10:
	.dbline 54
	cp R20,R14
	brlo L7
	.dbline 78
;   }
;   
;   Write_Card_Value();
	rcall _Write_Card_Value
	.dbline -2
L6:
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r Write_flag 22 c
	.dbsym r i 10 c
	.dbsym r flag 12 c
	.dbsym r Write_Value 14 c
	.dbend
	.dbfunc e Write_Card_Value _Write_Card_Value fV
;    Write_Value -> R20
;            Key -> R22
	.even
_Write_Card_Value::
	rcall push_gset2
	sbiw R28,2
	.dbline -1
	.dbline 82
; }
; 
; void Write_Card_Value(void)
; {
	.dbline 83
;   unsigned char Key = 0 , Write_Value = 0 ;
	clr R22
	.dbline 83
	clr R20
	.dbline 85
; 
;   LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 86
;   delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 88
;   
;   LCD_write_string(0,1,"Balance $:    . ");
	ldi R24,<L22
	ldi R25,>L22
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 89
;   Balance_dis();
	rcall _Balance_dis
	.dbline 90
;   LCD_write_char(0x0f,0);   // 显示光标
	clr R18
	clr R19
	ldi R16,15
	ldi R17,0
	rcall _LCD_write_char
	.dbline 91
;   LCD_write_string(0,0,"Subtract $ : 0.");
	ldi R24,<L23
	ldi R25,>L23
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	rjmp L25
L24:
	.dbline 94
;   
;   while(1)
;   {
	.dbline 95
;     Key = Key_Scan() ;
	rcall _Key_Scan
	mov R22,R16
	.dbline 97
; 	
; 	if(Key!=0)
	tst R16
	breq L27
	.dbline 98
; 	{
	.dbline 99
; 	  if(Key<10)
	cpi R16,10
	brsh L29
	.dbline 100
; 	  {
	.dbline 101
; 	    Write_Value = Key ;
	mov R20,R22
	.dbline 102
; 	    display(Key , 15);
	ldi R18,15
	rcall _display
	.dbline 103
; 	  }
L29:
	.dbline 105
; 	  
; 	  if(Key==11)
	cpi R22,11
	brne L31
	.dbline 106
; 	  {
	.dbline 107
; 	    LCD_write_char(0x0c,0);   // 关闭光标
	clr R18
	clr R19
	ldi R16,12
	ldi R17,0
	rcall _LCD_write_char
	.dbline 108
; 	    menu_Init() ;
	rcall _menu_Init
	.dbline 109
; 	  }
L31:
	.dbline 111
; 	  
; 	  if(Key==12)
	cpi R22,12
	brne L33
	.dbline 112
; 	  {
	.dbline 113
; 	    LCD_write_char(0x0c,0);   // 关闭光标
	clr R18
	clr R19
	ldi R16,12
	ldi R17,0
	rcall _LCD_write_char
	.dbline 114
; 	    Write_Card(Write_Value);
	mov R16,R20
	rcall _Write_Card
	.dbline 115
; 	  }
L33:
	.dbline 116
; 	}
L27:
	.dbline 118
; 	
; 	if(IC_SW!=0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq L35
	.dbline 119
; 	{
	.dbline 120
;       delay_nms(50);               //   检测是否有卡插入
	ldi R16,50
	ldi R17,0
	rcall _delay_nms
	.dbline 121
; 	  if(IC_SW!=0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq L37
	.dbline 122
; 	  {
	.dbline 123
;         menu_Init();
	rcall _menu_Init
	.dbline 124
;       }
L37:
	.dbline 125
; 	}
L35:
	.dbline 126
L25:
	.dbline 93
	rjmp L24
X0:
	.dbline -2
L21:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Write_Value 20 c
	.dbsym r Key 22 c
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Write_Card.c
L23:
	.blkb 16
	.area idata
	.byte 'S,'u,'b,'t,'r,'a,'c,'t,32,36,32,58,32,48,46,0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Write_Card.c
L22:
	.blkb 17
	.area idata
	.byte 'B,'a,'l,'a,'n,'c,'e,32,36,58,32,32,32,32,46,32
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Write_Card.c

⌨️ 快捷键说明

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