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

📄 main.s

📁 mega16的rs232通讯程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 107
	xjmp L29
L32:
	.dbline 108
; 			  case 2: n++;UDR = DataT - len;  break;	   //长度
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 108
	lds R2,_len
	clr R3
	ldi R24,175
	ldi R25,0
	sub R24,R2
	sbc R25,R3
	out 0xc,R24
	.dbline 108
	xjmp L29
L33:
	.dbline 109
; 			  case 3: n++;UDR = RxBuffer[0];  break;	
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 109
	lds R2,_RxBuffer
	out 0xc,R2
	.dbline 109
	xjmp L29
L34:
	.dbline 110
; 			  case 4: n++; UDR = RxBuffer[1]; break;	
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 110
	lds R2,_RxBuffer+1
	out 0xc,R2
	.dbline 110
	xjmp L29
L36:
	.dbline 111
; 			  case 5: n++;UDR = RxBuffer[2];  break;	
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 111
	lds R2,_RxBuffer+2
	out 0xc,R2
	.dbline 111
	xjmp L29
L38:
	.dbline 112
; 			  case 6: n=0; flag = NG;UDR = RxBuffer[3]; break;	   //data
	clr R2
	sts _n,R2
	.dbline 112
	sts _flag,R2
	.dbline 112
	lds R2,_RxBuffer+3
	out 0xc,R2
	.dbline 112
	.dbline 114
; 			//  case 6: UDR = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16  + DataT - len; n = 0; break;//校验
; 			  default:break;
L29:
	.dbline 116
L26:
	.dbline -2
L25:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 121
; 	   }
; 	   }
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 123
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 124
;  port_init();
	xcall _port_init
	.dbline 125
;  uart0_init();
	xcall _uart0_init
	.dbline 127
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 128
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 129
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 130
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_buf _check_buf fc
;              i -> R20
;            num -> R18
;    CheckBuffer -> R16,R17
	.even
_check_buf::
	xcall push_gset1
	.dbline -1
	.dbline 139
;  //all peripherals are now initialized
; }
; /*****************************************************
; unsigned char check_buf( unsigned char *CheckBuffer)
; 检测命令是否符合要求
; 
; *****************************************************/
; 
; unsigned char check_buf( unsigned char *CheckBuffer,unsigned char num){
	.dbline 141
	clr R20
	xjmp L45
L42:
	.dbline 141
; 		  unsigned char i;
; 		  for (i = 0;i < num; i++){
	.dbline 142
; 		  	  if (CheckBuffer[i] != RxBuffer[i])
	ldi R24,<_RxBuffer
	ldi R25,>_RxBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	mov R30,R20
	clr R31
	add R30,R16
	adc R31,R17
	ldd R3,z+0
	cp R3,R2
	breq L46
	.dbline 143
; 			  	 break;
	xjmp L44
L46:
	.dbline 144
L43:
	.dbline 141
	inc R20
L45:
	.dbline 141
	cp R20,R18
	brlo L42
L44:
	.dbline 145
; 		  }
; 		  if (i == num)
	cp R20,R18
	brne L48
	.dbline 146
; 		  	 return OK;
	ldi R16,1
	xjmp L41
L48:
	.dbline 148
; 		  else 
; 		  	 return NG;
	clr R16
	.dbline -2
L41:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r num 18 c
	.dbsym r CheckBuffer 16 pc
	.dbend
	.dbfunc e check_com _check_com fc
;              i -> R20
	.even
_check_com::
	xcall push_gset1
	.dbline -1
	.dbline 151
; }
; 
; unsigned char check_com(){
	.dbline 153
	lds R20,_len
	clr R21
	cpi R20,144
	ldi R30,0
	cpc R21,R30
	brne X12
	xjmp L69
X12:
	cpi R20,145
	ldi R30,0
	cpc R21,R30
	brne X13
	xjmp L69
X13:
	cpi R20,146
	ldi R30,0
	cpc R21,R30
	brne X14
	xjmp L69
X14:
	cpi R20,147
	ldi R30,0
	cpc R21,R30
	brne X15
	xjmp L69
X15:
	cpi R20,148
	ldi R30,0
	cpc R21,R30
	breq L54
	xjmp L51
X10:
	.dbline 153
; 		 unsigned char i;
; 		 switch (len){
L54:
	.dbline 154
; 		 		case COMM: switch (RxBuffer[0]){
	lds R20,_RxBuffer
	clr R21
	cpi R20,131
	ldi R30,0
	cpc R21,R30
	breq L61
	ldi R24,131
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L68
L67:
	cpi R20,125
	ldi R30,0
	cpc R21,R30
	breq L64
	xjmp L77
L68:
	cpi R20,224
	ldi R30,0
	cpc R21,R30
	breq L58
	xjmp L77
X11:
	.dbline 154
L58:
	.dbline 155
; 					 	   		  case En: if (check_buf(Enter,4) == OK)
	ldi R18,4
	ldi R16,<_Enter
	ldi R17,>_Enter
	xcall _check_buf
	cpi R16,1
	breq X16
	xjmp L77
X16:
	.dbline 156
; 							  	  	   	    comcheck = ENTER;
	clr R2
	sts _comcheck,R2
	.dbline 157
; 											break;
	xjmp L77
L61:
	.dbline 158
; 								  case Run: if(check_buf(RunBuffer,2) == OK)
	ldi R18,2
	ldi R16,<_RunBuffer
	ldi R17,>_RunBuffer
	xcall _check_buf
	cpi R16,1
	brne L77
	.dbline 159
; 								  	   		{comcheck = RUN;
	.dbline 159
	ldi R24,1
	sts _comcheck,R24
	.dbline 162
; 											 
; 											 //runtask(RxBuffer);
; 											}
	.dbline 163
; 											break;
	xjmp L77
L64:
	.dbline 164
; 								  case Stop: if(check_buf(StopBuffer,2) == OK)
	ldi R18,2
	ldi R16,<_StopBuffer
	ldi R17,>_StopBuffer
	xcall _check_buf
	cpi R16,1
	brne L77
	.dbline 165
; 								  	   		{comcheck = STOP;
	.dbline 165
	ldi R24,2
	sts _comcheck,R24
	.dbline 168
; 											//stoptask(RxBuffer);
; 											 
; 											}
	.dbline 169
; 											break;
	.dbline 170
; 								  default:  break;
	.dbline 171
; 								  }break;
	xjmp L77
L69:
	.dbline 175
; 				case ONE:
; 				case TWO:
; 				case THREE:
; 				case FOUR: if (check_buf(TxBuffer,4) == OK)
	ldi R18,4
	ldi R16,<_TxBuffer
	ldi R17,>_TxBuffer
	xcall _check_buf
	cpi R16,1
	brne L77
	.dbline 176
	.dbline 176
	clr R20
	xjmp L75
L72:
	.dbline 176
	ldi R24,<_Enter
	ldi R25,>_Enter
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_RxBuffer
	ldi R25,>_RxBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L73:
	.dbline 176
	inc R20
L75:
	.dbline 176
; 					 	  	{for (i = 0;i < 4;i++) RxBuffer[i] = Enter[i];
	cpi R20,4
	brlo L72
	.dbline 177
; 							 }
	.dbline 179
; 						    //UDR = TSTA1;
; 						    break;
	xjmp L77
L51:
	.dbline 180
; 				default: PORTC = 0xf0;break;						   
	ldi R24,240
	out 0x15,R24
	.dbline 180
L76:
	.dbline 182
L77:
	.dbline 182
; 		 }
; 		 while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L76
	.dbline 183
; 		 n=1;
	ldi R24,1
	sts _n,R24
	.dbline 184
; 		 UDR = TSTA1;
	ldi R24,107
	out 0xc,R24
	.dbline -2
L50:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 188
; 		
; 
; }
; void main(){
	.dbline 189
;  n = 0;
	clr R2
	sts _n,R2
	.dbline 190
;  flag = NG;
	sts _flag,R2
	.dbline 191
;  init_devices();
	xcall _init_devices
	xjmp L81
L80:
	.dbline 192
;  while(1){
	.dbline 193
;  		  if (flag == OK && n == 0)
	lds R24,_flag
	cpi R24,1
	brne L83
	lds R2,_n
	tst R2
	brne L83
	.dbline 194
; 	   	  check_com();
	xcall _check_com
L83:
	.dbline 196
L81:
	.dbline 192
	xjmp L80
X17:
	.dbline -2
L79:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\ly\mega\m16rs\main.c
_comcheck::
	.blkb 1
	.dbsym e comcheck _comcheck c
_TxBuffer::
	.blkb 4
	.dbsym e TxBuffer _TxBuffer A[4:4]c
_flag:
	.blkb 1
	.dbsym s flag _flag c
_len:
	.blkb 1
	.dbsym s len _len c

⌨️ 快捷键说明

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