📄 fas.lst
字号:
__start:
__text_start:
0017 E5CF LDI R28,0x5F
0018 E0D4 LDI R29,4
0019 BFCD OUT 0x3D,R28
001A BFDE OUT 0x3E,R29
001B 51C0 SUBI R28,0x10
001C 40D0 SBCI R29,0
001D EA0A LDI R16,0xAA
001E 8308 STD Y+0,R16
001F 2400 CLR R0
0020 E6E7 LDI R30,0x67
0021 E0F0 LDI R31,0
0022 E010 LDI R17,0
0023 36EF CPI R30,0x6F
0024 07F1 CPC R31,R17
0025 F011 BEQ 0x0028
0026 9201 ST R0,Z+
0027 CFFB RJMP 0x0023
0028 8300 STD Z+0,R16
0029 E2E6 LDI R30,0x26
002A E0F0 LDI R31,0
002B E6A0 LDI R26,0x60
002C E0B0 LDI R27,0
002D E010 LDI R17,0
002E 32ED CPI R30,0x2D
002F 07F1 CPC R31,R17
0030 F021 BEQ 0x0035
0031 95C8 LPM
0032 9631 ADIW R30,1
0033 920D ST R0,X+
0034 CFF9 RJMP 0x002E
0035 D050 RCALL _main
_exit:
0036 CFFF RJMP _exit
_delay:
j --> R20
x --> R16
0037 D07B RCALL push_gset1
FILE: fas.c
(0001) /**********************************/
(0002) /* 汽车转速测量程序
(0003) /* 8.24,2004
(0004) /* Writed by Wuxw
(0005) /* Automation Depart. of WHUT
(0006) /* 芯片:ATMEGA8L
(0007) /* 晶振:2MHz
(0008) /*
(0009) /*
(0010) /***********************************/
(0011) /* 脉冲输入接在INT0端口
(0012) /*
(0013) /* 输出n,单位r/50ms,可用来计算车轮转速
(0014) /*
(0015) /* num----脉冲计数,可用来计算里程
(0016) /*
(0017) /* 485输出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
(0018) /*
(0019) /* numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
(0020) /*
(0021) /* 串口485通讯波特率baud = 9600
(0022) /*
(0023) /* 在受到正确地址(0x32)和命令(0xc5)后,发送数据
(0024) /*
(0025) /***********************************/
(0026)
(0027)
(0028)
(0029) #include "iom8v.h"
(0030) #include "macros.h"
(0031) #define uchar unsigned char
(0032) #define uint unsigned int
(0033) #define ulong unsigned long
(0034)
(0035) #define E2ADDRLL 0x000 //脉冲计数存放地址
(0036) #define E2ADDRLH 0x001
(0037) #define E2ADDRHL 0x002
(0038) #define E2ADDRHH 0x003
(0039) //#define osccal 0x9d//内部RC 校正常数
(0040) #define osccal_addr 0x1ff
(0041) //#define osccal 0xa4 //内部RC校正常数
(0042) #define fosc 8000000 //晶振8MHZ
(0043) #define baud 9600 //串口通讯波特率
(0044) #define TIME50ms 0xae //定时50ms的初装值
(0045)
(0046) //#define osccal_addr 0x1ff
(0047)
(0048) uint m,n,K,i;
(0049) //uchar ndata[7]={0xFB,0x86,0x00,0x11,0x22,0x33,044};
(0050) uchar ndata[7]={0xFB,0x86,0x55,0x55,0x55,0x55,0x55};
(0051)
(0052)
(0053)
(0054) //最小延时单位,约16微秒
(0055) void delay(uint x)
(0056) { uchar j;
0038 C005 RJMP 0x003E
(0057) while(x-->0)
(0058) {
(0059) for(j=0;j<5;j++)
0039 2744 CLR R20
003A C001 RJMP 0x003C
003B 9543 INC R20
003C 3045 CPI R20,5
003D F3E8 BCS 0x003B
003E 0118 MOVW R2,R16
003F 5001 SUBI R16,1
0040 4010 SBCI R17,0
0041 2022 TST R2
0042 F7B1 BNE 0x0039
0043 2033 TST R3
0044 F7A1 BNE 0x0039
(0060) {;}
(0061) }
(0062) }
0045 D070 RCALL pop_gset1
0046 9508 RET
(0063)
(0064) unsigned char EEPROM_read(unsigned int uiAddress)
(0065) {while(EECR&(1<<EEWE));
_EEPROM_read:
uiAddress --> R16
0047 99E1 SBIC 0x1C,1
0048 CFFE RJMP _EEPROM_read
(0066) EEAR=uiAddress;
0049 BB1F OUT 0x1F,R17
004A BB0E OUT 0x1E,R16
(0067) EECR|=(1<<EERE);
004B 9AE0 SBI 0x1C,0
(0068) return EEDR;
004C B30D IN R16,0x1D
004D 9508 RET
_uart0_tx_isr:
004E 922A ST R2,-Y
004F 923A ST R3,-Y
0050 938A ST R24,-Y
0051 939A ST R25,-Y
0052 93EA ST R30,-Y
0053 93FA ST R31,-Y
0054 B62F IN R2,0x3F
0055 922A ST R2,-Y
(0069) }
(0070)
(0071) #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
(0072) void uart0_tx_isr(void)
(0073) {
(0074)
(0075) if(K<6)
0056 91800069 LDS R24,_K
0058 9190006A LDS R25,_K+1
005A 3086 CPI R24,6
005B E0E0 LDI R30,0
005C 079E CPC R25,R30
005D F480 BCC 0x006E
(0076) {K=K+1;
005E 9601 ADIW R24,1
005F 9390006A STS _K+1,R25
0061 93800069 STS _K,R24
(0077) UDR=ndata[K];
0063 E680 LDI R24,0x60
0064 E090 LDI R25,0
0065 91E00069 LDS R30,_K
0067 91F0006A LDS R31,_K+1
0069 0FE8 ADD R30,R24
006A 1FF9 ADC R31,R25
006B 8020 LDD R2,Z+0
006C B82C OUT 0x0C,R2
(0078) }
006D C007 RJMP 0x0075
(0079)
(0080) else
(0081) {
(0082) K=0;
006E 2422 CLR R2
006F 2433 CLR R3
0070 9230006A STS _K+1,R3
0072 92200069 STS _K,R2
(0083) UCSRB&=~(1<<TXCIE); //1?UART ?¤?é?¨a?D??
0074 9856 CBI 0x0A,6
(0084) }
(0085)
(0086)
(0087) }
0075 9029 LD R2,Y+
0076 BE2F OUT 0x3F,R2
0077 91F9 LD R31,Y+
0078 91E9 LD R30,Y+
0079 9199 LD R25,Y+
007A 9189 LD R24,Y+
007B 9039 LD R3,Y+
007C 9029 LD R2,Y+
007D 9518 RETI
(0088)
(0089) void USART_Init(void) //串行初始化
(0090) {
(0091) UCSRB|=(1<<TXEN);//允许发送
_USART_Init:
007E 9A53 SBI 0x0A,3
(0092) UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
007F E384 LDI R24,0x34
0080 B989 OUT 0x09,R24
(0093) UBRRH=(fosc/16/(baud+1))/256;
0081 2422 CLR R2
0082 BC20 OUT 0x20,R2
(0094) UCSRC=0x86;//8 位数据+1 位STOP 位
0083 E886 LDI R24,0x86
0084 BD80 OUT 0x20,R24
(0095) }
0085 9508 RET
(0096)
(0097) void main(void)
(0098) {
(0099) delay(200);
_main:
0086 EC08 LDI R16,0xC8
0087 E010 LDI R17,0
0088 DFAE RCALL _delay
(0100) OSCCAL=EEPROM_read(osccal_addr);
0089 EF0F LDI R16,0xFF
008A E011 LDI R17,1
008B DFBB RCALL _EEPROM_read
008C BF01 OUT 0x31,R16
(0101) //OSCCAL=osccal;
(0102)
(0103) PORTD|=(1<<PORTD7);
008D 9A97 SBI 0x12,7
(0104) USART_Init();
008E DFEF RCALL _USART_Init
(0105)
(0106) DDRD|=0x80;
008F 9A8F SBI 0x11,7
(0107)
(0108) SEI();
0090 9478 BSET 7
0091 C01F RJMP 0x00B1
(0109)
(0110)
(0111) while(1)
(0112) {
(0113) UCSRB|=(1<<TXCIE);
0092 9A56 SBI 0x0A,6
(0114) UDR=ndata[0];
0093 90200060 LDS R2,0x60
0095 B82C OUT 0x0C,R2
(0115) for(i=0;i<250;i++)
0096 2422 CLR R2
0097 2433 CLR R3
0098 92300068 STS _i+1,R3
009A 92200067 STS _i,R2
009C C00C RJMP 0x00A9
(0116) {delay(1000);}
009D EE08 LDI R16,0xE8
009E E013 LDI R17,3
009F DF97 RCALL _delay
00A0 91800067 LDS R24,_i
00A2 91900068 LDS R25,_i+1
00A4 9601 ADIW R24,1
00A5 93900068 STS _i+1,R25
00A7 93800067 STS _i,R24
00A9 91800067 LDS R24,_i
00AB 91900068 LDS R25,_i+1
00AD 3F8A CPI R24,0xFA
00AE E0E0 LDI R30,0
00AF 079E CPC R25,R30
00B0 F360 BCS 0x009D
00B1 CFE0 RJMP 0x0092
(0117)
(0118) }
(0119) }
FILE: <library>
00B2 9508 RET
push_gset1:
00B3 935A ST R21,-Y
00B4 934A ST R20,-Y
00B5 9508 RET
pop_gset1:
00B6 E0E1 LDI R30,1
pop:
00B7 9149 LD R20,Y+
00B8 9159 LD R21,Y+
00B9 FDE0 SBRC R30,0
00BA 9508 RET
00BB 9169 LD R22,Y+
00BC 9179 LD R23,Y+
00BD FDE1 SBRC R30,1
00BE 9508 RET
00BF 90A9 LD R10,Y+
00C0 90B9 LD R11,Y+
00C1 FDE2 SBRC R30,2
00C2 9508 RET
00C3 90C9 LD R12,Y+
00C4 90D9 LD R13,Y+
00C5 FDE3 SBRC R30,3
00C6 9508 RET
00C7 90E9 LD R14,Y+
00C8 90F9 LD R15,Y+
00C9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -