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

📄 minid.lst

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    001A EFCF      LDI	R28,0xFF
    001B E0D4      LDI	R29,4
    001C BFCD      OUT	0x3D,R28
    001D BFDE      OUT	0x3E,R29
    001E 52C0      SUBI	R28,0x20
    001F 40D0      SBCI	R29,0
    0020 EA0A      LDI	R16,0xAA
    0021 8308      STD	Y+0,R16
    0022 2400      CLR	R0
    0023 E0E0      LDI	R30,0
    0024 E0F1      LDI	R31,1
    0025 E011      LDI	R17,1
    0026 34E6      CPI	R30,0x46
    0027 07F1      CPC	R31,R17
    0028 F011      BEQ	0x002B
    0029 9201      ST	R0,Z+
    002A CFFB      RJMP	0x0026
    002B 8300      STD	Z+0,R16
    002C E3E4      LDI	R30,0x34
    002D E0F0      LDI	R31,0
    002E E0A0      LDI	R26,0
    002F E0B1      LDI	R27,1
    0030 E010      LDI	R17,0
    0031 33E4      CPI	R30,0x34
    0032 07F1      CPC	R31,R17
    0033 F021      BEQ	0x0038
    0034 95C8      LPM
    0035 9631      ADIW	R30,1
    0036 920D      ST	R0,X+
    0037 CFF9      RJMP	0x0031
    0038 D63F      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
FILE: D:\bak\新建文件夹\函数库\ADC\ADC.c
(0001) /*****************************************************************
(0002)  *  文件名:      ADC.c
(0003)  *  版本号:      
(0004)  *  创作日期:    2005.7.7
(0005)  *  作者:        fengzm
(0006)  *  功能说明:    可采集7个AD通道的值,使用了RC滤波;
(0007)  *  其它说明:    使用AVR单片机Atmaga48, 晶振:8Mhz
(0008)                   调用ADC文件的时候只需要输入通道号即可,如ADC(7);
(0009)  *****************************************************************/
(0010)  
(0011) 
(0012) /*****************************************************************
(0013) 
(0014)  *   修改日期:   2005.7.8  
(0015)  *   修改人:	  wangzq
(0016)  *   修改原因:   优化代码
(0017)                   定时器0溢出触发A/D转换
(0018)                   修改g_AdcNum改变通道号,默认值0;
(0019) 				  g_ValueAdc返回A/D转换后的滤波值;
(0020) 				  g_AdcEnd 0xff表示当前返回值有效;
(0021) *******************************************************************/
(0022) 
(0023) 
(0024) //包含文件
(0025) #include "ADC.h"
(0026) 
(0027) // ADC initialize
(0028) // Conversion time: 13uS,CLOCK/8;
(0029) void adc_init(void)
(0030) {
(0031)     ADCSRA = 0x00;  //disable adc
_adc_init:
    003A 2422      CLR	R2
    003B 9220007A  STS	0x7A,R2
(0032)     ADMUX  = 0x00;  //select adc input 0
    003D 9220007C  STS	0x7C,R2
(0033)     ACSR   = 0x80;  //not need the compare function
    003F E880      LDI	R24,0x80
    0040 BF80      OUT	0x30,R24
(0034)     ADCSRB = 0x04;  //定时器0溢出触发转换
    0041 E084      LDI	R24,4
    0042 9380007B  STS	0x7B,R24
    0044 9508      RET
_adc_isr:
  j                    --> Y+0
    0045 920A      ST	R0,-Y
    0046 921A      ST	R1,-Y
    0047 922A      ST	R2,-Y
    0048 923A      ST	R3,-Y
    0049 924A      ST	R4,-Y
    004A 925A      ST	R5,-Y
    004B 926A      ST	R6,-Y
    004C 927A      ST	R7,-Y
    004D 928A      ST	R8,-Y
    004E 929A      ST	R9,-Y
    004F 930A      ST	R16,-Y
    0050 931A      ST	R17,-Y
    0051 932A      ST	R18,-Y
    0052 933A      ST	R19,-Y
    0053 938A      ST	R24,-Y
    0054 93EA      ST	R30,-Y
    0055 93FA      ST	R31,-Y
    0056 B60F      IN	R0,0x3F
    0057 920A      ST	R0,-Y
    0058 D807      RCALL	push_gset2
    0059 9724      SBIW	R28,4
(0035) }
(0036) 
(0037) #pragma interrupt_handler adc_isr:22
(0038) void adc_isr(void)
(0039) {
(0040) 	dword j;
(0041) 	
(0042) 	j =ADCL;            	//Read 8 low bits first (impo
    005A 90200078  LDS	R2,0x78
    005C 2433      CLR	R3
    005D 2444      CLR	R4
    005E 2455      CLR	R5
    005F 01FE      MOVW	R30,R28
    0060 8220      STD	Z+0,R2
    0061 8231      STD	Z+1,R3
    0062 8242      STD	Z+2,R4
    0063 8253      STD	Z+3,R5
(0043)     j |=(int)ADCH << 8;  	//read 2 high bits and shift into topbyte
    0064 90200079  LDS	R2,0x79
    0066 2433      CLR	R3
    0067 2C32      MOV	R3,R2
    0068 2422      CLR	R2
    0069 2444      CLR	R4
    006A FC37      SBRC	R3,7
    006B 9440      COM	R4
    006C 2455      CLR	R5
    006D FC47      SBRC	R4,7
    006E 9450      COM	R5
    006F 01FE      MOVW	R30,R28
    0070 8060      LDD	R6,Z+0
    0071 8071      LDD	R7,Z+1
    0072 8082      LDD	R8,Z+2
    0073 8093      LDD	R9,Z+3
    0074 2862      OR	R6,R2
    0075 2873      OR	R7,R3
    0076 2884      OR	R8,R4
    0077 2895      OR	R9,R5
    0078 01FE      MOVW	R30,R28
    0079 8260      STD	Z+0,R6
    007A 8271      STD	Z+1,R7
    007B 8282      STD	Z+2,R8
    007C 8293      STD	Z+3,R9
(0044)     
(0045) 	j *= ADCK;               //RC filtering
    007D 01FE      MOVW	R30,R28
    007E 8020      LDD	R2,Z+0
    007F 8031      LDD	R3,Z+1
    0080 8042      LDD	R4,Z+2
    0081 8053      LDD	R5,Z+3
    0082 E042      LDI	R20,2
    0083 E050      LDI	R21,0
    0084 E060      LDI	R22,0
    0085 E070      LDI	R23,0
    0086 925A      ST	R5,-Y
    0087 924A      ST	R4,-Y
    0088 923A      ST	R3,-Y
    0089 922A      ST	R2,-Y
    008A 018A      MOVW	R16,R20
    008B 019B      MOVW	R18,R22
    008C D79B      RCALL	empy32s
    008D 01FE      MOVW	R30,R28
    008E 8300      STD	Z+0,R16
    008F 8311      STD	Z+1,R17
    0090 8322      STD	Z+2,R18
    0091 8333      STD	Z+3,R19
(0046) 	j += (10-ADCK) * g_ValueAdc;
    0092 9120013E  LDS	R18,g_ValueAdc
    0094 9130013F  LDS	R19,g_ValueAdc+1
    0096 E008      LDI	R16,0x8
    0097 E010      LDI	R17,0
    0098 D77F      RCALL	empy16s
    0099 0118      MOVW	R2,R16
    009A 2444      CLR	R4
    009B 2455      CLR	R5
    009C 01FE      MOVW	R30,R28
    009D 8060      LDD	R6,Z+0
    009E 8071      LDD	R7,Z+1
    009F 8082      LDD	R8,Z+2
    00A0 8093      LDD	R9,Z+3
    00A1 0C62      ADD	R6,R2
    00A2 1C73      ADC	R7,R3
    00A3 1C84      ADC	R8,R4
    00A4 1C95      ADC	R9,R5
    00A5 01FE      MOVW	R30,R28
    00A6 8260      STD	Z+0,R6
    00A7 8271      STD	Z+1,R7
    00A8 8282      STD	Z+2,R8
    00A9 8293      STD	Z+3,R9
(0047) 	j /=10;
    00AA E04A      LDI	R20,0xA
    00AB E050      LDI	R21,0
    00AC E060      LDI	R22,0
    00AD E070      LDI	R23,0
    00AE 01FE      MOVW	R30,R28
    00AF 8020      LDD	R2,Z+0
    00B0 8031      LDD	R3,Z+1
    00B1 8042      LDD	R4,Z+2
    00B2 8053      LDD	R5,Z+3
    00B3 937A      ST	R23,-Y
    00B4 936A      ST	R22,-Y
    00B5 935A      ST	R21,-Y
    00B6 934A      ST	R20,-Y
    00B7 0181      MOVW	R16,R2
    00B8 0192      MOVW	R18,R4
    00B9 D6ED      RCALL	div32u
    00BA 01FE      MOVW	R30,R28
    00BB 8300      STD	Z+0,R16
    00BC 8311      STD	Z+1,R17
    00BD 8322      STD	Z+2,R18
    00BE 8333      STD	Z+3,R19
(0048) 	g_ValueAdc = j;
    00BF 01FE      MOVW	R30,R28
    00C0 8020      LDD	R2,Z+0
    00C1 8031      LDD	R3,Z+1
    00C2 9230013F  STS	g_ValueAdc+1,R3
    00C4 9220013E  STS	g_ValueAdc,R2
(0049) 	
(0050) 	g_AdcEnd  = 0xff;            	//set the flag of end
    00C6 EF8F      LDI	R24,0xFF
    00C7 93800141  STS	g_AdcEnd,R24
(0051)     ADMUX  = g_AdcNum;				//通道选择
    00C9 90200140  LDS	R2,g_AdcNum
    00CB 9220007C  STS	0x7C,R2
    00CD 9624      ADIW	R28,4
    00CE D785      RCALL	pop_gset2
    00CF 9009      LD	R0,Y+
    00D0 BE0F      OUT	0x3F,R0
    00D1 91F9      LD	R31,Y+
    00D2 91E9      LD	R30,Y+
    00D3 9189      LD	R24,Y+
    00D4 9139      LD	R19,Y+
    00D5 9129      LD	R18,Y+
    00D6 9119      LD	R17,Y+
    00D7 9109      LD	R16,Y+
    00D8 9099      LD	R9,Y+
    00D9 9089      LD	R8,Y+
    00DA 9079      LD	R7,Y+
    00DB 9069      LD	R6,Y+
    00DC 9059      LD	R5,Y+
    00DD 9049      LD	R4,Y+
    00DE 9039      LD	R3,Y+
    00DF 9029      LD	R2,Y+
    00E0 9019      LD	R1,Y+
    00E1 9009      LD	R0,Y+
    00E2 9518      RETI
_AdcPedal:
  get                  --> Y+0
  i                    --> R12
  adcp                 --> R10
    00E3 D778      RCALL	push_gset4
    00E4 0158      MOVW	R10,R16
    00E5 9724      SBIW	R28,4
(0052) }
(0053) 
(0054) //************************************************
(0055) //踏板信号转换为对应的控制值
(0056) //前踩:200-6000  对应10-300
(0057) //待机:位7:1  位6:0
(0058) //后一:高位 11
(0059) //后二:高位 01
(0060) //************************************************
(0061) word AdcPedal(word adcp)
(0062) {
(0063) 	byte i;
(0064) 	dword get;
(0065) 	
(0066) 	i = 0;
    00E6 24CC      CLR	R12
(0067) 		
(0068) 	if (adcp <= PEDAL_STOP)
    00E7 ED86      LDI	R24,0xD6
    00E8 E091      LDI	R25,1
    00E9 158A      CP	R24,R10
    00EA 059B      CPC	R25,R11
    00EB F020      BCS	0x00F0
(0069) 	{
(0070) 		i = 0x3;
    00EC E083      LDI	R24,3
    00ED 2EC8      MOV	R12,R24
(0071) 		adcp = 0;
    00EE 24AA      CLR	R10
    00EF 24BB      CLR	R11
(0072) 	}
(0073) 	
(0074) 	if ((adcp>PEDAL_STOP) && (adcp<PEDAL_STARTL))
    00F0 ED86      LDI	R24,0xD6
    00F1 E091      LDI	R25,1
    00F2 158A      CP	R24,R10
    00F3 059B      CPC	R25,R11
    00F4 F448      BCC	0x00FE
    00F5 01C5      MOVW	R24,R10
    00F6 3184      CPI	R24,0x14
    00F7 E0E2      LDI	R30,2
    00F8 079E      CPC	R25,R30
    00F9 F420      BCC	0x00FE
(0075) 	{
(0076) 		i = 0x2;
    00FA E082      LDI	R24,2
    00FB 2EC8      MOV	R12,R24
(0077) 		adcp = 0;
    00FC 24AA      CLR	R10
    00FD 24BB      CLR	R11
(0078) 	}
(0079) 	
(0080) 	if (adcp >= PEDAL_STARTL)
    00FE 01C5      MOVW	R24,R10
    00FF 3184      CPI	R24,0x14
    0100 E0E2      LDI	R30,2
    0101 079E      CPC	R25,R30
    0102 F408      BCC	0x0104
    0103 C050      RJMP	0x0154
(0081) 	{
(0082) 		if (adcp > PEDAL_STARTH)
    0104 EA8D      LDI	R24,0xAD
    0105 E093      LDI	R25,3
    0106 158A      CP	R24,R10
    0107 059B      CPC	R25,R11
    0108 F408      BCC	0x010A
(0083) 		{
(0084) 			adcp = PEDAL_STARTH;
    0109 015C      MOVW	R10,R24
(0085) 		}
(0086) 		get = adcp - PEDAL_STARTL;
    010A 01C5      MOVW	R24,R10
    010B 5184      SUBI	R24,0x14
    010C 4092      SBCI	R25,2
    010D 011C      MOVW	R2,R24
    010E 2444      CLR	R4
    010F 2455      CLR	R5
    0110 01FE      MOVW	R30,R28
    0111 8220      STD	Z+0,R2
    0112 8231      STD	Z+1,R3
    0113 8242      STD	Z+2,R4
    0114 8253      STD	Z+3,R5
(0087) 		get *= 5800;								//(6000-200)/20;
    0115 01FE      MOVW	R30,R28
    0116 8020      LDD	R2,Z+0
    0117 8031      LDD	R3,Z+1
    0118 8042      LDD	R4,Z+2
    0119 8053      LDD	R5,Z+3
    011A EA48      LDI	R20,0xA8
    011B E156      LDI	R21,0x16
    011C E060      LDI	R22,0
    011D E070      LDI	R23,0
    011E 925A      ST	R5,-Y
    011F 924A      ST	R4,-Y
    0120 923A      ST	R3,-Y
    0121 922A      ST	R2,-Y
    0122 018A      MOVW	R16,R20
    0123 019B      MOVW	R18,R22
    0124 D703      RCALL	empy32s
    0125 01FE      MOVW	R30,R28
    0126 8300      STD	Z+0,R16
    0127 8311      STD	Z+1,R17
    0128 8322      STD	Z+2,R18
    0129 8333      STD	Z+3,R19
(0088) 		get /= (PEDAL_STARTH - PEDAL_STARTL);
    012A E949      LDI	R20,0x99
    012B E051      LDI	R21,1
    012C E060      LDI	R22,0
    012D E070      LDI	R23,0
    012E 01FE      MOVW	R30,R28
    012F 8020      LDD	R2,Z+0
    0130 8031      LDD	R3,Z+1
    0131 8042      LDD	R4,Z+2
    0132 8053      LDD	R5,Z+3
    0133 937A      ST	R23,-Y
    0134 936A      ST	R22,-Y
    0135 935A      ST	R21,-Y
    0136 934A      ST	R20,-Y
    0137 0181      MOVW	R16,R2
    0138 0192      MOVW	R18,R4
    0139 D66D      RCALL	div32u
    013A 01FE      MOVW	R30,R28
    013B 8300      STD	Z+0,R16
    013C 8311      STD	Z+1,R17
    013D 8322      STD	Z+2,R18
    013E 8333      STD	Z+3,R19
(0089) 		get += 200;									//200/20;
    013F EC48      LDI	R20,0xC8
    0140 E050      LDI	R21,0
    0141 E060      LDI	R22,0
    0142 E070      LDI	R23,0
    0143 01FE      MOVW	R30,R28
    0144 8020      LDD	R2,Z+0
    0145 8031      LDD	R3,Z+1
    0146 8042      LDD	R4,Z+2
    0147 8053      LDD	R5,Z+3
    0148 0E24      ADD	R2,R20
    0149 1E35      ADC	R3,R21
    014A 1E46      ADC	R4,R22
    014B 1E57      ADC	R5,R23
    014C 01FE      MOVW	R30,R28
    014D 8220      STD	Z+0,R2
    014E 8231      STD	Z+1,R3
    014F 8242      STD	Z+2,R4
    0150 8253      STD	Z+3,R5
(0090) 		adcp = get;
    0151 01FE      MOVW	R30,R28
    0152 80A0      LDD	R10,Z+0
    0153 80B1      LDD	R11,Z+1
(0091) 	}
(0092) 	
(0093) 	if (i == 3)				//后一状态
    0154 2D8C      MOV	R24,R12
    0155 3083      CPI	R24,3
    0156 F419      BNE	0x015A
(0094) 	{
(0095) 	adcp |= 0xC000;
    0157 01C5      MOVW	R24,R10
    0158 6C90      ORI	R25,0xC0
    0159 015C      MOVW	R10,R24
(0096) 	}
(0097) 	if (i == 2)				//待机状态
    015A 2D8C      MOV	R24,R12
    015B 3082      CPI	R24,2
    015C F419      BNE	0x0160
(0098) 	{
(0099) 	adcp |= 0x8000;
    015D 01C5      MOVW	R24,R10
    015E 6890      ORI	R25,0x80
    015F 015C      MOVW	R10,R24
(0100) 	}
(0101) 	
(0102) 	return adcp;				//返回脚踏板转速值
    0160 0185      MOVW	R16,R10
    0161 9624      ADIW	R28,4
    0162 D6F3      RCALL	pop_gset4

⌨️ 快捷键说明

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