智能装置与仪表归总Word文档下载推荐.docx
《智能装置与仪表归总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《智能装置与仪表归总Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
DCLKBITP1.1;
DOUTBITP3.3;
LOADBITP1.2;
BYTE_HDATA30H;
BYTE_LDATA31H;
WRITE:
PUSHACC;
PUSHR7;
CLREX1;
CLRLOAD;
MOVR7,#08H;
MOVA,BYTE_L;
WRITE_L:
RRCA;
CLRDCLK;
MOVDIN,C;
SETBDCLK;
DJNZR7WRITE_L;
MOVA,31H;
MOVR7,#04H;
WRITE_H:
DJNZR7,WRITE_H;
SETBLOAD;
SETBEX1;
POPR7;
POPACC;
RET
8.请编写串行读CH451按键代码的子程序,键码放到32H中。
KEYDATA32H
READ_KEY:
MOVA,#07H;
MOVR7,#04H;
READ_4:
RRCA
CLRDLCK;
MOVDINC;
DJNZR7,READ_4;
CLRA;
MOVR7,#07H
READ_7:
MOVC,DOUT;
RLCA;
DJNZR7,READ_7;
CLRC;
SUBBA,#40H;
MOVKEY,A;
CLRIE1;
9.什么叫BCD码?
什么叫显示段码?
即BCD代码。
Binary-CodedDecimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。
是一种二进制的数字编码形式,用二进制编码的十进制代码。
这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
10.请写出字符“U”和“n”的段码。
U:
0111110Bn:
1010100B
第2章作业思考题:
1.仪表状态的含义是什么?
状态仪表每时每刻工作在某种状态下,当一个消息到达之后,仪表将做出对应的反应:
执行一项任务,并从一种状态迁移到新状态下。
仪表中的状态是指仪表接受了一个消息驱动后,系统所处的位置及状况。
2.状态转移法编程的优点是什么?
状态法优点:
用“状态转移法”设计键控程序时,其程序基本框架是相同的,对不同的应用实例只需更改状态表和子程序功能即可。
因此程序具有通用性强、修改方便、便于阅读等优点。
3.程序状态表的结构是如何组成的?
状态表:
状态表就是反映状态、键码、子程序、次态之间关系的表格
程序状态表:
将状态表写成程序数据表的形式,用于程序查表使用
4.广义来看,消息可以有哪些来源?
消息:
主要是按键,也可以定时器溢出,外部中断信号,I/O输入信号,脉冲信号等.
5.写出查状态表要用到的下态和任务号地址的计算公式。
状态的转移和程序的执行过程是通过查状态表来实现的。
设按键DOWN,PARA,UP对应的数值分别为0,1,2,已知当前状态为ST,当某个按键按下后,查找下态和要执行的任务号地址的公式为:
下态地址=#ST_TAB+ST*6+KEY*2
任务号地址=#ST_TAB+ST*6+KEY*2+1=下态存放地址+1
其中#ST_TAB为程序中状态表的首地址。
也就是程序中数据表的标号。
乘6是因为3键时,每行数据为6个;
如果是4键,则每行数据为8个,就需要乘8。
6.在4个按键情况下,编写程序查状态表获得下态和任务号。
MOVA,STATE;
原状态号
MOVB,#8;
状态乘以8
MULAB
ADDA,KEY;
键值乘2
ADDA,KEY
MOVR0,A;
保存偏移量
MOVDPTR,#ST;
取状态表首地址
MOVCA,@A+DPTR
MOVSTATE,A;
得到新状态号
MOVA,R0;
恢复偏移量
INCA;
指向任务号地址
MOVCA,@A+DPTR;
得到任务号于A中
7.根据已知任务号,编写散转程序,转去执行对应程序。
MOVAPR;
任务号送A
MOVB#03H;
乘3,每个LJMP为3字节
MULAB;
任务号于A中
MOVDPTR#TASK;
散转,去执行对应任务
JMP@A+DPTR
TASK:
LJMPP_0;
空操作
LJMPP_1显示100/P…
LJMPP_2;
显示AAAA
LJMPP_3;
XX=YY,并且显示XX
LJMPP_4;
XX-1并且显示XX
LJMPP_5;
XX+1并且显示XX
LJMPP_6;
YY=XX并且显示P---
LJMPP_7;
显示BBB
8.改写课堂讲述的状态键盘实验程序:
(1)适当增补1-2种以上状态;
(2)增加若干个功能子程序;
(3)对应修改状态表中的内容。
状态
键号0
次态号
任务号
1
2
3
LJMPP_0;
跳转子程序0
LJMPP_1;
跳转子程序1
LJMPP_2;
跳转子程序2
LJMPP_3;
跳转子程序3
P_0:
…;
子程序略
P_1:
P_2:
P_3:
状态表
;
K0
ST,PR
STAB:
DB1,1;
stat0
DB2,2;
stat1
DB3,3;
stat2
DB0,0;
stat3
自动化装置设计课外作业
第3章作业思考题:
1.C51是一种什么语言?
与标准C有什么主要区别?
C51是在51系列单片机上使用一种简单的高级语言,语法符合标准C语言规范。
编写程序和调试程序的时间大大缩短。
区别:
C51是兼容ANSI的编译器,但为了支持8051系列MCU加入了一些扩展的内容。
C51编译器的扩展内容包括
数据类型
存储器类型
指针
重入函数
中断服务程序
实时操作系统
和PL/M及A51源程序的接口。
2.与汇编程序相比,C51有什么主要优缺点?
采用汇编语言编程,优点是程序运行效率高,但程序设计周期长,设计工作效率低,程序调试困难,不利于程序维护和升级。
C51编写程序和调试程序的时间大大缩短。
3.在C51程序设计中,有哪些主要的存储器类型?
存储器类型
code程序空间(64Kbytes),通过MOVC@A+DPTR访问。
data直接访问的内部数据存储器,访问速度最快(128ytes)。
idata间接访问的内部数据存储器,可以访问所有的内部存储器空间(256bytes)。
bdata可位寻址的内部数据存储器,可以字节方式也可以位方式访问(16bytes,20H-2FH)。
xdata外部数据存储器(64Kbytes),通过MOVX@DPTR访问。
pdata分页的外部数据存储器(256bytes),通过MOVX@Rn访问(固定住P2高8位地址线内容)。
4.写出C51中断服务程序的基本格式。
创建中断服务程序。
需要关心中断号和寄存器组的选择。
编译器自动产生中断向量和程序的入栈及出栈代码。
•用interrupt,定义一个中断服务程序
•用using定义此中断服务程使用的寄存器组
unsignedintinterruptcnt;
//定义变量
unsignedcharsecond;
voidtimer0(void)interrupt1using2
{//定义中断
if(++interruptcnt==4000)
{//countto4000
second++;
//secondcounter
interruptcnt=0;
//clearintcounter
}
}
5.用C51编写一个简单计算器程序,要求能够完成个位数加减运算的功能。
按键包含数字键0-9。
其他键定义如下:
A代表加号,B代表减号,C代表清除前1字符输入,D无定义,E代表等于号;
F代表全部清空,重新开始。
第4章作业思考题:
1.电子音乐的音频和节拍是靠什么实现的?
音乐的基本构成:
音符、节拍
(1)乐谱中不同的音符由不同频率的正弦波产生
(2)音的节拍由延时子程序实现
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器进行半周期计时,每当半周期计时到,就将输出脉冲的I/O口反相,如此重复,就可在I/O口上得到对应频率的脉冲。
再通过硬件电路对脉冲滤波,得到近似的正弦波信号,送给小喇叭发出音乐声。
电子音乐的生成原理:
音乐的旋律是由几百—几KHz的音频波形合成的。
例如二胡,由于钢丝带动蛇皮振动而发声,小提琴也是由钢丝带动音响盒振动发声。
计算机的发声原理是按特定旋律,定时产生周期的方波来生成的。
2.在单片机程序中如何存储一首音乐的乐谱?
1)先把乐谱的音符由低到高找出,然后按顺序建立T值表,编制简谱码。
再按照T值表建立数据表TABLE1;
2)编制节拍码,如表3.6所示。
设定1/4拍的延时时间(167ms),由延时子程序完成;
DELAY:
MOVR7,#02
DEL2:
MOVR4,#167
DEL3:
MOVR3,#248
DJNZR3,$
DJNZR4,DEL3
DJNZR7,DEL2
RET
(3)乐谱描述:
A、采用单字节描述时:
每个音符使用一个字节,字节的高4位为简谱码(音符),低四位为节拍码(节拍),按照乐谱建立数据表TABLE.
B、采用双字节描述时:
每个音符使用2个字节,1字节为简谱码,1字节为节拍码。
3.如何利用定时器实现不同频率的脉冲输出?
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用8051的内部定时器让其工作在方式1下,改变定时器的计数初值TH0及TL0,就可以产生不同频率的音频脉冲。
计数脉冲与频率的关系如下推导如下,设:
Fr:
要产生的音乐频率;
则音频周期:
T=1/Fr,音频半周期:
T/2=1/(2Fr)
Fi:
定时器计数频率;
12M晶振时,内部计时1次需时1µ
s,故其频率为Fi=1MHz;
6M晶振时,内部计时一次需时2µ
s,频率则为Fi=0.5MHz。
N:
半周期内计数器的计数次数;
则N=(1/(2Fr))÷
(1/Fi)=Fi/(2Fr)
计数器是递增的,计满溢出,所以计数初值计算公式如下:
T=65536-N=65536-Fi/(2Fr)
=65536-500000/Fr(12M晶振)
T=65536-N=65536-Fi/(2Fr)
=65536-250000/Fr(6M晶振)
4.计数器的初值大小与频率的大小是什么样的关系?
5.编写一程序,可以输出规定频率F0=1K的脉冲。
设为12M晶振,计时频率1K,算初值T=65035(FE0BH)
OUTPLUSEBITP3.7
ORGOOH
SJMPSTART
ORG0BH
LJMPTIM0_INT
ORG30H
START:
MOVTMOD,#01H;
定时器工作方式1
MOVIE,#82H;
允许T0中断
MOVTH0,#0FEH
MOVTL0,#0BH;
SETBTR0
JMP$
TIM0_INT:
MOVTL0,#0BH
MOVTH0,#FEH
CPLOUTPLUSE
RETI
END
6.参照实验程序的数据表TABLE1,试写出记录如下一节乐谱的乐谱数据表。
音符
发音
音符码
T值
中音RE
64684
中音MI
64777
5
中音SO
64898
6
中音LA
4
64968
TABLE1:
DW64684,64777,64898,64968
TABLE:
DB22H,42H,42H,32H,26H,12H
第5章作业思考题:
1.I2C总线有什么特点?
I²
C总线是器件与器件或InterIcBus之间的通信总线,它采用总线寻址方式查询外围接口器件,不需要片选地址,接口电路简单,可以在总线上挂接多个外围接口器件。
I2C总线为二线制串行扩展总线,它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。
C总线规范中的传送速度可达400Kb/s,总线驱动能力400pf,可带电插拔。
计算机外围器件市场上有许多带I²
C总线的外围芯片可用。
如:
串行EEPROM,串行ADC/DAC,串行时钟芯片,串行数字电位器,串行微处理器监控芯片,串行温度传感器等等。
2.SDA和SCL为什么采用漏极开路形式并且要接上拉电阻?
C总线结构
I2C总线规定SDA线和SCL线是各设备对应输出状态相“与”的结果,I²
C总线上接口芯片的输出必须是漏极开路或集电极开路结构。
输出端必须接上拉电阻。
为了使总线上所有电路输出实现“与”的逻辑功能,使其能够线与,用以实现总线的仲裁(即判断多个器件的主从关系),否则只能输出低电平。
总线上数据的有效性:
I2C总线规定,SCL的一个时钟周期传送一位数据,并且在SCL的高电平期间,SDA上的数据必须保持稳定的逻辑电平状态,即高电平位数据1,低电平位数据0.只有在时钟SCL为低电平时,才允许数据线上的电平状态变化。
3.I2C总线的开始信号和结束信号的逻辑时序是什么?
•起始信号:
在时钟线SCL保持高电平期间,数据线SDA出现由高电平向低电平变化时,启动I²
C总线。
称之为I²
C总线的起始信号。
•终止信号:
在时钟线SCL保持高电平期间,数据线SDA出现由低电平向高电平变化时,停止I²
C总线数据传送。
C总线的终止信号。
4.在E2PROM的访问中,I2C的应答和非应答信号如何使用?
I2C总线数据传送时,每传送一个字节数据后都必须有应答信号,与应答信号相对应的时钟由主控器产生,这时,发送器必须在这一时钟位上释放数据线,使其处于高电平状态,以便接收器在这一位上送出应答信号。
应答信号在第九个时钟位上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号(/A)。
5.在I2C总线上,数据的传送方向如何决定?
数据传送和传送方向
I²
C总线规定,起始信号代表一次数据传送的开始,其后为寻址字节,寻址字节由高7位地址和最低1位方向位组成。
方向位表明是“读”或“写”操作,方向位为“0”时表明主控器对被控器的写操作,为1时表明主控器对被控器的读操作。
在寻址字节后是读或写的数据字节与应答位。
在数据传送完成后主控器都必须发送终止信号。
6.在I2C器件的访问中,器件地址和偏移地址各有什么含义?
器件地址:
选择该写外挂的哪个器件
偏移地址:
是选中器件内存储空间的地址。
与普通的I2C器件访问指令相比,由于E2PROM器件中有多个单元,为了访问到特定单元,所以必须指定要访问的单元的地址(WordAdr)。
为了与器件地址(或设备号,SLA)相区别,这个具体的单元地址称为偏移地址。
7.为访问I2C器件E2PROM,请写出写入N字节的指令格式。
//Offset;
要访问的目的器件数据的偏移地址
//Size;
要访问的单元字节个数
//*RamBuf;
要写的数据存放在内存中的起始地址
voidE2promWrite(ucharOffset,ucharSize,uchar*RamBuf)
{
12cStart();
//发起始信号
WrtByte(EEPROM);
//写入器件地址
WrtByte(Offfset);
//写入要访问的单元地址
While(Size--)
{WrtByte(*RamBuf++);
//写1字节
I2cStop();
一般I2C指令格式
(a)I2C指令中,时钟信号SCL由主CPU发出;
(b)数据信号SDA由读写方向决定主或从器件发出;
•写N字节指令(对当前地址,无偏移)
数据由CPU发出,响应信号A由被写芯片发出。
SLAW是器件地址(例如A0H)
•读N字节指令(对当前地址,无偏移)
数据由被读芯片发出,响应信号A和/A由CPU发出。
SLAR是器件地址+1(例如A1H)
E2PROM的I2C指令中通常还要包含存储器内部单元的偏移地址。
•写N字节指令
SLAW是器件地址(A0H),WordAdr是单元偏移地址DataN。
•读N字节指令
SLAW是器件地址(A0H),SLAR是器件地址+1(A1H),WordAdr是单元偏移地址。
•注意:
读指令有2次开始信号
(4)与普通的I2C器件访问指令相比,由于E2PROM器件中有多个单元,为了访问到特定单元,所以必须指定要访问的单元的地址(WordAdr)。
为了与器件地址(或设备号,SLA)相区别,这个具体的单元地址称为偏移地址。
E2PROM的读指令,相当于先通过一条写指令来指定单元偏移地址,然后再用一条读当前地址的指令来完成读过程。
8.编写向E2PROM写入1字节数据时的子程序。
(5)写1字节到E2PROM
voidWrtByte(uncharTempB)
{unchari;
//写1字节
for(i=0;
i<
8;
i++)
{if(TempB&
0x80)//数据由高位到低位
SDA=1;
else
SDA=0;
_nop_();
SCL=1;
TempB=TempB<
<
1;
SCL=0;
//准备读应答信号
while(SDA==1);
//等待低电平应答信号
9.编写从E2PROM读出1字节数据时的子程序
读1字节内容
uncharReadByte()//读1字节内容
{unchari,DataByte;
//准备读管脚
DataByte=0;
i<
i++)
{SCL=1;
DataByte=DataByte<
if(SDA==1)//读取1位数据,由高到低
DataByte|=0x01;
returnDataByte;
//返回1字节数据