📄 pp.s
字号:
.even
_OutTone::
.dbline -1
.dbline 140
; }
; case(3)://关灯
; {OutLedDely=0;PORTC|=0x0C;return;}
; }
; }
; //***************************************************************输出提示声23//
; void OutTone(void)
; {
.dbline 141
; switch(OutToneAddr)
lds R16,_OutToneAddr
clr R17
cpi R16,0
cpc R16,R17
breq L60
X8:
cpi R16,1
ldi R30,0
cpc R17,R30
breq L61
cpi R16,2
ldi R30,0
cpc R17,R30
breq L64
rjmp L57
X9:
.dbline 142
; {
L60:
.dbline 144
; case(0)://关闭
; {
.dbline 145
; OutToneAddr=0;return;
clr R2
sts _OutToneAddr,R2
.dbline 145
rjmp L56
L61:
.dbline 148
; }
; case(1)://判断是否开提示声
; {
.dbline 149
; if(!OutToneCount) return;
lds R2,_OutToneCount
tst R2
brne L62
.dbline 149
rjmp L56
L62:
.dbline 150
; OutToneDely=0;OutToneAddr=2;return;
clr R2
clr R3
sts _OutToneDely+1,R3
sts _OutToneDely,R2
.dbline 150
ldi R24,2
sts _OutToneAddr,R24
.dbline 150
rjmp L56
L64:
.dbline 153
; }
; case(2):
; {
.dbline 154
; if(++OutToneDely<400) return;
lds R24,_OutToneDely
lds R25,_OutToneDely+1
adiw R24,1
sts _OutToneDely+1,R25
sts _OutToneDely,R24
cpi R24,144
ldi R30,1
cpc R25,R30
brsh L65
.dbline 154
rjmp L56
L65:
.dbline 155
; if(!(--OutToneCount)) {PORTC|=0x01;OutToneCount=0;OutToneAddr=1;return;}
lds R24,_OutToneCount
subi R24,1
mov R2,R24
sts _OutToneCount,R2
tst R24
brne L67
.dbline 155
.dbline 155
sbi 0x15,0
.dbline 155
clr R2
sts _OutToneCount,R2
.dbline 155
ldi R24,1
sts _OutToneAddr,R24
.dbline 155
rjmp L56
L67:
.dbline 156
clr R2
clr R3
sts _OutToneDely+1,R3
sts _OutToneDely,R2
.dbline 156
ldi R24,1
in R2,0x15
eor R2,R24
out 0x15,R2
.dbline 156
L57:
.dbline -2
L56:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 6
rjmp _Time2
.area text(rom, con, rel)
.dbfile I:\刷卡器\pp.c
.dbfunc e Time2 _Time2 fV
.even
_Time2::
rcall push_lset
.dbline -1
.dbline 163
; OutToneDely=0;PORTC^=0x01;return;
; }
; }
; }
; #pragma interrupt_handler Time2:iv_TIMER2_COMP
; //****************************************************************调用中断任务//
; void Time2(void)
; {
.dbline 164
; RxUart();
rcall _RxUart
.dbline 165
; OutLed();
rcall _OutLed
.dbline 166
; OutTone();
rcall _OutTone
.dbline -2
L69:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e TxRomUart _TxRomUart fV
; leng -> R18,R19
; data -> R16,R17
.even
_TxRomUart::
.dbline -1
.dbline 171
; }
; //****************************************************单时任务//
; //********************************************************发送ROM数据到串口31//
; void TxRomUart(const unsigned char *data,unsigned int leng)
; {
rjmp L72
X10:
.dbline 173
; while(leng)
; {
L74:
.dbline 174
L75:
.dbline 174
sbis 0xb,5
rjmp L74
.dbline 175
movw R30,R16
lpm R30,Z
out 0xc,R30
.dbline 175
subi R16,255 ; offset = 1
sbci R17,255
.dbline 175
subi R18,1
sbci R19,0
.dbline 176
L72:
.dbline 172
cpi R18,0
cpc R18,R19
brne L75
X11:
.dbline -2
L70:
.dbline 0 ; func end
ret
.dbsym r leng 18 i
.dbsym r data 16 pkc
.dbend
.dbfunc e TxRamUart _TxRamUart fV
; leng -> R18,R19
; data -> R16,R17
.even
_TxRamUart::
.dbline -1
.dbline 180
; while(!((UCSRA)&(1<<UDRE)));
; UDR=*data;data++;leng--;
; }
; }
; //********************************************************发送RAM数据到串口32//
; void TxRamUart(unsigned char *data,unsigned int leng)
; {
rjmp L79
X12:
.dbline 182
; while(leng)
; {
L81:
.dbline 183
L82:
.dbline 183
sbis 0xb,5
rjmp L81
.dbline 184
movw R30,R16
ldd R2,z+0
out 0xc,R2
.dbline 184
subi R16,255 ; offset = 1
sbci R17,255
.dbline 184
subi R18,1
sbci R19,0
.dbline 185
L79:
.dbline 181
cpi R18,0
cpc R18,R19
brne L82
X13:
.dbline -2
L77:
.dbline 0 ; func end
ret
.dbsym r leng 18 i
.dbsym r data 16 pc
.dbend
.dbfunc e CopyRom _CopyRom fc
; leng2 -> R20
; data2 -> R22,R23
; leng1 -> R18
; data1 -> R16,R17
.even
_CopyRom::
rcall push_gset2
ldd R22,y+4
ldd R23,y+5
ldd R20,y+6
.dbline -1
.dbline 189
; while(!((UCSRA)&(1<<UDRE)));
; UDR=*data;data++;leng--;
; }
; }
; //**************************************************************拷贝ROM数据33//
; unsigned char CopyRom(const unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
; {
rjmp L86
L85:
.dbline 191
; while(leng1)
; {
.dbline 192
; *data2=*data1;data2++;leng2--;data1++;leng1--;
movw R30,R16
lpm R30,Z
movw R26,R22
st x,R30
.dbline 192
subi R22,255 ; offset = 1
sbci R23,255
.dbline 192
dec R20
.dbline 192
subi R16,255 ; offset = 1
sbci R17,255
.dbline 192
dec R18
.dbline 193
; if(!leng2) return 1;
tst R20
brne L88
.dbline 193
ldi R16,1
rjmp L84
L88:
.dbline 194
L86:
.dbline 190
tst R18
brne L85
.dbline 195
; }
; return 0;
clr R16
.dbline -2
L84:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r leng2 20 c
.dbsym r data2 22 pc
.dbsym r leng1 18 c
.dbsym r data1 16 pkc
.dbend
.dbfunc e CopyRam _CopyRam fc
; leng2 -> R20
; data2 -> R22,R23
; leng1 -> R18
; data1 -> R16,R17
.even
_CopyRam::
rcall push_gset2
ldd R22,y+4
ldd R23,y+5
ldd R20,y+6
.dbline -1
.dbline 199
; }
; //**************************************************************拷贝RAM数据34//
; unsigned char CopyRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
; {
rjmp L92
L91:
.dbline 201
; while(leng1)
; {
.dbline 202
; *data2=*data1;data2++;leng2--;data1++;leng1--;
movw R30,R16
ldd R2,z+0
movw R30,R22
std z+0,R2
.dbline 202
subi R22,255 ; offset = 1
sbci R23,255
.dbline 202
dec R20
.dbline 202
subi R16,255 ; offset = 1
sbci R17,255
.dbline 202
dec R18
.dbline 203
; if(!leng2) return 1;
tst R20
brne L94
.dbline 203
ldi R16,1
rjmp L90
L94:
.dbline 204
L92:
.dbline 200
tst R18
brne L91
.dbline 205
; }
; return 0;
clr R16
.dbline -2
L90:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r leng2 20 c
.dbsym r data2 22 pc
.dbsym r leng1 18 c
.dbsym r data1 16 pc
.dbend
.dbfunc e CmpsRom _CmpsRom fc
; leng2 -> R20
; data2 -> R22,R23
; leng1 -> R18
; data1 -> R16,R17
.even
_CmpsRom::
rcall push_gset2
ldd R22,y+4
ldd R23,y+5
ldd R20,y+6
.dbline -1
.dbline 209
; }
; //**************************************************************比较ROM数据35//
; unsigned char CmpsRom(unsigned char *data1,unsigned char leng1,const unsigned char *data2,unsigned char leng2)
; {
rjmp L98
L97:
.dbline 211
; while(leng1)
; {
.dbline 212
; if(*data1!=*data2) return 1;
movw R30,R22
lpm R30,Z
movw R26,R16
ld R2,x
cp R2,R30
breq L100
.dbline 212
ldi R16,1
rjmp L96
L100:
.dbline 213
; data1++;data2++;leng1--;leng2--;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 213
subi R22,255 ; offset = 1
sbci R23,255
.dbline 213
dec R18
.dbline 213
dec R20
.dbline 214
; if(!leng2) return 0;
brne L102
.dbline 214
clr R16
rjmp L96
L102:
.dbline 215
L98:
.dbline 210
tst R18
brne L97
.dbline 216
; }
; return 1;
ldi R16,1
.dbline -2
L96:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r leng2 20 c
.dbsym r data2 22 pkc
.dbsym r leng1 18 c
.dbsym r data1 16 pc
.dbend
.dbfunc e CmpsRam _CmpsRam fc
; leng2 -> R20
; data2 -> R22,R23
; leng1 -> R18
; data1 -> R16,R17
.even
_CmpsRam::
rcall push_gset2
ldd R22,y+4
ldd R23,y+5
ldd R20,y+6
.dbline -1
.dbline 220
; }
; //**************************************************************比较RAM数据36//
; unsigned char CmpsRam(unsigned char *data1,unsigned char leng1,unsigned char *data2,unsigned char leng2)
; {
rjmp L106
L105:
.dbline 222
; while(leng1)
; {
.dbline 223
; if(*data1!=*data2) return 1;
movw R30,R22
ldd R2,z+0
movw R30,R16
ldd R3,z+0
cp R3,R2
breq L108
.dbline 223
ldi R16,1
rjmp L104
L108:
.dbline 224
; data1++;data2++;leng1--;leng2--;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 224
subi R22,255 ; offset = 1
sbci R23,255
.dbline 224
dec R18
.dbline 224
dec R20
.dbline 225
; if(!leng2) return 0;
brne L110
.dbline 225
clr R16
rjmp L104
L110:
.dbline 226
L106:
.dbline 221
tst R18
brne L105
.dbline 227
; }
; return 1;
ldi R16,1
.dbline -2
L104:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r leng2 20 c
.dbsym r data2 22 pc
.dbsym r leng1 18 c
.dbsym r data1 16 pc
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R16,R17
.even
_delay_ms::
rcall push_gset2
.dbline -1
.dbline 231
; }
; //***************************************************************毫秒级延时37//
; void delay_ms(unsigned int time)
; {
rjmp L114
X14:
.dbline 233
; while(time)
; {
L116:
.dbline 234
L117:
.dbline 234
ldi R20,125
ldi R21,0
ldi R22,0
ldi R23,0
in R2,0x32
clr R3
clr R4
clr R5
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brlt L116
.dbline 235
clr R2
out 0x32,R2
.dbline 236
subi R16,1
sbci R17,0
.dbline 237
L114:
.dbline 232
cpi R16,0
cpc R16,R17
brne L117
X15:
.dbline -2
L112:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e init_atmega _init_atmega fV
.even
_init_atmega::
.dbline -1
.dbline 241
; while(TCNT0<(fosc/64/1000));
; TCNT0=0;
; time--;
; }
; }
; //************************************************************ATMEGA8初始化38//
; void init_atmega(void)
; {
.dbline 242
; SFIOR&=(~(1<<PUD));//上拉SFIOR
in R24,0x30
andi R24,251
out 0x30,R24
.dbline 243
; DDRB=0xFF;
ldi R24,255
out 0x17,R24
.dbline 244
; DDRD=0xF8;//,PD7(E),PD6(RW),PD5(RS),PD4(SPS),PD2(ICC),PD1(TXD),PD0(RXD);
ldi R24,248
out 0x11,R24
.dbline 245
; PORTD=0xFB;
ldi R24,251
out 0x12,R24
.dbline 246
; DDRC=0x0F;//PC4,PC3(REN),PC2(GREEN),PC0(BUZZER)
ldi R24,15
out 0x14,R24
.dbline 247
; PORTC=0x01;
ldi R24,1
out 0x15,R24
.dbline 248
; UCSRB=(1<<RXEN)|(1<<TXEN);
ldi R24,24
out 0xa,R24
.dbline 249
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
ldi R24,134
out 0x20,R24
.dbline 250
; UBRRH=(fosc/16/(baud+1))/256;
clr R2
out 0x20,R2
.dbline 251
; UBRRL=(fosc/16/(baud+1))%256;
ldi R24,26
out 0x9,R24
.dbline 252
; TCCR2=0x0a;
ldi R24,10
out 0x25,R24
.dbline 253
; TCNT2=0x00;
out 0x24,R2
.dbline 254
; OCR2=fosc/8/2000;//500us
ldi R24,500
ldi R25,1
out 0x23,R24
.dbline 255
; TIMSK=1<<OCIE2;
ldi R24,128
out 0x39,R24
.dbline 256
; TCCR0=(1<<CS01)|(1<<CS00);//64分频
ldi R24,3
out 0x33,R24
.dbline 257
; TCNT0=0;
out 0x32,R2
.dbline 258
; SEI();
sei
.dbline -2
L119:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RxGsm _RxGsm fV
; i -> R20
.even
_RxGsm::
rcall push_gset1
sbiw R28,3
.dbline -1
.dbline 262
; }
; //*****************************************************************接收远程41//
; void RxGsm(void)
; {
.dbline 264
; unsigned char i;
; switch(RxGsmAddr)
lds R20,_RxGsmAddr
clr R21
cpi R20,0
cpc R20,R21
breq L124
X16:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L125
cpi R20,2
ldi R30,0
cpc R21,R30
breq L128
cpi R20,3
ldi R30,0
cpc R21,R30
brne X19
rjmp L145
X19:
rjmp L121
X17:
.dbline 265
; {
L124:
.dbline 267
; case(0)://接收停止
; {
.dbline 268
; RxGsmAddr=0;return;
clr R2
sts _RxGsmAddr,R2
.dbline 268
rjmp L120
L125:
.dbline 271
; }
; case(1)://接收初始
; {
.dbline 272
; if(!(PIND&0x04)&&(RxCalAddr==1))
sbic 0x10,2
rjmp L120
lds R24,_RxCalAddr
cpi R24,1
breq X20
rjmp L120
X20:
.dbline 273
; {RxGsmAddr=2;RxUartWait=0;RxUartAddr=1;return;}
.dbline 273
ldi R24,2
sts _RxGsmAddr,R24
.dbline 273
clr R2
clr R3
sts _RxUartWait+1,R3
sts _RxUartWait,R2
.dbline 273
ldi R24,1
sts _RxUartAddr,R24
.dbline 273
rjmp L120
X18:
.dbline 274
; else return;
L128:
.dbline 277
; }
; case(2)://接收是否完成
; {
.dbline 278
; if(!(PIND&0x04)&&(RxCalAddr==1))
sbic 0x10,2
rjmp L129
lds R24,_RxCalAddr
cpi R24,1
breq X21
rjmp L129
X21:
.dbline 279
; {
.dbline 280
; if(RxUartAddr) return;
lds R2,_RxUartAddr
tst R2
breq L131
.dbline 280
rjmp L120
L131:
.dbline 281
; if(CmpsRom(RxUartDbuf,RxUartLeng,"DD",2)) {RxGsmAddr=1;OutToneCount=4;return;}//DD
ldi R24,2
std y+2,R24
ldi R24,<L135
ldi R25,>L135
std y+1,R25
std y+0,R24
lds R18,_RxUartLeng
ldi R16,<_RxUartDbuf
ldi R17,>_RxUartDbuf
rcall _CmpsRom
tst R16
breq L133
.dbline 281
.dbline 281
ldi R24,1
sts _RxGsmAddr,R24
.dbline 281
ldi R24,4
sts _OutToneCount,R24
.dbline 281
rjmp L120
L133:
.dbline 282
; OutToneCount=2;
ldi R24,2
sts _OutToneCount,R24
.dbline 283
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -