📄 p_test.s
字号:
ldi R16,10
rcall _sdelay
.dbline 702
;
; SDAOUT();
ldi R24,255
out 0x14,R24
.dbline 703
; sdelay(10);
ldi R16,10
.dbline -2
.dbline 705
;
; }
L159:
.dbline 0 ; func end
rjmp _sdelay
.dbend
.dbfunc e I2C_WriteByte _I2C_WriteByte fV
; k -> <dead>
; j -> <dead>
; i -> R22
; WByte -> R20
.even
_I2C_WriteByte::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 708
;
; void I2C_WriteByte(unsigned char WByte) //44
; {
.dbline 710
; unsigned char i,j,k;
; DDRC=0XFF;
ldi R24,255
out 0x14,R24
.dbline 711
; for(i=0;i<8;i++)
clr R22
rjmp L164
L161:
.dbline 712
; {
.dbline 714
;
; if(WByte&0x80) SDAH();
sbrs R20,7
rjmp L165
.dbline 714
sbi 0x15,1
rjmp L166
L165:
.dbline 715
; else SDAL();
in R24,0x15
andi R24,253
out 0x15,R24
L166:
.dbline 716
ldi R16,10
rcall _sdelay
.dbline 717
sbi 0x15,4
.dbline 718
ldi R16,100
rcall _sdelay
.dbline 719
in R24,0x15
andi R24,239
out 0x15,R24
.dbline 720
ldi R16,100
rcall _sdelay
.dbline 721
lsl R20
.dbline 723
L162:
.dbline 711
inc R22
L164:
.dbline 711
cpi R22,8
brlo L161
.dbline -2
.dbline 726
; sdelay(10);
; SCLH();
; sdelay(100);
; SCLL();
; sdelay(100);
; WByte<<=1;
;
; }
;
;
; }
L160:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l k 1 c
.dbsym l j 1 c
.dbsym r i 22 c
.dbsym r WByte 20 c
.dbend
.dbfunc e I2C_ReadByte _I2C_ReadByte fc
; i -> R20
; RDbyte -> R22
.even
_I2C_ReadByte::
rcall push_gset2
.dbline -1
.dbline 729
;
; unsigned char I2C_ReadByte() //33
; {
.dbline 731
; unsigned char i,RDbyte;
; SDAIN();
in R24,0x14
andi R24,223
out 0x14,R24
.dbline 732
; DDRC=0XFD;
ldi R24,253
out 0x14,R24
.dbline 733
; RDbyte=0;
clr R22
.dbline 734
; for(i=0;i<8;i++)
clr R20
rjmp L171
L168:
.dbline 735
; {
.dbline 736
; SCLH();
sbi 0x15,4
.dbline 737
; sdelay(100);
ldi R16,100
rcall _sdelay
.dbline 739
; //SDA-->PC1
; if(PINC&0X02) //??
sbis 0x13,1
rjmp L172
.dbline 740
; { RDbyte<<=1;
.dbline 740
lsl R22
.dbline 741
; RDbyte|=0x01;
ori R22,1
.dbline 742
; }
rjmp L173
L172:
.dbline 744
; else
; {
.dbline 745
; RDbyte<<=1;
lsl R22
.dbline 746
; RDbyte&=0xfe;
andi R22,254
.dbline 747
; }
L173:
.dbline 748
ldi R16,10
rcall _sdelay
.dbline 749
in R24,0x15
andi R24,239
out 0x15,R24
.dbline 751
L169:
.dbline 734
inc R20
L171:
.dbline 734
cpi R20,8
brlo L168
.dbline 753
; sdelay(10);
; SCLL();
;
; }
; //SDAOUT();
; DDRC=0XFF;
ldi R24,255
out 0x14,R24
.dbline 754
; return RDbyte;
mov R16,R22
.dbline -2
L167:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r RDbyte 22 c
.dbend
.dbfunc e I2C_Read _I2C_Read fc
; i -> <dead>
; k -> R20
; addr -> R20
.even
_I2C_Read::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 758
; }
;
; unsigned char I2C_Read(unsigned char addr) //22
; {
.dbline 760
; unsigned char i,k;
; I2C_Start();
rcall _I2C_Start
.dbline 761
; I2C_WriteByte(0xa0);//写 CONTRL
ldi R16,160
rcall _I2C_WriteByte
.dbline 762
; I2C_CACK();
rcall _I2C_CACK
.dbline 763
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 765
;
; I2C_WriteByte(addr);
mov R16,R20
rcall _I2C_WriteByte
.dbline 766
; I2C_CACK();
rcall _I2C_CACK
.dbline 767
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 769
;
; I2C_Start();
rcall _I2C_Start
.dbline 771
;
; I2C_WriteByte(0xa1);//读控制字符 CONTRL
ldi R16,161
rcall _I2C_WriteByte
.dbline 772
; I2C_CACK();
rcall _I2C_CACK
.dbline 773
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 774
; k=I2C_ReadByte();
rcall _I2C_ReadByte
mov R20,R16
.dbline 775
; I2C_NACK();
rcall _I2C_NACK
.dbline 776
; I2C_Stop();
rcall _I2C_Stop
.dbline 777
; return k;
mov R16,R20
.dbline -2
L174:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbsym r k 20 c
.dbsym r addr 20 c
.dbend
.dbfunc e I2C_Write _I2C_Write fV
; k -> <dead>
; i -> <dead>
; Wbyte -> R20
; addr -> R22
.even
_I2C_Write::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 781
; }
; //---写I2C
; void I2C_Write(unsigned char addr,unsigned char Wbyte) // 111
; {
.dbline 783
; unsigned char i,k;
; I2C_Start();
rcall _I2C_Start
.dbline 784
; I2C_WriteByte(0xa0);//写 CONTRL
ldi R16,160
rcall _I2C_WriteByte
.dbline 785
; I2C_CACK();
rcall _I2C_CACK
.dbline 786
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 787
; I2C_WriteByte(addr);
mov R16,R22
rcall _I2C_WriteByte
.dbline 788
; I2C_CACK();
rcall _I2C_CACK
.dbline 789
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 790
; I2C_WriteByte(Wbyte);
mov R16,R20
rcall _I2C_WriteByte
.dbline 791
; I2C_CACK();
rcall _I2C_CACK
.dbline 792
; sdelay(10);
ldi R16,10
rcall _sdelay
.dbline 793
; I2C_Stop();
rcall _I2C_Stop
.dbline -2
.dbline 795
;
; }
L175:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l k 1 c
.dbsym l i 1 c
.dbsym r Wbyte 20 c
.dbsym r addr 22 c
.dbend
.dbfunc e IC_Num_Read _IC_Num_Read fV
; count_ff -> R22
; crc -> R20
; datax -> y+2
; j -> R10
; i -> R12
.even
_IC_Num_Read::
rcall push_gset4
sbiw R28,3
.dbline -1
.dbline 799
;
; //----------- IC 卡处理-----------//
; void IC_Num_Read()
; {
.dbline 804
; //老板,PD3=0,插卡了 ,卡座常闭合
; unsigned char datax,count_ff;
; unsigned char j,i,crc;
;
; if(PIND!=0XA3) ICRead=0; //IC卡没有了
in R24,0x10
cpi R24,163
breq L177
.dbline 804
clr R2
sts _ICRead,R2
L177:
.dbline 806
;
; if((PIND==0XA3)&&(ICRead<5))
in R24,0x10
cpi R24,163
breq X6
rjmp L179
X6:
lds R24,_ICRead
cpi R24,5
brlo X7
rjmp L179
X7:
.dbline 807
; {
.dbline 809
; //---关 看门狗--//
; WDTCR=(1<<WDCE)|(1<<WDE);
ldi R24,24
out 0x21,R24
.dbline 810
; WDTCR=(0<<WDE);
clr R2
out 0x21,R2
.dbline 813
; //------------
; // ICRead=0;
; crc=0;
clr R20
.dbline 814
; T0_Count=0; //0.023 s add
sts _T0_Count,R2
L181:
.dbline 815
L182:
.dbline 815
; while(T0_Count<40);// 延时等待
lds R24,_T0_Count
cpi R24,40
brlo L181
.dbline 818
; //IC卡:2,3,4,5, 司机号保存处
; //--写SendSbuf[];
; sdelay(200);
ldi R16,200
rcall _sdelay
.dbline 819
; CLI();
cli
.dbline 820
; count_ff=0;
clr R22
.dbline 822
; //----------------- for(j=2;j<6;j++)--------------------//
; for(j=2;j<6;j++)
ldi R24,2
mov R10,R24
rjmp L187
L184:
.dbline 823
; {
.dbline 827
; // datax=I2C_Read(j*2);
; // if((datax>47)&&(datax<60)) //是ASCII CODE
; // {//写发送
; i=2*(j-1);
ldi R24,2
mul R24,R10
mov R24,R0
subi R24,2
mov R12,R24
.dbline 828
; datax=I2C_Read(j); //I2C_Write(0,0X33);
mov R16,R10
rcall _I2C_Read
std y+2,R16
.dbline 831
;
; //------消除0XFF--------//
; if(datax==0xff) count_ff++;
cpi R16,255
brne L188
.dbline 831
inc R22
rjmp L189
L188:
.dbline 832
; else count_ff=0;
clr R22
L189:
.dbline 837
ldi R16,200
rcall _sdelay
.dbline 838
ldi R16,200
rcall _sdelay
.dbline 839
ldi R16,200
rcall _sdelay
.dbline 841
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
mov R16,R10
clr R17
subi R16,250 ; offset = 6
sbci R17,255
rcall _EEPROMWriteBytes
.dbline 842
ldi R16,200
rcall _sdelay
.dbline 843
ldi R16,200
rcall _sdelay
.dbline 844
ldi R16,200
rcall _sdelay
.dbline 845
ldi R16,200
rcall _sdelay
.dbline 847
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,y+2
swap R24
andi R24,#0x0F
std z+0,R24
.dbline 848
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R2,R12
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,208 ; addi 48
std z+0,R24
.dbline 850
ldi R24,<_SendSbuf
ldi R25,>_SendSbuf
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R20,R2
.dbline 851
ldi R24,<_SendSbuf+1
ldi R25,>_SendSbuf+1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,y+2
andi R24,15
std z+0,R24
.dbline 852
ldi R24,<_SendSbuf+1
ldi R25,>_SendSbuf+1
mov R2,R12
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,208 ; addi 48
std z+0,R24
.dbline 854
ldi R24,<_SendSbuf+1
ldi R25,>_SendSbuf+1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
eor R20,R2
.dbline 856
ldi R16,200
rcall _sdelay
.dbline 857
L185:
.dbline 822
inc R10
L187:
.dbline 822
mov R24,R10
cpi R24,6
brsh X8
rjmp L184
X8:
.dbline 860
; //--------------------------//
;
; //写eeprom-------------
; //T-32324578
; sdelay(200);
; sdelay(200);
; sdelay(200);
; //EEPROMWriteBytes(8, &SendSbuf[8], 8);
; EEPROMWriteBytes(j+6, &datax, 1);
; sdelay(200);
; sdelay(200);
; sdelay(200);
; sdelay(200);
; //--------------------
; SendSbuf[i]=datax>>4;
; SendSbuf[i]+=0x30;
; //--------
; crc^=SendSbuf[i];
; SendSbuf[i+1]=datax&0x0f;
; SendSbuf[i+1]+=0x30;
; //-------
; crc^=SendSbuf[i+1];
;
; sdelay(200);
; }//-----------end of for(j=2;j<6;j++)--------------------//
;
; //--------消除 ff---------------//
; if(count_ff<4) ICRead=5; //只是读一次
cpi R22,4
brsh L193
.dbline 860
ldi R24,5
sts _ICRead,R24
rjmp L194
L193:
.dbline 861
; else ICRead++; //ICRead=5,最多5次
lds R24,_ICRead
subi R24,255 ; addi 1
sts _ICRead,R24
L194:
.dbline 864
ldi R24,62
sts _SendSbuf+10,R24
.dbline 865
clr R2
sts _SendSbuf+11,R2
.dbline 866
sts _SendSbuf+12,R2
.dbline 867
ldi R24,84
sts _SendSbuf,R24
.dbline 868
ldi R24,45
sts _SendSbuf+1,R24
.dbline 872
ldi R16,200
rcall _sdelay
.dbline 879
sei
.dbline 881
ldi R24,14
out 0x21,R24
.dbline 882
wdr
.dbline 884
L179:
.dbline -2
.dbline 886
; //-----------------------------------------//
;
; SendSbuf[10]=CarNumber+0x30;//发送分机号码
; SendSbuf[11]=0;
; SendSbuf[12]=0;
; SendSbuf[0]='T';
; SendSbuf[1]='-';
;
;
; // EEPROMWriteBytes(9, &SendSbuf[9], 1);
; sdelay(200);
; // EEPROMWriteBytes(10,&SendSbuf[10],1);
;
;
; //END OF:if((PIND==0XA3)&&(ICRead<3))
;
;
; SEI();
; //========看,门狗-----------
; WDTCR=(1<<WDE)|(1<<WDP2)|(1<<WDP1);//1024K脉冲数目
; WDR(); ///看门狗清零
; //-------------------------
; }
;
; }
L176:
adiw R28,3
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r count_ff 22 c
.dbsym r crc 20 c
.dbsym l datax 2 c
.dbsym r j 10 c
.dbsym r i 12 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\AVR\P_TEST\P_TEST.C
_kr2::
.blkb 1
.dbsym e kr2 _kr2 c
_kr1::
.blkb 1
.dbsym e kr1 _kr1 c
_T0_Count::
.blkb 1
.dbsym e T0_Count _T0_Count c
_TimeForWDG::
.blkb 2
.dbsym e TimeForWDG _TimeForWDG i
_CFM_flag::
.blkb 1
.dbsym e CFM_flag _CFM_flag c
_SET_flag::
.blkb 1
.dbsym e SET_flag _SET_flag c
_ICRead::
.blkb 1
.dbsym e ICRead _ICRead c
_TimeForSend::
.blkb 2
.dbsym e TimeForSend _TimeForSend i
_NowSend2::
.blkb 2
.dbsym e NowSend2 _NowSend2 i
_NowSend::
.blkb 2
.dbsym e NowSend _NowSend i
_TimeForCall::
.blkb 1
.dbsym e TimeForCall _TimeForCall c
_Send_flag::
.blkb 1
.dbsym e Send_flag _Send_flag c
_SendPoint::
.blkb 2
.dbsym e SendPoint _SendPoint pc
_ReceiveSbuf::
.blkb 20
.dbsym e ReceiveSbuf _ReceiveSbuf A[20:20]c
_krec::
.blkb 1
.dbsym e krec _krec c
_NowSbuf::
.blkb 20
.dbsym e NowSbuf _NowSbuf A[20:20]c
_SendSbuf::
.blkb 20
.dbsym e SendSbuf _SendSbuf A[20:20]c
_Sbufx::
.blkb 1
.dbsym e Sbufx _Sbufx c
.area data(ram, con, rel)
.dbfile E:\AVR\P_TEST\P_TEST.C
L29:
.blkb 12
.area idata
.byte 'S,'t,'a,'r,'t,32,48,48,32,13,10,0
.area data(ram, con, rel)
.dbfile E:\AVR\P_TEST\P_TEST.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -