📄 sudu.s
字号:
.module sudu.c
.area data(ram, con, rel)
_ndata::
.blkb 2
.area idata
.byte 251,134
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 'U,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile sudu.c
.dbsym e ndata _ndata A[8:8]c
.area text(rom, con, rel)
.dbfile sudu.c
.dbfunc e delay _delay fV
; j -> R20
; x -> R16
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 58
; /**********************************/
; /* 汽车转速测量程序
; /* 8.24,2004
; /* Writed by Wuxw
; /* Automation Depart. of WHUT
; /* 芯片:ATMEGA8L
; /* 晶振:2MHz
; /*
; /*
; /***********************************/
; /* 脉冲输入接在INT0端口
; /*
; /* 输出n,单位r/50ms,可用来计算车轮转速
; /*
; /* num----脉冲计数,可用来计算里程
; /*
; /* 485输出格式:FB-86-n-numLL-numLH-numHL-numHH
; /*
; /* numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
; /*
; /* 串口485通讯波特率baud = 9600
; /*
; /* 在受到正确地址(0x32)和命令(0xc5)后,发送数据
; /*
; /***********************************/
;
;
;
; #include "iom8v.h"
; #include "macros.h"
; #define uchar unsigned char
; #define uint unsigned int
; #define ulong unsigned long
;
; #define E2ADDRLL 0x000 //脉冲计数存放地址
; #define E2ADDRLH 0x001
; #define E2ADDRHL 0x002
; #define E2ADDRHH 0x003
; //#define osccal 0x9d//内部RC 校正常数
;
; //#define osccal 0xa4 //内部RC校正常数
; #define fosc 8000000 //晶振8MHZ
; #define baud 9600 //串口通讯波特率
; #define TIME50ms 0xae //定时50ms的初装值
;
; #define osccal_addr 0x1ff
;
; uint m,n,k;
; ulong num; //脉冲计数
; uchar numLL,numLH,numHL,numHH,K,nLL,nLH;
; uchar flag_receive,ndata[8]={0xFB,0x86,0x55,0x00,0x00,0x00,0x00,0x00};
; uchar i,cx,xxx[3];
; uchar data_receive[3];
;
;
; //最小延时单位,约16微秒
; void delay(uchar x)
; { uchar j;
rjmp L3
L2:
.dbline 60
; while(x-->0)
; {
.dbline 61
; for(j=0;j<5;j++)
clr R20
rjmp L8
L5:
.dbline 62
.dbline 62
.dbline 62
L6:
.dbline 61
inc R20
L8:
.dbline 61
cpi R20,5
brlo L5
.dbline 63
L3:
.dbline 59
mov R2,R16
clr R3
subi R16,1
clr R4
cp R4,R2
brlo L2
.dbline -2
.dbline 64
; {;}
; }
; }
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r x 16 c
.dbend
.dbfunc e decompose _decompose fV
.even
_decompose::
.dbline -1
.dbline 67
;
; void decompose(void)
; {
.dbline 68
; numLL = num;
lds R4,_num+2
lds R5,_num+2+1
lds R2,_num
lds R3,_num+1
sts _numLL,R2
.dbline 69
; num=(num>>8);
ldi R24,8
ldi R25,0
st -y,R24
movw R16,R2
movw R18,R4
rcall lsr32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 70
; numLH= num;
movw R2,R16
movw R4,R18
sts _numLH,R2
.dbline 71
; num= (num>>8);
ldi R24,8
ldi R25,0
st -y,R24
rcall lsr32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 72
; numHL=num;
movw R2,R16
movw R4,R18
sts _numHL,R2
.dbline 73
; num=(num>>8);
ldi R24,8
ldi R25,0
st -y,R24
rcall lsr32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 74
; numHH=num;
movw R2,R16
movw R4,R18
sts _numHH,R2
.dbline -2
.dbline 79
;
; //nLL = n;
; //n=(n>>8);
; //nLH= n;
; }
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e combination _combination fV
.even
_combination::
rcall push_gset2
.dbline -1
.dbline 82
;
; void combination(void)
; {
.dbline 83
; num = 0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _num+1,R21
sts _num,R20
sts _num+2+1,R23
sts _num+2,R22
.dbline 84
; num = numHH;
lds R2,_numHH
clr R3
clr R4
clr R5
sts _num+1,R3
sts _num,R2
sts _num+2+1,R5
sts _num+2,R4
.dbline 85
; num = num<<8;
ldi R24,8
ldi R25,0
lds R4,_num+2
lds R5,_num+2+1
lds R2,_num
lds R3,_num+1
st -y,R24
movw R16,R2
movw R18,R4
rcall lsl32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 86
; num += numHL;
lds R2,_numHL
clr R3
clr R4
clr R5
movw R6,R16
movw R8,R18
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _num+1,R7
sts _num,R6
sts _num+2+1,R9
sts _num+2,R8
.dbline 87
; num = num<<8;
ldi R24,8
ldi R25,0
st -y,R24
movw R16,R6
movw R18,R8
rcall lsl32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 88
; num += numLH;
lds R2,_numLH
clr R3
clr R4
clr R5
movw R6,R16
movw R8,R18
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _num+1,R7
sts _num,R6
sts _num+2+1,R9
sts _num+2,R8
.dbline 89
; num = num<<8;
ldi R24,8
ldi R25,0
st -y,R24
movw R16,R6
movw R18,R8
rcall lsl32
sts _num+1,R17
sts _num,R16
sts _num+2+1,R19
sts _num+2,R18
.dbline 90
; num += numLL;
lds R2,_numLL
clr R3
clr R4
clr R5
movw R6,R16
movw R8,R18
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _num+1,R7
sts _num,R6
sts _num+2+1,R9
sts _num+2,R8
.dbline -2
.dbline 97
;
; //n = 0;
; //n= nLH;
; //n = n<<8;
; //n += nLL;
;
; }
L10:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e e2rom_write _e2rom_write fV
; e2data -> R18
; e2addr -> R16,R17
.even
_e2rom_write::
.dbline -1
.dbline 100
;
; void e2rom_write(uint e2addr,uchar e2data) //EEROM写数据
; {
L12:
.dbline 101
L13:
.dbline 101
; while(EECR & (1<<EEWE));
sbic 0x1c,1
rjmp L12
.dbline 102
; EEAR = e2addr;
out 0x1f,R17
out 0x1e,R16
.dbline 103
; EEDR = e2data;
out 0x1d,R18
.dbline 105
;
; EECR |= (1<<EEMWE);
sbi 0x1c,2
.dbline 106
; EECR |= (1<<EEWE);
sbi 0x1c,1
.dbline -2
.dbline 107
; }
L11:
.dbline 0 ; func end
ret
.dbsym r e2data 18 c
.dbsym r e2addr 16 i
.dbend
.dbfunc e e2rom_read _e2rom_read fc
; e2addr -> R16,R17
.even
_e2rom_read::
.dbline -1
.dbline 110
;
; uchar e2rom_read(uint e2addr) //EEROM读数据
; {
L16:
.dbline 111
L17:
.dbline 111
; while(EECR & (1<<EEWE));
sbic 0x1c,1
rjmp L16
.dbline 112
; EEAR = e2addr;
out 0x1f,R17
out 0x1e,R16
.dbline 113
; EECR |= (1<<EERE);
sbi 0x1c,0
.dbline 114
; return EEDR;
in R16,0x1d
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r e2addr 16 i
.dbend
.dbfunc e num_read _num_read fV
.even
_num_read::
.dbline -1
.dbline 118
; }
;
; void num_read(void) //从EEROM读出num
; {
.dbline 119
; numLL = e2rom_read(E2ADDRLL);
clr R16
clr R17
rcall _e2rom_read
sts _numLL,R16
.dbline 120
; numLH = e2rom_read(E2ADDRLH);
ldi R16,1
ldi R17,0
rcall _e2rom_read
sts _numLH,R16
.dbline 121
; numHL = e2rom_read(E2ADDRHL);
ldi R16,2
ldi R17,0
rcall _e2rom_read
sts _numHL,R16
.dbline 122
; numHH = e2rom_read(E2ADDRHH);
ldi R16,3
ldi R17,0
rcall _e2rom_read
sts _numHH,R16
.dbline 123
; combination();
.dbline -2
.dbline 125
;
; }
L19:
.dbline 0 ; func end
rjmp _combination
.dbend
.dbfunc e num_write _num_write fV
.even
_num_write::
.dbline -1
.dbline 128
;
; void num_write(void) //将num写入EEROM
; {
.dbline 129
; decompose();
rcall _decompose
.dbline 130
; e2rom_write(E2ADDRLL,numLL);
lds R18,_numLL
clr R16
clr R17
rcall _e2rom_write
.dbline 131
; e2rom_write(E2ADDRLH,numLH);
lds R18,_numLH
ldi R16,1
ldi R17,0
rcall _e2rom_write
.dbline 132
; e2rom_write(E2ADDRHL,numHL);
lds R18,_numHL
ldi R16,2
ldi R17,0
rcall _e2rom_write
.dbline 133
; e2rom_write(E2ADDRHH,numHH);
lds R18,_numHH
ldi R16,3
ldi R17,0
.dbline -2
.dbline 134
; }
L20:
.dbline 0 ; func end
rjmp _e2rom_write
.dbend
.dbfunc e DataTransmit _DataTransmit fV
.even
_DataTransmit::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -