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

📄 comm.s

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 S
📖 第 1 页 / 共 2 页
字号:
	sts _txd_mesg+1,R24
	.dbline 223
; 		 txd_mesg[2]='D';
	ldi R24,68
	sts _txd_mesg+2,R24
	.dbline 224
; 		 act[txd_llc_job]=1;
	ldi R24,<_act
	ldi R25,>_act
	lds R30,_txd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 225
; 		 goto rs485_app_ret;
	xjmp L57
L51:
	.dbline 228
; 	   }
; 	   
; 	   if((rxd_mesg[0]=='W')&&(rxd_mesg[1]=='I')&&(rxd_mesg[2]=='D'))   /* 设置设备地址命令e9 1f 04 57 49 44 01 40 */
	lds R24,_rxd_mesg
	cpi R24,87
	brne L58
	lds R24,_rxd_mesg+1
	cpi R24,73
	brne L58
	lds R24,_rxd_mesg+2
	cpi R24,68
	brne L58
	.dbline 229
; 	   { pump_tab=rxd_mesg[3];
	.dbline 229
	lds R2,_rxd_mesg+3
	sts _pump_tab,R2
L63:
	.dbline 230
; 		 do {temp=EEPROMwrite(pump_tab_romaddr,pump_tab);}
	.dbline 230
	lds R18,_pump_tab
	ldi R16,6
	ldi R17,0
	xcall _EEPROMwrite
	movw R10,R16
	.dbline 230
L64:
	.dbline 231
; 	     while(temp>0);
	tst R10
	brne L63
	tst R11
	brne L63
X3:
	.dbline 232
; 		 if(rxd_mesg_addr!=BROADCAST_ADDR)
	lds R24,_rxd_mesg_addr
	cpi R24,31
	brne X6
	xjmp L57
X6:
	.dbline 233
; 		 { txd_mesg_addr=pump_tab;
	.dbline 233
	lds R2,_pump_tab
	sts _txd_mesg_addr,R2
	.dbline 234
; 		   txd_mesg_len=3;
	ldi R24,3
	sts _txd_mesg_len,R24
	.dbline 235
; 		   txd_mesg[0]='W';
	ldi R24,87
	sts _txd_mesg,R24
	.dbline 236
; 		   txd_mesg[1]='I';
	ldi R24,73
	sts _txd_mesg+1,R24
	.dbline 237
; 		   txd_mesg[2]='D';
	ldi R24,68
	sts _txd_mesg+2,R24
	.dbline 238
; 		   act[txd_llc_job]=1;
	ldi R24,<_act
	ldi R25,>_act
	lds R30,_txd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 239
; 		 }
	.dbline 240
; 		 goto rs485_app_ret;
	xjmp L57
L58:
	.dbline 243
; 	   }
; 
; 	   if((rxd_mesg_addr!=BROADCAST_ADDR)&&(rxd_mesg[0]=='R')&&(rxd_mesg[1]=='J'))   // 读取运行参数命令e9 01 2 52 47 16 
	lds R24,_rxd_mesg_addr
	cpi R24,31
	brne X7
	xjmp L70
X7:
	lds R24,_rxd_mesg
	cpi R24,82
	breq X8
	xjmp L70
X8:
	lds R24,_rxd_mesg+1
	cpi R24,74
	breq X9
	xjmp L70
X9:
	.dbline 244
; 	   { //if(in_out_number<2)
	.dbline 246
; 	     //{ 
; 		   txd_mesg_addr=pump_tab;
	lds R2,_pump_tab
	sts _txd_mesg_addr,R2
	.dbline 247
; 		   txd_mesg_len=6;
	ldi R24,6
	sts _txd_mesg_len,R24
	.dbline 248
; 		   txd_mesg[0]='R';
	ldi R24,82
	sts _txd_mesg,R24
	.dbline 249
; 		   txd_mesg[1]='J';
	ldi R24,74
	sts _txd_mesg+1,R24
	.dbline 250
; 		   txd_mesg[2]=(speed>>8);
	lds R2,_speed
	lds R3,_speed+1
	mov R2,R3
	clr R3
	sts _txd_mesg+2,R2
	.dbline 251
; 		   txd_mesg[3]=speed;
	lds R2,_speed
	lds R3,_speed+1
	sts _txd_mesg+3,R2
	.dbline 252
; 		   txd_mesg[4]=0;
	clr R2
	sts _txd_mesg+4,R2
	.dbline 253
; 		   if (state&(1<<RUN_STOP))
	lds R2,_state
	sbrs R2,3
	rjmp L77
	.dbline 254
; 		     {txd_mesg[4]|=0b00000001;}
	.dbline 254
	lds R24,_txd_mesg+4
	ori R24,1
	sts _txd_mesg+4,R24
	.dbline 254
	xjmp L78
L77:
	.dbline 256
; 		   else
; 		     {txd_mesg[4]&=0b11111110;}
	.dbline 256
	lds R24,_txd_mesg+4
	andi R24,254
	sts _txd_mesg+4,R24
	.dbline 256
L78:
	.dbline 257
; 		   txd_mesg[5]=0;
	clr R2
	sts _txd_mesg+5,R2
	.dbline 258
; 		   if (state&(1<<CW_CCW))
	lds R2,_state
	sbrs R2,0
	rjmp L82
	.dbline 259
; 		     {txd_mesg[5]&=0b11111110;}
	.dbline 259
	lds R24,_txd_mesg+5
	andi R24,254
	sts _txd_mesg+5,R24
	.dbline 259
	xjmp L83
L82:
	.dbline 261
; 		   else
; 		     {txd_mesg[5]|=0b00000001;}		 
	.dbline 261
	lds R24,_txd_mesg+5
	ori R24,1
	sts _txd_mesg+5,R24
	.dbline 261
L83:
	.dbline 262
; 		   act[txd_llc_job]=1;
	ldi R24,<_act
	ldi R25,>_act
	lds R30,_txd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 266
; 		 //}
; 		 //else
; 		 //{ act[rs485_app_job]=1;}
; 		 goto rs485_app_ret;
	xjmp L57
L70:
	.dbline 269
; 	   }
;        
; 	   if((rxd_mesg[0]=='W')&&(rxd_mesg[1]=='J'))   // 设置运行参数命令 
	lds R24,_rxd_mesg
	cpi R24,87
	breq X10
	xjmp L86
X10:
	lds R24,_rxd_mesg+1
	cpi R24,74
	breq X11
	xjmp L86
X11:
	.dbline 270
; 	   { if(in_out_number<2)  //内控控制
	.dbline 270
	lds R24,_in_out_number
	cpi R24,2
	brlo X12
	xjmp L57
X12:
	.dbline 271
; 	     { //delay_cortrol_job();	   
	.dbline 272
;            all_stop();//停止所有运行 
	xcall _all_stop
	.dbline 273
; 		   rxd_mesg_temp=rxd_mesg[2];//必须如此,rxd_mesg[4]进行常整运算时有错
	lds R2,_rxd_mesg+2
	clr R3
	clr R4
	clr R5
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 274
; 		   speed=rxd_mesg_temp*256+rxd_mesg[3];
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R20,0
	ldi R21,1
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R2,R16
	movw R4,R18
	lds R6,_rxd_mesg+3
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	sts _speed+1,R3
	sts _speed,R2
	.dbline 275
; 		   if ((speed==0)||(speed>600))
	tst R2
	brne X4
	tst R3
	breq L95
X4:
	ldi R24,600
	ldi R25,2
	lds R2,_speed
	lds R3,_speed+1
	cp R24,R2
	cpc R25,R3
	brsh L93
L95:
	.dbline 276
; 		     {speed=1;}
	.dbline 276
	ldi R24,1
	ldi R25,0
	sts _speed+1,R25
	sts _speed,R24
	.dbline 276
L93:
	.dbline 277
; 		   cal_timer1(speed);
	lds R16,_speed
	lds R17,_speed+1
	xcall _cal_timer1
	.dbline 278
; 		   EEPROMWriteWord(speed_romaddr,&speed);
	ldi R18,<_speed
	ldi R19,>_speed
	ldi R16,3
	ldi R17,0
	xcall _EEPROMWriteWord
	.dbline 279
; 		   if (rxd_mesg[4]&0b00000001)
	lds R2,_rxd_mesg+4
	sbrs R2,0
	rjmp L96
	.dbline 280
; 		     {state|=(1<<RUN_STOP);}
	.dbline 280
	lds R24,_state
	ori R24,8
	sts _state,R24
	.dbline 280
	xjmp L97
L96:
	.dbline 282
; 		   else
; 		     {state&=~(1<<RUN_STOP);} 
	.dbline 282
	lds R24,_state
	andi R24,247
	sts _state,R24
	.dbline 282
L97:
	.dbline 283
; 		   if (rxd_mesg[5]&0b00000001)
	lds R2,_rxd_mesg+5
	sbrs R2,0
	rjmp L99
	.dbline 284
; 		     {state&=~(1<<CW_CCW);}
	.dbline 284
	lds R24,_state
	andi R24,254
	sts _state,R24
	.dbline 284
	xjmp L100
L99:
	.dbline 286
; 		   else
; 		     {state|=(1<<CW_CCW);}
	.dbline 286
	lds R24,_state
	ori R24,1
	sts _state,R24
	.dbline 286
L100:
L102:
	.dbline 287
; 		   do {temp=EEPROMwrite(state_romaddr,state);}
	.dbline 287
	lds R18,_state
	ldi R16,5
	ldi R17,0
	xcall _EEPROMwrite
	movw R10,R16
	.dbline 287
L103:
	.dbline 288
; 	           while(temp>0);           
	tst R10
	brne L102
	tst R11
	brne L102
X5:
	.dbline 289
; 		   state_init();
	xcall _state_init
	.dbline 291
; 		   
; 		   if(rxd_mesg_addr!=BROADCAST_ADDR)
	lds R24,_rxd_mesg_addr
	cpi R24,31
	breq L57
	.dbline 292
; 		   { txd_mesg_addr=pump_tab;
	.dbline 292
	lds R2,_pump_tab
	sts _txd_mesg_addr,R2
	.dbline 293
; 		     txd_mesg_len=2;
	ldi R24,2
	sts _txd_mesg_len,R24
	.dbline 294
; 			 txd_mesg[0]='W';
	ldi R24,87
	sts _txd_mesg,R24
	.dbline 295
; 			 txd_mesg[1]='J';
	ldi R24,74
	sts _txd_mesg+1,R24
	.dbline 296
; 			 act[txd_llc_job]=1;
	ldi R24,<_act
	ldi R25,>_act
	lds R30,_txd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 297
; 		   }
	.dbline 298
; 		 }
	.dbline 299
; 		 goto rs485_app_ret;
L86:
L57:
	.dbline 301
; 	   }        
; rs485_app_ret:;
	.dbline -2
L50:
	adiw R28,8
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l flow_temp 4 l
	.dbsym l fcs 1 c
	.dbsym l i 1 c
	.dbsym l rxd_mesg_temp 0 l
	.dbsym r temp 10 i
	.dbend
	.dbfunc e job_att _job_att fV
;        crrt_jn -> R20
;              i -> R22
;           step -> R20
	.even
_job_att::
	xcall push_gset3
	mov R20,R16
	.dbline -1
	.dbline 307
; 	}
; /*********************************/
; 
; /* 主调度任务程序模块 */
; void job_att(char step)
; 	{
	.dbline 309
; 	char i,crrt_jn;
; 	   if(step==0) 
	tst R20
	breq X14
	xjmp L109
X14:
	.dbline 310
; 	   { for(i=1;i<=31;i++)
	.dbline 310
	ldi R22,1
	xjmp L114
L111:
	.dbline 311
	.dbline 311
	ldi R24,<_pri
	ldi R25,>_pri
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 312
	ldi R24,<_act
	ldi R25,>_act
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 313
L112:
	.dbline 310
	inc R22
L114:
	.dbline 310
	ldi R24,31
	cp R24,R22
	brsh L111
	.dbline 314
; 	     { pri[i]=0;
; 		   act[i]=0;
; 		 }
; 		 rxd_llc_job=9;
	ldi R24,9
	sts _rxd_llc_job,R24
	.dbline 315
; 		 pri[rxd_llc_job]=95;
	ldi R24,<_pri
	ldi R25,>_pri
	lds R30,_rxd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,95
	std z+0,R24
	.dbline 316
; 		 txd_llc_job=10;
	ldi R24,10
	sts _txd_llc_job,R24
	.dbline 317
; 		 pri[txd_llc_job]=94;
	ldi R24,<_pri
	ldi R25,>_pri
	lds R30,_txd_llc_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,94
	std z+0,R24
	.dbline 318
; 		 rs485_app_job=11;
	ldi R24,11
	sts _rs485_app_job,R24
	.dbline 319
; 		 pri[rs485_app_job]=93;
	ldi R24,<_pri
	ldi R25,>_pri
	lds R30,_rs485_app_job
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,93
	std z+0,R24
	.dbline 320
; 		 att_n_max=12;
	ldi R24,12
	sts _att_n_max,R24
	.dbline 321
; 	   }
	xjmp L110
L109:
	.dbline 323
; 	   else
; 	   { crrt_jn=0;
	.dbline 323
	clr R20
	.dbline 324
; 		 for(i=1;i<=att_n_max;i++)
	ldi R22,1
	xjmp L118
L115:
	.dbline 325
; 	     { if((act[i]!=0)&&(pri[i]>pri[crrt_jn]))
	.dbline 325
	ldi R24,<_act
	ldi R25,>_act
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	breq L119
	ldi R24,<_pri
	ldi R25,>_pri
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	cp R2,R3
	brsh L119
	.dbline 326
; 		   { crrt_jn=i;}
	.dbline 326
	mov R20,R22
	.dbline 326
L119:
	.dbline 327
L116:
	.dbline 324
	inc R22
L118:
	.dbline 324
	lds R2,_att_n_max
	cp R2,R22
	brsh L115
	.dbline 328
; 		 }
; 		 switch (crrt_jn)
	mov R10,R20
	clr R11
	movw R24,R10
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	breq L124
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	breq L125
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	breq L126
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	breq L122
	xjmp L121
X13:
	.dbline 329
; 		 { 
L124:
	.dbline 330
; 		   case 9: rxd_llc_job1();
	xcall _rxd_llc_job1
	.dbline 331
; 		   break;
	xjmp L122
L125:
	.dbline 332
; 		   case 10: txd_llc_job1();
	xcall _txd_llc_job1
	.dbline 333
; 		   break;
	xjmp L122
L126:
	.dbline 334
; 		   case 11: rs485_app_job1();
	xcall _rs485_app_job1
	.dbline 335
; 		   break;
	.dbline 336
; 		   case 12: break;
L121:
L122:
	.dbline 338
L110:
	.dbline -2
L108:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r crrt_jn 20 c
	.dbsym r i 22 c
	.dbsym r step 20 c
	.dbend
	.dbfunc e serial_init _serial_init fV
	.even
_serial_init::
	.dbline -1
	.dbline 345
; 		 }
; 	   }	
; 	}
; 
; /*
; 串口初始化   
; */         
; void serial_init (void)  
; {
	.dbline 346
;   	  UBRRH=RS485_BAUDH;
	ldi R24,1
	out 0x20,R24
	.dbline 347
; 	  UBRRL=RS485_BAUDL;
	ldi R24,160
	out 0x9,R24
	.dbline 348
; 	  UCSRA=RS485_UCSRA;
	ldi R24,64
	out 0xb,R24
	.dbline 349
; 	  UCSRC=RS485_UCSRC;
	ldi R24,166
	out 0x20,R24
	.dbline 350
; 	  UCSRB=RS485_UCSRB;
	ldi R24,192
	out 0xa,R24
	.dbline 351
; 	  UCSRB=UCSRB|0b00011000;   /* 允许接收、发送 */
	in R24,0xa
	ori R24,24
	out 0xa,R24
	.dbline 352
;       state1=0;
	clr R2
	sts _state1,R2
	.dbline 353
;       DDRC|=(1<<DE_485);
	sbi 0x14,0
	.dbline 354
;       PORTC&=~(1<<DE_485);
	cbi 0x15,0
	.dbline -2
L128:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\BJQD\comm.c
_att_n_max::
	.blkb 1
	.dbsym e att_n_max _att_n_max c
_rs485_app_job::
	.blkb 1
	.dbsym e rs485_app_job _rs485_app_job c
_txd_llc_job::
	.blkb 1
	.dbsym e txd_llc_job _txd_llc_job c
_rxd_llc_job::
	.blkb 1
	.dbsym e rxd_llc_job _rxd_llc_job c
_act::
	.blkb 16
	.dbsym e act _act A[16:16]c
_pri::
	.blkb 16
	.dbsym e pri _pri A[16:16]c
_txd_mesg::
	.blkb 15
	.dbsym e txd_mesg _txd_mesg A[15:15]c
_txd_mesg_len::
	.blkb 1
	.dbsym e txd_mesg_len _txd_mesg_len c
_txd_mesg_addr::
	.blkb 1
	.dbsym e txd_mesg_addr _txd_mesg_addr c
_rxd_mesg::
	.blkb 15
	.dbsym e rxd_mesg _rxd_mesg A[15:15]c
_rxd_mesg_len::
	.blkb 1
	.dbsym e rxd_mesg_len _rxd_mesg_len c
_rxd_mesg_addr::
	.blkb 1
	.dbsym e rxd_mesg_addr _rxd_mesg_addr c
_fcs1::
	.blkb 1
	.dbsym e fcs1 _fcs1 c
_rxd_h_ok::
	.blkb 1
	.dbsym e rxd_h_ok _rxd_h_ok c
_mac_txd_th::
	.blkb 1
	.dbsym e mac_txd_th _mac_txd_th c
_rxd_data::
	.blkb 1
	.dbsym e rxd_data _rxd_data c
_txd_ins_data::
	.blkb 1
	.dbsym e txd_ins_data _txd_ins_data c
_txd_ins_flag::
	.blkb 1
	.dbsym e txd_ins_flag _txd_ins_flag c
_rxd_ins_flag::
	.blkb 1
	.dbsym e rxd_ins_flag _rxd_ins_flag c
_rxd_cnt::
	.blkb 1
	.dbsym e rxd_cnt _rxd_cnt c
_txd_cnt::
	.blkb 1
	.dbsym e txd_cnt _txd_cnt c
_tx485_busy::
	.blkb 1
	.dbsym e tx485_busy _tx485_busy c
_rxd_frm_len::
	.blkb 1
	.dbsym e rxd_frm_len _rxd_frm_len c
_rxd_frm::
	.blkb 15
	.dbsym e rxd_frm _rxd_frm A[15:15]c
_txd_frm_len::
	.blkb 1
	.dbsym e txd_frm_len _txd_frm_len c
_txd_frm::
	.blkb 15
	.dbsym e txd_frm _txd_frm A[15:15]c
_pump_tab::
	.blkb 1
	.dbsym e pump_tab _pump_tab c
_state1::
	.blkb 1
	.dbsym e state1 _state1 c
_state2::
	.blkb 1
	.dbsym e state2 _state2 c

⌨️ 快捷键说明

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