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

📄 rfidsys.s

📁 读写器与射频卡通信的设计采用RC522射频读写芯片与射频卡进行通信
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module RFIDsys.C
	.area text(rom, con, rel)
	.dbfile D:\Headers\Software.H
	.dbfunc e speaData _speaData fV
;              y -> y+4
;              j -> y+0
;              i -> R10
;            len -> R12
;            dat -> y+16
	.even
_speaData::
	xcall push_arg4
	xcall push_gset4
	sbiw R28,8
	ldd R12,y+20
	.dbline -1
	.dbline 116
; /*********************************************************************
;              
; 目    的:   建立操作LCD12864_ST7920液晶的示例程序
; 
; 目标系统:   基于任何AVR单片机
; 		                                                                
; 应用软件:   ICCAVR
; 		                                                                
; 版    本:   Version 1.0                                                          
; 		                                                                
; 圆版时间:   2008-05-28
; 	
; 开发人员:   hky
; 
; 说    明:   若用于商业用途,请保留此段文字或注明代码来源
; 
; *********************************************************************/
; 
; /*01010101010101010101010101010101010101010101010101010101010101010101
; ----------------------------------------------------------------------
; 版本更新记录:
; 
; ----------------------------------------------------------------------
; 实验内容:
; 初始化、读写Lcd12864_ST7920。
; ----------------------------------------------------------------------
; 硬件连接:
; LCD12864_ST7920			ATmega16
; 4.RS(CS)	--------	VCC
; 5.R/W(SID)	--------	MOSI/PB5
; 6.E(SCLK)	--------	SCK/PB7
; 15.PSB		--------	GND
; ----------------------------------------------------------------------
; 10101010101010101010101010101010101010101010101010101010101010101010*/
; 
; #include <iom16v.h>
; #include "D:\Headers\LCD12864_ST7920.H"
; //#include "PCF8563.h"
; #include "D:\Headers\Hardware.H"
; //#include "D:\ICC_H\I2C.H"
; //#include "delay1.h"
; /*--------------------------------------------------------------------
; 函数名称:
; 函数功能:
; 注意事项:
; 提示说明:
; 输    入:
; 返    回:
; --------------------------------------------------------------------*/
; void init_device()
; {
; // Input/Output Ports initialization
; // Port A initialization
; // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
; // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
; PORTA=0x00;
; DDRA=0x00;
; 
; // Port B initialization
; // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
; // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
; PORTB=0x00;
; DDRB=0x00;
; 
; // Port C initialization
; // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
; // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
; PORTC=0x00;
; DDRC=0x00;
; 
; // Port D initialization
; // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
; // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
; PORTD=0x00;
; DDRD=0x00;
; 
; // Timer/Counter 0 initialization
; // Clock source: System Clock
; // Clock value: Timer 0 Stopped
; // Mode: Normal top=FFh
; // OC0 output: Disconnected
; TCCR0=0x00;
; TCNT0=0x00;
; OCR0=0x00;
; 
; // Timer/Counter 1 initialization
; // Clock source: System Clock
; // Clock value: Timer 1 Stopped
; // Mode: Normal top=FFFFh
; // OC1A output: Discon.
; // OC1B output: Discon.
; // Noise Canceler: Off
; // Input Capture on Falling Edge
; // Timer 1 Overflow Interrupt: Off
; // Input Capture Interrupt: Off
; // Compare A Match Interrupt: Off
; // Compare B Match Interrupt: Off
; TCCR1A=0x00;
; TCCR1B=0x00;
; TCNT1H=0x00;
; TCNT1L=0x00;
; ICR1H=0x00;
; ICR1L=0x00;
; OCR1AH=0x00;
; OCR1AL=0x00;
; OCR1BH=0x00;
; OCR1BL=0x00;
; 
; // Timer/Counter 2 initialization
; // Clock source: System Clock
; // Clock value: Timer 2 Stopped
; // Mode: Normal top=FFh
; // OC2 output: Disconnected
; ASSR=0x00;
; TCCR2=0x00;
; TCNT2=0x00;
	.dbline 119
; OCR2=0x00;
; 
; // External Interrupt(s) initialization
	clr R10
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L5
L2:
	.dbline 120
	.dbline 121
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	ldd R6,z+16
	ldd R7,z+17
	ldd R8,z+18
	ldd R9,z+19
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall div32u
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 122
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall mod32u
	ldi R24,<_dataElem
	ldi R25,>_dataElem
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 123
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 124
L3:
	.dbline 119
	inc R10
L5:
	.dbline 119
	cp R10,R12
	brsh X0
	xjmp L2
X0:
	.dbline -2
L1:
	adiw R28,8
	xcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l y 4 l
	.dbsym l j 0 l
	.dbsym r i 10 c
	.dbsym r len 12 C
	.dbsym l dat 16 l
	.dbend
	.dbfile D:\Headers\I2C.H
	.dbfunc e I2C_Start _I2C_Start fc
	.even
_I2C_Start::
	.dbline -1
	.dbline 128
; // INT0: Off
; // INT1: Off
; // INT2: Off
; MCUCR=0x00;
; MCUCSR=0x00;
; 
; // Timer(s)/Counter(s) Interrupt(s) initialization
; TIMSK=0x00;
; 
	.dbline 129
; // Analog Comparator initialization
	ldi R24,164
	out 0x36,R24
	.dbline 130
L7:
	.dbline 130
L8:
	.dbline 130
; // Analog Comparator: Off
	in R2,0x36
	sbrs R2,7
	rjmp L7
	.dbline 130
	.dbline 130
	.dbline 131
; // Analog Comparator Input Capture by Timer/Counter 1: Off
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L10
	.dbline 132
; ACSR=0x80;
	clr R16
	xjmp L6
L10:
	.dbline 133
; SFIOR=0x00;
	ldi R16,1
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e I2C_Restart _I2C_Restart fc
	.even
_I2C_Restart::
	.dbline -1
	.dbline 144
; 
; }
; void main()
; {   
;   unsigned char a=0;
;   init_device();        
;   PORTB|=0x02;
; 
;     //DDRA|=0x09;
;     //PORTA=0xFE;
;   DDRA|=0x01;
	.dbline 145
;   PORTA&=0xFE;
	ldi R24,164
	out 0x36,R24
	.dbline 146
L13:
	.dbline 146
L14:
	.dbline 146
; 	//DDRA|=0x04;
	in R2,0x36
	sbrs R2,7
	rjmp L13
	.dbline 146
	.dbline 146
	.dbline 147
;    // PORTA|=0x04;
	in R24,0x1
	andi R24,248
	cpi R24,16
	breq L16
	.dbline 148
; 	
	clr R16
	xjmp L12
L16:
	.dbline 149
; 	SEI();
	ldi R16,1
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e I2C_SendWrDAdr _I2C_SendWrDAdr fc
;         wrDAdr -> R16
	.even
_I2C_SendWrDAdr::
	.dbline -1
	.dbline 160
; 	lcd_init();	
; 	lcd_puts(2,1,"    启动中 -");
;     PORTB|=0x04;
;     delay50ms(2); 
; 	lcd_puts(2,1,"    启动中 \\");
; 	delay50ms(2);
; 	lcd_puts(2,1,"    启动中 /");
; 	delay50ms(2);  
; 	lcd_puts(2,1,"    启动中 -");
;     PORTB&=0xFB;
;     delay50ms(2);
	.dbline 161
; 	lcd_puts(2,1,"    启动中 \\");
	.dbline 161
	out 0x3,R16
	.dbline 161
	ldi R24,132
	out 0x36,R24
	.dbline 161
	.dbline 161
	.dbline 162
L19:
	.dbline 162
L20:
	.dbline 162
; 	delay50ms(2); 
	in R2,0x36
	sbrs R2,7
	rjmp L19
	.dbline 162
	.dbline 162
	.dbline 163
; 	lcd_puts(2,1,"    启动中 /");
	in R24,0x1
	andi R24,248
	cpi R24,24
	breq L22
	.dbline 164
;     PORTB|=0x04;
	clr R16
	xjmp L18
L22:
	.dbline 165
;     delay50ms(2);
	ldi R16,1
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbsym r wrDAdr 16 c
	.dbend
	.dbfunc e I2C_SendWrDAdr_ _I2C_SendWrDAdr_ fc
;         wrDAdr -> R20,R21
	.even
_I2C_SendWrDAdr_::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 176
; 	lcd_puts(2,1,"    启动中 -");
; 	delay50ms(2); 
; 	lcd_puts(2,1,"    启动中 \\");
; 	delay50ms(2); 
; 	lcd_puts(2,1,"    启动中 /"); 
;     PORTB&=0xFB;
;     delay50ms(2);
; 	lcd_puts(2,1,"    启动中 -"); 
; 	delay50ms(2);
; 	lcd_puts(2,1,"    启动中 \\"); 
; 	delay50ms(2);
	.dbline 177
; 	//lcd_puts(2,1,"    启动中 /"); 
	sbrs R20,0
	rjmp L25
	.dbline 178
; 	lcd_clr();
	mov R16,R20
	clr R17
	mov R16,R17
	clr R17
	sbrc R16,7
	com R17
	xcall _I2C_SendWrDAdr
	tst R16
	brne L27
	.dbline 179
; 	
	clr R16
	xjmp L24
L27:
L25:
	.dbline 180
; 	 // DDRB|=0x01;
	mov R16,R20
	xcall _I2C_SendWrDAdr
	tst R16
	brne L29
	.dbline 181
;      // PORTB&=0xFE;
	clr R16
	xjmp L24
L29:
	.dbline 182
; 	delay50ms(6);
	ldi R16,1
	.dbline -2
L24:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r wrDAdr 20 i
	.dbend
	.dbfunc e I2C_SendRdDAdr _I2C_SendRdDAdr fc
;         rdDAdr -> R16
	.even
_I2C_SendRdDAdr::
	.dbline -1
	.dbline 193
; 	lcd_puts(1,1,"  BESTi-041229");
; 	lcd_puts(2,1,"    毕业设计");
; 	lcd_puts(3,1,"手持式射频读写器");
; 	lcd_puts(4,1," LOADING");
; 	delay50ms(20);
; 	lcd_puts(4,1," LOADING·");
; 	delay50ms(20);
; 	lcd_puts(4,1," LOADING··");
; 	delay50ms(20);
; 	lcd_puts(4,1," LOADING···");
; 	delay50ms(20);
	.dbline 194
; 	lcd_puts(4,1," LOADING····");
	.dbline 194
	out 0x3,R16
	.dbline 194
	ldi R24,132
	out 0x36,R24
	.dbline 194
	.dbline 194
	.dbline 195
L32:
	.dbline 195
L33:
	.dbline 195
; 	delay50ms(20); 
	in R2,0x36
	sbrs R2,7
	rjmp L32
	.dbline 195
	.dbline 195
	.dbline 196
; 	lcd_clr();
	in R24,0x1
	andi R24,248
	cpi R24,64
	breq L35
	.dbline 197
; 	delay50ms(10); 
	clr R16
	xjmp L31
L35:
	.dbline 198
; 	PORTB&=0xCF;
	ldi R16,1
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbsym r rdDAdr 16 c
	.dbend
	.dbfunc e I2C_SendRdDAdr_ _I2C_SendRdDAdr_ fc
;         rdDAdr -> R20
	.even
_I2C_SendRdDAdr_::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 209
; 	
; 	while(1)
; 	{	
; 	  lcd_puts(1,1,"  射频卡检测中");
;        if(PINA&0X01==0X01){
;        delay50ms(3);
;          if(PINA&0X01==0X01){
;           if(a==1)
;           {
;             DDRA|=0X02;
;             PORTA&=0XFD;
	.dbline 210
;             a=0;
	sbrs R20,0
	rjmp L38
	.dbline 211
;           }
	mov R16,R20
	clr R17
	mov R16,R17
	clr R17
	sbrc R16,7
	com R17
	xcall _I2C_SendWrDAdr
	tst R16
	brne L40
	.dbline 212
;           else{
	clr R16
	xjmp L37
L40:
L38:
	.dbline 213
;                DDRA|=0X02;
	mov R16,R20
	xcall _I2C_SendWrDAdr
	tst R16
	brne L42
	.dbline 214
;                PORTA|=0X02;
	clr R16
	xjmp L37
L42:
	.dbline 215
;                a=1;
	ldi R16,1
	.dbline -2
L37:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r rdDAdr 20 c
	.dbend
	.dbfunc e I2C_SendDat _I2C_SendDat fc
;      configDat -> R16
	.even
_I2C_SendDat::
	.dbline -1
	.dbline 226
;               }
;           }
; 
;         } 
; 		
; 	if(PINC&0x04==0x04)
; 	   {
; 	    DDRD|=0x01;
; 	    PORTD&=0xFE;
; 	    lcd_puts(3,1,"  没有射频卡!");
;        }
	.dbline 227
;      else
	.dbline 227
	out 0x3,R16
	.dbline 227
	ldi R24,132
	out 0x36,R24
	.dbline 227
	.dbline 227
	.dbline 228
L45:
	.dbline 228
L46:
	.dbline 228
;         {
	in R2,0x36
	sbrs R2,7
	rjmp L45
	.dbline 228
	.dbline 228
	.dbline 229
;          DDRD|=0x01;
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L48
	.dbline 230
;          PORTD|=0x01;
	clr R16
	xjmp L44
L48:
	.dbline 231
; 		 lcd_puts(3,1,"  检测到射频卡");
	ldi R16,1
	.dbline -2
L44:
	.dbline 0 ; func end
	ret
	.dbsym r configDat 16 c
	.dbend
	.dbfunc e I2C_RcvNAckDat _I2C_RcvNAckDat fc
;         pRdDat -> R16,R17
	.even
_I2C_RcvNAckDat::
	.dbline -1
	.dbline 242
;         }
; 		//GetPCF8563();
; 		//lcd_putc(2,1,miao);
; 		//lcd_putc(3,1,fen);
; 		//lcd_putc(4,1,shi);
; 	
; 	if(PINB&0x01==0x01)
;      { lcd_clr();
; 	   PORTB|=0x04;
; 	   lcd_puts(2,1,"  关机中");
;        delay50ms(14);
	.dbline 243
;        PORTB&=0xFB;
	ldi R24,132
	out 0x36,R24
	.dbline 244
L51:
	.dbline 244
L52:
	.dbline 244
; 	   lcd_puts(2,1,"  关机中·");
	in R2,0x36
	sbrs R2,7
	rjmp L51
	.dbline 244
	.dbline 244
	.dbline 245
;        delay50ms(14);
	in R24,0x1
	andi R24,248
	cpi R24,88
	breq L54
	.dbline 246
; 	   lcd_puts(2,1,"  关机中··");
	clr R16
	xjmp L50
L54:
	.dbline 247
; 	   delay50ms(14);
	in R2,0x3
	movw R30,R16
	std z+0,R2
	.dbline 248
; 	   lcd_puts(2,1,"  关机中···");
	ldi R16,1
	.dbline -2
L50:
	.dbline 0 ; func end
	ret
	.dbsym r pRdDat 16 pc
	.dbend
	.dbfunc e I2C_RcvAckDat _I2C_RcvAckDat fc
;         pRdDat -> R16,R17
	.even
_I2C_RcvAckDat::
	.dbline -1
	.dbline 259
; 	   delay50ms(14);
; 	   lcd_clr();
; 	   delay50ms(14);
;        DDRB|=0x02;
;        PORTB&=0xFD;
; 	 }  
;   };
; }
; 
; 
; 
	.dbline 260
; 
	ldi R24,196
	out 0x36,R24
	.dbline 261
L57:
	.dbline 261
L58:
	.dbline 261
; 
	in R2,0x36
	sbrs R2,7
	rjmp L57
	.dbline 261
	.dbline 261
	.dbline 262
; 
	in R24,0x1
	andi R24,248
	cpi R24,80
	breq L60
	.dbline 263
; 
	clr R16
	xjmp L56
L60:
	.dbline 264
; 
	in R2,0x3
	movw R30,R16
	std z+0,R2
	.dbline 265
; 
	ldi R16,1
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbsym r pRdDat 16 pc
	.dbend
	.dbfunc e I2C_Write _I2C_Write fc
;            dat -> y+4
;        wordAdr -> R20
;         wrDAdr -> R22,R23
	.even
_I2C_Write::
	xcall push_gset2
	mov R20,R18
	movw R22,R16
	.dbline -1
	.dbline 278
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
	.dbline 279
; 
	xcall _I2C_Start
	tst R16
	brne L63
	.dbline 280
; 
	clr R16
	xjmp L62
L63:
	.dbline 282
; 
; 
	movw R16,R22
	xcall _I2C_SendWrDAdr_
	tst R16
	brne L65
	.dbline 283
; 
	clr R16
	xjmp L62
L65:
	.dbline 285
; 
; 
	mov R16,R20
	xcall _I2C_SendDat
	tst R16
	brne L67
	.dbline 286
; 
	clr R16
	xjmp L62
L67:
	.dbline 288
; 
; 
	ldd R16,y+4
	xcall _I2C_SendDat
	tst R16
	brne L69
	.dbline 289
; 
	clr R16
	xjmp L62
L69:
	.dbline 291
; 
; 
	ldi R24,148
	out 0x36,R24
	.dbline 293
; 
; 
	ldi R16,1
	.dbline -2
L62:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l dat 4 c
	.dbsym r wordAdr 20 c
	.dbsym r wrDAdr 22 i
	.dbend
	.dbfunc e I2C_Read _I2C_Read fc
;         pRdDat -> y+6
;         rdDAdr -> y+4
;        wordAdr -> R20
;         wrDAdr -> R22,R23
	.even
_I2C_Read::
	xcall push_gset2
	mov R20,R18
	movw R22,R16
	.dbline -1
	.dbline 324
; 
; 
; 
; 
; 
; 
; 
; 
; 

⌨️ 快捷键说明

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