电子科技大学选修单片机实验报告

电子科技大学选修单片机实验报告
电子科技大学选修单片机实验报告

电子科技大学学院实验报告

实验名称现代电子技术综合实验

姓名:

学号:

评分:

教师签字

电子科技大学教务处制

电子科技大学

实验报告

学生姓名:学号:指导教师:熊万安

实验地点:211大楼308 实验时间:

一、实验室名称:单片机技术综合实验室

二、实验项目名称:数码管显示A/D转换电压值及秒表

三、实验学时:12

四、实验目的与任务:

1、熟悉系统设计与实现原理

2、掌握KEIL C51的基本使用方法

3、熟悉实验板的应用

4、连接电路,编程调试,实现各部分的功能

5、完成系统软件的编写与调试

五、实验器材

1、PC机一台

2、实验板一块

六、实验原理、步骤及内容

试验要求:

①、数码管可在第2位到第4位显示A/D转换的电压值,

可调电压,数码管第5位显示“-”号,第6、7位显示2位学

号;

②、再按按键key1进行切换,此时数码管第6、7位显示从

学号到(学号值+5秒)的循环计时秒表,时间间隔为1秒。

按按键key2时,秒表停止计数,再按按键key2时,秒表继续

计数。按按键key1可切换回任务1的显示。

③、当电压值大于2伏时,按按键不起作用。

1、硬件设计

2、各部分硬件原理

(相关各部分例如:数码管动态扫描原理;TLC549ADC特征及应用等)

(1)数码管动态扫描原理

多位联体的动态数码管段选信号abcdefg和dp(相当于数据线是公用的,而位选信号com是分开的。扫描方法并不难,先把第1个数码管的显示数据送到abcdefg和dp,同时选通com1,而其它数码管的com信号禁止;延时一段时间(通常不超过10ms),再把第二个

数码管的显示数据送到abcdefg和dp,同时选通com2,而其他数码管的com信号禁止;延时一段时间,再显示下一个。注意,扫描整个数码管的频率应当保证在50Hz 以上,否则会看到明显的闪烁。

(2)TLC549ADC特征及应用等

当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB (A7)自DAT端输出,接着要求自CLK端输入8个外部时钟信号,前7个CLK信号的作用,是配合TLC549 输出前次转换结果的A6-A0 位,并为本次转换做准备:在第4个CLK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个CLK 信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。转换时间为36 个系统时钟周期,最大为17us。直到A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者CLK 时钟端保持36个系统时钟周期的低电平。由此可见,在自TLC549的CLK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模

拟信号采样并保持;启动本次A/D转换开始。

(3)共阴极数码管

共阴极数码管的一段连在一起接地,所以给一个高电平,相应的段位发光。

(4)按键逻辑

按键逻辑是连接在P2.0到P2.7的。当按键不按下的时候,输入为高电平,当按下按键,P2.x口与地相连,输入为低电平,所以按键是低电平有效。

3、软件设计

(说明:我和另一个同学一起做的,所以在程序设计上增加了

一个状态)

思考题:按键改用外部中断模式,电路如何修改(画示意

图)?程序如何修改,写出中断服务程序。

若按键改成外部中断模式,即把按键key2连接在INT0上。

电路示意图为:

而中断服务程序为:

void T0INTSVC() interrupt 0

{

ET0=1;

EX0=1;

EA =1;

if(mbiao<2600&&TR0==1)mbiao=mbiao+1;

if(mbiao==2600)mbiao=2000;

y10=mbiao/1000;

y=(mbiao-y10*1000)/100;

}

七、总结及心得体会

通过本实验课程的学习,我初步掌握了KEIL C51的基本使用方法,并能够自主连接电路,编程调试,实现各部分的功能,进而整合自己所学知识进行简单的编程,完成一系列组合实验。与此同时,我对中断和定时有了较深入的了解,对单片机的认识也有了进一步的提

高。

八、对本实验过程及方法、手段的改进建议

在本实验的实现过程中有几个问题需要注意:1、数码管是采取的动态扫描,所以位选频率一定要高于50Hz才能使人眼不能看到闪烁。2、实验软件的环境配置没有针对本地开发板进行默认配置,所以有同学会出现下载到开发板而不能运行,如果有初始配置的话,程序的调试会更加方便。

九、附录

1、程序

/*

利用TLC549 A/D转换器实现电压测量与显示

*/

#include //包含8051的SFR寄存器定义头文件

#include //扩展并行接口所需的绝对地址访问库函数#define LED_dig XBYTE[0x9000] //8位数码管显示器的位选输出控制

#define LED_seg XBYTE[0x8000] //8位数码管显示器的段码(字形码)输出控制

#define KEY_IN XBYTE[0x8000]

//定义TLC549操作接口

sbit ADC_CS = P1^7;

sbit ADC_DA TA = P1^6;

sbit ADC_CLK = P1^5;

code unsigned char disp_seg[]= //显示段码

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x 71,0x40,0x00,0xff};

// 0 1 2 3 4 5 6 7 8 9 a b c d

e f - blank,全亮

unsigned char DispBuf[8]; //定义显示缓冲区(由定时中断程序自动扫描)

unsigned char key_value; //定义按键

int flag; //定义状态标志

unsigned char y10,y; //定义秒表的个位,十分位

unsigned short mbiao; //定义秒表计数单元

void delay(int ms); //延时大约1ms unsigned char ReadAdc(void); //读取A/D转换结果void AdcInit(void); //初始化ADC接口void key_scan(void);

void main()

{

unsigned char i=0;

unsigned char volt, x100, x10, x;

TMOD &= 0x0f;

TMOD |= 0x10;

TH1 = 0xFC;

TL1 = 0x66;

TR1 = 1;

ET1 = 1;

TMOD &= 0xf0;

TMOD |= 0x01;

TH0 = 0xdc;

TL0 = 0x00;

TR0 = 1;

ET0 = 1;

EA =1;

AdcInit();

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

DispBuf[i] = 17; //全部8位显示灭

y10=2;

y=0;

mbiao=2000;

flag=0;

while(1)

{

while(flag ==0) //初始状态—学号状态{

volt = ReadAdc(); //得到A/D转换结果的数字量(0x00~0xff)volt = volt * 250/256; //转换成电压值,其中Vr=2.5V

x100 = volt/100;

x10 = (volt - x100*100)/10;

x = (volt - x100*100)%10;

DispBuf[7] = 17;

DispBuf[6] = x100;

DispBuf[5] = x10;

DispBuf[4] = x;

DispBuf[3] = 16;

DispBuf[2] = 0;

DispBuf[1] = 8;

DispBuf[0] = 17;

delay(100);

if(key_value == 8&&volt<=200){flag = 3;while(key_value == 8);}

}

while(flag==1) //计数状态

{

TR0=1;

volt = ReadAdc();

volt = volt * 250/256; //转换成电压值,其中Vr=2.5V

x100 = volt/100;

x10 = (volt - x100*100)/10;

x = (volt - x100*100)%10;

DispBuf[0] = 17;

DispBuf[1] = y;

DispBuf[2] = y10;

DispBuf[3] = 16;

DispBuf[4] = x;

DispBuf[5] = x10;

DispBuf[6] = x100;

DispBuf[7] = 17;

if(key_value == 8&&volt<=200){flag = 0;while(key_value == 8);} else if(key_value == 7&&volt<=200){flag = 2;while(key_value == 7);}

}

while(flag==2) //计数暂停状态

TR0=!TR0;

if(key_value == 7)

{

flag = 1;

while(key_value == 7);

}

}

while(flag==3) //学号状态

{

volt = ReadAdc(); //得到A/D转换结果的数字量(0x00~0xff)

volt = volt * 250/256; //转换成电压值,其中Vr=2.5V

x100 = volt/100;

x10 = (volt - x100*100)/10;

x = (volt - x100*100)%10;

DispBuf[7] = 17;

DispBuf[6] = x100;

DispBuf[5] = x10;

DispBuf[4] = x;

DispBuf[3] = 16;

DispBuf[2] = 2;

DispBuf[1] = 0;

DispBuf[0] = 17;

delay(100);

if(key_value == 8&&volt<=200){flag = 1;mbiao=2000;while(key_value == 8);}

}

}

}

/*

函数:T1INTSVC()

功能:定时器T1的中断服务函数

*/

void T1INTSVC() interrupt 3

{

code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

static unsigned char n = 0;

TH1 = 0xfc;

TL1 = 0x66;

TR1 = 1;

LED_dig = 0xFF; //暂停显示

if(flag==0)

{

if(n==6)

LED_seg = ~(disp_seg[DispBuf[n]]|0x80);

else

LED_seg = ~disp_seg[DispBuf[n]];//更新扫描数据

}

if(flag==1)

{ if(n==6)

LED_seg = ~(disp_seg[DispBuf[n]]|0x80);

else

if(n==4)

LED_seg = ~( disp_seg[DispBuf[n]] ); //更新扫描数据,else

LED_seg = ~disp_seg[DispBuf[n]]; //更新扫描数据}

if(flag==2)

{

LED_seg = ~disp_seg[DispBuf[n]]; //更新扫描数据}

if(flag==3)

{

if(n==6)

LED_seg = ~(disp_seg[DispBuf[n]]|0x80);

else

LED_seg = ~disp_seg[DispBuf[n]];//更新扫描数据

}

LED_dig = ~com[n]; //重新显示

key_scan();

n++;

n &= 0x07;

}

void delay(int ms)

{

unsigned int i,j;

for(i=0; i

for(j=0; j<100; j++)

;

}

}

/*

函数:ReadAdc()

功能:读取A/D转换结果

返回:8位ADC代码

*/

unsigned char ReadAdc(void)

{

unsigned char d; //读取得ADC结果

unsigned char n; //ADC bit位计数

ADC_CS = 0;

n = 5;

while ( --n != 0 ); //模拟tsu时间

n = 8;

do

{

d <<= 1;

if ( ADC_DA TA )

d = d | 0x01; //或d++;

ADC_CLK = 1;

ADC_CLK = 0;

}while ( --n != 0 );

ADC_CS = 1;

return d;

}

/*

函数:AdcInit()

功能:初始化ADC接口

*/

void AdcInit(void)

{

ADC_CS = 1;

ADC_CLK = 0;

ADC_DATA = 1;

ReadAdc(); //空读一次,用于启动一次A/D转换过程}

void key_scan(void)

{

unsigned char key_in;

key_in = KEY_IN;

switch(key_in)

{

case 0xff:

key_value = 0;

break;

case ~0x01:

key_value = 1;

break;

case ~0x02:

key_value = 2;

break;

case ~0x04:

key_value = 3;

break;

case ~0x08:

key_value = 4;

break;

case ~0x10:

key_value = 5;

break;

case ~0x20:

key_value = 6;

break;

case ~0x40:

key_value = 7;

break;

case ~0x80:

key_value = 8;

break;

default:

break;

}

}

/*

函数:T1INTSVC()

功能:定时器T0的中断服务函数

*/

void T0INTSVC() interrupt 1

{

TR0 = 0;

TH0 = 0xdc;

TL0 = 0x00;

TR0 = 1;

if(mbiao<2600&&TR0==1)mbiao=mbiao+1;

if(mbiao==2600)mbiao=2000;

y10=mbiao/1000;

y=(mbiao-y10*1000)/100;

}

单片机实验报告

PIC单片机原理与应用实验报告 学校: 学院: 班级: 姓名: 学号: 指导教师:

实验一I/O端口实验 一、实验目的 (1)掌握MPLAP IDE集成开发环境的基本操作。 (2)掌握单片机的I/O端口的设计方法。 (3)掌握在线调试器的使用方法。 (4)学会查阅相关数据手册。 二、实验仪器设备 (1)PC机一台; (2)MPLAP IDE开发软件一套; (3)PICkit3在线调试器一套; (4)APP009实验板一块; 三、实验要求 (1)设计发光LED灯闪烁程序,下载调试,验证功能。 (2)设计流水灯程序,或其他花样彩灯程序,下载调试,验证功能。 (3)设计按按键加1计数程序,下载调试,验证功能。 四、实验步骤 (1)连接在线调试器PICkit3、APP009实验板和计算机; (2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具; (3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电; (4)完成实现发光LED灯闪烁实验; 程序代码: #include void delay(void); int main() { while(1) { TRISEbits.TRISE0 = 0; //RE0设置为输出(1输入,0输出); https://www.360docs.net/doc/083518244.html,TE0 =1; //RE0=1输出高电平+5V,亮灯 delay(); //延时 https://www.360docs.net/doc/083518244.html,TE0 =0; //RE0=0输出低电平0V,灭灯 delay(); //延时 } } void delay(void) { long int i; for (i=0;i<65000;i++); } 实验现象:将程序下载到实验板上,运行程序,LED闪烁,通过改变延时函数改变延时时间,进而可以改变LED闪烁的频率。

电子科技大学 汇编 实验报告

计算机专业类课程 实 验 报 告 课程名称:汇编语言程序设计 学院:计算机科学与工程 专业:计算机科学与技术 学生姓名:郭小明 学号:2011060100010 日期:2013年12月24日

电子科技大学 实验报告 实验一 学生姓名:郭小明学号:2011060100010 一、实验室名称:主楼A2-412 二、实验项目名称:汇编源程序的上机调试操作基础训练 三、实验原理: DEBUG 的基本调试命令;汇编数据传送和算术运算指令 MASM宏汇编开发环境使用调试方法 四、实验目的: 1. 掌握DEBUG 的基本命令及其功能 2. 学习数据传送和算术运算指令的用法 3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程五、实验内容: 编写程序计算以下表达式: Z=(5X+2Y-7)/2 设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。 1.编辑源程序,建立一个以后缀为.ASM的文件. 2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。 3.连接目标程序,产生可执行程序。

4.用DEBUG程序调试可执行程序,记录数据段的内容。 六、实验器材(设备、元器件): PC机,MASM软件平台。 七、实验数据及结果分析: 程序说明: 功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。其中X 与Y 是已知量,Z是待求量。 结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),以及结果存放在VARZ,初始化为?。然后定义堆栈段,然后书写代码段,代码段使用顺序程序设计本程序,重点使用MOV和IMUL以及XOR,IDIV完成程序设计。详细内容见程序注释。 程序清单:

单片机实验报告

仲恺农业工程学院实验报告纸 自动化学院(院、系)工业自动化专业144班组单片机与嵌入式系统实验课学号201421714406姓名黄国盛实验日期2016年11月05日教师评定 实验一Keil C51集成开发环境的使用练习 一、实验目的 熟悉Keil C51集成开发环境的使用方法。 二、实验设备及器件 IBM PC机一台 三、实验内容 按照Keil C51软件的使用说明进行Keil C51集成开发环境的安装和使用练习,然后按照以下内容建立并编译产生HEX文件。 ORG0000H LJMP Main ORG00F0H Main: MOV R7,#0 Loop: MOV R6,#0 DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R7,Loop;延时 CPL P1.0;P1.0取反 CPL P1.1;P1.1取反 CPL P1.2;P1.2取反 CPL P1.3;P1.3取反 CPL P1.4;P1.4取反

CPL P1.5;P1.5取反 CPL P1.6;P1.6取反 CPL P1.7;P1.7取反 SJMP Main END 四、实验要求 熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。 五、实验预习要求 认真阅读Keil C51软件的使用说明。 六、实验思考题 试写一条把片内RAM50H~59H单元清零的程序。 实现程序如下: ORG0000h LJMP Main ORG0100H Main:MOV R0,#50H;立即数50H(内部RAM地址)传送到R0中 MOV R1,#10;立即数10(循环次数为10次)传送到R1中 MOV A,#0;立即数0传送到A,中将累加器A的值清0 LOOP:MOV@R0,A;将R0内容所指向的单元清0 INC R0;R0内容加1,修改地址指针 DJNZ R1,LOOP;减1不为0判断,若为真跳回循环,否,则运行下一语句 END;结束 七、实验总结 通过实验,熟悉80C51指令系统,熟悉Keil C51集成开发环境的使用方法,熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。加深对内部存储器读写的认识。

电子科大电子技术实验报告

电子科技大学 电子技术实验报告 学生姓名:班级学号:考核成绩:实验地点:仿真指导教师:实验时间: 实验报告内容:1、实验名称、目的、原理及方案2、经过整理的实验数据、曲线3、对实验结果的分析、讨论以及得出的结论4、对指定问题的回答 实验报告要求:书写清楚、文字简洁、图表工整,并附原始记录,按时交任课老师评阅实验名称:负反馈放大电路的设计、测试与调试

一、实验目的 1、掌握负反馈电路的设计原理,各性能指标的测试原理。 2、加深理解负反馈对电路性能指标的影响。 3、掌握用正弦测试方法对负反馈放大器性能的测量。 二、实验原理 1、负反馈放大器 所谓的反馈放大器就是将放大器的输出信号送入一个称为反馈网络的附加电路后在放大器的输入端产生反馈信号,该反馈信号与放大器原来的输入信号共同控制放大器的输入,这样就构成了反馈放大器。单环的理想反馈模型如下图所示,它是由理想基本放大器和理想反馈网络再加一个求和环节构成。 反馈信号是放大器的输入减弱成为负反馈,反馈信号使放大器的输入增强成为正反馈。四种反馈类型分别为:电压取样电压求和负反馈,电压取样电流求和负反馈,电流取样电压求和负反馈,电流取样电流求和负反馈。 2、实验电路

实验电路如下图所示,可以判断其反馈类型累电压取样电压求和负反馈。 3.电压取样电压求和负反馈对放大器性能的影响 引入负反馈会使放大器的增益降低。负反馈虽然牺牲了放大器的放大倍数,但它改善了放大器的其他性能指标,对电压串联负反馈有以下指标的改善。 可以扩展闭环增益的通频带 放大电路中存在耦合电容和旁路电容以及有源器件内部的极间电容,使得放大器存在有效放大信号的上下限频率。负反馈能降低和提高,从而扩张通频带。 电压求和负反馈使输入电阻增大 当 v一定,电压求和负反馈使净输入电压减小,从而使输入电流 s

单片机实验报告

单片机实验报告 班级:信科09-3 姓名:王艳辉 学号:08093581 指导老师:陈岱 完成时间:2012年1月8日

实验一 I/O接口P1、P3口实验 一,实验题目 1,用P1口做输出,接八只发光二极管,编写程序,使发光二极管循环点亮。 2,用P3口做输入口,接八个扭子开关,通过P1口在实验箱上LED 灯上输出,编写程序读取开关状态,将此状态,在发光二极管上显示出来。 二,实验目的 1.熟悉使用CPLD实验箱进行单片机实验的方法。 2.设计出符合实验要求的CPLD硬件电路。 3.学习单片机仿真开发软件Keil 51的使用方法。 4.学习MCS-51汇编语言编程方法。 5.学习Pl口的使用方法。 6.学习延时子程序的编写和使用。 三,实验准备 P1和P3口为准双向口,Pl、P3的每一位都能独立地定义为输出线或输入线,作为输入时,必须向锁存器相应位写入“l”,该位才能作为输入。803l中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“l”使它再成为一个输入。再来看一下延时程序的实现。现常用的有两种方法:一是用定时器中断来实现,一是用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。根据实验系统的工作主频,计算出延时0.1s的

时间常量,编制延时程序: MOV R7, #200 (1) DEl:MOy R6,#X (2) DE2:DJNZ R6,DE2 (3) DJNZ R7,DEl (4) 上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需1÷0.256us现求出X值: (X*1/0.256+1/0.256+l/0.256)*200+l/0.256=0.1*10^6。解出X=l26。代入上式可知实际延时约0.100O04s,近似符合要求。 四,实验步骤 (1)打开MAX+PLUSⅡ CPLD实验开发系统。 (2)点击File菜单Project子菜单之Name项,出现Project Name 对话框。为当前的实验选择恰当的路径并创建项目名称”E:\AT8031”。(3)点击File菜单之New项,出现对话框,为选择输入方式,选择Graphic Editor File。出现图形编辑窗口。 (4)双击空白编辑区,出现Enter Symbol 对话框。 (5)从Symbol Libraries项中选择mf子目录(双击),在prim子目录中选择输入脚input 和输出引脚output。 (6)在图形编辑窗口中的左侧点击连线按钮,并完成对电路的连线。(7)在引脚的PIN_NAME处左键双击使之变黑,键入引脚名称。

电子科大TCPIP第三次实验报告材料

实用文档 电子科技大学实 验 报 告 名:学生姓号:学TCP/IP协议名课程称: 教指导师:2016 年 11 日期:月 26 日 OSPF实验项目名称:协议的多区域特性分:告报评教师签字:

实用文档 一、实验原理 OSPF 协议(RFC 2328)是一个基于链路状态路由选择的内部网关协议:路由器仅 在网络拓扑变化时使用洪泛法(flooding)将自己的链路状态更新信息扩散到整个自治系统中。为了增强 OSPF 协议的可伸缩能力(Scalability),OSPF 协议引入了区域的概念来有效并及时的处理路由选择。OSPF 区域是包含在 AS 中的一些网络、主机和路由器的集合,自治系统中所有 OSPF 区域必须连接到一个主干区域(Area 0)上。 区域内的 OSPF 路由器(内部路由器,IR)使用洪泛法(flooding)传送本区域内的链路状态信息,区域边界的 OSPF 路由器(区域边界路由器,ABR)将本区域的信息汇总发给其他区域,自治系统边界的 OSPF 路由器(自治系统边界路由器,ASBR)将自治 系统外的路由(外部路由)发布在自治系统中。主干区域中的 OSPF 路由器也称为“主干路由器”(BR)。ABR 不能向 OSPF 残桩区域(Stub Area)通告外部路由。在多址网络中,为了避免不必要的链路状态洪泛,需要选举 1 个指定路由器(DR)和 1 个备份指定路由器(BDR)。OSPF 协议有 5 种类型的报文,它们被直接封装在 IP 分组中多播发送。 - 问候(Hello)报文:用来建立并维护 OSPF 邻接关系。在建立了邻接关系后, OSPF 路由器会定期发送 Hello 报文,来测试邻站的可达性。 - 数据库描述(DBD)报文:描述 OSPF 路由器的链路状态数据库的概要信息,即数据库中每一行的标题,它在两台相邻路由器彼此建立邻接关系时发送的。 - 链路状态请求(LSR)报文:由需要若干条特定路由信息的路由器发送出的,它的回答是 LSU 报文。新接入的路由器在收到 DBD 报文后,可以使用 LSR 报文请求关于某些路由的更多信息。 - 链路状态更新(LSU)报文:OSPF 的核心。OSPF 路由器使用 LSU 报文通告链路状态更新信息(即链路状态通告,LSA)每一个 LSU 报文可包含几个 LSA。, OSPF 协议的 LSA 有 5 种常用类型:路由器链路 LSA、网络链路 LSA、汇总链路到网络 LSA、汇总链路到 ASBR LSA 和外部链路 LSA。 5 种类型的 LSA这由不同类型的 OSPF 路由器产生,在特定类型的区域范围内扩散。 - 链路状态确认(LSAck)报文:用来确认每一个收到的 LSU 报文,使得 OSPF 协议的路由选择更加可靠。 二、实验目的 1、掌握 OSPF 协议中区域的类型、特征和作用 2、掌握 OSPF 路由器的类型、特征和作用 实用文档 3、掌握 OSPF LSA 分组的类型、特征和作用 4、理解 OSPF 区域类型、路由器类型和 OSPF LSA 分组类型间的相互关系

杭电自动化单片机实验报告

单片机原理与应用及 C51程序设计 实验报告 实验名称:单片机技术实验 实验一继电器控制输出实验 一、实验目的 1.掌握STC12C5A16S2单片机的最基本电路的设计; 2.了解单片机I/O端口的使用方法; 3.了解继电器和蜂鸣器控制电路以及小电压控制大电压的方法。

二、实验要求 1.利用STC12C5A16S2单片机的P1.2、P1.3口作按钮S9和S10输入,P1.0 和P1.1口作开关量输出,并分别控制一个5V的继电器和蜂鸣器。 2.当S9闭合时,P1.0控制继电器闭合并控制灯泡闪亮;当S9断开时,继 电器触电断开,灯泡不亮; 3.当S10闭合时,P1.1控制蜂鸣器闭合并发出声音;当S10断开时,蜂鸣 器不响。 三、电路 四、原理说明 Q1、Q2为9012三极管即PNP型,低电平导通,当S9或S10按下时,相应的IO口拉低,当P1.0或P1.1赋0时即可控制继电器的吸合活着蜂鸣器的发声。 五、程序代码 #include sbit L1=P1^1; sbit L2=P1^2; sbit L3=P1^3; sbit L0=P1^0;//定义位变量 void delay() { int i,j; for(i=0;i<250;i++) for(j=0;j<250;j++);//利用系统时钟,定义延时函数 }

void main () { int n=20; while(1) //不断循环检测 { if(L2==0) //判断S9输入 { while(n--) { L0=0; delay(); L0=1; delay(); //灯泡以2*delay为周期闪亮 } n=20; } if(L3==0) //判断S10闭合 { while(n--) { L1=0; delay(); L1=1; delay(); //蜂鸣器以2*delay为周期发声 } n=20; } } } 实验二 LED轮换点亮实验 一、实验目的 1.掌握STC12C5A16S2单片机的I/O电路设计; 2.学习SN74HC573数据锁存输出方法。 二、实验要求 1.利用SN74HC573对STC12C5A16S2单片机的P0进行扩展,驱动LED 控制输出; 2.编写程序,使P0.0~P0.7上的发光二极管循环点亮;P2.7控制 SN74HC573芯片的使能; 三、电路

单片机实验报告

南京晓庄学院电子工程学院 实验报告 课程名称:单片机系统设计与应用 姓名:森 专业:电子信息科学与技术 年级:14级 学号:05 2016年12 月1 日

实验项目列表 序号实验项目名称成绩指导教师 1 单片机仿真软件的使用 2 单片机I/O接口应用实验——流水灯 3 外部中断实验——工业顺序控制模拟 4 定时/计数器实验——矩形波 5 定时/计数器实验——计数器 6 综合实验 7 8 9 10 注: 1、实验箱端口为com6。 2、芯片选择切换到51 3、停止运行使用实验箱上的复位按钮

实验室号:___ 实验时间:成绩: 实验一仿真软件的使用 1.实验目的和要求 1)熟悉Keil C51软件界面,以及编辑、编译、运行程序的步骤; 2)掌握单片机仿真软件使用和调试的方法。 2.实验原理 Keil C51软件使用 在Keil C51集成开发环境下,建立一个工程并编辑源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。 3.主要仪器设备(实验用的软硬件环境) 安装有Keil C51软件的PC机1台 4.操作方法与实验步骤 Keil C51软件使用 (1)建立用户文件夹 (2)建立工程 (3)建立文件并编码。输入以下源程序,并保存在项目所在的目录中 (4)把文件加入工程中 (5)编译工程。编译时观察在界面下方的“Build”页中的到编译错误信息和使用的系统资源情况等。 (6)调试。利用常用调试命令,如复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令进行调试,观察并分析调试结果。 (7)目标代码文件的生成。运行生成相应的.HEX文件。 5.实验内容及程序 1)从DATA区地址起始地址为40H的连续10个内存单元的内容传送到XDATA区起始地址为2000H的10个内存单元中。 注意:DATA区地址起始地址为40H的连续10个内存单元必须先赋初值。 P83-5源程序 #include #define uchar unsigned char xdata unsigned char buffer1[10]_at_ 0x2000; //在xdata区定义数组变量BUF1,首地址为2000H data unsigned char buffer2[10]_at_ 0x40; //在data区定义数组变量BUF2,首地址为40H void main(void)

电子科大-系统结构实验-解决数据冒险

实 验 报 告 课程名称:计算机系统结构实验学院:计算机科学与工程学院专业:计算机科学与技术 指导教师:好老师 学生姓名:爱学习的小学生 20实验成绩: 日期:2017年5月19日

电子科技大学计算机学院实验中心 电子科技大学 实验报告 一、实验项目名称:解决数据冒险 二、实验室名称:主楼A2-412 实验时间:2017年5月19日 三、实验目的 在给出的流水线代码基础上,增加内部前推数据通路、暂停流水线数据通路和关闭写使能信号的数据通路,解决普通的数据冒险和load数据冒险,通过完成本次实验,更好地理解和掌握解决数据冒险的原理,学以致用,增强编写程序的能力。 四、实验原理 (一)数据冒险的定义 由于流水线上指令重叠执行,改变了原来串行执行的读/写操作数顺序,使得后面依赖前面指令结果的指令得不到准备好的数据,这样的现象叫做数据冒险(数据相关)。 回顾数据冒险的程序例子 I1: add r1,r2,r3 I2: sub r4,r1,r5 I3: and r6,r7,r1 I4: or r8,r1,r9 I5: addi r10,r1,100

I1下面有3条指令不能从寄存器r1读出正确的数据。 (二)数据冒险的解决方案 1、暂停流水线 如上图所示,暂停流水线到最初的指令执行完毕,可以解决数据冒险,但是会涉及到两个问题,即“如何检测出数据冒险”和“如何暂停流水线”。 如何检测数据冒险 a.比较器; I1指令写目的寄存器rd,I2和I3的源操作数是寄存器rs1或rs2中的数据,I2、I3的rs1或rs2与I1的目的寄存器号rd相等时才有可能发生数据冒险。 b.操作码参与检测; 由于指令格式中源寄存器号rs2与立即数部分重叠,而立即数是不会出现冒险的,因此,指令操作码必须要参与检测(区分是寄存器操作数还是立即数)。 c.WREG信号也应参与检测(实际上,WREG也是从操作码中得出的);

单片机实验报告

汇编语言程序设计 1)编译后,系统提示:目标越界,改为AJMP后编译通过,将ORG 07FFH 改为0800H, 系统提示:目标越界,这说明AJMP可以在2KB 范围内无条件转移。 2.改为LJMP编译通过,这说明LJMP可以在64KB 范围内无条件转移。 3.将LJMP LP1改为SJMP LP0,机器码为80FC,其中FC为偏移量,它是一个补码,01H~7FH说明向PC(增大√、减小)方向跳,80H~FFH说明向PC(增大、减小√)方向跳,这说明SJMP可以在当前PC值-128B~+127B 范围内无条件转移。 1、X、Y以补码的形式存放在20H、21H中,编写程序实现如下函数: 实验程序: MOV A,20H JZ ZREO JB ACC.7,NEG MOV 21H,#01H SJMP PEND ZREO:MOV 21H,A SJMP PEND NEG:MOV 21H,#0FFH PEND:SJMP$ END 结果记录: 1.将数89H存放于20H中,运行程序,观察到21H单元中的内容为FF; 2.将数05H存放于20H中,运行程序,观察到21H单元中的内容为01; 3.将数00H存放于20H中,运行程序,观察到21H单元中的内容为00; 2、将20H~27H中的压缩BCD码拆为两个单字节BCD码,存放在以2000H为首地址的外部RAM 中。 实验程序: MOV R0,#20H MOV R7,#08H MOV DPTR,#2000H LOOP:ACALL CZ INC R0

INC DPTR DJNZ R7,LOOP SJMP $ CZ:MOV A,@R0 SWAP A ANL A,#0FH MOVX @DPTR,A INC DPTR MOV A,@R0 ANL A,#0FH MOVX @DPTR,A RET END 结果记录: 20H 21H 22H 23H 24H 25H 26H 27H 87H 54H 36H 23 19H 43H 77H 69H 2000H 2002H2004H2006H2008H200AH200CH200EH 07H 04H 06H 03H 09H 03H 07H 09H 2001H 2003H2005H2007H2009H200BH200DH200FH 08H 05H 03H 02H 01H 04H 07H 06H 1、数在计算机中是以补码形式存放的,因此,判断数据的正负,往往采用判断第7 位,是0 则为正数,是1 则为正数 2、实验内容2中JZ ZREO 的机器码为600DH ,其中0DH 为偏移量,当前PC值0004 加上这个偏移量等于0011H ,这正是即将执行的程序的首地址,即标号为ZREO 语句。程序计算器PC的功能是指向下一条指令,因此,跳转语句是依靠偏移量来改变程序计数器PC的值,从而改变程序的流向。 3、分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用跳转(如SJMP)指令分隔,并跳转到相应标号。 4、子程序往往用间址寄存器传递数据,内部RAM用@Ri ,外部RAM用@DPTR ,绝对不能用直接地址。最后以RET 结尾。 5、循环程序往往用寄存器传递数据,用R7控制循环次数,用调用作为循环体,用指令INC 修改地址指针,用指令DJNZ 判断循环结束。 6、执行ACALL前(SP)= 07H ,执行ACALL时,(SP)= 09H ,(08H)= 09H ,(09H)= 00H ,(PC)= 000FH ,PC的值正是子程序的入口地址,而堆栈中这两个单元存放的是断点处PC的值;执行到RET后,(SP)= 07H , 原08H的值弹给(PC)7~0 ,原09H的值弹给(PC)15~8 ,因此,返回断点继续执行主程序。

单片机实验报告书

并行I/O接口实验 一、实验目的 熟悉掌握单片机并行I/O接口输入和输出的应用方法。 二、实验设备及器件 个人计算机1台,装载了Keil C51集成开发环境软件。https://www.360docs.net/doc/083518244.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管延时(0.5-1秒)循环点亮。实验原理图如图3.2-1所示。 图3.2-1单片机并行输出原理图 实验程序及仿真 ORG 0000H LJMP START ORG 0100H START:MOV R2,#8 MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A

DJNZ R2,LOOP LJMP START DELAY:MOV R5,#20 D1:MOV R6,#20 D2:MOV R7,#248 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END 中断实验 一、实验目的 熟悉并掌握单片机中断系统的使用方法,包括初始化方法和中断服务程序的编写方法。 二、实验设备及器件

个人计算机1台,装载了Keil C51集成开发环境软件。 https://www.360docs.net/doc/083518244.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (2)用P1口输出控制8个发光二极管LED1~LED8,实现未中断前8个LED闪烁,响应中断时循环点亮。 实验程序及仿真 ORG 0000H LJMP MAIN ORG 0003H LJMP INT00 ORG 0010H MAIN: A1:MOV A,#00H MOV P1,A MOV A,#0FFH MOV P1,A SETB EX0 JB P3.2,B1 SETB IT0 SJMP C1 B1:CLR IT0 C1:SETB EA NOP SJMP A1 INT00:PUSH Acc PUSH PSW MOV R2,#8 MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A DJNZ R2,LOOP

电子科大实验报告撰写格式规范

实验报告撰写格式规范 一、一般格式和顺序 1、封面: (1)题目:应能概括整个论文最重要的内容,具体、切题、不能太笼统,但要引人注目;题名力求简短,严格控制在25字以内。 (2)导师:指导教师的署名一律以批准招生的为准,如有变动应正式提出申请并报研究生院备案,且只能填写指导教师一名。 (3)学生姓名和学号。 2、摘要:论文第一页为中文摘要,约500-800字左右。 内容应包括工作目的、研究方法、成果和结论,语言力求精炼。 3、目录:应是实验报告的提纲,也是实验报告组成部分的小标题,其内容从第一章开始。 4、主要符号表:如果实验报告中使用了大量的物理量符号、标志、缩略词、专门计量单位、自定义名词和术语等,应编写成注释说明汇集表。假如上述符号和缩略词使用数量不多,可以不设专门的汇集表,而在论文中出现时加以说明。 5、引言(第一章):在实验报告正文前,内容为:该研究工作的实用价值或理论意义;实验报告所要解决的问题。 6、正文:是实验报告的主体。按照仿真的步骤来逐一完成。 7、结论(最后一章):应明确、精炼、完整、准确,使人只要一看结论就能全面了解实验报告的意义、目的和工作内容。 8、工作分工:阐述每个成员的工作。 9、参考文献:如有,在这里列出。 二、论文的书写 1、语言表述 (1)论文应层次分明、数据可靠、文字简练、说明透彻、推理严谨,立论正确,避免使用文学性质的带感情色彩的非学术性词语。 (2)论文中如出现一个非通用性的新名词、新术语或新概念,需立即解释清楚。 2、层次和标题 (1)层次要清楚:标题要重点突出,简明扼要。 (2)层次代号的格式如下: 第一章××××(居中书写) 1.1 ×××× 1.1.1 ×××× 3、页眉和页码 页眉: (1)对摘要、目录等前置部分,页眉全用各部分内容的标题。

实验报告(单片机实验报告)

1 双字节无符号数加法 例1: 双字节无符号数加法(R0 R1)+(R2 R3) → (R4 R5), R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节。已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h) 假设其和不超过16位。请编程。 org 0000h Ljmp start org 0050h start: mov R0,#93h mov R1, #79h mov R2,#25h mov R3, #0a4h mov A,R1 ADD A,R3 mov R5,A mov A,R0 ADDC A,R2 mov R4,A ss: jmp ss end 2双字节无符号数减法

例2: 双字节无符号数相减(R0 R1)-(R2 R3) → (R4 R5)。R0、 R2、R4存放16位数的高字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。同学自己可以设置被减数与减数数值 org 0000h Ljmp start org 0050h start: mov R0,#93h mov R1,#79h mov R2,#25h mov R3,#0a4h mov A,R1 CLR C SUBB A,R3 mov R5,A mov A,R0 SUBB A,R2 mov R4,A ss: jmp ss end 3双字节数乘以单字节数

例3: 利用单字节乘法指令,进行双字节数乘以单字节数运算。若被乘数为16位无符号数, 地址为M1(30H) 和M1+1(31H)(低位先、高位后), 乘数为8位无符号数, 地址为M2(32H), 积由高位到低位存入R2、 R3和R4三个寄存器中。 30H,31H,32H内容 12H,34H,56H ; org 0000h Ljmp start org 0050h start: mov 30h,#12h mov 31h,#34h mov 32h,#56h mov a,(30h) mov b,(32h) mul ab mov R3,b mov R4,a mov a,(31h) mov b,(32h) mul ab add A,R3 mov R3,A

电子科技大学通信原理实验实验报告2

电子科技大学通信学院 最佳接收机(匹配滤波器) 实验报告 班级 学生 学号 教师任通菊

最佳接收机(匹配滤波器)实验 一、实验目的 1、运用MATLAB软件工具,仿真随机数字信号在经过高斯白噪声污染后最佳的恢复的方法。 2、熟悉匹配滤波器的工作原理。 3、研究相关解调的原理与过程。 4、理解高斯白噪声对系统的影响。 5、了解如何衡量接收机的性能及匹配滤波器参数设置方法。 二、实验原理 对于二进制数字信号,根据它们的时域表达式及波形可以直接得到相应的解调方法。在加性白高斯噪声的干扰下,这些解调方法是否是最佳的,这是我们要讨论的问题。 数字传输系统的传输对象是二进制信息。分析数字信号的接收过程可知,在接收端对波形的检测并不重要,重要的是在背景噪声下正确的判断所携带的信息是哪一种。因此,最有利于作出正确判断的接收一定是最佳接收。 从最佳接收的意义上来说,一个数字通信系统的接收设备可以看作一个判决装置,该装置由一个线性滤波器和一个判决电路构成,如图1所示。线性滤波器对接收信号进行相应的处理,输出某个物理量提供给判决电路,以便判决电路对接收信号中所包含的发送信息作出尽可能正确的判决,或者说作出错误尽可能小的判决。 图1 简化的接收设备 假设有这样一种滤波器,当不为零的信号通过它时,滤波器的输出能在某瞬间形成信号的峰值,而同时噪声受到抑制,也就是能在某瞬间得到最大的峰值信号功率与平均噪声功率之比。在相应的时刻去判决这种滤波器的输出,一定能得到最小的差错率。 匹配滤波器是一种在最大化信号的同时使噪声的影响最小的线性滤波器设计技术。注意:该滤波器并不保持输入信号波形,其目的在于使输入信号波形失 t输出信号值相对于均方根(输出)噪声值达到真并滤除噪声,使得在采样时刻 最大。

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

单片机实验报告

太原工业学院计算机工程系成绩: 单片机原理及应用 课程实验报告 课程:单片机原理及应用 姓名:冯文颖 专业:计算机科学与技术 学号:132054413 日期:2016年4月20日 太工计算机工程系 计算机原理实验室

实验一:拆字程序实验 实验环境PC机+Win 2007+伟福仿真软件实验日期2016.4.20一.实验内容 1.熟悉51仿真系统,设计并单步调试实现,将R5中一字节数拆分成两位独立的数据,分别存于R6,R7中,将R6,R7中的一位HEX数据转换为输出 2.ASCII编码分析BIN,HEX,BCD,ASCII等不同编码的数学意义及表现形式上的异同 二.理论分析或算法分析 (1)基本要求的描述 在这次实验中,要将R5中存的一字节数拆分成两个独立的数据,主要用到是逻辑运算符中的与功能,进而取得高字节和低字节的数,将R5的数和0f0h进行与取得高字节,和0f0h 与取得低字节的数,进而将它们分别存于R6、R7中。 (2)扩展要求的描述 在扩展要求中,要求将高低字节的数据转换成ASCII码值,首先先运用操作符subb将高低位字节与0Ah进行比较,根据CY的值来判断高低字节的数据是否在0到9之间,若在则在它们的基础上加上30h即可得到其对应的ASCII码值,否则,若在A到F之间,则需要在它们的基础上加37h即可得到它们对应的ASCII码值。 三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) org 0019h clr c mov r5,#6ah mov a,r5 anl a, #0fh mov r6, a mov a, r5 anl a,#0f0h swap a mov r7,a sjmp $ end Masc1:mov a,r6 add a,#0F6h . mov,a,r6 jnc ad30h add a,#07h ad30h: add a,#30h mov r6,a 1

电子科技大学实验报告撰写模板

电子科技大学 实验报告 ( 2018 - 2019 - 2 ) 学生姓名:学生学号:指导老师: 实验学时:1.5h 实验地点:基础实验大楼425 实验时间:2019.4.9 14:30—16:00 报告目录 一、实验课程名称:电路实验I 1.实验名称:BJT放大器设计与测试 二、实验目的: 1. 了解BJT管的基本放大特性。 2. 掌握BJT共射放大电路的分析与设计方法。 3. 掌握放大电路静态工作点的测试方法。 4. 掌握放大电路放大倍数(增益)的测试方法。 5. 掌握放大电路输入、输出电阻的测试方法。 6. 掌握放大电路幅频特性曲线的测试方法。 三、实验器材(设备、元器件): GDS1152A型数字示波器一台。 EE1641B1型函数发生器一台。

通用面包板一个。 1kΩ电阻;10mH电感;0.047μF电容若干。 四、实验原理:

3、测试方法 (1)静态工作点调整与测试 对直流电压的测量一般用数字万用表。测量静态工作点时测出晶体管各管脚对地的电压。 (2)放大倍数的测试 用晶体管毫伏表或者示波器直接测量输出、输入电压,由 Av=vo/vi 即可得到。(3)放大器输入电阻的测试

在放大器输入端口串入一个取样电阻R,用两次电压法测量放大器的输入电阻Ri。 (4)放大器输出电阻的测试 在放大器输出端口选择一个合适的负载电阻RL,用两次电压法分别测量空载与接上负载时的输出电压,计算输出电阻Ro。 (5)放大器频率特性的测试 用点频法测试法测量放大器的频率特性,并求出带宽。 五、实验内容: (1)静态工作点的测试 (2)电压增益测试 (3)输入电阻测试 (4)输出电阻测试 (5)幅频特性测试 六、实验数据及结果分析: 1、静态工作点调整与测试 令VCC=+12V,用万用表测量VE、VB、VC,计算VBE、IEQ、VCE,数据记入表格中。 2、放大倍数的测试 用函数发生器输出一个正弦波信号作为放大器的输入信号,设置信号频率 f =1kHz,(有效值)Ui=5mV,测量U0 ,计算放大器的电压放大倍数(增益)Av。数据填入表中,定量描绘输出波形图。

单片机实验报告含仿真

单片机原理及应用课程 实验报告 专业: 班级: 姓名: 学号:

实验一、keilC51及proteus软件的使用 一、实验目的: 1、掌握keil和proteus软件的基本操作 2、通过具体实例掌握keil和proteus软件的使用。 二、实验原理: keil使用步骤,proteus使用步骤 三、程序: 四、实验结果分析: 五、总结:学会了使用keil和proteus软件,掌握了利用keil和proteus软 件进行仿真的步骤。

实验二、并行输入/输出接口实验 一、实验目的: 1、进一步熟悉keil仿真软件、proteus仿真软件的使用。 2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。 3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。 二、实验原理: MCS 51单片机的串行口在实际使用中通常用于三种情况:利用方式0 扩展并行i/0 接口:利用方式1 实现点对点的双机通信;利用方式2 或方式3 实现多机通信。利用方式0 扩展并行i/0 接口MCS 5 1 单片机的串行口在方式0 时,若外接一个串入并出的移位寄存器,就可以扩展并行输出口;若外接一个并入串出的移位寄存器,就可以扩展并行输入口。 三、程序: #include sbit P1_0=P1^0; void main() { unsigned char i; unsigned int j;

i=0x01; for(;;) { P1_0=0; SBUF=I; while(!TI) {i} P1_0=1;TI=0; for(j=0;j<=254;j++){;} i=i*2; if(i==0x00) i=0x01; } } 四、实验结果分析: 五、总结:进一步熟悉了keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会了构建简单的流水灯电路。掌握了C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。

电子科技大学微嵌实验最新版

电子科技大学微嵌实验最新版

电子科技大学 实验报告 修正了M00和旧版答案的错误,代码使用Keil uVision5 均已调试通过。课程名称微处理器系统结构与嵌入式系统设计_____________________ 实验名称ARM基础编程实验_____________________________________ 任课教师________ 实验教师 ________ 姓名 ______ 学号__________ 实验地点分组号时间年月日、实验目的 1.熟悉并掌握常用ARM匚编指令 2.熟悉并掌握C+汇编混合编程技术 3.熟练使用ARM软件开发调试工具Keil _、实验内容 1.学习使用Keil开发工具 2.使用ARM匚编语言,编程头现1+2+ ...... +N累加运算功冃匕 3.使用C调用汇编函数,实现字符串拷贝功能 4.使用汇编调用C函数,实现求和运算功能 5.使用ARM匚编语言,实现冒泡排序算法(选做) 三、实验步骤

1.实验1.1 :运行Keil ,建立工程文件,单步运行调试演示示例程 序,深刻理解每一条指令,观察寄存器,内存空间的变化。 2.实验1.2 :用汇编语言实现1+2+...+N的累加: a)建立新工程,加入实验1.2文件夹中的sum.s。 b)用汇编补充算法核心部分,代码参考流程图如下图 1.1所示。 c)使用单步调试,仔细观察过程中关键寄存器值的变化。 R0暂存累加和 图 3.实验1.3 : C调用汇编实现字符串拷贝功能: a)建立新工程,加入实验1.3文件夹中的ma in .c和 testfile.s(同一个工程下添加两个文件一起编 译)。 b)补充完成源代码中缺失的部分,分别实现 1.拷贝源字符串的一个字节到R2中; 2.将拷贝的字节复制到目标空间。 c)运行Debug进行调试。 4.实验1.4 :汇编调用C实现求和1+2+...+10 : a)建立新工程,加入实验1.4文件夹中的sum.c和 testfile.s(同一个工程下添加两个文件一起编 译)。 b)补充完成源代 码中缺失的部分,通过调用c函数 g()实现1+2+3+glovb1,结果存在R8中。 c)运行Debug进行调试

相关文档
最新文档