📄 main.s
字号:
.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 + -