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

📄 main.s

📁 一款挂面机的自动化控制源程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:/icc/include/h_iic.c
	.dbfunc e ISendStr _ISendStr fc
;              i -> R20
;             no -> R22
;              s -> R10,R11
;           suba -> R18
;            sla -> R16
	.even
_ISendStr::
	xcall push_gset3
	ldd R10,y+6
	ldd R11,y+7
	ldd R22,y+8
	.dbline -1
	.dbline 41
; //ICC-AVR application builder : 2004-8-22 19:49:01
; // Target : M16
; // Crystal: 16.000Mhz
; //本程序所用的长度单位为毫米,时间单位为8个时钟周期(千万分之五秒)
; #include <iom16v.h>
; #include <macros.h>
; #include <h_iic.c>
; #include <eeprom.h>
; ///////////////  键盘定义
; #define START_K 1    
; //启动
; #define ENTER 1
; //确定
; #define STOP 5    
; //停止  
; #define RETURN 5
; //返回
; #define K1 2      
; //1
; #define INC_SPEED 2
; //增速
; #define K2 3      
; //2
; #define DEC_SPEED 3
; //减速
; #define K3 4
; //4
; #define SET 4
; //设定
; #define K4 6
; //4
; #define SPEED 6
; //速度
; #define K5 7
; //5
; #define COUNT 7
; //计数
; #define K6 8
; //8
; #define SUM 8
; //累计
	.dbline 43
; #define K0 9
; //9
	ldi R24,164
	out 0x36,R24
	.dbline 44
L2:
	.dbline 44
L3:
	.dbline 44
; #define CLEAR 9
	in R2,0x36
	sbrs R2,7
	rjmp L2
	.dbline 44
	.dbline 44
	.dbline 45
; //清零
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L5
	.dbline 45
	.dbline 45
	ldi R24,148
	out 0x36,R24
	.dbline 45
	ldi R16,1
	xjmp L1
L5:
	.dbline 46
; #define K7 10
	.dbline 46
	out 0x3,R16
	.dbline 46
	ldi R24,132
	out 0x36,R24
	.dbline 46
	.dbline 46
	.dbline 47
L7:
	.dbline 47
L8:
	.dbline 47
; //7
	in R2,0x36
	sbrs R2,7
	rjmp L7
	.dbline 47
	.dbline 47
	.dbline 48
; #define MIAN_LENGTH 10
	in R24,0x1
	andi R24,248
	cpi R24,24
	breq L10
	.dbline 48
	.dbline 48
	ldi R24,148
	out 0x36,R24
	.dbline 48
	ldi R16,1
	xjmp L1
L10:
	.dbline 49
; //面长
	.dbline 49
	out 0x3,R18
	.dbline 49
	ldi R24,132
	out 0x36,R24
	.dbline 49
	.dbline 49
	.dbline 50
; #define K8 11
	clr R20
	xjmp L15
X0:
	.dbline 51
	.dbline 51
L16:
	.dbline 51
L17:
	.dbline 51
; //8
	in R2,0x36
	sbrs R2,7
	rjmp L16
	.dbline 51
	.dbline 51
	.dbline 52
; #define CUT_NUM 11
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L19
	.dbline 52
	.dbline 52
	ldi R24,148
	out 0x36,R24
	.dbline 52
	ldi R16,1
	xjmp L1
L19:
	.dbline 53
	.dbline 53
	movw R30,R10
	ldd R2,z+0
	out 0x3,R2
	.dbline 53
	ldi R24,132
	out 0x36,R24
	.dbline 53
	.dbline 53
	.dbline 54
	movw R24,R30
	adiw R24,1
	movw R10,R24
	.dbline 55
L13:
	.dbline 50
	inc R20
L15:
	.dbline 50
	cp R20,R22
	brlo L17
	.dbline 56
L21:
	.dbline 56
L22:
	.dbline 56
; //刀数
; #define K9 12
; //9
; #define JIGAN 12
	in R2,0x36
	sbrs R2,7
	rjmp L21
	.dbline 56
	.dbline 56
	.dbline 57
; //积杆
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L24
	.dbline 57
	.dbline 57
	ldi R24,148
	out 0x36,R24
	.dbline 57
	ldi R16,1
	xjmp L1
L24:
	.dbline 58
; #define M_ZHUANBI 4000  
	ldi R24,148
	out 0x36,R24
	.dbline 60
; //转刀一周步进电机的步数
;  
	clr R16
	.dbline -2
L1:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r no 22 c
	.dbsym r s 10 pc
	.dbsym r suba 18 c
	.dbsym r sla 16 c
	.dbend
	.dbfunc e IRcvStr _IRcvStr fc
;              i -> R22
;             no -> R10
;              s -> R20,R21
;           suba -> R18
;            sla -> R16
	.even
_IRcvStr::
	xcall push_gset3
	ldd R20,y+6
	ldd R21,y+7
	ldd R10,y+8
	.dbline -1
	.dbline 68
; ///////////////  全局变量定义
; unsigned char M_state=0;  //步进电机的运行状态
; /*
; 0:停转
; 1:启动
; 2:减速至停转
; 3:加速至随动
; 4:减速至随动
	.dbline 71
; 5:随动
; 6:加速至碎刀
; 7:碎刀
	ldi R24,164
	out 0x36,R24
	.dbline 72
L27:
	.dbline 72
L28:
	.dbline 72
; 8:转动至平行
	in R2,0x36
	sbrs R2,7
	rjmp L27
	.dbline 72
	.dbline 72
	.dbline 73
; */
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L30
	.dbline 73
	.dbline 73
	ldi R24,148
	out 0x36,R24
	.dbline 73
	clr R16
	xjmp L26
L30:
	.dbline 74
; unsigned int step_num=0;  //步进电机相对平行点的占步数
	.dbline 74
	out 0x3,R16
	.dbline 74
	ldi R24,132
	out 0x36,R24
	.dbline 74
	.dbline 74
	.dbline 75
L32:
	.dbline 75
L33:
	.dbline 75
; //unsigned char M_maichong; //步进电机的脉冲
	in R2,0x36
	sbrs R2,7
	rjmp L32
	.dbline 75
	.dbline 75
	.dbline 76
; unsigned int tmp_t1=64536; //计时器1的当前数值
	in R24,0x1
	andi R24,248
	cpi R24,24
	breq L35
	.dbline 76
	.dbline 76
	ldi R24,148
	out 0x36,R24
	.dbline 76
	clr R16
	xjmp L26
L35:
	.dbline 77
; unsigned char qidong_num=0;      //启动过程中步进电机所走的占步数
	.dbline 77
	out 0x3,R18
	.dbline 77
	ldi R24,132
	out 0x36,R24
	.dbline 77
	.dbline 77
	.dbline 78
L37:
	.dbline 78
L38:
	.dbline 78
; unsigned char dec_speed_bz=0;    //启动减速标志
	in R2,0x36
	sbrs R2,7
	rjmp L37
	.dbline 78
	.dbline 78
	.dbline 79
; unsigned int dec_speed_num=0;    //减速所走的步数
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L40
	.dbline 79
	.dbline 79
	ldi R24,148
	out 0x36,R24
	.dbline 79
	clr R16
	xjmp L26
L40:
	.dbline 80
; float DW_juli;    //单位距离
	ldi R24,164
	out 0x36,R24
	.dbline 81
L42:
	.dbline 81
L43:
	.dbline 81
; float P_speed;    //皮带速度
	in R2,0x36
	sbrs R2,7
	rjmp L42
	.dbline 81
	.dbline 81
	.dbline 82
; float juli;       //切刀到杆切点的距离
	in R24,0x1
	andi R24,248
	cpi R24,16
	breq L45
	.dbline 82
	.dbline 82
	ldi R24,148
	out 0x36,R24
	.dbline 82
	clr R16
	xjmp L26
L45:
	.dbline 83
; unsigned char time0_chi;  //计时器0的次数(256的倍数)
	.dbline 83
	mov R24,R16
	subi R24,255    ; addi 1
	out 0x3,R24
	.dbline 83
	ldi R24,132
	out 0x36,R24
	.dbline 83
	.dbline 83
	.dbline 84
L47:
	.dbline 84
L48:
	.dbline 84
; unsigned char time0_yu;   //计时器0的余数(整除256后所得的余数)
	in R2,0x36
	sbrs R2,7
	rjmp L47
	.dbline 84
	.dbline 84
	.dbline 85
; unsigned char time0_fen;  //如果余数太小,则从次数中分出一次来,和余数加在一起分担剩余的时间
	in R24,0x1
	andi R24,248
	cpi R24,64
	breq L50
	.dbline 85
	.dbline 85
	ldi R24,148
	out 0x36,R24
	.dbline 85
	clr R16
	xjmp L26
L50:
	.dbline 86
; unsigned char pidai_yunxing=0;   //皮带运行:1表示正常运行,0表示停止运行
	clr R22
	xjmp L55
L52:
	.dbline 87
; float set_speed;   //设定的转速******
	.dbline 87
	ldi R24,196
	out 0x36,R24
	.dbline 88
L56:
	.dbline 88
L57:
	.dbline 88
; unsigned char dj_jibie=0;    //电磁调速电动机速度增减的级别
	in R2,0x36
	sbrs R2,7
	rjmp L56
	.dbline 88
	.dbline 88
	.dbline 89
	in R24,0x1
	andi R24,248
	cpi R24,80
	breq L59
	.dbline 89
	.dbline 89
	ldi R24,148
	out 0x36,R24
	.dbline 89
	clr R16
	xjmp L26
L59:
	.dbline 89
	.dbline 90
	in R2,0x3
	movw R30,R20
	std z+0,R2
	.dbline 91
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 92
L53:
	.dbline 86
	inc R22
L55:
	.dbline 86
	mov R24,R10
	subi R24,1
	cp R22,R24
	brlo L52
	.dbline 93
; unsigned char dj_fangxi=0;   //电磁调速电动机调速的方向
; unsigned char on_scr=0;      //可控硅导通标志
; unsigned int pre_jsq=2000;      //上一次可控硅触发计时
; unsigned char key=0;    //按键的键值
; unsigned char on_key=0; //有键按下的标志
	ldi R24,132
	out 0x36,R24
	.dbline 94
L61:
	.dbline 94
L62:
	.dbline 94
; unsigned char key_num=0;  //计数,每计50查一次按键
	in R2,0x36
	sbrs R2,7
	rjmp L61
	.dbline 94
	.dbline 94
	.dbline 95
; unsigned char next_gan=0; //过下一杆标志
	in R24,0x1
	andi R24,248
	cpi R24,88
	breq L64
	.dbline 95
	.dbline 95
	ldi R24,148
	out 0x36,R24
	.dbline 95
	clr R16
	xjmp L26
L64:
	.dbline 96
; unsigned char guogan=0;   //开始正式过杆的标志
	in R2,0x3
	movw R30,R20
	std z+0,R2
	.dbline 97
; float dw_speed=0.00000025;      //一个时间单位所走的毫米数*******
	ldi R24,148
	out 0x36,R24
	.dbline 99
; float ganwei;   //杆位:挂面杆相对于切点的位置
; float next_ganwei;   //下一杆的杆位
	ldi R16,1
	.dbline -2
L26:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r no 10 c
	.dbsym r s 20 pc
	.dbsym r suba 18 c
	.dbsym r sla 16 c
	.dbend
	.dbfunc e ZLG7290_SendData _ZLG7290_SendData fc
;           Data -> y+5
;         SubAdd -> R20
	.even
_ZLG7290_SendData::
	st -y,r19
	st -y,r18
	xcall push_gset1
	mov R20,R16
	sbiw R28,3
	.dbline -1
	.dbline 102
; float juli_jcd;      //检测点到切点的距离*******
; float ganju;        //两根挂面杆的距离*******
; float longth_guamian;   //切好的挂面的长度*******
	.dbline 103
; float longth_zongmian;  //一杆上挂面的总长度*******
	ldi R24,23
	cp R24,R20
	brsh L67
	.dbline 104
; unsigned char jidao;    //一杆面共切几刀
	clr R16
	xjmp L66
L67:
	.dbline 105
; unsigned char first_gan=1; //第一杆标志
	ldi R24,1
	std y+2,R24
	movw R24,R28
	adiw R24,5
	std y+1,R25
	std y+0,R24
	mov R18,R20
	ldi R16,112
	xcall _ISendStr
	.dbline 107
; unsigned char qidong=0;   //步进电机是否起动
; unsigned char jileigan=0;  //累积的杆数
	ldi R16,1
	.dbline -2
L66:
	adiw R28,3
	xcall pop_gset1
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym l Data 5 c
	.dbsym r SubAdd 20 c
	.dbend
	.dbfunc e ZLG7290_SendCmd _ZLG7290_SendCmd fc
;           Data -> y+3
;          Data2 -> R20
;          Data1 -> R22
	.even
_ZLG7290_SendCmd::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	sbiw R28,5
	.dbline -1
	.dbline 111
; unsigned char max_ganshu=10;  //积累杆数的上限
; unsigned char caoshu=0;  //高速标志
; float current_speed;     //当前速度
; float caogan_speed;      //高速时的速度
	.dbline 113
; unsigned char menu_jb=0;   //菜单级别
; unsigned char menu_gn=0;      //菜单功能码  
	std y+3,R22
	.dbline 114
; char *string1;
	std y+4,R20
	.dbline 115
; char string2[]="    PASS"; 
	ldi R24,2
	std y+2,R24
	movw R24,R28
	adiw R24,3
	std y+1,R25
	std y+0,R24
	ldi R18,7
	ldi R16,112
	xcall _ISendStr
	.dbline 117
; char tmp_string[9];          //输入参数时,显示的数字
; unsigned char cs_num=0;        //当前参数的位数
	ldi R16,1
	.dbline -2
L69:
	adiw R28,5
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l Data 3 A[2:2]c
	.dbsym r Data2 20 c
	.dbsym r Data1 22 c
	.dbend
	.dbfunc e ZLG7290_SendBuf _ZLG7290_SendBuf fV
;              i -> R20
;            num -> R22
;    display_buf -> R10,R11
	.even
_ZLG7290_SendBuf::
	xcall push_gset3
	mov R22,R18
	movw R10,R16
	.dbline -1
	.dbline 121
;  char *str_dis;
; 
; ///////////////
; void port_init(void)
	.dbline 123
; {
;  PORTA = 0x00;
	clr R20
	xjmp L75
L72:
	.dbline 124
	.dbline 125
	movw R30,R10
	ldd R18,z+0
	mov R16,R20
	subi R16,160    ; addi 96
	xcall _ZLG7290_SendCmd
	.dbline 126
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 127
L73:
	.dbline 123
	inc R20
L75:
	.dbline 123
	cp R20,R22
	brlo L72
	.dbline -2
L71:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r num 22 c
	.dbsym r display_buf 10 pc
	.dbend
	.dbfunc e ZLG7290_GetKey _ZLG7290_GetKey fc
;           rece -> y+3
	.even
_ZLG7290_GetKey::
	sbiw R28,4
	.dbline -1
	.dbline 131
;  DDRA  = 0x00;
;  PORTB = 0xF0;
;  DDRB  = 0xF0;
;  PORTC = 0x00; //m103 output only
;  DDRC  = 0xC0;
;  PORTD = 0x00;
;  DDRD  = 0x00;
; }
	.dbline 131
	clr R2
	std y+3,R2
	.dbline 132
; 
	ldi R24,1
	std y+2,R24
	movw R24,R28
	adiw R24,3
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,112
	xcall _IRcvStr
	tst R16
	brne L77
	.dbline 132
	clr R16
	xjmp L76
L77:
	.dbline 134
; unsigned int read_adc(void)  //读取模数转换的值,即测速发电机的电压值
; {
	ldd R16,y+3
	.dbline -2
L76:
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l rece 3 c
	.dbend
	.dbfunc e disstring _disstring fV
	.area func_lit(rom, con, rel)
L127:
	.word `L123
	.word `L88
	.word `L91
	.word `L92
	.word `L93
	.word `L94
	.word `L95
	.word `L96
	.word `L97
	.word `L98
	.word `L99
	.word `L100
	.word `L88
	.word `L88
	.word `L88
	.word `L88
	.word `L88
	.word `L88
	.word `L88
	.word `L102
	.word `L88
	.word `L104
	.word `L88
	.word `L106
	.word `L107
	.word `L108
	.word `L109
	.word `L88
	.word `L111
	.word `L88
	.word `L112
	.word `L88
	.word `L88
	.word `L113
	.word `L114
	.word `L88
	.word `L88
	.word `L88
	.word `L122
	.word `L118
	.area text(rom, con, rel)
	.dbfile C:/icc/include/h_iic.c
;             at -> R20,R21
;            num -> y+0
;           chr2 -> R12
;              i -> R22
;            chr -> R14
;           chr1 -> R10
;            tmp -> y+11
	.even
_disstring::
	st -y,r17
	st -y,r16
	xcall push_gset5
	sbiw R28,1
	.dbline -1
	.dbline 138
; unsigned char adc_H,adc_L;
; unsigned int adc_jg;
; adc_L=ADCL;
; adc_H=ADCH;
	.dbline 143
; adc_jg=adc_H*256+adc_L;
; return adc_jg;
; }
; //TIMER0 initialize - prescale:8
; // WGM: Normal
	ldd R16,y+11
	ldd R17,y+12
	xcall _strlen
	std y+0,R16
	.dbline 147
; // desired value: 1Hz
; // actual value: Out of range
; void timer0_init(void)
; {
	ldd R20,y+11
	ldd R21,y+12
	.dbline 148
;  TCCR0 = 0x00; //stop
	ldi R24,8
	mov R0,R16
	cp R24,R16
	brsh L80
	.dbline 149
;  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
	.dbline 150
;  OCR0  = 0x00 /*INVALID SETTING*/;  //set compare
	movw R30,R20
	ldd R24,z+0
	cpi R24,46
	brne L82
	.dbline 150
	ldi R24,9
	std y+0,R24
L82:
	.dbline 151
;  TCCR0 = 0x02; //start timer
	subi R20,255  ; offset = 1
	sbci R21,255

⌨️ 快捷键说明

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