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

📄 main.s

📁 一个6缸发动机的ECU控制程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\main.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\main.c
_Spray1Num::
	.blkb 4
	.area idata
	.word 10,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\main.c
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Spray1Num _Spray1Num l
_CSpray1Cyc::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CSpray1Cyc _CSpray1Cyc l
_CSpray1On::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CSpray1On _CSpray1On i
_Pump1Num::
	.blkb 4
	.area idata
	.word 10,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Pump1Num _Pump1Num l
_CPump1Cyc::
	.blkb 2
	.area idata
	.word 250
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump1Cyc _CPump1Cyc i
_CPump1CycH::
	.blkb 2
	.area idata
	.word 3
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump1CycH _CPump1CycH i
_CPump1On::
	.blkb 2
	.area idata
	.word 50
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump1On _CPump1On i
_CPump1OnH::
	.blkb 2
	.area idata
	.word 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump1OnH _CPump1OnH i
_HighByte1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e HighByte1 _HighByte1 c
_Pump1Flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Pump1Flag _Pump1Flag c
_PPump1Num::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e PPump1Num _PPump1Num l
_SSpray1Num::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e SSpray1Num _SSpray1Num l
_Cyc1H::
	.blkb 2
	.area idata
	.word 3
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Cyc1H _Cyc1H i
_On1H::
	.blkb 2
	.area idata
	.word 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e On1H _On1H i
_Cyc2H::
	.blkb 2
	.area idata
	.word 3
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Cyc2H _Cyc2H i
_On2H::
	.blkb 2
	.area idata
	.word 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e On2H _On2H i
_ActFlag1::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e ActFlag1 _ActFlag1 c
_ActFlag2::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e ActFlag2 _ActFlag2 c
_Spray2Num::
	.blkb 4
	.area idata
	.word 500,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Spray2Num _Spray2Num l
_CSpray2Cyc::
	.blkb 4
	.area idata
	.word 60000,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CSpray2Cyc _CSpray2Cyc l
_CSpray2On::
	.blkb 2
	.area idata
	.word 10000
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CSpray2On _CSpray2On i
_Pump2Num::
	.blkb 4
	.area idata
	.word 3,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Pump2Num _Pump2Num l
_CPump2Cyc::
	.blkb 2
	.area idata
	.word 120
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump2Cyc _CPump2Cyc i
_CPump2CycH::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump2CycH _CPump2CycH i
_CPump2On::
	.blkb 2
	.area idata
	.word 50
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump2On _CPump2On i
_CPump2OnH::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e CPump2OnH _CPump2OnH i
_HighByte2::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e HighByte2 _HighByte2 c
_Pump2Flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e Pump2Flag _Pump2Flag c
_PPump2Num::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e PPump2Num _PPump2Num l
_SSpray2Num::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbsym e SSpray2Num _SSpray2Num l
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\timer1.h
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\uart.c
	.dbfunc e FlashRxBuf _FlashRxBuf fV
	.even
_FlashRxBuf::
	.dbline -1
	.dbline 7
; #include <iom88v.h>
; #include <macros.h>
; #include <uart.h>
; #include <timer1.h>
; 
; void FlashRxBuf(void)
; {
	.dbline 8
;   rx_error0 = 0;
	clr R2
	sts _rx_error0,R2
	.dbline 9
;   rx_counter0 = 0;
	sts _rx_counter0,R2
	.dbline 10
;   rx_rd_index0 = 0;
	sts _rx_rd_index0,R2
	.dbline 11
;   FrameHead0 = 0;
	sts _FrameHead0,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 20
; }
; 
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Even
; void uart0_init(void)
; {
	.dbline 21
;  UCSR0B = 0x00; //disable while setting baud rate
	clr R2
	sts 193,R2
	.dbline 22
;  UCSR0A = 0x00;
	sts 192,R2
	.dbline 23
;  UCSR0C = 0x26;
	ldi R24,38
	sts 194,R24
	.dbline 24
;  UBRR0L = 0x33; //set baud rate lo
	ldi R24,51
	sts 196,R24
	.dbline 25
;  UBRR0H = 0x00; //set baud rate hi
	sts 197,R2
	.dbline 26
;  UCSR0B = 0xD8;
	ldi R24,216
	sts 193,R24
	.dbline 27
;  FlashRxBuf();
	rcall _FlashRxBuf
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TestFrameHead _TestFrameHead fc
;           data -> R16
	.even
_TestFrameHead::
	.dbline -1
	.dbline 33
; }
; 
; 
; 
; char TestFrameHead(char data)
; {
	.dbline 34
;   if(data == FRAMEFLAG1)  //是否和设定的帧标志相等?有多种帧类型时,以或运算添加其他标志
	cpi R16,255
	brne L4
X0:
	.dbline 35
;     return 1;
	ldi R16,1
	rjmp L3
L4:
	.dbline 37
;   else 
;     return 0;	
	clr R16
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.area vector(rom, abs)
	.org 36
	rjmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\uart.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;           data -> R10
;         status -> R20
	.even
_uart0_rx_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R10
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R20
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	st -y,R10
	st -y,R20
	.dbline -1
	.dbline 42
; }
; // USART0 Receiver interrupt service routine 
; #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
; void uart0_rx_isr(void) 
; { 
	.dbline 44
;   char status,data; 
;   status=UCSR0A; 
	lds R20,192
	.dbline 45
;   data=UDR0; 
	lds R10,198
	.dbline 50
; //  		 putchar(251);  //回传接收成功标志 debug
; //         putchar(251);  //回传接收成功标志debug
; //  if(data == 0xFF)  //DEBUG
; //    UDR0 = data;   //DEBUG
;   if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) 
	mov R24,R20
	andi R24,28
	brne L7
X1:
	.dbline 51
;     { 
	.dbline 52
; 	  if(FrameHead0 == 0 && rx_counter0 == 0)  //判断是否帧头
	lds R2,_FrameHead0
	tst R2
	brne L9
X2:
	lds R2,_rx_counter0
	tst R2
	brne L9
X3:
	.dbline 53
; 	   {
	.dbline 54
; 	    if(TestFrameHead(data))    //数据有效才设置FrameHead	
	mov R16,R10
	rcall _TestFrameHead
	tst R16
	breq L8
X4:
	.dbline 55
; 		 {
	.dbline 56
; 	       FrameHead0 = data;
	sts _FrameHead0,R10
	.dbline 57
; 		 }  
	.dbline 58
; 	   } 
	rjmp L8
L9:
	.dbline 61
; 		
; 	  else 
; 	    {	
	.dbline 62
;          rx_buffer0[rx_counter0]=data;  
	ldi R24,<_rx_buffer0
	ldi R25,>_rx_buffer0
	lds R30,_rx_counter0
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R10
	.dbline 65
; //		 putchar(251);  //回传接收成功标志 debug
; //         putchar(251);  //回传接收成功标志debug
;          if (++rx_counter0 == RX_BUFFER_SIZE0) 
	lds R24,_rx_counter0
	subi R24,255    ; addi 1
	mov R2,R24
	sts _rx_counter0,R2
	cpi R24,20
	brne L8
X5:
	.dbline 66
;           { 
	.dbline 67
;             rx_counter0 = 0; 
	clr R2
	sts _rx_counter0,R2
	.dbline 68
;             rx_error0 = 1; 
	ldi R24,1
	sts _rx_error0,R24
	.dbline 69
;           } 
	.dbline 70
; 		} 
	.dbline 71
;      } 
	rjmp L8
L7:
	.dbline 72
;   else rx_error0 = 1 ;	 
	ldi R24,1
	sts _rx_error0,R24
L8:
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R20,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R10,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r data 10 c
	.dbsym r status 20 c
	.dbend
	.dbfunc e getchar _getchar fc
;           data -> R16
;          IisOn -> R18
	.even
_getchar::
	.dbline -1
	.dbline 79
; } 
; 
; 
; 
; // Get a character from the USART0 Receiver buffer 
; char getchar(void) 
; { 
	.dbline 81
;   char data; 
;   char IisOn = 1;
	ldi R18,1
	.dbline 82
;   if((SREG & 0x80) == 0x00)  //I之前是否置位
	in R2,0x3f
	sbrc R2,7
	rjmp L19
X6:
	.dbline 83
;     IisOn = 0;
	clr R18
L18:
	.dbline 85
; 	
;   while (rx_counter0==0); 
L19:
	.dbline 85
	lds R2,_rx_counter0
	tst R2
	breq L18
X7:
	.dbline 86
;   data=rx_buffer0[rx_rd_index0]; 
	ldi R24,<_rx_buffer0
	ldi R25,>_rx_buffer0
	lds R30,_rx_rd_index0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	.dbline 87
;   if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0; 
	lds R24,_rx_rd_index0
	subi R24,255    ; addi 1
	mov R2,R24
	sts _rx_rd_index0,R2
	cpi R24,20
	brne L21
X8:
	.dbline 87
	clr R2
	sts _rx_rd_index0,R2
L21:
	.dbline 88
;   CLI(); 
	cli
	.dbline 89
;   --rx_counter0; 
	lds R24,_rx_counter0
	subi R24,1
	sts _rx_counter0,R24
	.dbline 90
;   if(IisOn)
	tst R18
	breq L23
X9:
	.dbline 91
;     SEI(); 
	sei
L23:
	.dbline 92
;   return data; 
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbsym r IisOn 18 c
	.dbend
	.area vector(rom, abs)
	.org 40
	rjmp _uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\程序\油泵油嘴实验台\可用\油泵油~2\uart.c
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
	.even
_uart0_tx_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 101
; }
; 
; 
; 
; 
; // USART0 Transmitter interrupt service routine 
; #pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC
; void uart0_tx_isr(void)
; { 
	.dbline 102
;   if (tx_counter0) 
	lds R2,_tx_counter0
	tst R2
	breq L26
X10:
	.dbline 103
;     { 
	.dbline 104
;       --tx_counter0; 
	lds R24,_tx_counter0
	subi R24,1
	sts _tx_counter0,R24
	.dbline 105
;       UDR0=tx_buffer0[tx_rd_index0]; 
	ldi R24,<_tx_buffer0
	ldi R25,>_tx_buffer0
	lds R30,_tx_rd_index0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts 198,R2
	.dbline 106
;       if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0; 
	lds R24,_tx_rd_index0
	subi R24,255    ; addi 1
	mov R2,R24
	sts _tx_rd_index0,R2
	cpi R24,20
	brne L28
X11:

⌨️ 快捷键说明

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