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

📄 minid0712.s

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module minid0712.c
	.area text(rom, con, rel)
	.dbfile D:\bak\新建文件夹\minid0712.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 26
; /*****************************************************************
;  *  文件名:      main.c
;  *  版本号:      
;  *  创作日期:    2005.7.12
;  *  作者:        fengzm
;  *  功能说明:    主函数
;  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
;                   
;  *****************************************************************/
;  
; 
; /*****************************************************************
; 
;  *   修改日期:   
;  *   修改人:     
;  *   修改原因:   
; 
;  
; *******************************************************************/
; 
; 
; #include "minid.h"
; 
; 
; void port_init(void)
; {
	.dbline 27
;    PORTB = 0x00;	
	clr R2
	out 0x5,R2
	.dbline 28
;    DDRB  = 0x00;	//0000 0000
	out 0x4,R2
	.dbline 29
;    PORTC = 0x00; 
	out 0x8,R2
	.dbline 30
;    DDRC  = 0x0C;    //0000 1100
	ldi R24,12
	out 0x7,R24
	.dbline 31
;    PORTD = 0x00;
	out 0xb,R2
	.dbline 32
;    DDRD  = 0x61;	//0110 0001
	ldi R24,97
	out 0xa,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 38
; }
; 
; //Watchdog initialize
; //prescale: 2K,16ms
; void watchdog_init(void)
; {
	.dbline 39
;     WDR(); //this prevents a timout on enabling
	wdr
	.dbline 40
;     WDTCSR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
	ldi R24,8
	sts 96,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 48
; }
; 
; //TIMER0 initialize - prescale:1024
; // WGM: Normal
; // desired value: 10mSec
; // actual value:  9.984mSec (0.2%)
; void timer0_init(void)
; {
	.dbline 49
;    TCCR0B = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 50
;    TCNT0  = 0xB2; //set count
	ldi R24,178
	out 0x26,R24
	.dbline 51
;    TCCR0A = 0x00; 
	out 0x24,R2
	.dbline 52
;    TCCR0B = 0x05; //start timer
	ldi R24,5
	out 0x25,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\bak\新建文件夹\minid0712.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	rcall push_lset
	rcall push_gset2
	.dbline -1
	.dbline 57
; }
; 
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
	.dbline 58
;    TCNT0 = 0xB2;                         //TIMER0 has overflowed
	ldi R24,178
	out 0x26,R24
	.dbline 62
; 
; //****************当前转速值*****************
; 	 
; 	g_Temp = g_DeltaEnc * 125;
	lds R4,_g_DeltaEnc+2
	lds R5,_g_DeltaEnc+2+1
	lds R2,_g_DeltaEnc
	lds R3,_g_DeltaEnc+1
	ldi R20,125
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall empy32u
	sts _g_Temp+1,R17
	sts _g_Temp,R16
	sts _g_Temp+2+1,R19
	sts _g_Temp+2,R18
	.dbline 63
; 	g_Temp /=1000;
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	rcall div32u
	sts _g_Temp+1,R17
	sts _g_Temp,R16
	sts _g_Temp+2+1,R19
	sts _g_Temp+2,R18
	.dbline 64
; 	g_Temp *= 72;
	ldi R20,72
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R20
	movw R18,R22
	rcall empy32u
	sts _g_Temp+1,R17
	sts _g_Temp,R16
	sts _g_Temp+2+1,R19
	sts _g_Temp+2,R18
	.dbline 65
; 	g_Temp = 60000000 / g_Temp;
	ldi R20,0
	ldi R21,135
	ldi R22,147
	ldi R23,3
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R20
	movw R18,R22
	rcall div32u
	sts _g_Temp+1,R17
	sts _g_Temp,R16
	sts _g_Temp+2+1,R19
	sts _g_Temp+2,R18
	.dbline 68
; //****************当前转速值******************
; 
; 	g_AdcNum = 7;							//脚踏板通道
	ldi R24,7
	sts _g_AdcNum,R24
	.dbline 69
; 	sPID.SetValue =  AdcPedal(g_ValueAdc) & 0xfff;	//PID输入预设值
	lds R16,_g_ValueAdc
	lds R17,_g_ValueAdc+1
	rcall _AdcPedal
	movw R24,R16
	andi R25,15
	sts _sPID+1,R25
	sts _sPID,R24
	.dbline 71
; 	
; 	g_IicData = PIDCalc(&sPID, g_Temp);				//PID运算
	lds R18,_g_Temp
	lds R19,_g_Temp+1
	ldi R16,<_sPID
	ldi R17,>_sPID
	rcall _PIDCalc
	sts _g_IicData,R16
	.dbline 72
; 	g_flag10ms = 0xff;
	ldi R24,255
	sts _g_flag10ms,R24
	.dbline 75
; 	
; //**********************************
; timer1_ovf_isr_();
	rcall _timer1_ovf_isr_
	.dbline -2
L4:
	rcall pop_gset2
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 85
; //***********************************
; 	
; }
; 
; 
; 
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 87
;                     //stop errant interrupts until set up
;     CLI();             //disable all interrupts
	cli
	.dbline 88
;     port_init();
	rcall _port_init
	.dbline 90
;     //watchdog_init();
;     timer0_init();
	rcall _timer0_init
	.dbline 91
;     timer1_init();
	rcall _timer1_init
	.dbline 93
;     
;     twi_init();
	rcall _twi_init
	.dbline 94
;     adc_init();
	rcall _adc_init
	.dbline 96
; 
;  	MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 97
;  	EICRA = 0x00; //extended ext ints
	sts 105,R2
	.dbline 98
;  	EIMSK = 0x00;
	out 0x1d,R2
	.dbline 100
;  
;  	TIMSK0 = 0x01; //timer 0 interrupt sources
	ldi R24,1
	sts 110,R24
	.dbline 101
;  	TIMSK1 = 0x21; //timer 1 interrupt sources
	ldi R24,33
	sts 111,R24
	.dbline 102
;  	TIMSK2 = 0x00; //timer 2 interrupt sources
	sts 112,R2
	.dbline 104
;  
;  	PCMSK0 = 0x00; //pin change mask 0 
	sts 107,R2
	.dbline 105
;  	PCMSK1 = 0x00; //pin change mask 1 
	sts 108,R2
	.dbline 106
;  	PCMSK2 = 0x00; //pin change mask 2
	sts 109,R2
	.dbline 107
;  	PCICR  = 0x00; //pin change enable 
	sts 104,R2
	.dbline 108
;  	PRR    = 0x00;
	sts 100,R2
	.dbline 110
;  
;  	SEI();         //re-enable interrupts
	sei
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 117
;  
; }
; 
; 
;  
; void main(void)
; {
	.dbline 119
; 
; 	init_devices();
	rcall _init_devices
	.dbline 121
; 	
; 	PIDInit (&sPID);
	ldi R16,<_sPID
	ldi R17,>_sPID
	rcall _PIDInit
	.dbline 122
; 	START_ADC();
	ldi R24,235
	sts 122,R24
	.dbline 123
; 	SumDu = 0;						//增量式PID清零
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _SumDu+1,R21
	sts _SumDu,R20
	sts _SumDu+2+1,R23
	sts _SumDu+2,R22
	rjmp L8
L7:
	.dbline 126
	.dbline 133
	rcall _det_err
	.dbline 134
	clr R18
	ldi R16,1
	rcall _electromagne_ctrl
	.dbline 135
L8:
	.dbline 125
	rjmp L7
X0:
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_ovf_isr_ _timer1_ovf_isr_ fV
	.even
_timer1_ovf_isr_::
	.dbline -1
	.dbline 148
; 	
; 	while (1)
; 	{
; 		//if (g_flag10ms == 0xff)
; 		//{
; 		//	g_flag10ms = 0;
; 			
; 		//	STARTIIC();	   	   			 //开始发送
; 		//}
; 	 det_err();
; 		electromagne_ctrl(1,0);
; 	}//End while
; 	
;   
; }
; 
; 
; //  10 ms 中断 一次
; // 需要提供低于220V 的信号g_singleLowVol
; // 电机停机信号g_MotorStop
; // 高于400V 的信号g_singleOverVol
; // 电机正在运行标志g_MotorRun
; // 电机速度小于10 RPM 标志g_LowSpeed
; void timer1_ovf_isr_(void)
; {
	.dbline 149
; 	if (!g_MotorRun)
	lds R2,_g_MotorRun
	tst R2
	breq X1
	rjmp L11
X1:
	.dbline 150
; 	{
	.dbline 151
; 		if (g_singleLowVol)
	lds R2,_g_singleLowVol
	tst R2
	breq L13
	.dbline 152
; 		{
	.dbline 153
; 			g_Lower220VCnt ++;
	lds R24,_g_Lower220VCnt
	lds R25,_g_Lower220VCnt+1
	adiw R24,1
	sts _g_Lower220VCnt+1,R25
	sts _g_Lower220VCnt,R24
	.dbline 154
; 		}
	rjmp L14
L13:
	.dbline 156
; 		else
; 		{
	.dbline 157
; 			g_Over220VCnt ++;
	lds R24,_g_Over220VCnt
	lds R25,_g_Over220VCnt+1
	adiw R24,1
	sts _g_Over220VCnt+1,R25
	sts _g_Over220VCnt,R24
	.dbline 158
; 		}
L14:
	.dbline 159
; 		if (g_Lower220VCnt + g_Over220VCnt > 300)
	lds R2,_g_Over220VCnt
	lds R3,_g_Over220VCnt+1
	lds R4,_g_Lower220VCnt
	lds R5,_g_Lower220VCnt+1
	add R4,R2
	adc R5,R3
	ldi R24,300
	ldi R25,1
	cp R24,R4
	cpc R25,R5
	brsh L15
	.dbline 160
; 		{
	.dbline 161
; 			if (g_Lower220VCnt > g_Over220VCnt)
	lds R4,_g_Lower220VCnt
	lds R5,_g_Lower220VCnt+1
	cp R2,R4
	cpc R3,R5
	brsh L17
	.dbline 162
; 			{
	.dbline 163
; 				g_LowVol = 1;
	ldi R24,1
	sts _g_LowVol,R24
	.dbline 164

⌨️ 快捷键说明

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