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网上有许多产品团购,便宜有口碑
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)