文档库 最新最全的文档下载
当前位置:文档库 › 微机控制实验报告

微机控制实验报告

微机控制实验报告
微机控制实验报告

实验一代码转换

1.1 实验任务1:

设计并调试一个程序,将片内20H单元中8位无符号二进制数转化为BCD码,结果存入以30H开始的单元中。

1.1.1 程序分析及流程图:

8位无符号二进制数最多可转化为3位BCD码。可以首先定义两个指针,分别为*ori和*temp,指向20H和30H的单元地址,然后利用除法,将20H中二进制数逐渐分离出个位、十位和百位,改变指针的内容,依次存入30H开始的地址空间中。流程图如下所示。

1.1.2实验代码:

#include

unsigned char data *ori;

unsigned char data *temp;

void main()

{

ori=0x20;

temp=0x30;

*ori=123;

*temp=(*ori)/100*16;

*temp=*temp+((*ori)/10)%10;

temp++;

*temp=(*ori)%10*16;

while(1);

}

1.1.3实验结果截图:

执行程序之后,打开存储器,在20H单元中可以看到存储值为7B,而在30H开头的单元中为123,故转化结果正确。结果如下图所示。

1.2 实验任务2:

设计并调试一个程序,将片内以20H开始的单元中的4字节无符号二进制数转化为BCD码,结果存入以30H开始的单元中,低位字节在低地址端。

1.2.1程序分析:

与上相同也可以用除法来实现,将原数除10取余就得到最后一位数,再将除10得到的结果重复这一步,即除10取余,就可以得到倒数第二位数。同理,做一个循环就能取出每一位数。但需要注意一个字节的数值大小,以免溢出。流程如如下所示。

1.2.2实验代码:

#include "c8051f020.h"

#include

unsigned char data *ptr1,*ptr2;

void main(void)

{

unsigned long int tmp=0;

int i,j;

ptr1=0x20;

ptr2=0x30;

*ptr1=0x012

*(ptr1+1)=0x034

*(ptr1+2)=0x056;

*(ptr1+3)=0x078;

for(i=3;i>=0;i--)

{ tmp=tmp*256+*(ptr1+i); }

while(temp!=0);

{

*ptr2=tmp%10;

tmp=tmp/10;

ptr2++;

}

}

1.2.3 实验结果:

为避免20H开始的数据计算之后丢失,将其保存至temp中间变量中。

20H开始的单元存放4字节数据为12345678H(即十进制305419896),运行上述程序后:

(30H)→6, (31H)→9, (32H)→8, (33H)→9, (34H)→1, (35H)→4, (36H)→5, (37H)→0, (38H)→3

1.3 实验任务3:

设计并调试一个程序,将累加器A中的二进制数(0~F)转化为ASCII码,结果仍放在A中。

1.3.1程序分析:

从上表可看出,判断累加器A的数值大小,若在0~9则直接加30H;若在A~F则加37H。

1.3.2实验代码:

#include "c8051F020.h"

void main (void)

{

unsigned char A;

ACC=0x0B;

A=ACC;

if (A>=10) A=A+0x37;

else A=A+0x30;

ACC=A;

}

1.3.3实验结果:

运行程序后,A的内容为32H;若A初始化为0X0B,则运行程序后A的内容为42H。

实验二液晶显示程序设计

2.1 实验任务1:

设计并调试一个显示程序,利用所提供液晶显示器滚动显示123456这六个数字,并以每字符500毫秒的速度向右移动循环。

2.1.1程序分析及流程图:

因例程中已写好各数字的点阵表,可直接用函数LCDC_DispWord()调用显示;每字符500毫秒右移动循环,可用延时程序并在循环里依次将显示的数字在LCD上右移实现。

数字的显示函数:void LCDC_DispWord (unsigned char x, y, unsigned char code *p, unsigned char line, length, Flag),其中x、y表示显示字符的坐标,*p表示显示字符的代码。

延时函数:void Delay_ms(unsigned int times),其中times表示延时的毫秒数。利用LCDC_DispWord ()函数显示数据,利用Delay_ms()延时500ms,将数字循环移位。

流程图如下所示:

2.1.2实验代码:

void main (void)

{

int m=0;

unsigned char pa=16;

unsigned char x,loc=1;

WDTCN = 0XDE; //关狗

WDTCN = 0XAD;

SYSCLK_Init ();

PORT_Init ();

LCDC_Init ();

LCDC_DisFull (Clr);

while (1)

{

LCDC_DisFull (Clr); //清屏

//依次在新的位置上显示各数字

LCDC_DispWord (0+5*m, 2, WLib_1_4x8, 1, 5, 1);

LCDC_DispWord (5+5*m, 2, WLib_2_5x8, 1, 5, 1);

LCDC_DispWord (10+5*m, 2, WLib_3_5x8, 1, 5, 1);

LCDC_DispWord (15+5*m, 2, WLib_4_6x8, 1, 5, 1);

LCDC_DispWord (20+5*m, 2, WLib_5_5x8, 1, 5, 1);

LCDC_DispWord (25+5*m, 2, WLib_6_5x8, 1, 5, 1);

//延时500ms

Delay_ms (500);

//若移到尽头,则返回;否则继续

if(m>=18)m=0;

else m++;

}

}

2.1.3实验结果

程序运行后,液晶显示器滚动显示123456这六个数字,并以每字符500毫秒的速度向右移动循环。

2.2实验任务2:

实现秒表计时功能。用键盘产生中断控制秒表的开始和停止。

2.2.1程序分析及流程图:

编程思路如上;利用延时函数设定时间,延时结束后将时间发送至LCD显示;

调用键盘扫描程序GetKey(),根据相应键值实现秒表的启动、停止和清零。

通过函数LCDC_DispWord(),显示数字0~9,经过显示转换将以秒计时的累计结果,按照时间显示形式显示在屏幕上。

2.2.2实验代码:

#include "main.h"

unsigned char key; //定义键值变量

void xs(int i,int step)

{switch(i)

{

case 0:LCDC_DispWord (step, 40, WLib_0_5x8, 1, 5, 1); break; case 1:LCDC_DispWord (step, 40, WLib_1_4x8, 1, 5, 1);break; case 2:LCDC_DispWord (step, 40, WLib_2_5x8, 1, 5, 1);break; case 3:LCDC_DispWord (step, 40, WLib_3_5x8, 1, 5, 1);break; case 4:LCDC_DispWord (step, 40, WLib_4_6x8, 1, 5, 1);break; case 5:LCDC_DispWord (step, 40, WLib_5_5x8, 1, 5, 1);break; case 6:LCDC_DispWord (step, 40, WLib_6_5x8, 1, 5, 1);break; case 7:LCDC_DispWord (step, 40, WLib_7_5x8, 1, 5, 1); break; case 8:LCDC_DispWord (step, 40, WLib_8_5x8, 1, 5, 1); break; case 9:LCDC_DispWord (step, 40, WLib_9_5x8, 1, 5, 1); break; default: break;

}

}

void main (void)

{int ms=0,mg=0,ss=0,sg=0;int p=1,q=1;//禁止看门狗定时器

WDTCN = 0xde; WDTCN = 0xad;//初始化

SYSCLK_Init (); PORT_Init (); Key_Init();LCDC_Init();LCDC_DisFull(Full);

Delay_ms(500);LCDC_DisFull(Clr);Delay_ms(500);

while(1)

{if(p==0)

{q=1;LCDC_DisFull(Clr);

xs(ms,40);xs(mg,45);

LCDC_DispWord (50, 40, WLib_ddot_3x8, 1, 3, 1);

xs(ss,56);xs(sg,61);

Delay_ms(100);

sg=sg+1;

if(sg>9)

{ ss++;sg=0;

if (ss>5)

{mg++;ss=0;

if(mg>9)

{ms++;mg=0;

if(ms>5)

ms=0;}}}}

if(p==1)

{LCDC_DisFull(Clr);xs(ms,40);xs(mg,45);

LCDC_DispWord (50, 40, WLib_ddot_3x8, 1, 3, 1);

xs(ss,56);xs(sg,61);

if(q==0)

{ms=0;mg=0;ss=0;sg=0;}}

key=GetKey(); //调用键盘扫描函数,返回的键值送变量key

if(key!=0xFF) //键值有效执行按键程序

{Alarm(1); Delay_ms(50);Alarm(0); //响铃和关闭铃声

switch (key)

{case 0x00:p=0;break;

case 0x01: p=1;break;

case 0x02: p=1;q=0;break;}}

Delay_ms(500);

}2.2.3 实验结果

程序运行后,从0开始计时,并以时间格式实时显示在屏幕上,按下键盘上的A键后,进入中断,开始画点;再按下C键,停画点,继续秒表继续开始计时。

2.3实验任务3:

实现日历功能,并将日历显示在液晶屏上。

2.3.1程序分析及流程图:

2.3.2实验代码:

void main (void)

{

unsigned char xdata keyvalue; //按键值

bit Cir_Flag,Change_Flag;

//Cir_Flag时间显示状态标志位;Change_Flag时间设置状态标志位

unsigned char Count_Flag;

//时间设置修改量位号变量,与Flag0-6及void Flag_Set(unsigned char dat)配合完成修改量选择//以及选定修改量反色显示标志位设置

WDTCN = 0xde; // disable watchdog timer

WDTCN = 0xad;

SYSCLK_Init();

PORT_Init();

LCDC_Init();

SMBusInit();

Key_Init();

LCDC_DisFull(Full); //全屏

Delay_ms(500);

LCDC_DisFull(Clr); //清屏

dis_start0();

Delay_ms(500);

Flag_Set(0xff); //选定修改变量标志位初始化

ENABLE_INTERRUPTS;

while(1)

{

keyvalue=GetKey(); //调用键盘扫描函数,返回的键值送变量key if(keyvalue!=0xFF)

{

Alarm(1); //响铃

Delay_ms(50);

Alarm(0); //关闭铃声

switch (keyvalue)

{

case 0x0a:

Cir_Flag=1; //时间显示状态有效

LCDC_DisFull(Clr); //清屏

ENABLE_INTERRUPTS; //开中断

//时间显示状态下恒显示字符显示程序

LCDC_DispWord(0,16,&WLib_shi_16x16,2,16,1);

LCDC_DispWord(16,16,&WLib_jian_16x16,2,16,1);

LCDC_DispWord(32,16,&WLib_maohao_8x16,2,8,1);

LCDC_DispWord(64,16,&WLib_maohao_8x16,2,8,1);

LCDC_DispWord(88,16,&WLib_maohao_8x16,2,8,1);

LCDC_DispWord(0,32,&WLib_ri_16x16,2,16,1);

LCDC_DispWord(16,32,&WLib_qi_16x16,2,16,1);

LCDC_DispWord(32,32,&WLib_maohao_8x16,2,8,1);

LCDC_DispWord(64,32,&WLib_heng_8x16,2,8,1);

LCDC_DispWord(88,32,&WLib_heng_8x16,2,8,1);

LCDC_DispWord(0,48,&WLib_xing_16x16,2,16,1);

LCDC_DispWord(16,48,&WLib_qi_16x16,2,16,1);

LCDC_DispWord(32,48,&WLib_maohao_8x16,2,8,1);

while(Cir_Flag)

//时间显示状态在时间显示有效的循环内实现两大部分功能:时间显示键值检测及功能{

RTC_Read(); //更新返回的时间值

//****************************时间显示

***************************************//

LCDC_DispWord(48,16,&WLib_Num_8x16[(df[2]&0x3f)/16*16],2,8,Flag4);

LCDC_DispWord(56,16,&WLib_Num_8x16[(df[2]&0x3f)%16*16],2,8,Flag4);

LCDC_DispWord(72,16,&WLib_Num_8x16[(df[1]&0x7f)/16*16],2,8,Flag5);

LCDC_DispWord(80,16,&WLib_Num_8x16[(df[1]&0x7f)%16*16],2,8,Flag5);

LCDC_DispWord(96,16,&WLib_Num_8x16[(df[0]&0x7f)/16*16],2,8,Flag6);

LCDC_DispWord(104,16,&WLib_Num_8x16[(df[0]&0x7f)%16*16],2,8,Flag6);

LCDC_DispWord(48,32,&WLib_Num_8x16[df[6]/16*16],2,8,Flag1);

LCDC_DispWord(56,32,&WLib_Num_8x16[df[6]%16*16],2,8,Flag1);

LCDC_DispWord(72,32,&WLib_Num_8x16[(df[5]&0x1f)/16*16],2,8,Flag2);

LCDC_DispWord(80,32,&WLib_Num_8x16[(df[5]&0x1f)%16*16],2,8,Flag2);

LCDC_DispWord(96,32,&WLib_Num_8x16[(df[3]&0x3f)/16*16],2,8,Flag3);

LCDC_DispWord(104,32,&WLib_Num_8x16[(df[3]&0x3f)%16*16],2,8,Flag3);

if ((df[4]&0x07)!=0x00)

LCDC_DispWord(71,48,&WLib_Num_8x16[(df[4]&0x07)*16],2,8,Flag0);

else //返回值为"0"是星期日

LCDC_DispWord(71,48,&WLib_Num_8x16[7*16],2,8,Flag0);

//***************************键值检测

****************************************//

keyvalue=GetKey(); //调用键盘扫描函数,返回的键值送变量key

if(keyvalue!=0xFF)

{

Alarm(1); //响铃

Delay_ms(50);

Alarm(0); //关闭铃声

if(keyvalue==0x0f) //***返回开机界面***//

{

LCDC_DisFull(Clr);

dis_start0();

Cir_Flag=0;

}

else if(keyvalue==0x0b) //***时间设置***//

{

Change_Flag=~Change_Flag;

if(Change_Flag==1) //进入时间设置状态

{

Count_Flag=0; //选定设置星期参数

Flag_Set(Count_Flag); //设置星期参数显示设定

update[6]=df[6]; //更新设置数组

update[5]=df[5];

update[4]=df[4];

update[3]=df[3];

update[2]=df[2];

update[1]=df[1];

}

else //退出时间设置状态

{

Count_Flag=0xff; //取消所有时间参数设置

Flag_Set(Count_Flag); //取消时间参数显示设置}

}

else if(keyvalue==0x09) //***选择时间参数***//

{

if(Change_Flag==1) //是否在时间设置状态下否则此次无效{

Count_Flag++;

if(Count_Flag==0x07)

Count_Flag=0x00;

Flag_Set(Count_Flag);

}

}

else if(keyvalue==0x0d) //***被选定时间参数数值增加***// {

if(Change_Flag==1) //是否在时间设置状态下否则此次无效{

switch (Count_Flag) //转入修改参数对应程序

{

case 0x00: //星期

update[4]++;

if((update[4]&0x0f)>0x06)

update[4]=0x00;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x01: //年

update[6]++;

if((update[6]&0x0f)>0x09)

update[6]=(update[6]+0x10)&0xf0;

if(update[6]>0x99)

update[6]=0x00;

update[0]=df[0];//秒值保留原值不更新

case 0x02: //月

update[5]++;

if((update[5]&0x0f)>0x09)

update[5]=(update[5]+0x10)&0x10;

if(update[5]>0x12)

update[5]=0x01;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x03: //日

update[3]++;

if((update[3]&0x0f)>0x09)

update[3]=(update[3]+0x10)&0x30;

if(update[3]>0x31)

update[3]=0x01;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x04: //时

update[2]++;

if((update[2]&0x0f)>0x09)

update[2]=(update[2]+0x10)&0x30;

if(update[2]>0x23)

update[2]=0x00;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x05: //分

update[1]++;

if((update[1]&0x0f)>0x09)

update[1]=(update[1]+0x10)&0x70;

if(update[1]>0x59)

update[1]=0x00;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x06: //秒

update[0]=0x00;

default:

break;

}

RTC_Set(); //更新后的时间值设置到实时芯片}

}

else if(keyvalue==0x0e) //***被选定时间参数数值减少***// {

if(Change_Flag==1) //是否在时间设置状态下否则此次无效{

switch (Count_Flag) //转入修改参数对应程序

{

case 0x00: //星期

if(update[4]==0x00)

update[4]=0x06;

else

update[4]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x01: //年

if(update[6]==0x00)

update[6]=0x99;

else if((update[6]&0x0f)==0x00)

update[6]=(update[6]-0x10)|0x09;

else

update[6]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x02: //月

if(update[5]==0x01)

update[5]=0x12;

else if(update[5]==0x10)

update[5]=0x09;

else

update[5]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x03: //日

if(update[3]==0x01)

update[3]=0x31;

else if((update[3]&0x0f)==0x00)

update[3]=(update[3]-0x10)|0x09;

else

update[3]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x04: //时

if(update[2]==0x00)

update[2]=0x23;

else if((update[2]&0x0f)==0x00)

update[2]=(update[2]-0x10)|0x09;

else

update[2]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x05: //分

if(update[1]==0x00)

update[1]=0x59;

else if((update[1]&0x0f)==0x00)

update[1]=(update[1]-0x10)|0x09;

else

update[1]--;

update[0]=df[0];//秒值保留原值不更新

break;

case 0x06: //秒

update[0]=0x00;

break;

default:

break;

}

RTC_Set(); //更新后的时间值设置到实时芯片

}

}

} //按键检测及功能部分执行完毕

} //时间显示状态循环体结束

break;

case 0x0f:

LCDC_DisFull(Clr);

dis_start0();

break;

default: break;

}

}

Delay_ms(500);

}

}

2.3.3 实验结果

程序运行后,液晶显示初始界面,按A10键进入日历的显示界面。日历界面显示当前的年、月、日、时、分和秒,如果时间与显示不相符,可以进行相应的调节,使得时间与显示相同,从而实现日历功能。

实验三串行通信程序设计

3.1实验目的:

掌握C8051单片机串行通讯程序设计方法。

3.2实验任务:

设计并调试一个串行通讯程序,利用单片串行端口将片外RAM中以3000H为起始地址的1024个字节通过串行发送端口A输出,并以自闭环的形式由串行接收口B接收,并存储到以4000H为起始地址的空间中。

3.3实验分析及流程图:

可以在一片外RAM的以3000H起始的地址中存放一系列数据。

3.4实验主程序:

void main (void)

{

unsigned char xdata *p1;

unsigned char xdata *p2;

unsigned char i,k,temp;

WDTCN=0xDE; //禁止看门狗定时器

WDTCN=0xAD;

SYSCLK_Init();

PORT_Init();

k=0;

p1=0x3000;

p2=0x4000;

for (i=0;i<1024;i++)

{

*p1=0x27;

p1++;

}

Uart0_Init(BaudRate_115200);

Uart1_Init(BaudRate_115200);

while(1)

{

Uart0_SendByte(*p1); //p1的数据通过串口0发送出去

Delay_ms(5);

temp=Uart1_ReceiveData(); //串口1接收的数据

Delay_ms(5);

if (temp!=0xff&&k<1024) //串口1接收的数据是否有效

{

*p2=temp;

p2++;

p1++;

k++;

}

}

}

3.5 实验结果截图

在程序中,在以3000H为起始地址的1024个字节中都写入27H。程序运行后,查看3000H~33FFH 中写入的都是27H,4000H~43FFH中接受到的从3000H~33FFH传来的数据都是27H,实现程序要求

的功能。

部分运行结果数据如下图所示:

微机系统实验报告

西安电子科技大学 实验报告

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握 DOS 功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC 机一台。 三、实验内容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 2. 在屏幕上显示自己的学号姓名信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。 4. 自主设计输入显示信息,完成编程与调试,演示实验结果。 四、实验源码 DA TA SEGMENT DISCHA DB'WangHan 14030188004',0AH,0DH,'$' TAB DB' ',0AH,0DH,'$' BLANK DB' $' DA TA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK START: MOV AX,SEG DISCHA MOV DS,AX MOV DX,OFFSET DISCHA MOV AH,09H INT 21H NEXT: MOV AH,01H INT 21H CMP AL,'Q' JE ENDSS

CMP AL,'q' JE ENDSS MOV BL,AL MOV AX,SEG BLANK MOV DS,AX MOV DX,OFFSET BLANK MOV AH,09H INT 21H MOV BH,0AH MOV DL,BL MOV CL,04H SHR DL,CL CMP DL,BH JNL Q3 JMP Q2 Q1: ADD DL,07H Q2: ADD DL,30H MOV AH,02H INT 21H MOV DL,BL MOV DH,0FH AND DL,DH CMP DL,BH JNL Q3 JMP Q4 Q3: ADD DL,07H Q4: ADD DL,30H MOV AH,02H INT 21H MOV AX,SEG TAB MOV DS,AX MOV DX,OFFSET TAB MOV AH,09H INT 21H MOV CX,0009H LOOP NEXT

微机控制技术实验报告

《微机控制技术》课程设计报告 课题:最少拍控制算法研究专业班级:自动化1401 姓名: 学号: 指导老师:朱琳琳 2017年5月21日

目录 1. 实验目的 (3) 2. 控制任务及要求 (3) 3. 控制算法理论分析 (3) 4. 硬件设计 (5) 5. 软件设计 (5) 无纹波 (5) 有纹波 (7) 6. 结果分析 (9) 7. 课程设计体会 (10)

1.实验目的 本次课程设计的目的是让同学们掌握微型计算机控制系统设计的一般步骤,掌握系统总体控制方案的设计方法、控制算法的设计、硬件设计的方法。学习并熟悉最少拍控制器的设计和算法;研究最少拍控制系统输出采样点间纹波的形成;熟悉最少拍无纹波控制系统控制器的设计和实现方法。复习单片机及其他控制器在实际生活中的应用,进一步加深对专业知识的认识和理解,使自己的设计水平、对所学知识的应用能力以及分析问题解决问题的能力得到全面提高。 2.控制任务及要求 1.设计并实现具有一个积分环节的二阶系统的最少拍有纹波控制和无纹波控制。 对象特性G (s )= 采用零阶保持器H 0(s ),采样周期T =,试设计单位阶跃,单位速度输入时的有限拍调节器。 2.用Protel 、Altium Designer 等软件绘制原理图。 3.分别编写有纹波控制的算法程序和无纹波控制的算法程序。 4.绘制最少拍有纹波、无纹波控制时系统输出响应曲线,并分析。 3.控制算法理论分析 在离散控制系统中,通常把一个采样周期称作一拍。最少拍系统,也称为最小调整时间系统或最快响应系统。它是指系统对应于典型的输入具有最快的响应速度,被控量能经过最少采样周期达到设定值,且稳态误差为定值。显然,这样对系统的闭环脉冲传递函数)(z φ提出了较为苛刻的要求,即其极点应位于Z 平面的坐标原点处。 1最少拍控制算法 计算机控制系统的方框图为: 图7-1 最少拍计算机控制原理方框图 根据上述方框图可知,有限拍系统的闭环脉冲传递函数为: ) ()(1)()()()()(z HG z D z HG z D z R z C z +==φ (1) )(1)()(11)()()(1z z HG z D z R z E z e φφ-=+== (2) 由(1) 、(2)解得:

计算机控制系统实验报告

南京理工大学 动力工程学院 实验报告 实验名称最少拍 课程名称计算机控制技术及系统专业热能与动力工程 姓名学号 成绩教师任登凤

计算机控制技术及系统 一、 实验目的及内容 通过对最少拍数字控制器的设计与仿真,让自己对最少拍数字控制器有更好的理解与认识,分清最少拍有纹波与无纹波控制系统的优缺点,熟练掌握最少拍数字控制器的设计方法、步骤,并能灵巧地应用MATLAB 平台对最少拍控制器进行系统仿真。 (1) 设计数字调节器D(Z),构成最少拍随动控制系统,并观察系统 的输出响应曲线; (2) 学习最少拍有纹波系统和无纹波系统,比较两系统的控制品质。 二、实验方案 最少拍控制器的设计理论 r (t ) c(t ) e*(t) D (z) E (z) u*(t) U (z) H 0(s )C (z) Gc (s ) Φ(z) G(z) R(z) 图1 数字控制系统原理图 如图1 的数字离散控制系统中,G C (S)为被控对象,其中 H(S)= (1-e -TS )/S 代表零阶保持器,D(Z)代表被设计的数字控制器,D(Z)的输入输出均为离散信号。 设计步骤:根据以上分析 1)求出广义被控对象的脉冲传递函数G (z ) 2)根据输入信号类型以及被控对象G (z )特点确定参数q, d, u, v, j, m, n 3)根据2)求得参数确定)(z e Φ和)(z Φ 4)根据 )(1) ()(1)(z z z G z D Φ-Φ= 求控制器D (z ) 对于给定一阶惯性加积分环节,时间常数为1S ,增益为10,采样周期T 为1S 的对象,其传递函数为:G C (S) =10/S(S+1)。 广义传递函数: G(z)=Z [])()(s G s H c ?=Z ?? ?????--)(1s G s e c Ts =10(1-z -1 )Z ??????+)1(12s s =3.68×) 368.01)(1() 717.01(1 111------+z z z z

微机实验报告(1)

《微机实验》报告 实验名称 KeilC的使用与汇编语言上机操作 指导教师刘小英 专业班级中法1201 姓名肖洋学号 U3 联系电话 一、任务要求 1.掌握KeilC环境的使用 1)字节拆分、合并:调试程序,观察相关寄存器和单元的内容。 2)数据块填充:调试程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八 位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。 二、设计思路 1.字节拆分、合并程序:利用汇编语言中的 XCHD 和 SWAP 两个语句来实现将八位二进制 数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD 码与 30H 相或(加 上 30H)得到 ASCII 码。将两个 ASCII 码和 0FH 相与(高四位清零)得到 BCD 码,利 用 SWAP 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。 2.数据块填充程序:将 R0 用作计数器,DPTR 用作片外数据指针,A 作为原始数据来源, 依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单 元个数为片外 100H 个。(通过 R0 的进位控制) 3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于 20H 和 21H 中,把第二个十六位无符号数的地八位和高八位分别存于 30H 和 31H 中,对 20H 和 30H 中的两个低八位进行 ADD 加法操作,结果存于 R4 中;然后对 21H 和 31H 中的两 个高八位进行 ADDC 带进位的加法操作,结果存于 R3 中.然后将累加器 A 清零,并和#00H

计算机网络实验报告 答案讲解

计算机网络实验报告 专业计算机科学与技术 班级计102 学号109074057 姓名王徽军 组号一组D 指导教师毛绪纹 安徽工业大学计算机学院 二○一二年十二月

目录 实验总体说明 (3) 实验一以太网帧的构成 (3) 实验三路由信息协议RIP (8) 实验四传输控制协议TCP (10) 实验五邮件协议SMTP、POP3、IMAP (12) 实验六超文本传输协议HTTP (14)

实验总体说明 1.实验总体目标 配合计算机网络课程的教学,加强学生对计算机网络知识(TCP/IP协议)的深刻理解,培养学生的实际操作能力。 2.实验环境 计算机网络协议仿真实验室: 实验环境:网络协议仿真教学系统(通用版)一套 硬件设备:服务器,中心控制设备,组控设备,PC机若干台 操作系统:Windows 2003服务器版 3.实验总体要求 ●按照各项实验内容做实验,记录各种数据包信息,包括操作、观察、记录、分析, 通过操作和观察获得直观印象,从获得的数据中分析网络协议的工作原理; ●每项实验均提交实验报告,实验报告的内容可参照实验的具体要求,但总体上应包 括以下内容:实验准备情况,实验记录,实验结果分析,算法描述,程序段,实验过程中遇到的问题以及对思考问题的解答等,实验目的、实验原理、实验步骤不需要写入实验报告中。 实验一以太网帧的构成 实验时间:_____________ 成绩:________________ 实验角色:_____________ 同组者姓名:______________________________

练习一:领略真实的MAC帧 q....U 00000010: 85 48 D2 78 62 13 47 24 58 25 00 00 00 00 00 00 .H襵b.G$X%...... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ 练习二:理解MAC地址的作用 ●记录实验结果 表1-3实验结果 本机MAC地址源MAC地址目的MAC地址是否收到,为什么 主机B 8C89A5-7570BB 8C89A5-757113 8C89A5-7570C1 是,主机A与主机B接在同一共享模块 主机D 8C89A5-771A47 8C89A5-757113 8C89A5-7570C1 是,主机C与主机D接在同一共享模块 主机E 8C89A5-757110 无无否,与主机A、C都不在同一共享模块 主机 F 8C89A5-7715F8 无无否,与主机A、C都不在同一共享模块 练习三:编辑并发送MAC广播帧 ●结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。 答:该地址为广播地址,作用是完成一对多的通信方式,即一个数据帧可发送给同一网段内的所有节点。 练习四:编辑并发送LLC帧 ●实验结果 帧类型发送序号N(S)接受序号N(R) LLC 001F 0 ●简述“类型和长度”字段的两种含义 答:一是如果字段的值小于1518,它就是长度字段,用于定义下面数据字段的长度;二是如果字段的值大于1536,用于定义一个封装在帧中的PDU分组的类型。 思考问题: 1.为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层? 答:出于厂商们在商业上的激烈竞争,IEEE的802委员会未能形成一个统一的、最佳的局域网标准,而是被迫制定了几个不同标准,如802.4令牌总线网、802.5令牌环网等。为了使数据链路层能更好地适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层,即逻辑链路控制

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

计算机控制系统实验报告

计算机控制系统实验报告 学院:核自院 姓名:李擂 专业:电气工程及其自动化 班级:电气四班 学号:201006050407

实验一采样实验 一.实验目的 了解模拟信号到计算机控制的离散信号的转换—采样过程。 二.实验原理及说明 采样实验框图如图4-3-1所示。计算机通过模/数转换模块以一定的采样周期对B5单元产生的正弦波信号采样,并通过上位机显示。 在不同采样周期下,观察比较输入及输出的波形(失真程度)。 图4-3-1采样实验框图 计算机编程实现以不同采样周期对正弦波采样,调节函数发生器(B5)单元的“设定电位器1”旋钮,并以此作为A/D采样周期T。改变T 的值,观察不同采样周期下输出波形与输入波形相比的复原程度(或失真度)。 对模拟信号采样首先要确定采样间隔。采样频率越高,采样点数越密,所得离散信号就越逼近于原信号。采样频率过低,采样点间隔过远,则离散信号不足以反映原有信号波形特征,无法使信号复原,。 合理的采样间隔应该是即不会造成信号混淆又不过度增加计算机的工作量。采样时,首先要保证能反映信号的全貌,对瞬态信号应包括整个瞬态过程;信号采样要有足够的长度,这不但是为了保证信号的完整,而且是为了保证有较好的频率分辨率。 在信号分析中,采样点数N一般选为2m的倍数,使用较多的有512、1024、2048、4096等。 三、实验内容及步骤 采样实验框图构成如图4-3-1所示。本实验将函数发生器(B5)单元“方波输出”作为采样周期信号,正弦波信号发生器单元(B5)输出正弦波,观察在不同的采样周期信号对正弦波采样的影响。 实验步骤: (1)将函数发生器(B5)单元的正弦波输出作为系统输入,方波输出作为系统采样周期输入。 ①在显示与功能选择(D1)单元中,通过上排右按键选择“方波/正弦波”的指示灯亮,(B5)模块“方波输出”测孔和“正弦波输出”测孔同时有输出。‘方波’的指示灯也亮,调节B5单元的“设定电位器1”,使之方波频率为80Hz左右(D1单元右显示)。 ②再按一次上排右按键,“正弦波”的指示灯亮(‘方波’的指示灯灭),B5的量程选择开关S2置上档,调节“设定电位器2”,使之正弦波频率为0.5Hz(D1单元右显示)。调节B5单元的“正弦波调幅”电位器,使之正弦波振幅值输出电压= 2.5V左右(D1单元左显示)。(3)构造模拟电路:按图4-3-1安置短路套及测孔联线,表如下。 (4)运行、观察、记录: ①再运行LABACT程序,选择微机控制菜单下的采样和保持菜单下选择采样实验项目,就会弹出虚拟示波器的界面,点击开始后将自动加载相应源文件,即可选用本实验配套的虚拟示波器(B3)单元的CH1测孔测量波形

微机实验报告3

南京工程学院 电力工程学院 2011/ 2012 学年第 1 学期 实验报告 课程名称微机原理及应用 实验项目名称顺序结构程序设计 实验学生班级监控091 实验学生姓名 实验时间 2011.10.23 实验地点电力工程基础实验室8-216 实验报告成绩:评阅教师签字: 年月日电力工程学院二OO七年制

说明 1. 实验报告为实验的重要考核依据之一,每个实验必须定一份实验报告. 本实验报告原则上要求手写。 2.本实验报告各项内容的具体格式、字数可由指导教师根据实验具体情况提出具体要求。各项内容可另附页,为便于归档,附页尺寸不得大于本实验报告尺寸,并注意粘牢于附页粘贴处。 3. 实验报告封面中的“实验名称”应为实验教学大纲上所列的规范名称,“实验地点”应写出实验室的具体名称。请确认无误后再填写。 4. 实验报告的建议格式为: 一、实验目的和要求; 二、主要实验仪器和设备; 三、本次实验内容 (一)实验项目名称(按本次实验各项目填写) 1、原理或接线图 2、实验步骤及注意事项 3、实验预习过程中所遇到问题…… 四、实验记录及数据处理(主要内容包括实验具体实施步骤、实验原始数据、计算过程与结果、数据曲线、图表等。具体格式按指导教师要求) 五、实验结论(主要内容包括本实验小结、实验体会或疑问等。具体格式按指导教师要求) 5. 实验成绩由实验预习、实验表现、实验报告三部分组成。其中前两项各占总成绩的30%。实验报告成绩依据报告的科学性、全面性、规范性及书写态度综合考核。实验报告采用百分制,占实验总成绩的40%,教师请阅本报告后需签字并给出实验报告百分制成绩。 6. 实验报告需按要求时间以班级为单位交给指导教师,最长时间不得超过两周,实验报告如有明显抄袭者或不交者,实验总评成绩按 0 分记。

实验报告答案

实验2:MIPS指令系统和MIPS体系结构 一.实验目的 (1)了解和熟悉指令级模拟器 (2)熟悉掌握MIPSsim模拟器的操作和使用方法 (3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解 (4)熟悉MIPS体系结构 二. 实验内容和步骤 首先要阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言。(1)、启动MIPSsim(用鼠标双击MIPSsim.exe)。 (2)、选择“配置”->“流水方式”选项,使模拟器工作在非流水方式。 (3)、参照使用说明,熟悉MIPSsim模拟器的操作和使用方法。 可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。 (4)、选择“文件”->“载入程序”选项,加载样例程序 alltest.asm,然后查看“代码”窗口,查看程序所在的位置(起始地址为0x00000000)。 (5)、查看“寄存器”窗口PC寄存器的值:[PC]=0x00000000。 (6)、执行load和store指令,步骤如下: 1)单步执行一条指令(F7)。 2)下一条指令地址为0x00000004,是一条有 (有,无)符号载入字节 (字节,半字,字)指令。 3)单步执行一条指令(F7)。 4)查看R1的值,[R1]= 0xFFFFFFFFFFFFFF80 。 5)下一条指令地址为0x00000008,是一条有 (有,无)符号载入字 (字节,半字,字)指令。 6)单步执行1条指令。 7)查看R1的值,[R1]=0x0000000000000080 。 8)下一条指令地址为0x0000000C ,是一条无 (有,无)符号载入字节 (字节,半字,字)指令。 9)单步执行1条指令。 10)查看R1的值,[R1]= 0x0000000000000080 。 11)单步执行1条指令。 12)下一条指令地址为0x00000014 ,是一条保存字 (字节,半字,字)指令。 13)单步执行一条指令。

微机汇编语言编程系统实验报告

微机系统实验报告 实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验设备 PC机一台。 三、实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 (2) 在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示

出对应字符的ASCII码,直到输入“Q”或“q”时结束。 (4)自主设计输入显示信息,完成编程与调试,演示实验结果。 考核方式:完成实验内容(1)(2)(3)通过, 完成实验内容(4)优秀。 实验中使用的DOS功能调用:INT 21H 表3-1-1 显示实验中可使用DOS功能调用

四、实验步骤 (1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。 (2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。

(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。按F9连续运行。 (4)更改数据区的数据,考察程序的正确性。 五、实验程序 DATA SEGMENT BUFFER DB '03121370konglingling:',0AH,0DH,'$' BUFFER2 DB 'aAbBcC','$' BUFFER3 DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX mov ah,09h mov DX,OFFSET BUFFER int 21h MOV SI,OFFSET BUFFER2

计算机温度控制实验报告1

目录 一、实验目的---------------------------------2 二、预习与参考------------------------------- 2 三、实验(设计)的要求与数据------------------- 2 四、实验(设计)仪器设备和材料清单-------------- 2 五、实验过程---------------------------------2 (一)硬件的连接- --------- ----------------------- 2 (二)软件的设计与测试结果--------------------------3 六、实验过程遇到问题与解决--------------------11 七、实验心得--------------------------------12 八、参考资料-------------------------------12

一、实验目的 设计制作和调试一个由工业控制机控制的温度测控系统。通过这个过程学习温度的采样方法,A/D变换方法以及数字滤波的方法。通过时间过程掌握温度的几种控制方式,了解利用计算机进行自动控制的系统结构。 二、预习与参考 C语言、计算机控制技术、自动控制原理 三、实验(设计)的要求与数据 温度控制指标:60~80℃之间任选;偏差:1℃。 1.每组4~5同学,每个小组根据实验室提供的设备及设计要求,设计并制作出实际电路组成一个完整的计算机温度控制测控系统。 2.根据设备情况以及被控对象,选择1~2种合适的控制算法,编制程序框图和源程序,并进行实际操作和调试通过。 四、实验(设计)仪器设备和材料清单 工业控制机、烘箱、温度变送器、直流电源、万用表、温度计等 五、实验过程 (一).硬件的连接 图1 硬件接线图

微机保护实验报告

微机保护实验报告 试验一 变压器差动保护试验 一、 试验目的 1.熟悉变压器纵差保护的组成原理及整定值的调整方法。 2.了解差动保护制动特性的特点,加深对微机保护的认识。 3.学习微机型继电保护试验测试仪的测试原理和方法 差动保护作为变压器的主保护,配置有波形对称原理的差动保护和差动电流速断保护。其中,差动电流速断保护能在变压器区内严重故障时快速跳开变压器的各侧开关。 二、试验原理 电力变压器是电力系统中不可缺少的电力设备。其故障分为内部故障和外部故障两种。电流差动保护不但能够正确的区分区内外故障,而且不需要与其他元件的保护配合,就可以无延时地切除区内各种故障,具有独特的特点而被广泛的用作变压器的主保护。图1所示为三绕组变压器差动保护的原理接线图。图2为工况下,变压器相关电气量的向量关系图。 这里以Y/△-11主变接线为例,传统继电器差动保护是通过把主变高压侧的二次CT 接成△,把低压侧的二次CT 接成Y 型,来平衡主变高压侧与低压侧的30度相位差的,然后再通过二次CT 变比的不同来平衡电流大小的,接线时要求接入差动继电器的电流要相差180度,即是逆极性接入。 而微机保护要求接入保护装置的各侧CT 均为Y 型接线,显而易见移相是通过软件来完成的,下面来分析一下微机软件移相原理。变压器差动保护软件移相均是移Y 型侧,对于?侧电流的接线,TA 二次电流相位不调整。电流平衡以移相后的Y 型侧电流为基准,△侧电流乘以平衡系数来平衡电流大小。若?侧为△-11接线,软件移相的向量图如图2。 1I 、2I 分别为变压器一次侧和二次侧的电流,参考方向为母线指向变压器;'1I 、'2I 分别为相应的电流互感器二次侧电流。流入差动继电器KD 的电流为: ''12 r I I I =+ 保护动作的判据为: 图1差动保护接线图 图2工况向量关系图

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

计算机控制系统实验报告2

江南大学物联网工程学院 《计算机控制系统》 实验报告 实验名称实验二微分与平滑仿真实验 实验时间2017.10.31 专业班级 姓名学号 指导教师陈珺实验成绩

一、实验目的与要求 1、了解微分对采样噪音的灵敏响应。 2、了解平滑算法抑制噪音的作用。 3、进一步学习MATLAB 及其仿真环境SIMULINK 的使用。 二、仿真软硬件环境 PC 机,MATLAB R2012b 。 三、实验原理 如图微分加在正反馈输入端,计算机用D(Z)式进行微分运算。R 为阶跃输入信号,C 为系统输出。由于微分是正反馈,当取合适的微分时间常数时,会使系统响应加快。若微分时间常数过大,则会影响系统稳定性。 四、D(Z)设计 1、未平滑时的D(Z) 用一阶差分代替微分运算: )1()()()(1--==Z T T Z X Z Y Z D D 式中T D为微分时间常数,T 为计算机采样周期。 2、平滑后的D(Z) 微分平滑运算原理如图: 取Y *(k)为四个点的微分均值,有 )331(6)()()( )33(6 )5 .15.05.05.1(4)( 321321221*-----------+==∴--+=-+-+-+-= Z Z Z T T Z X Z Y Z D X X X X T T X X X X X X X X T T K Y D K K K K D K K K K D x t + ○R

五、SIMULINK仿真结构图 七、思考题 1、微分噪音与采样噪音和采样周期T有什么关系?与微分时间常数有什么关系? 2、平滑后系统输出有无改善?是否一定需要平滑?

微机实验报告

实验报告 课程名称微型计算机系统原理及应用(第五版)实验课时 实验项目汇编语言实现c=a+b 实验时间 1 指导老师实验成绩 实验目的(本次上机实验所涉及并要求掌握的知识点)熟练掌握编写汇编语言源程序的基本方法和基本框架熟练使用debug调试程序 掌握用Dos功能调用,实现字符的输入与显示 汇编语言实现c=a+b 实验环境DosBox 0.74 实验内容汇编语言程序上机——通过键盘输入两个数(两个数相加不超9),两数相加后输出在屏幕上步骤: 汇编语言的汇编过程 程序运行步骤及生成的文件 (1)编辑程序(try1.asm文件) myfile.asm 编辑程序 汇编程序 链接程序 myfile.crf otherfiles.obj myfile.lst myfile.obj myfile.map myfile.exe 编辑汇编链接 无错 编辑程序 EDIT 可执行文件 EXE 二进制目标文件 OBJ 源程序 ASM 有错

在dos界面下输入try1 *.asm可以看到d盘中的masm文件夹下有try1.asm文件 (2)汇编程序 给list文件命名:try1 引用文件名可以默认, 会发现无警告性错误,也无致命性错误 在无错的情况下汇编成二进制文件try1.obj

(3)链接程序 (4)执行程序 总结(对上机实验结果进行分析,上机心得体会及改进意见通过本次上机,我学习到了如下内容: (1)我对汇编语言的汇编与执行一个程序有了一定了解 首先用notepad(不只是notepad) 编辑程序,将其放于masm文件夹下。然后,在dos环境下通过“masm 文件名.asm”命令生成汇编语言源程序文件(ASM文件)。源程序不能被计算机直接执行,所以要经过汇编程序加以翻译,这个翻译过程称为编译过程或汇编过程,就是把源程序文件翻译成二进制代码所表示的目标文件——OBJ文件。若源程序中有语法错误,则汇编结束后,汇编程序将指出源文件中的语法错误,就需要重新使用编辑程序来修正源程序中的语法错误,直至得到无误的ASM文件和OBJ文件。若无错,OBJ文件虽然已是二进制机器指令码的形式,但计算机仍不能直接执行,还必须用“link 文件名”命令把目标文件与库文件或其它目标文件进行链接和在内存中重新定位,生成可直接执行文件(EXE文件)。这时的EXE文件才可以由DOS装入内存储器并运行。通过“文件名.exe”命令即可运行程序。 (2)我对常用的dos功能调用有了一定了解 1号调用——单字符调用 通过键盘输入字符,将字符的ASCII码送入寄存器AL中,并在屏幕上显示该字符 2号调用——单字符显示 将DL寄存器中的字符送显示器显示 9号调用——显示字符串 将当前内存缓冲区中以‘$’结尾的字符串送显示器显示。 0a号调用——回车 0d号调用——换行 存在的问题: 分别输入两个数后,必须要分别将各自的高位屏蔽,如果不屏蔽结果就输出符号(错误的),但是我想既然是两个加起来不大于9的数相加,那是否屏蔽高位应该没有影响吧?这里有疑问

华中科技大学计算机操作系统实验报告

实验目的 掌握Linux操作系统的使用方法; 了解Linux系统内核代码结构; 掌握实例操作系统的实现方法。 一、实验要求 1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux 下的编程环境。 ●编一个C程序,其内容为实现文件拷贝的功能; ●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结 果。要求用到Linux下的图形库。 2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。 另编写一个应用程序,调用新增加的系统调用。 实现的功能是:文件拷贝; 3、掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动 程序,其功能可以简单。 实现字符设备的驱动; 4、了解和掌握/proc文件系统的特点和使用方法 ●了解/proc文件的特点和使用方法 ●监控系统状态,显示系统中若干部件使用情况 ●用图形界面实现系统监控状态。 5、设计并实现一个模拟的文件系统(选作) 二、实验一 1、编一个C程序,其内容为实现文件拷贝的功能 要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。 主要用到的头文件: #include #include 设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目 的文件,直到源文件指针到文件尾,最后关闭2个文件。 在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。 理清楚设计思路后,首先搭建linux下编程环境。 安装gcc:sudo apt-get install build-essential 安装codeblocks:sudo apt-get install codeblocks 在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c,将程序编译并生成exe可执行文件。 然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

炉温控制实验报告 -计算机控制系统

Beijing Jiaotong University 计算机控制系统实验 炉温控制实验 学院:电子信息工程学院 姓名: 学号: 指导教师: 时间:

炉温控制实验 一、实验目的 1、了解温度控制系统的特点。 2、研究采样周期T对系统特性的影响。 3、研究大时间常数系统PID控制器的参数的整定方法。 二、实验仪器 1、计算机控制系统实验箱一台 2、PC计算机一台 3、炉温控制实验对象一台 三、基本原理 1、系统结构图示于图1-1。 图1-1 系统结构图 图中 Gc(s)=Kp(1+Ki/s+Kds) Gh(s)=(1-e-TS)/s Gp(s)=1/(Ts+1) 2、系统的基本工作原理 整个炉温控制系统由两大部分组成,第一部分由计算机和A/D&D/A卡组成,主要完成温度采集、PID运算、产生控制可控硅的触发脉冲,第二部分由传感器信号放大,同步脉冲形成,以及触发脉冲放大等组成。炉温控制的基本原理是:改变可控硅的导通角即改变电热炉加热丝两端的有效电压,有效电压的可在0~140V内变化。可控硅的导通角为0~5CH。温度传感是通过一只热敏电阻及其放大电路组成的,温度越高其输出电压越小。外部LED灯的亮灭表示可控硅的导通与

闭合的占空比时间,如果炉温温度低于设定值则可控硅导通,系统加热,否则系统停止加热,炉温自然冷却到设定值。 3、PID递推算法: 如果PID调节器输入信号为e(t),其输送信号为u(t),则离散的递推算法为: Uk=Kpek+Kiek2+Kd(ek-ek-1) 其中ek2是误差累积和。 四、实验内容: 1、设定炉子的温度在一恒定值。 2、调整P、I、D各参数观察对其有何影响。 五、实验步骤 1、启动计算机,双击桌面“计算机控制实验”快捷方式,运行软件。 2、测试计算机与实验箱的通信是否正常,通信正常继续。如通信不正常查找原因使通信正常后才可以继续进行实验。 3、20芯的扁平电缆连接实验箱和炉温控制对象,检查无误后,接通实验箱和炉温控制的电源。 4、在实验项目的下拉列表中选择实验七[七、炉温控制] 鼠标单击按钮,弹出实验课题参数设置对话框,选择PID,在参数设置窗口设置炉温控制对象的给定温度以及Ki、Kp、Kd值,点击确认在观察窗口观测系统响应曲线。测量系统响应时间Ts和超调量。 5、重复步骤4,改变PID参数,观察并记录波形的变化。 六、PID参数整定 1、比例部分整定。 首先将积分系数KI和微分系数KD取零,即取消微分和积分作用,采用纯比例控制。将比例系数KP由小到大变化,观察系统的响应,直至速度快,且有一定范围的超调为止。如果系统静差在规定范围之内,且响应曲线已满足设计要求,那么只需用纯比例调节器即可。

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

计算机习题及实验报告册参考答案

习题及实验(一) 第一部分习题 一、简答题 (略) 第二部分选择题答案(p3) 1.C 2. A 3. B 4. C , C 5. B , B 6. A 7. A, B, B 8. B, D 9. D 10. C 注: 7.(1) 应为: 1010011.001 习题及实验(二) Windows XP 第一部分习题 一、简答题 1. 简述Windows“资源管理器”窗口的组成。 答:Windows资源管理器”窗口上部是菜单栏和工具栏。工具栏包括标准按钮栏、地址栏和链接栏。窗口中分为两个区域:左窗口和右窗口。左窗口中有一棵文件夹树,显示计算机资源的结构组织,称为“文件夹树型结构框”或“文件夹框”。右窗口中显示左窗口中选定的对象所包含的内容,称为“当前文件夹内容框”,或简称为“文件夹内容框”。左窗口和右窗口之间是一个分隔条。窗口底部是状态栏。 2. 什么是“快捷菜单”?如何打开Windows XP的快捷菜单?不同对象的快捷菜单的内容是否相同? 答:当用鼠标右击一个对象(项目)时,会出现一个快捷菜单。不同对象的快捷菜单的内容是不相同的。 3. 简述文件和文件夹的概念以及它们的命名规则。 ①在文件名或文件夹名中,名字总长度最多可以有255个字符。其中,包含驱动器和完整路径信息, ②命名必须遵循唯一性原则,即在同一目录下的文件名必须惟一。 文件名或文件夹名中出现的合法字符包括:26个英文字母(大、小写)、0~9十个数字和一些特殊字符。特殊字符包括:$、&、@、!、^、~、_、?、(、)、{、}等。不能出现以下字符:\、│、/、:、*、?、“、<、>等9个字符。 ③不区分英文字母大小写。 4. 回收站的功能是什么?怎样利用回收站恢复被删除的文件及彻底删除回收站中 的文件? 答:回收站”就相当于一个垃圾箱,用于暂时存放从硬盘文件夹或桌面上被删除的文件及其他对象。 双击桌面上的回收站图标,在打开的窗口中选中要恢复文件,单击“文件”菜单下的“还

微机系统的组装与配置实验报告

微机系统的组装与配置实验报告

计算机学院综合性实验 实验报告 课程名称微机与外设维护维修技术 实验学期 2015 至 2016 学年第 2 学期 学生所在院系计算机学院 年级 2013 专业班级计 学生姓名学号 2013 任课教师 实验成绩 计算机学院制

一、硬件拆卸部分 1、主板的型号及功能、性能说明: 主板是电脑系统中最大的一块电路板,主板上布满了各种电子元件、插槽、接口等。它为CPU、内存和各种功能(声、图、通信、网络、TV、SCSI等)卡提供安装插座(槽);为各种磁、光存储设备、打印机和扫描仪等I/O设备以及数码相机、摄像头、调制解调器等多媒体和通讯设备提供接口,实际上电脑通过主板将CPU等各种器件和外部设备有机地结合起来形成一套完整的系统。 主板的标准结构是根据主板上各元器件的布局排列方式、主板的尺寸大小及形状、所使用的电源规格等。 目前市场上PC的主板主要有ATX、Micro ATX和BTX等结构。 2、CPU的型号及功能、性能说明: 中央处理器(CPU)是一块超大规模集成电路芯片,它是整个计算机系统的核心。CPU主要包括运算器、控制器和寄存器三个部件。这三个部件相互协调,使他们可以进行分析、判断、运算并控制计算机各部分协调工作。其中运算器主要完成各种算术运算和逻辑运算;而控制器是指挥中心,控制运算器及其他部件工作,它能对指令进行分析,作出相应的控制;寄存器用来暂时存放运算中的中间结果或数据。 CPU的性能指标: 字长或位数; 主频、外频、FSB频率; 高速缓冲存储器; 指令扩展技术; CPU的制造工艺; CPU的核心代号; 超线程技术; 多核心技术; 虚拟化技术; 可信执行技术。 3、硬盘的型号及功能、性能说明: 硬盘主要是有固定面板、控制电路板、磁头组、盘面组、主轴电机、接口、及其附件组成。其中磁头组和盘片组件是构成硬盘的核心,它们被封装在硬盘的净化腔体内,包括浮动磁头组件、磁头驱动机构、盘片组、主轴驱动装置级读写控制电路几个部分。 温切斯特硬盘的特点:磁盘旋转,磁头径向运动,磁头悬浮在磁片上方,用磁存储信息。 磁盘技术: RAID技术(廉价磁盘冗余阵列),使用磁盘驱动器的方法,是将一组磁盘驱动器用某种逻辑方式联系起来,作为逻辑上的一个大容量磁盘驱动器来使用。(RAID0、RAID1、RAID0+1、RAID3、RAID5模式);

相关文档