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

📄 main.lst

📁 前两年在一家模型公司开发的
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    001A EFCF      LDI	R28,0xFF
    001B E0D2      LDI	R29,2
    001C BFCD      OUT	0x3D,R28
    001D BFDE      OUT	0x3E,R29
    001E 51C0      SUBI	R28,0x10
    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 31EB      CPI	R30,0x1B
    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 D3E9      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
FILE: E:\TWINTI~1\main.c
(0001) /********************************************************************************/
(0002) //		
(0003) // 		builder : 2007-04-10
(0004) // 		Target  : ATMEAG 48V
(0005) // 		Crystal : 内部 8.00 MHz
(0006) //
(0007) //		
(0008) 		
(0009) /********************************************************************************/
(0010) 
(0011) #include 	<iom48v.h>
(0012) #include 	<macros.h>
(0013) 
(0014) #include	"eeprom.h"
(0015) #include	"time2.h"
(0016) #include	"adc.h"
(0017) 
(0018) 
(0019) #define		uchar		unsigned char
(0020) #define		uint		unsigned int
(0021) 
(0022) #define		SET_LED		PORTD |=  (1<<PB4)
(0023) #define		CLR_LED		PORTD &= ~(1<<PB4)
(0024) 
(0025) uchar	e2rom[7];
(0026) 
(0027) uint	PE1,PE2;
(0028) 
(0029) uchar	mode;
(0030) uchar	rxd_flag;	// 油门接收OK标志
(0031) 
(0032) uchar	PWM;
(0033) uint	Timer;
(0034) uint	high,middle,low;
(0035) uchar	REV;
(0036) uchar	power;
(0037) uchar	heat;
(0038) union	
(0039) {	uint	temp;
(0040) 	uchar  	data[2];		
(0041) }time;
(0042) 
(0043) 
(0044) /*---------------------------------------------------------------
(0045)    			初始化
(0046) ----------------------------------------------------------------*/
(0047) void timer0_init(void)
(0048) {
(0049)  	TCCR0B = 0x00; //stop
_timer0_init:
    003A 2422      CLR	R2
    003B BC25      OUT	0x25,R2
(0050)  	TCNT0  = 0x01; //set count
    003C E081      LDI	R24,1
    003D BD86      OUT	0x26,R24
(0051)  	TCCR0A = 0x23; 
    003E E283      LDI	R24,0x23
    003F BD84      OUT	0x24,R24
(0052)  	OCR0B  = 0xA5;
    0040 EA85      LDI	R24,0xA5
    0041 BD88      OUT	0x28,R24
(0053)  	TCCR0B = 0x01; //start timer
    0042 E081      LDI	R24,1
    0043 BD85      OUT	0x25,R24
    0044 9508      RET
(0054) }
(0055) 
(0056) 
(0057) 
(0058) void timer1_init(void) 		// 20MS 中断
(0059) {
(0060)  	TCCR1B = 0x00;  // stop
_timer1_init:
    0045 2422      CLR	R2
    0046 92200081  STS	0x81,R2
(0061)  	TCNT1H = 0xB1;  // setup
    0048 EB81      LDI	R24,0xB1
    0049 93800085  STS	0x85,R24
(0062)  	TCNT1L = 0xE0;
    004B EE80      LDI	R24,0xE0
    004C 93800084  STS	0x84,R24
(0063)  	OCR1AH = 0x4E;
    004E E48E      LDI	R24,0x4E
    004F 93800089  STS	0x89,R24
(0064)  	OCR1AL = 0x20;
    0051 E280      LDI	R24,0x20
    0052 93800088  STS	0x88,R24
(0065)  	OCR1BH = 0x4E;
    0054 E48E      LDI	R24,0x4E
    0055 9380008B  STS	0x8B,R24
(0066)  	OCR1BL = 0x20;
    0057 E280      LDI	R24,0x20
    0058 9380008A  STS	0x8A,R24
(0067)  	ICR1H  = 0x4E;
    005A E48E      LDI	R24,0x4E
    005B 93800087  STS	0x87,R24
(0068)  	ICR1L  = 0x20;
    005D E280      LDI	R24,0x20
    005E 93800086  STS	0x86,R24
(0069)  	TCCR1A = 0x00;
    0060 92200080  STS	0x80,R2
    0062 9508      RET
(0070) }
(0071) 
(0072) 
(0073) void init_devices(void)
(0074) {
(0075) 	CLI();
_init_devices:
    0063 94F8      BCLR	7
(0076) 		
(0077)  	DDRB  = 0x7F;
    0064 E78F      LDI	R24,0x7F
    0065 B984      OUT	0x04,R24
(0078)  	PORTB = 0xC0;
    0066 EC80      LDI	R24,0xC0
    0067 B985      OUT	0x05,R24
(0079) 	
(0080) 	DDRC  = 0x00;
    0068 2422      CLR	R2
    0069 B827      OUT	0x07,R2
(0081)  	PORTC = 0x40; // m103 output only
    006A E480      LDI	R24,0x40
    006B B988      OUT	0x08,R24
(0082)  	
(0083)  	DDRD  = 0xFB;
    006C EF8B      LDI	R24,0xFB
    006D B98A      OUT	0x0A,R24
(0084)  	PORTD = 0x40;
    006E E480      LDI	R24,0x40
    006F B98B      OUT	0x0B,R24
(0085)  	
(0086)  	MCUCR  = 0x00;
    0070 BE25      OUT	0x35,R2
(0087)  	EICRA  = 0x03; 	// INT0 上升沿触发
    0071 E083      LDI	R24,3
    0072 93800069  STS	0x69,R24
(0088)  	EIMSK  = 0x01;	// 使能 INT0 中断
    0074 E081      LDI	R24,1
    0075 BB8D      OUT	0x1D,R24
(0089)  	
(0090)  	timer0_init();
    0076 DFC3      RCALL	_timer0_init
(0091)  	timer1_init();
    0077 DFCD      RCALL	_timer1_init
(0092)  	timer2_init();
    0078 D43B      RCALL	_timer2_init
(0093)  	init_eeprom();
    0079 D42A      RCALL	_init_eeprom
(0094)  	adc_int();
    007A D3BF      RCALL	_adc_int
(0095)  	
(0096)  	SEI();
    007B 9478      BSET	7
    007C 9508      RET
_delay:
  i                    --> R20
  j                    --> R22
  k                    --> R10
  t                    --> R16
    007D D4A2      RCALL	push_gset3
(0097) }
(0098) 
(0099) /*---------------------------------------------------------------
(0100)    			延时
(0101) ----------------------------------------------------------------*/
(0102) 
(0103) void delay(uint t)
(0104) {
(0105) 	uint i,j,k;
(0106) 	
(0107) 	for(i=0;i<t;i++)
    007E 2744      CLR	R20
    007F 2755      CLR	R21
    0080 C016      RJMP	0x0097
(0108) 	{
(0109) 		for(j=0;j<200;j++)
    0081 2766      CLR	R22
    0082 2777      CLR	R23
    0083 C00D      RJMP	0x0091
(0110) 		{
(0111) 			for(k=0;k<50;k++);;
    0084 24AA      CLR	R10
    0085 24BB      CLR	R11
    0086 C003      RJMP	0x008A
    0087 01C5      MOVW	R24,R10
    0088 9601      ADIW	R24,1
    0089 015C      MOVW	R10,R24
    008A 01C5      MOVW	R24,R10
    008B 3382      CPI	R24,0x32
    008C E0E0      LDI	R30,0
    008D 079E      CPC	R25,R30
    008E F3C0      BCS	0x0087
    008F 5F6F      SUBI	R22,0xFF
    0090 4F7F      SBCI	R23,0xFF
    0091 3C68      CPI	R22,0xC8
    0092 E0E0      LDI	R30,0
    0093 077E      CPC	R23,R30
    0094 F378      BCS	0x0084
    0095 5F4F      SUBI	R20,0xFF
    0096 4F5F      SBCI	R21,0xFF
    0097 1740      CP	R20,R16
    0098 0751      CPC	R21,R17
    0099 F338      BCS	0x0081
    009A D47D      RCALL	pop_gset3
    009B 9508      RET
(0112) 		}
(0113) 	}
(0114) }
(0115) 
(0116) 
(0117) void LED_set(void)
(0118) {
(0119) 	SET_LED	;
_LED_set:
    009C 9A5C      SBI	0x0B,4
(0120) 	delay(10);
    009D E00A      LDI	R16,0xA
    009E E010      LDI	R17,0
    009F DFDD      RCALL	_delay
(0121) 	CLR_LED	;
    00A0 985C      CBI	0x0B,4
(0122) 	delay(8);
    00A1 E008      LDI	R16,0x8
    00A2 E010      LDI	R17,0
    00A3 DFD9      RCALL	_delay
    00A4 9508      RET
_egis:
  temp                 --> R20
    00A5 D47E      RCALL	push_gset1
(0123) }
(0124) 
(0125) void egis(void)
(0126) {
(0127) 	uint temp;
(0128) 	
(0129) 	temp = adc_colect(1);
    00A6 E001      LDI	R16,1
    00A7 D399      RCALL	_adc_colect
    00A8 01A8      MOVW	R20,R16
(0130) 	if(temp<0x1D0 && power<200) power ++;
    00A9 3D00      CPI	R16,0xD0
    00AA E0E1      LDI	R30,1
    00AB 071E      CPC	R17,R30
    00AC F440      BCC	0x00B5
    00AD 91800103  LDS	R24,power
    00AF 3C88      CPI	R24,0xC8
    00B0 F420      BCC	0x00B5
    00B1 5F8F      SUBI	R24,0xFF
    00B2 93800103  STS	power,R24
    00B4 C008      RJMP	0x00BD
(0131) 	else if(temp>0x1DF)power = 0;
    00B5 ED8F      LDI	R24,0xDF
    00B6 E091      LDI	R25,1
    00B7 1784      CP	R24,R20
    00B8 0795      CPC	R25,R21
    00B9 F418      BCC	0x00BD
    00BA 2422      CLR	R2
    00BB 92200103  STS	power,R2
(0132) 	
(0133) 	if(power>3 && PWM<50)
    00BD E083      LDI	R24,3
    00BE 90200103  LDS	R2,power
    00C0 1582      CP	R24,R2
    00C1 F4E0      BCC	0x00DE
    00C2 9180010D  LDS	R24,PWM
    00C4 3382      CPI	R24,0x32
    00C5 F4C0      BCC	0x00DE
(0134) 	{
(0135) 		PWM = 0;
    00C6 2422      CLR	R2
    00C7 9220010D  STS	PWM,R2
(0136) 		Pwm_set(0,0);
    00C9 2722      CLR	R18
    00CA 2700      CLR	R16
    00CB D3F9      RCALL	_Pwm_set
(0137) 		delay(5);
    00CC E005      LDI	R16,5
    00CD E010      LDI	R17,0
    00CE DFAE      RCALL	_delay
(0138) 		temp = 0;
    00CF 2744      CLR	R20
    00D0 2755      CLR	R21
    00D1 C008      RJMP	0x00DA
(0139) 		while(temp<0x1df)
(0140) 		{
(0141) 			temp = adc_colect(1);
    00D2 E001      LDI	R16,1
    00D3 D36D      RCALL	_adc_colect
    00D4 01A8      MOVW	R20,R16
(0142) 			LED_set();
    00D5 DFC6      RCALL	_LED_set
(0143) 			Buz();
    00D6 D13E      RCALL	_Buz
(0144) 			delay(20);
    00D7 E104      LDI	R16,0x14
    00D8 E010      LDI	R17,0
    00D9 DFA3      RCALL	_delay
    00DA 3D4F      CPI	R20,0xDF
    00DB E0E1      LDI	R30,1
    00DC 075E      CPC	R21,R30
    00DD F3A0      BCS	0x00D2
(0145) 		}
(0146) 	}
(0147) 	
(0148) 	
(0149) 	temp = adc_colect(2);
    00DE E002      LDI	R16,2
    00DF D361      RCALL	_adc_colect
    00E0 01A8      MOVW	R20,R16
(0150) 	if(temp>0x3BF && heat<200) heat ++;		// >110度
    00E1 EB8F      LDI	R24,0xBF
    00E2 E093      LDI	R25,3
    00E3 1780      CP	R24,R16
    00E4 0791      CPC	R25,R17
    00E5 F440      BCC	0x00EE
    00E6 91800102  LDS	R24,heat
    00E8 3C88      CPI	R24,0xC8
    00E9 F420      BCC	0x00EE
    00EA 5F8F      SUBI	R24,0xFF
    00EB 93800102  STS	heat,R24
    00ED C007      RJMP	0x00F5
(0151) 	else if(temp<0x38E)heat = 0;			// <80度
    00EE 384E      CPI	R20,0x8E
    00EF E0E3      LDI	R30,3
    00F0 075E      CPC	R21,R30
    00F1 F418      BCC	0x00F5
    00F2 2422      CLR	R2
    00F3 92200102  STS	heat,R2
(0152) 	
(0153) 	if(heat>3 && PWM<50)
    00F5 E083      LDI	R24,3
    00F6 90200102  LDS	R2,heat
    00F8 1582      CP	R24,R2
    00F9 F4F8      BCC	0x0119
    00FA 9180010D  LDS	R24,PWM
    00FC 3382      CPI	R24,0x32
    00FD F4D8      BCC	0x0119
(0154) 	{
(0155) 		PWM = 0;
    00FE 2422      CLR	R2
    00FF 9220010D  STS	PWM,R2
(0156) 		Pwm_set(0,0);
    0101 2722      CLR	R18
    0102 2700      CLR	R16
    0103 D3C1      RCALL	_Pwm_set
(0157) 		delay(5);
    0104 E005      LDI	R16,5
    0105 E010      LDI	R17,0
    0106 DF76      RCALL	_delay
(0158) 		temp = 0xfff;
    0107 EF4F      LDI	R20,0xFF
    0108 E05F      LDI	R21,0xF
    0109 C00A      RJMP	0x0114
(0159) 		while(temp>0x38E)
(0160) 		{
(0161) 			temp = adc_colect(2);
    010A E002      LDI	R16,2
    010B D335      RCALL	_adc_colect
    010C 01A8      MOVW	R20,R16
(0162) 			LED_set();
    010D DF8E      RCALL	_LED_set
(0163) 			LED_set();
    010E DF8D      RCALL	_LED_set
(0164) 			Buz();
    010F D105      RCALL	_Buz
(0165) 			Buz();
    0110 D104      RCALL	_Buz
(0166) 			delay(20);
    0111 E104      LDI	R16,0x14
    0112 E010      LDI	R17,0
    0113 DF69      RCALL	_delay
    0114 E88E      LDI	R24,0x8E
    0115 E093      LDI	R25,3
    0116 1784      CP	R24,R20
    0117 0795      CPC	R25,R21
    0118 F388      BCS	0x010A
(0167) 		}
(0168) 	}
    0119 D40D      RCALL	pop_gset1
    011A 9508      RET
(0169) }
(0170) 
(0171) /*---------------------------------------------------------------
(0172)    			油门处理
(0173) ----------------------------------------------------------------*/
(0174) 
(0175) void Gun_set(void)
(0176) {	 	
(0177) 	if(rxd_flag)	// 接收已完成
_Gun_set:
    011B 9020010E  LDS	R2,rxd_flag
    011D 2022      TST	R2
    011E F409      BNE	0x0120
    011F C0BF      RJMP	0x01DF
(0178) 	{
(0179) 		rxd_flag = 0;
    0120 2422      CLR	R2
    0121 9220010E  STS	rxd_flag,R2
(0180) 		
(0181) 		if(Timer>high) Timer = high;	// 确保接收到的数据在正常范围内
    0123 90200109  LDS	R2,high
    0125 9030010A  LDS	R3,high+1
    0127 9040010B  LDS	R4,Timer
    0129 9050010C  LDS	R5,Timer+1
    012B 1424      CP	R2,R4
    012C 0435      CPC	R3,R5
    012D F420      BCC	0x0132
    012E 9230010C  STS	Timer+1,R3
    0130 9220010B  STS	Timer,R2
(0182) 		if(Timer<low)  Timer = low;
    0132 90200105  LDS	R2,low
    0134 90300106  LDS	R3,low+1

⌨️ 快捷键说明

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