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

📄 bjqd.lst

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04EB 940E08FF  CALL	_serial_init
(0654)   adc_init();
    04ED DD8A      RCALL	_adc_init
(0655)   int0_init();
    04EE DD56      RCALL	_int0_init
(0656)   cal_timer1(speed);
    04EF 91000081  LDS	R16,speed
    04F1 91100082  LDS	R17,speed+1
    04F3 DE77      RCALL	_cal_timer1
(0657)   GIFR=0;
    04F4 2422      CLR	R2
    04F5 BE2A      OUT	0x3A,R2
(0658)   TIFR=0;
    04F6 BE28      OUT	0x38,R2
(0659)   SEI(); 
    04F7 9478      BSET	7
(0660)   delay_ms(50);
    04F8 E302      LDI	R16,0x32
    04F9 E010      LDI	R17,0
    04FA 940E0563  CALL	_delay_ms
(0661)   i_disen();
    04FC DE2A      RCALL	_i_disen
(0662)   job_att(0);
    04FD 2700      CLR	R16
    04FE 940E0880  CALL	_job_att
(0663)   //临时
(0664)   state2|=0b00000010;//进入计算机控制状态
    0500 918000F5  LDS	R24,state2
    0502 6082      ORI	R24,2
    0503 938000F5  STS	state2,R24
    0505 C05B      RJMP	0x0561
(0665)   while(1)					//按键循环处理
(0666)      {
(0667)         job_att(1);					  //485
    0506 E001      LDI	R16,1
    0507 940E0880  CALL	_job_att
(0668) 		in_out_number=out_pull; 
    0509 E082      LDI	R24,2
    050A 93800064  STS	in_out_number,R24
(0669) 	        switch (in_out_number)  
    050C 2F48      MOV	R20,R24
    050D 2755      CLR	R21
    050E 3042      CPI	R20,2
    050F E0E0      LDI	R30,0
    0510 075E      CPC	R21,R30
    0511 F081      BEQ	0x0522
    0512 3043      CPI	R20,3
    0513 E0E0      LDI	R30,0
    0514 075E      CPC	R21,R30
    0515 F009      BEQ	0x0517
    0516 C047      RJMP	0x055E
(0670) 			   {          
(0671) 			   case out_v :				   	  //外控电压
(0672) 			      if (in_out_state!=out_v)
    0517 91800065  LDS	R24,in_out_state
    0519 3083      CPI	R24,3
    051A F029      BEQ	0x0520
(0673) 				     {
(0674) 					 in_out_state=out_v;
    051B E083      LDI	R24,3
    051C 93800065  STS	in_out_state,R24
(0675) 					 out_ctrol();
    051E DEC0      RCALL	_out_ctrol
(0676) 					 pull_stop();
    051F DD3D      RCALL	_pull_stop
(0677) 					 }
(0678) 				  adc_ctrol();
    0520 DECA      RCALL	_adc_ctrol
(0679) 				  break;  
    0521 C03C      RJMP	0x055E
(0680) 			   case out_pull:
(0681) 			      if (in_out_state!=out_pull)
    0522 91800065  LDS	R24,in_out_state
    0524 3082      CPI	R24,2
    0525 F029      BEQ	0x052B
(0682) 				    {
(0683) 					in_out_state=out_pull;
    0526 E082      LDI	R24,2
    0527 93800065  STS	in_out_state,R24
(0684) 					timer2_init();
    0529 DD16      RCALL	_timer2_init
(0685) 					pull_start();
    052A DD21      RCALL	_pull_start
(0686) 					}
(0687) 				  if (speed_pull>2400)
    052B E680      LDI	R24,0x60
    052C E099      LDI	R25,0x9
    052D 90200060  LDS	R2,speed_pull
    052F 90300061  LDS	R3,speed_pull+1
    0531 1582      CP	R24,R2
    0532 0593      CPC	R25,R3
    0533 F420      BCC	0x0538
(0688) 				    {speed_pull=2400;}
    0534 93900061  STS	speed_pull+1,R25
    0536 93800060  STS	speed_pull,R24
(0689) 				  if(speed_pull<=4)
    0538 E084      LDI	R24,4
    0539 E090      LDI	R25,0
    053A 90200060  LDS	R2,speed_pull
    053C 90300061  LDS	R3,speed_pull+1
    053E 1582      CP	R24,R2
    053F 0593      CPC	R25,R3
    0540 F020      BCS	0x0545
(0690) 				    {speed_pull=4;}
    0541 93900061  STS	speed_pull+1,R25
    0543 93800060  STS	speed_pull,R24
(0691) 				  //cal_timer1();
(0692) 				  speed_slow(speed,speed_pull/4);
    0545 91200060  LDS	R18,speed_pull
    0547 91300061  LDS	R19,speed_pull+1
    0549 9536      LSR	R19
    054A 9527      ROR	R18
    054B 9536      LSR	R19
    054C 9527      ROR	R18
    054D 91000081  LDS	R16,speed
    054F 91100082  LDS	R17,speed+1
    0551 DE00      RCALL	_speed_slow
(0693) 				  speed=speed_pull/4;
    0552 90200060  LDS	R2,speed_pull
    0554 90300061  LDS	R3,speed_pull+1
    0556 9436      LSR	R3
    0557 9427      ROR	R2
    0558 9436      LSR	R3
    0559 9427      ROR	R2
    055A 92300082  STS	speed+1,R3
    055C 92200081  STS	speed,R2
(0694) 			   default :
(0695) 	  		   	  break;
(0696) 			   }
(0697) 	 out_key();
    055E 940E0929  CALL	_out_key
(0698)      key_disposal();
    0560 DEAA      RCALL	_key_disposal
    0561 CFA4      RJMP	0x0506
    0562 9508      RET
_delay_ms:
  j                    --> R20
  time                 --> R16
    0563 940E0A2B  CALL	push_gset1
FILE: C:\BJQD\delay.c
(0001) 
(0002) /****************************************************
(0003)       毫秒延时函数,对应晶振频率为8MHZ  
(0004) *****************************************************/
(0005) void delay_ms(unsigned int time)
(0006) {
(0007) unsigned int j;
(0008) do
(0009)   {
(0010)   time--;
    0565 5001      SUBI	R16,1
    0566 4010      SBCI	R17,0
(0011)   for (j=1;j<=200;j++);
    0567 E041      LDI	R20,1
    0568 E050      LDI	R21,0
    0569 C002      RJMP	0x056C
    056A 5F4F      SUBI	R20,0xFF
    056B 4F5F      SBCI	R21,0xFF
    056C EC88      LDI	R24,0xC8
    056D E090      LDI	R25,0
    056E 1784      CP	R24,R20
    056F 0795      CPC	R25,R21
    0570 F7C8      BCC	0x056A
(0012)   }
(0013) while (time>1);
    0571 E081      LDI	R24,1
    0572 E090      LDI	R25,0
    0573 1780      CP	R24,R16
    0574 0791      CPC	R25,R17
    0575 F378      BCS	0x0565
    0576 940E0A2E  CALL	pop_gset1
    0578 9508      RET
(0014) }
(0015) 
(0016) /***************************************
(0017)       微秒延时程序,对应晶振频率为8MHZ  
(0018) ***************************************/
(0019) void delay_us(unsigned int time)
(0020) {
(0021) unsigned int j;
(0022) do
(0023)   {
(0024)   time--;
_delay_us:
  j                    --> Y+1
  time                 --> R16
    0579 5001      SUBI	R16,1
    057A 4010      SBCI	R17,0
(0025)   }
(0026) while (time>0);
    057B 3000      CPI	R16,0
    057C 0701      CPC	R16,R17
    057D F7D9      BNE	0x0579
    057E 9508      RET
_serialti_int:
  i                    --> Y+1
    057F 922A      ST	R2,-Y
    0580 923A      ST	R3,-Y
    0581 938A      ST	R24,-Y
    0582 939A      ST	R25,-Y
    0583 93EA      ST	R30,-Y
    0584 93FA      ST	R31,-Y
    0585 B62F      IN	R2,0x3F
    0586 922A      ST	R2,-Y
FILE: C:\BJQD\comm.c
(0001) /*******************************************************
(0002) /*ICC-AVR application builder : 2004-3-11 12:02:11
(0003) // Target : atMega16
(0004) // Crystal: 8.0000Mhz
(0005) 通讯模块  单工双向485接口
(0006) ******************************************************/
(0007) #include <string.h>
(0008) #include <iom16v.h>
(0009) #include <math.h>
(0010) #include <stdlib.h>
(0011) #include <macros.h>
(0012) #include <eeprom.h>
(0013) #include "eeprom_l.h"
(0014) #include "comm.h"
(0015) #include "main.h"
(0016) #include "delay.h"
(0017) #include "key.h"
(0018) 	 
(0019) #pragma data:data
(0020) unsigned char state2;
(0021) //state2.0 disable_data    //1:输入数据无效,0有效;
(0022) //state2.1 remote		   //1:遥控输入有效,0:本地输入有效
(0023) //state2.7 p99			   //P99指令使能
(0024) unsigned char state1;		   				   					  
(0025) //state1.2 PE  
(0026) //state1.3 DOR
(0027) //state1.4 FE
(0028) //state1.5 
(0029) //state1.6 
(0030) unsigned char pump_tab;		//机器号								   
(0031) extern unsigned int speed;
(0032) extern unsigned char state_other;
(0033) extern unsigned char state0;
(0034) extern unsigned char key;
(0035) extern unsigned char in_out_number;
(0036) extern unsigned char state;
(0037) //state0.5接收消息有效标志
(0038) 
(0039) /* 通信变量定义 */
(0040) char txd_frm[15];         //物理层发送缓冲区
(0041) char txd_frm_len;          //物理层发送数据长度
(0042) char rxd_frm[15];         //物理层接收缓冲区
(0043) char rxd_frm_len;          //物理层接收数据长度
(0044) char tx485_busy;		   //485发送工作判忙
(0045) char txd_cnt;			   //发送数据计数器
(0046) char rxd_cnt;			   //接收数据计数器
(0047) char rxd_ins_flag;		   //一帧接收数据中有E8或E9标志
(0048) char txd_ins_flag;		   //一帧发送数据中有E8或E9标志
(0049) char txd_ins_data;		   //发送数据
(0050) char rxd_data;			   //接收数据
(0051) char mac_txd_th;		   //发送状态 0发送完毕,1发送帧头,2发送中间数据
(0052) char rxd_h_ok;			   //接收开始标志
(0053) char fcs1;				   //异或校验
(0054) char rxd_mesg_addr;		   //接收地址
(0055) char rxd_mesg_len;		   //应用层接收数据长度
(0056) char rxd_mesg[15];		   //应用层接收数据缓冲区
(0057) char txd_mesg_addr;		   //发送地址
(0058) char txd_mesg_len;		   //应用层发送数据长度
(0059) char txd_mesg[15];		   //应用层发送数据缓冲区
(0060) /*********任务管理*************/
(0061) char pri[16];
(0062) char act[16];           //任务寄存器
(0063) char rxd_llc_job;       //物理层收任务寄存器
(0064) char txd_llc_job;       //物理层发任务寄存器
(0065) char rs485_app_job;     //应用层任务寄存器
(0066) char att_n_max;
(0067) extern struct cal
(0068)        {
(0069) 	   unsigned  int       test_time;
(0070) 	   unsigned  long int  dispvol;
(0071) 	   unsigned  long int  test_dispvol;
(0072) 	   float               dispk;
(0073) 	   unsigned  long int  run_time;
(0074) 	   };
(0075) extern struct cal cal0;
(0076) /*****************************************************************
(0077) 功能: serial_int
(0078) 描述: 运行串行口 FSAs.
(0079) 参数: 无.
(0080) 返回无.
(0081) 影响无.
(0082) *****************************************************************/
(0083) #pragma interrupt_handler serialri_int:iv_USART_RX
(0084) #pragma interrupt_handler serialti_int:iv_USART_TX
(0085) 
(0086) /* 通信物理层发送中断程序模块 */
(0087) void serialti_int(void)
(0088) { 
(0089) 	char i;
(0090) 	    UCSRA=RS485_UCSRA|0b01000000;   /*清发送完中断标志位*/
    0587 E480      LDI	R24,0x40
    0588 B98B      OUT	0x0B,R24
(0091) 		if(mac_txd_th==1)
    0589 918000CB  LDS	R24,mac_txd_th
    058B 3081      CPI	R24,1
    058C F471      BNE	0x059B
(0092) 		{ UDR=0xe9;
    058D EE89      LDI	R24,0xE9
    058E B98C      OUT	0x0C,R24
(0093) 		  txd_cnt=0;
    058F 2422      CLR	R2
    0590 922000D1  STS	txd_cnt,R2
(0094) 		  txd_ins_flag=0;
    0592 922000CE  STS	txd_ins_flag,R2
(0095) 		  tx485_busy=1;
    0594 E081      LDI	R24,1
    0595 938000D2  STS	tx485_busy,R24
(0096) 		  mac_txd_th=2;
    0597 E082      LDI	R24,2
    0598 938000CB  STS	mac_txd_th,R24
(0097) 		}
    059A C051      RJMP	0x05EC
(0098) 		else
(0099) 		{ if(mac_txd_th==2)
    059B 918000CB  LDS	R24,mac_txd_th
    059D 3082      CPI	R24,2
    059E F009      BEQ	0x05A0
    059F C046      RJMP	0x05E6
(0100) 		  { if(txd_ins_flag==1)
    05A0 918000CE  LDS	R24,txd_ins_flag
    05A2 3081      CPI	R24,1
    05A3 F439      BNE	0x05AB
(0101) 		    { txd_ins_flag=0;
    05A4 2422      CLR	R2
    05A5 922000CE  STS	txd_ins_flag,R2
(0102) 			  UDR=txd_ins_data;
    05A7 902000CD  LDS	R2,txd_ins_data
    05A9 B82C      OUT	0x0C,R2
(0103) 			}
    05AA C041      RJMP	0x05EC
(0104) 			else
(0105) 			{ if(txd_cnt<=(txd_frm_len-1))
    05AB 918000E3  LDS	R24,txd_frm_len
    05AD 5081      SUBI	R24,1
    05AE 902000D1  LDS	R2,txd_cnt
    05B0 1582      CP	R24,R2
    05B1 F168      BCS	0x05DF
(0106) 			  { if(txd_frm[txd_cnt]==0xe8||txd_frm[txd_cnt]==0xe9)
    05B2 EE84      LDI	R24,0xE4
    05B3 E090      LDI	R25,0
    05B4 2DE2      MOV	R30,R2
    05B5 27FF      CLR	R31
    05B6 0FE8      ADD	R30,R24
    05B7 1FF9      ADC	R31,R25
    05B8 8020      LDD	R2,Z+0
    05B9 2433      CLR	R3
    05BA 2D82      MOV	R24,R2
    05BB 3E88      CPI	R24,0xE8
    05BC F011      BEQ	0x05BF
    05BD 3E89      CPI	R24,0xE9
    05BE F489      BNE	0x05D0
(0107) 			    { txd_ins_flag=1;
    05BF E081      LDI	R24,1
    05C0 938000CE  STS	txd_ins_flag,R24
(0108)                   txd_ins_data=txd_frm[txd_cnt]-0xe8;
    05C2 EE84      LDI	R24,0xE4
    05C3 E090      LDI	R25,0
    05C4 91E000D1  LDS	R30,txd_cnt
    05C6 27FF      CLR	R31
    05C7 0FE8      ADD	R30,R24
    05C8 1FF9      ADC	R31,R25
    05C9 8180      LDD	R24,Z+0
    05CA 5E88      SUBI	R24,0xE8
    05CB 938000CD  STS	txd_ins_data,R24
(0109)                   UDR=0xe8;
    05CD EE88      LDI	R24,0xE8
    05CE B98C      OUT	0x0C,R24
(0110) 				}
    05CF C009      RJMP	0x05D9
(0111) 				else
(0112) 				{ UDR=txd_frm[txd_cnt];}
    05D0 EE84      LDI	R24,0xE4
    05D1 E090      LDI	R25,0
    05D2 91E000D1  LDS	R30,txd_cnt
    05D4 27FF      CLR	R31
    05D5 0FE8      ADD	R30,R24
    05D6 1FF9      ADC	R31,R25
    05D7 8020      LDD	R2,Z+0
    05D8 B82C      OUT	0x0C,R2
(0113) 				txd_cnt=txd_cnt+1;
    05D9 918000D1  LDS	R24,txd_cnt
    05DB 5F8F      SUBI	R24,0xFF
    05DC 938000D1  STS	txd_cnt,R24
(0114) 			  }
    05DE C00D      RJMP	0x05EC
(0115) 			  else
(0116) 			  { tx485_busy=0;
    05DF 2422      CLR	R2
    05E0 922000D2  STS	tx485_busy,R2
(0117) 			    mac_txd_th=0;
    05E2 922000CB  STS	mac_txd_th,R2
(0118) 				PORTC&=~(1<<DE_485);
    05E4 98A8      CBI	0x15,0
(0119) 			  }
(0120) 			}
(0121) 		  }
    05E5 C006      RJMP	0x05EC
(0122) 		  else
(0123) 		  { tx485_busy=0;
    05E6 2422      CLR	R2
    05E7 922000D2  STS	tx485_busy,R2
(0124) 		    mac_txd_th=0;
    05E9 922000CB  STS	mac_txd_th,R2
(0125) 			PORTC&=~(1<<DE_485);
    05EB 98A8      CBI	0x15,0
(0126) 		  }
(0127) 		}
    05EC 9029      LD	R2,Y+
    05ED BE2F      OUT	0x3F,R

⌨️ 快捷键说明

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