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

📄 main.s

📁 mega16的rs232通讯程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area data(ram, con, rel)
_Enter::
	.blkb 2
	.area idata
	.byte 224,62
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 227,238
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbsym e Enter _Enter A[4:4]c
_RunBuffer::
	.blkb 2
	.area idata
	.byte 131,'D
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.blkb 2
	.area idata
	.byte 53,126
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbsym e RunBuffer _RunBuffer A[4:4]c
_StopBuffer::
	.blkb 2
	.area idata
	.byte 125,94
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.blkb 2
	.area idata
	.byte 229,158
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbsym e StopBuffer _StopBuffer A[4:4]c
_n:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbsym s n _n c
_RxBuffer::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbsym e RxBuffer _RxBuffer A[4:4]c
	.area text(rom, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 42
; //ICC-AVR application builder : 2008-4-9 17:20:49
; // Target : M16
; // Crystal: 16.000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; #define DataR 0x90
; #define RSTA1  0x4a
; #define RSTA2  0x30
; 
; #define TSTA1 0x6b
; #define TSTA2 0x4c
; #define DataT 0xaf
; 
; #define En	  0xe0
; #define Run	  0x83
; #define Stop  0x7d
; 
; #define OK	  1
; #define NG	  0
; #define ONE	  0x90
; #define TWO	  0x91
; #define THREE 0x92
; #define FOUR  0x93
; #define COMM  0x94
;   
; unsigned char Enter[4] = {En,0x3e,0xe3,0xee};
; unsigned char RunBuffer[4] = {Run,0x44,0x35,0x7e};
; unsigned char StopBuffer[4] = {Stop,0x5e,0xe5,0x9e};
; 
; static unsigned char n = 0;
; static unsigned char len;
; static unsigned char flag;
; 
; unsigned char RxBuffer[4] = {0,0,0,0};
; unsigned char TxBuffer[4];
; 
; enum COMCHE{ENTER,RUN,STOP}comcheck;
; 
; void port_init(void)
; {
	.dbline 43
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 44
;  DDRA  = 0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 45
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 46
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 47
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 48
;  DDRC  = 0xff;
	out 0x14,R24
	.dbline 49
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 50
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 59
; }
; 
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
	.dbline 60
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 61
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 62
;  UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 63
;  UBRRL = 0x67; //set baud rate lo
	ldi R24,103
	out 0x9,R24
	.dbline 64
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 65
;  UCSRB = 0xD8;
	ldi R24,216
	out 0xa,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 44
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;           temp -> <dead>
	.even
_uart0_rx_isr::
	st -y,R2
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 70
; }
; 
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {unsigned char temp;
	.dbline 71
;  if (flag == NG){
	lds R2,_flag
	tst R2
	breq X2
	xjmp L4
X2:
	.dbline 71
	.dbline 72
	lds R16,_n
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L9
X0:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L12
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L15
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	brne X3
	xjmp L18
X3:
	cpi R16,4
	ldi R30,0
	cpc R17,R30
	brne X4
	xjmp L19
X4:
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	brne X5
	xjmp L21
X5:
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	brne X6
	xjmp L23
X6:
	xjmp L7
X1:
	.dbline 72
;  	switch (n){
L9:
	.dbline 73
; 		   case 0: if (UDR == RSTA1) n++;break;	//头1
	in R24,0xc
	cpi R24,74
	breq X7
	xjmp L7
X7:
	.dbline 73
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 73
	xjmp L7
L12:
	.dbline 74
; 		   case 1: if (UDR == RSTA2) n++;		//头2   
	in R24,0xc
	cpi R24,48
	brne L13
	.dbline 74
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	xjmp L7
L13:
	.dbline 75
; 		   		   else n = 0;			break;
	clr R2
	sts _n,R2
	.dbline 75
	xjmp L7
L15:
	.dbline 76
; 		   case 2: if (UDR >= ONE && UDR <= COMM)//长度
	in R24,0xc
	cpi R24,144
	brlo L16
	ldi R24,148
	in R2,0xc
	cp R24,R2
	brlo L16
	.dbline 77
; 		   		   	  {len = UDR; n++;}
	.dbline 77
	in R2,0xc
	sts _len,R2
	.dbline 77
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 77
	xjmp L7
L16:
	.dbline 78
; 				   else n = 0;		 	
	clr R2
	sts _n,R2
	.dbline 79
; 				   break;
	xjmp L7
L18:
	.dbline 80
; 		   case 3: RxBuffer[0] = UDR; n++; break;
	in R2,0xc
	sts _RxBuffer,R2
	.dbline 80
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 80
	xjmp L7
L19:
	.dbline 81
; 		   case 4: RxBuffer[1] = UDR; n++; break;
	in R2,0xc
	sts _RxBuffer+1,R2
	.dbline 81
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 81
	xjmp L7
L21:
	.dbline 82
; 		   case 5: RxBuffer[2] = UDR; n++; break;
	in R2,0xc
	sts _RxBuffer+2,R2
	.dbline 82
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 82
	xjmp L7
L23:
	.dbline 83
; 		   case 6: RxBuffer[3] = UDR;  n++; 	 //data
	in R2,0xc
	sts _RxBuffer+3,R2
	.dbline 83
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 87
; 		   				// break;
; 		  /* case 7: temp = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 +len;
; 		   		   if (UDR == temp) {  	 	   //校验*/
; 		   		   	  flag = OK;
	ldi R24,1
	sts _flag,R24
	.dbline 88
; 					  PORTA = 0xff;
	ldi R24,255
	out 0x1b,R24
	.dbline 93
; 					  //CLI();
; 					 // UCSRB = 0xC8;			   //关接受中断
; 					 // SEI();
; 					// }
; 					 n = 0;
	clr R2
	sts _n,R2
	.dbline 94
; 				   break;
	.dbline 95
; 			default: break;
L7:
	.dbline 97
L4:
	.dbline -2
L3:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym l temp 1 c
	.dbend
	.area vector(rom, abs)
	.org 52
	jmp _uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
	.even
_uart0_tx_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 103
;  	}
;  }
; 
; }
; 
; #pragma interrupt_handler uart0_tx_isr:14
; void uart0_tx_isr(void)
; {
	.dbline 104
;  	if (flag == OK){
	lds R24,_flag
	cpi R24,1
	breq X9
	xjmp L26
X9:
	.dbline 104
	.dbline 105
; 	   PORTC = 0xff;
	ldi R24,255
	out 0x15,R24
	.dbline 106
	lds R16,_n
	clr R17
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L31
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L32
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L33
	cpi R16,4
	ldi R30,0
	cpc R17,R30
	breq L34
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	breq L36
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	breq L38
	xjmp L29
X8:
	.dbline 106
; 	   switch (n){
L31:
	.dbline 107
; 	   		  case 1: n++;UDR = TSTA2;  break; 			   //头2
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 107
	ldi R24,76
	out 0xc,R24

⌨️ 快捷键说明

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