⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sudu.lst

📁 用AVR单片机实现脉冲采集源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 E6E8      LDI	R30,0x68
    0021 E0F0      LDI	R31,0
    0022 E010      LDI	R17,0
    0023 38E2      CPI	R30,0x82
    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 32EE      CPI	R30,0x2E
    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 D1A9      RCALL	_main
_exit:
    0036 CFFF      RJMP	_exit
_delay:
  j                    --> R20
  x                    --> R16
    0037 D1E4      RCALL	push_gset1
FILE: sudu.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
(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) 
(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;
(0049) ulong num;      //脉冲计数
(0050) uchar numLL,numLH,numHL,numHH,K,nLL,nLH;
(0051) uchar flag_receive,ndata[8]={0xFB,0x86,0x55,0x00,0x00,0x00,0x00,0x00};
(0052) uchar i,cx,xxx[3];
(0053) uchar data_receive[3];
(0054) 
(0055) 
(0056) //最小延时单位,约16微秒
(0057) void delay(uchar x)   
(0058) {   uchar j;
    0038 C005      RJMP	0x003E
(0059)     while(x-->0)
(0060) 	{
(0061)        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 2E20      MOV	R2,R16
    003F 2433      CLR	R3
    0040 5001      SUBI	R16,1
    0041 2444      CLR	R4
    0042 1442      CP	R4,R2
    0043 F3A8      BCS	0x0039
(0062) 	   {;}
(0063)     }
(0064) }
    0044 D1DA      RCALL	pop_gset1
    0045 9508      RET
(0065) 
(0066) void decompose(void)
(0067) {
(0068)     numLL = num;
_decompose:
    0046 9040007A  LDS	R4,_num+2
    0048 9050007B  LDS	R5,_num+3
    004A 90200078  LDS	R2,_num
    004C 90300079  LDS	R3,_num+1
    004E 92200077  STS	_numLL,R2
(0069) 	num=(num>>8);
    0050 E088      LDI	R24,0x8
    0051 E090      LDI	R25,0
    0052 938A      ST	R24,-Y
    0053 0181      MOVW	R16,R2
    0054 0192      MOVW	R18,R4
    0055 D21A      RCALL	lsr32
    0056 93100079  STS	_num+1,R17
    0058 93000078  STS	_num,R16
    005A 9330007B  STS	_num+3,R19
    005C 9320007A  STS	_num+2,R18
(0070) 	numLH= num;
    005E 0118      MOVW	R2,R16
    005F 0129      MOVW	R4,R18
    0060 92200076  STS	_numLH,R2
(0071) 	num= (num>>8);
    0062 E088      LDI	R24,0x8
    0063 E090      LDI	R25,0
    0064 938A      ST	R24,-Y
    0065 D20A      RCALL	lsr32
    0066 93100079  STS	_num+1,R17
    0068 93000078  STS	_num,R16
    006A 9330007B  STS	_num+3,R19
    006C 9320007A  STS	_num+2,R18
(0072) 	numHL=num;
    006E 0118      MOVW	R2,R16
    006F 0129      MOVW	R4,R18
    0070 92200075  STS	_numHL,R2
(0073) 	num=(num>>8);
    0072 E088      LDI	R24,0x8
    0073 E090      LDI	R25,0
    0074 938A      ST	R24,-Y
    0075 D1FA      RCALL	lsr32
    0076 93100079  STS	_num+1,R17
    0078 93000078  STS	_num,R16
    007A 9330007B  STS	_num+3,R19
    007C 9320007A  STS	_num+2,R18
(0074) 	numHH=num;
    007E 0118      MOVW	R2,R16
    007F 0129      MOVW	R4,R18
    0080 92200074  STS	_numHH,R2
(0075) 	
(0076) 	//nLL = n;
(0077) 	//n=(n>>8);
(0078) 	//nLH= n;
(0079) }
    0082 9508      RET
_combination:
    0083 D1AF      RCALL	push_gset2
(0080) 
(0081) void combination(void)
(0082) {
(0083)     num = 0;
    0084 E040      LDI	R20,0
    0085 E050      LDI	R21,0
    0086 E060      LDI	R22,0
    0087 E070      LDI	R23,0
    0088 93500079  STS	_num+1,R21
    008A 93400078  STS	_num,R20
    008C 9370007B  STS	_num+3,R23
    008E 9360007A  STS	_num+2,R22
(0084)     num = numHH;
    0090 90200074  LDS	R2,_numHH
    0092 2433      CLR	R3
    0093 2444      CLR	R4
    0094 2455      CLR	R5
    0095 92300079  STS	_num+1,R3
    0097 92200078  STS	_num,R2
    0099 9250007B  STS	_num+3,R5
    009B 9240007A  STS	_num+2,R4
(0085) 	num = num<<8;
    009D E088      LDI	R24,0x8
    009E E090      LDI	R25,0
    009F 9040007A  LDS	R4,_num+2
    00A1 9050007B  LDS	R5,_num+3
    00A3 90200078  LDS	R2,_num
    00A5 90300079  LDS	R3,_num+1
    00A7 938A      ST	R24,-Y
    00A8 0181      MOVW	R16,R2
    00A9 0192      MOVW	R18,R4
    00AA D1B9      RCALL	lsl32
    00AB 93100079  STS	_num+1,R17
    00AD 93000078  STS	_num,R16
    00AF 9330007B  STS	_num+3,R19
    00B1 9320007A  STS	_num+2,R18
(0086) 	num += numHL;
    00B3 90200075  LDS	R2,_numHL
    00B5 2433      CLR	R3
    00B6 2444      CLR	R4
    00B7 2455      CLR	R5
    00B8 0138      MOVW	R6,R16
    00B9 0149      MOVW	R8,R18
    00BA 0C62      ADD	R6,R2
    00BB 1C73      ADC	R7,R3
    00BC 1C84      ADC	R8,R4
    00BD 1C95      ADC	R9,R5
    00BE 92700079  STS	_num+1,R7
    00C0 92600078  STS	_num,R6
    00C2 9290007B  STS	_num+3,R9
    00C4 9280007A  STS	_num+2,R8
(0087) 	num = num<<8;
    00C6 E088      LDI	R24,0x8
    00C7 E090      LDI	R25,0
    00C8 938A      ST	R24,-Y
    00C9 0183      MOVW	R16,R6
    00CA 0194      MOVW	R18,R8
    00CB D198      RCALL	lsl32
    00CC 93100079  STS	_num+1,R17
    00CE 93000078  STS	_num,R16
    00D0 9330007B  STS	_num+3,R19
    00D2 9320007A  STS	_num+2,R18
(0088) 	num += numLH;
    00D4 90200076  LDS	R2,_numLH
    00D6 2433      CLR	R3
    00D7 2444      CLR	R4
    00D8 2455      CLR	R5
    00D9 0138      MOVW	R6,R16
    00DA 0149      MOVW	R8,R18
    00DB 0C62      ADD	R6,R2
    00DC 1C73      ADC	R7,R3
    00DD 1C84      ADC	R8,R4
    00DE 1C95      ADC	R9,R5
    00DF 92700079  STS	_num+1,R7
    00E1 92600078  STS	_num,R6
    00E3 9290007B  STS	_num+3,R9
    00E5 9280007A  STS	_num+2,R8
(0089) 	num = num<<8;
    00E7 E088      LDI	R24,0x8
    00E8 E090      LDI	R25,0
    00E9 938A      ST	R24,-Y
    00EA 0183      MOVW	R16,R6
    00EB 0194      MOVW	R18,R8
    00EC D177      RCALL	lsl32
    00ED 93100079  STS	_num+1,R17
    00EF 93000078  STS	_num,R16
    00F1 9330007B  STS	_num+3,R19
    00F3 9320007A  STS	_num+2,R18
(0090) 	num += numLL;
    00F5 90200077  LDS	R2,_numLL
    00F7 2433      CLR	R3
    00F8 2444      CLR	R4
    00F9 2455      CLR	R5
    00FA 0138      MOVW	R6,R16
    00FB 0149      MOVW	R8,R18
    00FC 0C62      ADD	R6,R2
    00FD 1C73      ADC	R7,R3
    00FE 1C84      ADC	R8,R4
    00FF 1C95      ADC	R9,R5
    0100 92700079  STS	_num+1,R7
    0102 92600078  STS	_num,R6
    0104 9290007B  STS	_num+3,R9
    0106 9280007A  STS	_num+2,R8
(0091) 	
(0092) 	//n = 0;
(0093)     //n= nLH;
(0094) 	//n = n<<8;
(0095) 	//n += nLL;
(0096) 	
(0097) }
    0108 D111      RCALL	pop_gset2
    0109 9508      RET
(0098) 
(0099) void e2rom_write(uint e2addr,uchar e2data)  //EEROM写数据
(0100) {
(0101) 	 while(EECR & (1<<EEWE));
_e2rom_write:
  e2data               --> R18
  e2addr               --> R16
    010A 99E1      SBIC	0x1C,1
    010B CFFE      RJMP	_e2rom_write
(0102) 	 EEAR = e2addr;
    010C BB1F      OUT	0x1F,R17
    010D BB0E      OUT	0x1E,R16
(0103) 	 EEDR = e2data;
    010E BB2D      OUT	0x1D,R18
(0104) 	 
(0105) 	 EECR |= (1<<EEMWE);
    010F 9AE2      SBI	0x1C,2
(0106) 	 EECR |= (1<<EEWE);
    0110 9AE1      SBI	0x1C,1
(0107) }
    0111 9508      RET
(0108) 
(0109) uchar e2rom_read(uint e2addr)   //EEROM读数据
(0110) {
(0111)     while(EECR & (1<<EEWE));
_e2rom_read:
  e2addr               --> R16
    0112 99E1      SBIC	0x1C,1
    0113 CFFE      RJMP	_e2rom_read
(0112) 	EEAR = e2addr;
    0114 BB1F      OUT	0x1F,R17
    0115 BB0E      OUT	0x1E,R16
(0113) 	EECR |= (1<<EERE);
    0116 9AE0      SBI	0x1C,0
(0114) 	return EEDR;
    0117 B30D      IN	R16,0x1D
    0118 9508      RET
(0115) }
(0116) 
(0117) void num_read(void)     //从EEROM读出num
(0118) {
(0119)     numLL = e2rom_read(E2ADDRLL);
_num_read:
    0119 2700      CLR	R16
    011A 2711      CLR	R17
    011B DFF6      RCALL	_e2rom_read
    011C 93000077  STS	_numLL,R16
(0120) 	numLH = e2rom_read(E2ADDRLH);
    011E E001      LDI	R16,1
    011F E010      LDI	R17,0
    0120 DFF1      RCALL	_e2rom_read
    0121 93000076  STS	_numLH,R16
(0121) 	numHL = e2rom_read(E2ADDRHL);
    0123 E002      LDI	R16,2
    0124 E010      LDI	R17,0
    0125 DFEC      RCALL	_e2rom_read
    0126 93000075  STS	_numHL,R16
(0122) 	numHH = e2rom_read(E2ADDRHH);
    0128 E003      LDI	R16,3
    0129 E010      LDI	R17,0
    012A DFE7      RCALL	_e2rom_read
    012B 93000074  STS	_numHH,R16
(0123) 	combination();
(0124) 	
(0125) }
    012D CF55      RJMP	_combination
(0126) 
(0127) void num_write(void)    //将num写入EEROM
(0128) {
(0129)     decompose();
_num_write:
    012E DF17      RCALL	_decompose
(0130) 	e2rom_write(E2ADDRLL,numLL);
    012F 91200077  LDS	R18,_numLL
    0131 2700      CLR	R16
    0132 2711      CLR	R17
    0133 DFD6      RCALL	_e2rom_write
(0131) 	e2rom_write(E2ADDRLH,numLH);
    0134 91200076  LDS	R18,_numLH
    0136 E001      LDI	R16,1
    0137 E010      LDI	R17,0
    0138 DFD1      RCALL	_e2rom_write
(0132) 	e2rom_write(E2ADDRHL,numHL);
    0139 91200075  LDS	R18,_numHL
    013B E002      LDI	R16,2
    013C E010      LDI	R17,0
    013D DFCC      RCALL	_e2rom_write
(0133) 	e2rom_write(E2ADDRHH,numHH);
    013E 91200074  LDS	R18,_numHH
    0140 E003      LDI	R16,3
    0141 E010      LDI	R17,0
(0134) }
    0142 CFC7      RJMP	_e2rom_write
(0135) 	
(0136) void DataTransmit(void)   //串行485数据发送
(0137) {
(0138)     //ndata[2] = nLL;
(0139) 	 ndata[3] = n;
_DataTransmit:
    0143 9020007E  LDS	R2,_n
    0145 9030007F  LDS	R3,_n+1
    0147 92200063  STS	0x63,R2
(0140) 	ndata[4] = numLL;
    0149 90200077  LDS	R2,_numLL
    014B 92200064  STS	0x64,R2
(0141) 	ndata[5] = numLH;
    014D 90200076  LDS	R2,_numLH
    014F 92200065  STS	0x65,R2
(0142) 	ndata[6] = numHL;
    0151 90200075  LDS	R2,_numHL
    0153 92200066  STS	0x66,R2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -