📄 rfidsys.s
字号:
.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 + -