pid s加速 梯形加速的优缺点

pid s加速 梯形加速的优缺点,第1张

S型加减速相对于梯形加减速更加平稳,对电机和传动系统的冲击更小。

S型加减速的曲线并没有限定是什么曲线,所以可以是指数曲线,可以是正弦曲线,这里分析的S型加减速是基于加速度匀速变化的曲线。

PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的。

***********Editor by zzy***********************

***********v.1.1.23

********************************************

IOY0 EQU 0D400H 片选IOY0端口始地址

IOY1 EQU 0D440H 片选IOY1端口始地址

IOY2 EQU 0D480H 片选IOY2端口始地址

IOY3 EQU 0D4C0H 片选IOY3端口始地址

********************************************

ADC0809 EQU IOY0+00H ADC0809端口地址

PA55EQU IOY1+00H 8255的A口地址

PB55EQU IOY1+04H 8255的B口地址

PC55EQU IOY1+08H 8255的C口地址

PCTLEQU IOY1+0CH 8255的控制寄存器地址

DAC0832 EQU IOY2+00H DAC0832端口地址

TIMER0 EQU IOY3+00H 8254计数器0端口地址

TIMER1 EQU IOY3+04H 8254计数器1端口地址

TIMER2 EQU IOY3+08H 8254计数器2端口地址

TCTLEQU IOY3+0CH 8254控制寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

STR1 DB'Please input password:',0AH,0DH,'$'

STR2 DB'The password is not right !!!Please try again!!!',0AH,0DH,'$'

STR3 DB'Welcome to the signal creat machine',0AH,0DH,'Loading ADC0809.....',0AH,0DH,'$'

STR4 DB 'DIS',0AH,0DH,'$'

DTABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H 7段数码管的段位值

STABLE DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

AD DB ?保存ad转换结果

PASSWORD DB 41H,42H,43H,44H 预设密码 要改!!!!

PW DB 4 DUP (?) 密码预留

YU DB 20 DUP (?) 预留20个空间存放数据

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

L0: MOV DX,OFFSET STR1 显示提示信息

MOV AH,9

INT 21H

MOV SI,OFFSET PW

MOV CX,4

SCAN: MOV AH,01H

INT 21H

CMP AL,'E'

JZ QUIT

MOV [SI],AL

INC SI

LOOP SCAN

CALL COMP;看不懂

CMP AL,4

JB ERRO;什么意思

JMP RIGHT

ERRO: MOV DX,OFFSET STR2 显示提示信息

MOV AH,9

INT 21H

JMP L0

RIGHT: MOV DX,OFFSET STR3 显示提示信息

MOV AH,9

INT 21H

CALL CLK ADC0809 CLK输入 ,启动8254

MOV DX,PCTL 初始化8255工作方式

MOV AL,88H 1000 1000方式0,A口,B口输出,C口高四位输入

OUT DX,AL

DISAD: CALL AD0809

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ DISAD

CMP AD,15H

JNB M1

CALL JIETI

JMP L0

M1: CMP AD,80H

JNB M2

CALL SIN

JMP L0

M2: CMP AD,0A0H

JNB M3

CALL TIXING

JMP L0

M3: CMP AD,0C0H

JNB M4

CALL FANG500

JMP L0

M4: CALL FANG1K

JMP L0

QUIT: MOV AX,4C00H 结束程序退出

INT 21H

COMP PROC NEAR

MOV AL,0 初始化al,AL中保存相同字符的个数

MOV SI,OFFSET PW

MOV DI,OFFSET PASSWORD

MOV CX,4

COMPLOOP:

MOV AH,[DI]

CMP [SI],AH

JZ COMPS1

JMP COMPS2

COMPS1:INC AL

COMPS2:INC SI

INC DI

LOOP COMPLOOP

RET

COMP ENDP

DIS PROC NEAR 显示键值子程序

PUSH AX 以缓冲区存放的键值为键值表偏移找到键值并显示

MOV SI,3000H

MOV DL,0FDH

MOV AL,DL

AGAIN: PUSH DX

MOV DX,PA55

OUT DX,AL 设置X1~X4,选通一个数码管

MOV AL,[SI]取出缓冲区中存放键值

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]将键值作为偏移和键值基地址相加得到相应的键值

MOV DX,PB55

OUT DX,AL 写入数码管A~Dp

CALL DALLY

INC SI 取下一个键值

POP DX

MOV AL,DL

TEST AL,01H 判断是否显示完?

JZ OUT1 显示完,返回

ROR AL,1

MOV DL,AL

JMP AGAIN 未显示完,跳回继续

OUT1: POP AX

RET

DIS ENDP

AD0809 PROC NEAR 将IN0结果保存于bl中

MOV DX,ADC0809 启动0809的IN0

OUT DX,AL

AD1: MOV DX,PC55

IN AL,DX

CMP AL,80H

JB AD1

MOV DX,ADC0809

IN AL,DX

MOV AD,AL

MOV AH,AL

AND AL,0FH

MOV SI,3000H

MOV [SI],AL

MOV CL,4

SHR AH,CL

MOV [SI+1],AH

CALL DIS

RET

AD0809 ENDP

CLK PROC NEAR 方波CLK时钟18.432K子程序

****初始化8254计数器0工作在方式3,以十进制计数,初值为100*******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,17H 0001 0111B

OUT DX,AL

MOV DX,TIMER0 装初值100

MOV AL,100D

OUT DX,AL

POP AX 恢复现场

POP DX 恢复现场

RET

CLK ENDP

FANG1K PROC NEAR 方波1KHz子程序

***初始化8254计数器1工作在方式3,以十进制计数 踔滴?84******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,56H 0101 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,184

OUT DX,AL

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX 恢复现场

POP DX 恢复现场

RET

FANG1K ENDP

FANG500 PROC NEAR 方波500Hz子程序

***初始化8254计数器1工作在方式3,以十进制计数,初值为368******

PUSH DX 保护现场

PUSH AX 保护现场

MOV DX,TCTL

MOV AL,76H 0111 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,70H368D分高低位写入

OUT DX,AL

MOV AL,01H

OUT DX,AL

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX 恢复现场

POP DX 恢复现场

RET

FANG500 ENDP

JIETI PROC NEAR 阶梯波子程序

PUSH DX

PUSH AX

J0: MOV AL,00H

J1: MOV DX,DAC0832

OUT DX,AL

CALL JIETIDALLY

ADD AL,33H

CMP AL,0FFH

JNE J1

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ J0

POP AX

POP DX

RET

JIETI ENDP

SIN PROC NEAR 正弦波子程序

PUSH AX

PUSH BX

PUSH DX

S1: MOV SI,OFFSET STABLE

MOV CX,64D

S2: MOV AL,[SI]

MOV DX,DAC0832

OUT DX,AL

INC SI

LOOP S2

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ S1

POP DX

POP BX

POP AX

RET

SIN ENDP

TIXING PROC NEAR 梯形波子程序

T : MOV AL,7FH

MOV DX,DAC0832

OUT DX,AL

CALL TIXINGDALLY

T2:

MOV DX,DAC0832

OUT DX,AL

DEC AL

CMP AL,00H

JNZ T2

T3:

MOV DX,DAC0832

OUT DX,AL

INC AL

CMP AL,7FH

JNZ T3

MOV DL,0FFH 判断主键盘有无键按下

MOV AH,6

INT 21H

JZ T

RET

TIXING ENDP

****延时子程序**********************

DALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,4000H

D1: MOV AX,0600H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY ENDP

JIETIDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DD1: MOV AX,10H

DD2: DEC AX

JNZ DD2

LOOP DD1

POP AX

POP CX

RET

JIETIDALLY ENDP

TIXINGDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DDD1: MOV AX,0FFH

DDD2: DEC AX

JNZ DDD2

LOOP DDD1

POP AX

POP CX

RET

TIXINGDALLY ENDP

CODE ENDS

END START

吨,5月3日卖出库存的3分之二,5月4日又调进库存的3倍粮食,问该仓库从5月1日到5月4日期间每天的粮食分别是多少吨?(输出每天的库存量)

分析:在这个问题中,主要要描述从5月1日到5月4日期间仓库的粮食库存量,且易知它是不断变化的。因此我们可以用一个变量A来描述仓库的粮食库存量。

程序可写如下:

Program ex1

Var A : integer

Begin

A:=100Writeln('5/1:',A)

A:=A+20Writeln('5/2:',A)

A:=A div 3writeln('5/3:',A)

A:=A *4writeln('5/4:',A)Readln

End.

有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,两有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有书多少粒糖果?

分析:

这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有的的糖果数是在变化的。因此可用a,b,c三个变量分别存放甲乙丙三个小朋友在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(因为分糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。

程序可写如下:

program ex2

var A,B,C:integer

begin

A:=50B:=43C:=13

A:=A div 3B:=B+AC:=C+A

B:=B div 3A:=A+BC:=C+B

C:=C div 3A:=A+CB:=B+C

writeln('A=',A,'B=',B,'C=',C)

readln

end.

已知A=253,B=43,输出A*B的运算式子。即输出如下:

253*43=10879

253

* 43

759

+1012

10879

分析:

对于该问题,我们只要控制好输出时右靠齐即可。即前四行的总宽度一样(例如为12),第五行总宽度比前面少1。第六、七行总宽度与前四行一样。

参与程序如下:

var a,b:integer

begin

a:=253b:=43

writeln(a:10,'*',b,'=',a*b)

writeln(a:12)

write('*':8)writeln(b:4)

writeln('--------':12)

writeln(a*3:12)

write('+':6)writeln(a*4:5)

writeln('--------':12)

writeln(a*b:12)

end.

试编一程序,输入一梯形的上底、下底、高, 求该梯形的面积。

分析:

整个程序分为三段:输入、计算、输出。程序中用a,b,h三个变量分别存放梯形的上、下底与高,S存放面积。 要而使用这些变量都要先说明,程序的执行部分中先输入上、下底与高,接着求面积S,最后输出结果S。

源程序如下:

program Tixing

var a,b,h,s:real

begin

write('Input a,b,h:')

readln(a,b,h)

s:=(a+b)*h/2

write('s=',s:10:3)

end.

某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果,现在他们做一个分糖果游戏。从1号小朋友开始,将他的糖果均分三份(如果有多余的,则他将多余的糖果吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友也这如果做。问一轮后,每个小朋友手上分别有多少糖果。

分析:

这道问题与第二课中的例2基本一样,只不过这里有5位小朋友,且他们初始时糖果的数目不确定。这里用a,b,c,d,e分别存放5个小朋友的糖果。初始时它们的值改为由键盘输入。其它都与第二课中的例2类似。

参考程序如下:

program fentang

var a,b,c,d,e:integer

begin

write('Please Enter init numbers ')readln(a,b,c,d,e)

a:=a div 3b:=b+ae:=e+a

b:=b div 3c:=c+ba:=a+b

c:=c div 3b:=b+cd:=d+c

d:=d div 3c:=c+de:=e+d

e:=e div 3d:=d+ea:=a+e

writeln('a=',a)

writeln('b=',b)

writeln('c=',c)

writeln('d=',d)

writeln('e=',e)

readln{暂停}

end.

编一程序求半径为R的圆的周长与面积?

分析:

程序要先输入半径R,然后求周长c和面积s,最后输出c和s.

源程序如下:

program circle

const PI=3.14159

var r,c,s:real

begin

write('Enter R=')readln(r)

c:=2*pi*r

s:=pi*sqr(r)

writeln('c=',c:10:2)

writeln('s=',s:10:2)

end.

另外,团IDC网上有许多产品团购,便宜有口碑


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12204986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存