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

📄 motor.s

📁 直流电机驱动系统设计,以单片机实现电动机的调速控制.
💻 S
📖 第 1 页 / 共 2 页
字号:
	rjmp L47
L61:
	lds R24,_adress
	lds R25,_adress+1
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	breq L52
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brlt L47
L62:
	lds R24,_adress
	lds R25,_adress+1
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	breq L54
	cpi R24,14
	ldi R30,0
	cpc R25,R30
	breq L56
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	breq L58
	rjmp L47
X2:
	.dbline 112
L48:
	.dbline 112
;  {case 0x0000:Data[3]=0xE4;break;
	ldi R24,228
	sts _Data+3,R24
	.dbline 112
	rjmp L47
L50:
	.dbline 113
;   case 0x0004:Data[3]=0xE5;break;
	ldi R24,229
	sts _Data+3,R24
	.dbline 113
	rjmp L47
L52:
	.dbline 114
;   case 0x0008:Data[3]=0xE6;break;
	ldi R24,230
	sts _Data+3,R24
	.dbline 114
	rjmp L47
L54:
	.dbline 115
;   case 0x000C:Data[3]=0xE7;break;
	ldi R24,231
	sts _Data+3,R24
	.dbline 115
	rjmp L47
L56:
	.dbline 116
;   case 0x000E:Data[3]=0xE8;break;
	ldi R24,232
	sts _Data+3,R24
	.dbline 116
	rjmp L47
L58:
	.dbline 117
	ldi R24,233
	sts _Data+3,R24
	.dbline 117
	.dbline 118
L47:
	.dbline -2
	.dbline 119
;   case 0x0010:Data[3]=0xE9;break;
;   default :break;}
; }
L39:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e readdata _readdata fV
;       tempdata -> R22
;       trandata -> R20,R21
;           data -> R20
	.even
_readdata::
	rcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 123
; 
; //***************************读数据函数****************************//
; void readdata(char data)
; {int trandata;
	.dbline 125
;  char tempdata;
;  if(data==0xE)
	cpi R20,14
	brne L64
	.dbline 126
;  Eepromdata();
	rcall _Eepromdata
	rjmp L65
L64:
	.dbline 128
;  else
;  {switch(data)
	.dbline 128
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L69
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L70
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L71
	rjmp L67
X3:
	.dbline 129
L69:
	.dbline 129
;   {case 1:trandata=TCNT1;break; //读TCNT1
	in R20,0x2c
	in R21,0x2d
	.dbline 129
	rjmp L67
L70:
	.dbline 130
;    case 2:trandata=(int)(tempdata=TCNT0);break;//读TCNT0
	in R2,0x32
	mov R22,R2
	mov R20,R2
	clr R21
	.dbline 130
	rjmp L67
L71:
	.dbline 131
;    case 3:trandata=GetOutputADC();break;//读A/D转换结果
	rcall _GetOutputADC
	mov R20,R16
	mov R21,R17
	.dbline 131
	.dbline 132
;    default :break;}
L67:
	.dbline 133
;  Data[6]=(char)trandata;//数据低八位
	sts _Data+6,R20
	.dbline 134
;  Data[7]=(char)(trandata>>8);//数据高八位
	mov R2,R20
	mov R3,R21
	mov R2,R3
	clr R3
	sbrc R2,7
	com R3
	sts _Data+7,R2
	.dbline 135
; }
L65:
	.dbline 136
;  Putdata(Data);
	ldi R16,<_Data
	ldi R17,>_Data
	rcall _Putdata
	.dbline -2
	.dbline 137
; }
L63:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r tempdata 22 c
	.dbsym r trandata 20 I
	.dbsym r data 20 c
	.dbend
	.dbfunc e order _order fV
	.even
_order::
	rcall push_gset1
	.dbline -1
	.dbline 141
; 
; //***************************命令函数******************************//
; void order(void)
; {switch (Data[4])
	.dbline 141
	lds R20,_Data+4
	clr R21
	cpi R20,192
	ldi R30,0
	cpc R21,R30
	breq L79
	cpi R20,193
	ldi R30,0
	cpc R21,R30
	breq L80
	cpi R20,194
	ldi R30,0
	cpc R21,R30
	breq L81
	cpi R20,195
	ldi R30,0
	cpc R21,R30
	breq L82
	cpi R20,196
	ldi R30,0
	cpc R21,R30
	breq L83
	cpi R20,197
	ldi R30,0
	cpc R21,R30
	breq L84
	cpi R20,198
	ldi R30,0
	cpc R21,R30
	breq L85
	cpi R20,200
	ldi R30,0
	cpc R21,R30
	breq L86
	cpi R20,201
	ldi R30,0
	cpc R21,R30
	breq L87
	rjmp L76
X4:
	.dbline 142
L79:
	.dbline 142
;  {case 0xC0:PORTB=PORTB|0x04;break;    //停止
	sbi 0x18,2
	.dbline 142
	rjmp L76
L80:
	.dbline 143
;   case 0xC1:PORTB=PORTB&0xFB;break;    //启动
	in R24,0x18
	andi R24,251
	out 0x18,R24
	.dbline 143
	rjmp L76
L81:
	.dbline 145
;   case 0xC2:                           //正转
;            {PORTB=PORTB&0xFC|0x02;
	.dbline 145
	in R24,0x18
	andi R24,252
	ori R24,2
	out 0x18,R24
	.dbline 146
; 		    PORTD=PORTD&0x3F|0x40;
	in R24,0x12
	andi R24,63
	ori R24,64
	out 0x12,R24
	.dbline 147
; 			break;}
	rjmp L76
L82:
	.dbline 149
;   case 0xC3:                           //反转
;            {PORTB=PORTB&0xFC|0x01;
	.dbline 149
	in R24,0x18
	andi R24,252
	ori R24,1
	out 0x18,R24
	.dbline 150
; 		    PORTD=PORTD&0x3F|0x80;
	in R24,0x12
	andi R24,63
	ori R24,128
	out 0x12,R24
	.dbline 151
; 			break;}
	rjmp L76
L83:
	.dbline 152
;   case 0xC4:Upspeed();break;           //加速
	rcall _Upspeed
	.dbline 152
	rjmp L76
L84:
	.dbline 153
;   case 0xC5:Downspeed();break;         //减速
	rcall _Downspeed
	.dbline 153
	rjmp L76
L85:
	.dbline 155
;   case 0xC6:                           //制动
;            {PORTB=PORTB|0x03;
	.dbline 155
	in R24,0x18
	ori R24,3
	out 0x18,R24
	.dbline 156
; 		    PORTD=PORTD&0x3F;
	in R24,0x12
	andi R24,63
	out 0x12,R24
	.dbline 157
; 			break;}
	rjmp L76
L86:
	.dbline 158
;   case 0xC8:flage=1;break;             //监控
	ldi R24,1
	sts _flage,R24
	.dbline 158
	rjmp L76
L87:
	.dbline 159
	clr R2
	sts _flage,R2
	.dbline 159
	.dbline 160
L76:
	.dbline -2
	.dbline 162
;   case 0xC9:flage=0;break;             //退出监控
;   default :break;
;  }
; }
L74:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Datadisposal _Datadisposal fV
;      operation -> R20
;           temp -> R22,R23
	.even
_Datadisposal::
	rcall push_gset2
	sbiw R28,2
	.dbline -1
	.dbline 167
; 
; 
; //***************************数据处理函数**************************//
; void Datadisposal(void)
; {char operation;
	.dbline 169
;  int temp;
;  operation=Data[3];
	lds R20,_Data+3
	.dbline 170
;  temp=Data[4];
	lds R22,_Data+4
	clr R23
	.dbline 171
;  temp=temp<<8;
	mov R23,R22
	clr R22
	.dbline 172
;  adress=temp+Data[5];
	lds R2,_Data+5
	clr R3
	mov R4,R22
	mov R5,R23
	add R4,R2
	adc R5,R3
	sts _adress+1,R5
	sts _adress,R4
	.dbline 173
;  switch(operation&0x0F)
	mov R22,R20
	clr R23
	andi R22,15
	andi R23,0
	cpi R22,0
	cpc R22,R23
	breq L95
X5:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L96
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L98
	rjmp L93
X6:
	.dbline 174
L95:
	.dbline 174
;  {case 0:readdata(operation>>4);break;
	mov R16,R20
	swap R16
	andi R16,#0x0F
	rcall _readdata
	.dbline 174
	rjmp L93
L96:
	.dbline 175
;   case 1:EEPROMWriteBytes(adress,&Data[6],2);break;
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_Data+6
	ldi R19,>_Data+6
	lds R16,_adress
	lds R17,_adress+1
	rcall _EEPROMWriteBytes
	.dbline 175
	rjmp L93
L98:
	.dbline 176
	rcall _order
	.dbline 176
	.dbline 177
L93:
	.dbline -2
	.dbline 179
;   case 2:order();break;
;   default :break;
;  }
; }
L88:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r operation 20 c
	.dbsym r temp 22 I
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 183
; 
; //***************************主函数********************************//
; void main()
; {USARTInit(25);              //初始化串口             
	.dbline 183
	ldi R16,25
	ldi R17,0
	rcall _USARTInit
	.dbline 184
;  TCNT1=00;                   //定时器1初始化 
	clr R2
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline 185
;  TCCR1B=0x06;
	ldi R24,6
	out 0x2e,R24
	.dbline 186
;  DDRB=0x0F;                  //I/O口初始化
	ldi R24,15
	out 0x17,R24
	.dbline 187
;  DDRD=0xC0;     
	ldi R24,192
	out 0x11,R24
	.dbline 188
;  TIMSK=0x40;                 //中断初始化 
	ldi R24,64
	out 0x39,R24
	.dbline 189
;  OCR2 = 0x0F;                //PWM初始化
	ldi R24,15
	out 0x23,R24
	.dbline 190
;  TCCR2=0x72;
	ldi R24,114
	out 0x25,R24
	.dbline 191
;  PORTB=PORTB&0xFC|0x01;
	in R24,0x18
	andi R24,252
	ori R24,1
	out 0x18,R24
	.dbline 192
;  PORTD=PORTD&0x3F|0x80;
	in R24,0x12
	andi R24,63
	ori R24,128
	out 0x12,R24
	.dbline 193
;  SEI();
	sei
L100:
	.dbline 194
	.dbline 194
L101:
	.dbline 194
	rjmp L100
X7:
	.dbline -2
	.dbline 195
;  do{} while(1);              //等待中断
; }
L99:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _UART_RXC
	.area text(rom, con, rel)
	.dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
	.dbfunc e UART_RXC _UART_RXC fV
;              i -> R20
	.even
_UART_RXC::
	rcall push_lset
	rcall push_gset1
	.dbline -1
	.dbline 200
; 
; //***************************串行接收中断服务程序******************//
; #pragma interrupt_handler UART_RXC:12
; void UART_RXC(void)
; {char i=0;
	.dbline 200
	clr R20
	.dbline 201
;  CLI();
	cli
	.dbline 202
;  Data[0]=UDR;
	in R2,0xc
	sts _Data,R2
	.dbline 203
;  if(Data[0]==0x55)           //起始位检测
	mov R24,R2
	cpi R24,85
	brne L104
	.dbline 204
;  {do
	.dbline 205
L109:
	.dbline 205
L110:
	.dbline 205
;   {while(!(USR&(1<<RXC)));
	sbis 0xb,7
	rjmp L109
	.dbline 206
;    i++;
	inc R20
	.dbline 207
;    Data[i]=UDR;
	ldi R24,<_Data
	ldi R25,>_Data
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	in R2,0xc
	std z+0,R2
	.dbline 208
;    if(i==9)
	cpi R20,9
	brne L112
	.dbline 209
	rjmp L108
L112:
	.dbline 209
L107:
	.dbline 209
;    break;} while(1);
	rjmp L110
L108:
	.dbline 210
;   if((Data[8]==0xFE)&&(Data[9]==0xFF))  //检测结束位
	lds R24,_Data+8
	cpi R24,254
	brne L114
	lds R24,_Data+9
	cpi R24,255
	brne L114
	.dbline 211
	rcall _Datadisposal
L114:
	.dbline 211
;   Datadisposal();}
L104:
	.dbline 212
;  SEI();
	sei
	.dbline -2
	.dbline 213
; }
L103:
	rcall pop_gset1
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r i 20 c
	.dbend
	.area vector(rom, abs)
	.org 8
	rjmp _TIM2_OVF
	.area text(rom, con, rel)
	.dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
	.dbfunc e TIM2_OVF _TIM2_OVF fV
	.even
_TIM2_OVF::
	rcall push_lset
	sbiw R28,2
	.dbline -1
	.dbline 218
; 
; //***************************定时器2中断服务程序*******************//
; #pragma interrupt_handler TIM2_OVF:5
; void TIM2_OVF(void)    
; {CLI();
	.dbline 218
	cli
	.dbline 219
;  EEPROMReadBytes(0x000C,&itime,2);//读采样次数
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_itime
	ldi R19,>_itime
	ldi R16,12
	ldi R17,0
	rcall _EEPROMReadBytes
	.dbline 220
;  a++;
	lds R24,_a
	lds R25,_a+1
	adiw R24,1
	sts _a+1,R25
	sts _a,R24
	.dbline 221
;  if(a==itime)                //时间窗口判断,
	lds R2,_itime
	lds R3,_itime+1
	cp R24,R2
	cpc R25,R3
	brne L119
	.dbline 222
;   {a = 0;
	.dbline 222
	clr R2
	clr R3
	sts _a+1,R3
	sts _a,R2
	.dbline 223
;    PIDB();} 
	rcall _PIDB
	.dbline 223
L119:
	.dbline 224
;   SEI();
	sei
	.dbline -2
	.dbline 225
; }
L118:
	adiw R28,2
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
_intxin::
	.blkb 2
	.dbsym e intxin _intxin X
_floatxin::
	.blkb 4
	.dbsym e floatxin _floatxin X
_itime::
	.blkb 2
	.dbsym e itime _itime I
_t::
	.blkb 4
	.dbsym e t _t D
_a::
	.blkb 2
	.dbsym e a _a I
_adress::
	.blkb 2
	.dbsym e adress _adress I
_Data::
	.blkb 10
	.dbsym e Data _Data A[10:10]c
	.area lit(rom, con, rel)
L27:
	.word 0x0,0x40a0
L26:
	.word 0x0,0x437f
L23:
	.word 0xb185,0x3905

⌨️ 快捷键说明

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