📄 fas.lis
字号:
.module fas.c
.area data(ram, con, rel)
0000 _ndata::
0000 .blkb 2
.area idata
0000 FB86 .byte 251,134
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5555 .byte 'U,'U
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 5555 .byte 'U,'U
.area data(ram, con, rel)
0006 .blkb 1
.area idata
0006 55 .byte 'U
.area data(ram, con, rel)
0007 .dbfile fas.c
0007 .dbsym e ndata _ndata A[7:7]c
.area text(rom, con, rel)
0000 .dbfile fas.c
0000 .dbfunc e delay _delay fV
0000 ; j -> R20
0000 ; x -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 56
0002 ; /**********************************/
0002 ; /* 汽车转速测量程序
0002 ; /* 8.24,2004
0002 ; /* Writed by Wuxw
0002 ; /* Automation Depart. of WHUT
0002 ; /* 芯片:ATMEGA8L
0002 ; /* 晶振:2MHz
0002 ; /*
0002 ; /*
0002 ; /***********************************/
0002 ; /* 脉冲输入接在INT0端口
0002 ; /*
0002 ; /* 输出n,单位r/50ms,可用来计算车轮转速
0002 ; /*
0002 ; /* num----脉冲计数,可用来计算里程
0002 ; /*
0002 ; /* 485输出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
0002 ; /*
0002 ; /* numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
0002 ; /*
0002 ; /* 串口485通讯波特率baud = 9600
0002 ; /*
0002 ; /* 在受到正确地址(0x32)和命令(0xc5)后,发送数据
0002 ; /*
0002 ; /***********************************/
0002 ;
0002 ;
0002 ;
0002 ; #include "iom8v.h"
0002 ; #include "macros.h"
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ; #define ulong unsigned long
0002 ;
0002 ; #define E2ADDRLL 0x000 //脉冲计数存放地址
0002 ; #define E2ADDRLH 0x001
0002 ; #define E2ADDRHL 0x002
0002 ; #define E2ADDRHH 0x003
0002 ; //#define osccal 0x9d//内部RC 校正常数
0002 ; #define osccal_addr 0x1ff
0002 ; //#define osccal 0xa4 //内部RC校正常数
0002 ; #define fosc 8000000 //晶振8MHZ
0002 ; #define baud 9600 //串口通讯波特率
0002 ; #define TIME50ms 0xae //定时50ms的初装值
0002 ;
0002 ; //#define osccal_addr 0x1ff
0002 ;
0002 ; uint m,n,K,i;
0002 ; //uchar ndata[7]={0xFB,0x86,0x00,0x11,0x22,0x33,044};
0002 ; uchar ndata[7]={0xFB,0x86,0x55,0x55,0x55,0x55,0x55};
0002 ;
0002 ;
0002 ;
0002 ; //最小延时单位,约16微秒
0002 ; void delay(uint x)
0002 ; { uchar j;
0002 05C0 rjmp L3
0004 L2:
0004 .dbline 58
0004 ; while(x-->0)
0004 ; {
0004 .dbline 59
0004 ; for(j=0;j<5;j++)
0004 4427 clr R20
0006 01C0 rjmp L8
0008 L5:
0008 .dbline 60
0008 .dbline 60
0008 .dbline 60
0008 L6:
0008 .dbline 59
0008 4395 inc R20
000A L8:
000A .dbline 59
000A 4530 cpi R20,5
000C E8F3 brlo L5
000E .dbline 61
000E L3:
000E .dbline 57
000E 1801 movw R2,R16
0010 0150 subi R16,1
0012 1040 sbci R17,0
0014 2220 tst R2
0016 B1F7 brne L2
0018 3320 tst R3
001A A1F7 brne L2
001C X0:
001C .dbline -2
001C .dbline 62
001C ; {;}
001C ; }
001C ; }
001C L1:
001C 00D0 rcall pop_gset1
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r j 20 c
0020 .dbsym r x 16 i
0020 .dbend
0020 .dbfunc e EEPROM_read _EEPROM_read fc
0020 ; uiAddress -> R16,R17
.even
0020 _EEPROM_read::
0020 .dbline -1
0020 .dbline 65
0020 L10:
0020 .dbline 65
0020 L11:
0020 .dbline 65
0020 ;
0020 ; unsigned char EEPROM_read(unsigned int uiAddress)
0020 ; {while(EECR&(1<<EEWE));
0020 E199 sbic 0x1c,1
0022 FECF rjmp L10
0024 .dbline 66
0024 ; EEAR=uiAddress;
0024 1FBB out 0x1f,R17
0026 0EBB out 0x1e,R16
0028 .dbline 67
0028 ; EECR|=(1<<EERE);
0028 E09A sbi 0x1c,0
002A .dbline 68
002A ; return EEDR;
002A 0DB3 in R16,0x1d
002C .dbline -2
002C L9:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r uiAddress 16 i
002E .dbend
.area vector(rom, abs)
.org 26
001A 17C0 rjmp _uart0_tx_isr
.area text(rom, con, rel)
002E .dbfile fas.c
002E .dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
002E _uart0_tx_isr::
002E 2A92 st -y,R2
0030 3A92 st -y,R3
0032 8A93 st -y,R24
0034 9A93 st -y,R25
0036 EA93 st -y,R30
0038 FA93 st -y,R31
003A 2FB6 in R2,0x3f
003C 2A92 st -y,R2
003E .dbline -1
003E .dbline 73
003E ; }
003E ;
003E ; #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
003E ; void uart0_tx_isr(void)
003E ; {
003E .dbline 75
003E ;
003E ; if(K<6)
003E 80910200 lds R24,_K
0042 90910300 lds R25,_K+1
0046 8630 cpi R24,6
0048 E0E0 ldi R30,0
004A 9E07 cpc R25,R30
004C 80F4 brsh L14
004E .dbline 76
004E ; {K=K+1;
004E .dbline 76
004E 0196 adiw R24,1
0050 90930300 sts _K+1,R25
0054 80930200 sts _K,R24
0058 .dbline 77
0058 ; UDR=ndata[K];
0058 80E0 ldi R24,<_ndata
005A 90E0 ldi R25,>_ndata
005C E0910200 lds R30,_K
0060 F0910300 lds R31,_K+1
0064 E80F add R30,R24
0066 F91F adc R31,R25
0068 2080 ldd R2,z+0
006A 2CB8 out 0xc,R2
006C .dbline 78
006C ; }
006C 07C0 rjmp L15
006E L14:
006E .dbline 81
006E .dbline 82
006E 2224 clr R2
0070 3324 clr R3
0072 30920300 sts _K+1,R3
0076 20920200 sts _K,R2
007A .dbline 83
007A 5698 cbi 0xa,6
007C .dbline 84
007C L15:
007C .dbline -2
007C .dbline 87
007C ;
007C ; else
007C ; {
007C ; K=0;
007C ; UCSRB&=~(1<<TXCIE); //1?UART ?¤?é?¨a?D??
007C ; }
007C ;
007C ;
007C ; }
007C L13:
007C 2990 ld R2,y+
007E 2FBE out 0x3f,R2
0080 F991 ld R31,y+
0082 E991 ld R30,y+
0084 9991 ld R25,y+
0086 8991 ld R24,y+
0088 3990 ld R3,y+
008A 2990 ld R2,y+
008C .dbline 0 ; func end
008C 1895 reti
008E .dbend
008E .dbfunc e USART_Init _USART_Init fV
.even
008E _USART_Init::
008E .dbline -1
008E .dbline 90
008E ;
008E ; void USART_Init(void) //串行初始化
008E ; {
008E .dbline 91
008E ; UCSRB|=(1<<TXEN);//允许发送
008E 539A sbi 0xa,3
0090 .dbline 92
0090 ; UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
0090 84E3 ldi R24,52
0092 89B9 out 0x9,R24
0094 .dbline 93
0094 ; UBRRH=(fosc/16/(baud+1))/256;
0094 2224 clr R2
0096 20BC out 0x20,R2
0098 .dbline 94
0098 ; UCSRC=0x86;//8 位数据+1 位STOP 位
0098 86E8 ldi R24,134
009A 80BD out 0x20,R24
009C .dbline -2
009C .dbline 95
009C ; }
009C L16:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbend
009E .dbfunc e main _main fV
.even
009E _main::
009E .dbline -1
009E .dbline 98
009E ;
009E ; void main(void)
009E ; {
009E .dbline 99
009E ; delay(200);
009E 08EC ldi R16,200
00A0 10E0 ldi R17,0
00A2 AEDF rcall _delay
00A4 .dbline 100
00A4 ; OSCCAL=EEPROM_read(osccal_addr);
00A4 0FEF ldi R16,511
00A6 11E0 ldi R17,1
00A8 BBDF rcall _EEPROM_read
00AA 01BF out 0x31,R16
00AC .dbline 103
00AC ; //OSCCAL=osccal;
00AC ;
00AC ; PORTD|=(1<<PORTD7);
00AC 979A sbi 0x12,7
00AE .dbline 104
00AE ; USART_Init();
00AE EFDF rcall _USART_Init
00B0 .dbline 106
00B0 ;
00B0 ; DDRD|=0x80;
00B0 8F9A sbi 0x11,7
00B2 .dbline 108
00B2 ;
00B2 ; SEI();
00B2 7894 sei
00B4 1FC0 rjmp L19
00B6 L18:
00B6 .dbline 112
00B6 ;
00B6 ;
00B6 ; while(1)
00B6 ; {
00B6 .dbline 113
00B6 ; UCSRB|=(1<<TXCIE);
00B6 569A sbi 0xa,6
00B8 .dbline 114
00B8 ; UDR=ndata[0];
00B8 20900000 lds R2,_ndata
00BC 2CB8 out 0xc,R2
00BE .dbline 115
00BE ; for(i=0;i<250;i++)
00BE 2224 clr R2
00C0 3324 clr R3
00C2 30920100 sts _i+1,R3
00C6 20920000 sts _i,R2
00CA 0CC0 rjmp L24
00CC L21:
00CC .dbline 116
00CC .dbline 116
00CC 08EE ldi R16,1000
00CE 13E0 ldi R17,3
00D0 97DF rcall _delay
00D2 .dbline 116
00D2 L22:
00D2 .dbline 115
00D2 80910000 lds R24,_i
00D6 90910100 lds R25,_i+1
00DA 0196 adiw R24,1
00DC 90930100 sts _i+1,R25
00E0 80930000 sts _i,R24
00E4 L24:
00E4 .dbline 115
00E4 80910000 lds R24,_i
00E8 90910100 lds R25,_i+1
00EC 8A3F cpi R24,250
00EE E0E0 ldi R30,0
00F0 9E07 cpc R25,R30
00F2 60F3 brlo L21
00F4 .dbline 118
00F4 L19:
00F4 .dbline 111
00F4 E0CF rjmp L18
00F6 X1:
00F6 .dbline -2
00F6 .dbline 119
00F6 ; {delay(1000);}
00F6 ;
00F6 ; }
00F6 ; }
00F6 L17:
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbend
.area bss(ram, con, rel)
0000 .dbfile fas.c
0000 _i::
0000 .blkb 2
0002 .dbsym e i _i i
0002 _K::
0002 .blkb 2
0004 .dbsym e K _K i
0004 _n::
0004 .blkb 2
0006 .dbsym e n _n i
0006 _m::
0006 .blkb 2
0008 .dbsym e m _m i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -