《单片机原理及应用》实验报告

《单片机原理及应用》实验报告
《单片机原理及应用》实验报告

《单片机原理及应用》

实验报告

2017/2018 学年第1 学期

系别计算机学院

专业软件工程

班级17软件工程班

姓名XXXXXX

学号8888888888

授课老师******

实验一:流水灯实验

1.实验目的

(1)学习编译和仿真环境使用

(2)学习P3口的使用方法

(3)学习延时子程序的编写

2实验内容

(1)通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的接口;(2)通过改变并行口输出电平控制LED灯的点亮与否,通过延时程序控制亮灯时间。

3.实验运行结果图

4.源代码

//流水灯实验

#include //包含单片机寄存器的头文件

sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机

//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的

操作

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

函数功能:延时一段时间

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

void delay(void)

{

unsigned char i,j;

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

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

; //利用循环等待若干机器周期,从而延时一段时间 }

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

函数功能:主函数

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

void main(void)

{

while(1)

{

x=0xfe; //第一个灯亮

delay(); //调用延时函数

x=0xfd; //第二个灯亮

delay(); //调用延时函数

x=0xfb; //第三个灯亮

delay(); //调用延时函数

x=0xf7; //第四个灯亮

delay(); //调用延时函数

x=0xef; //第五个灯亮

delay(); //调用延时函数

x=0xdf; //第六个灯亮

delay(); //调用延时函数

x=0xbf; //第七个灯亮delay(); //调用延时函数

x=0x7f; //第八个灯亮delay(); //调用延时函数}

}

实验二:中断实验

1.实验目的

(1)熟悉51单片机中断初始化编程方法。

(2)掌握51单片机外部中断源的设计使用。

(3)中断处理应用程序的设计与调试技巧。

2.实验内容

通过对P3.2、P3.3引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。

3.实验运行结果图

4.源代码

/用外中断0的中断方式进行数据采集和处理

#include //包含51单片机寄存器定义的头文件

sbit S=P3^2; //将S位定义为P3.2,

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

函数功能:主函数

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

void main(void)

{

EA=1; //开放总中断

EX0=1; //允许使用外中断

IT0=1; //选择负跳变来触发外中断

P1=0xff;

while(1)

; //无限循环,防止程序跑飞

}

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

函数功能:外中断T0的中断服务程序

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

void int0(void) interrupt 0 using 0 //外中断0的中断编号为0

{

P1=~P1; //每产生一次中断请求,P1取反一次。

}

//用外中断0的中断方式进行数据采集和处理

#include //包含51单片机寄存器定义的头文件

#define uchar unsigned char

void Delay(unsigned int i)

{

uchar j;

for(;i>0;i--)

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

{;}

}

//sbit S=P3^2; //将S位定义为P3.2,

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

函数功能:主函数

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

void main(void)

{

uchar display[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned int a;

while(1){

EA=1; //开放总中断

EX0=1; //允许使用外中断

EX1=1;

IT0=1; //选择负跳变来触发外中断

IT1=1;

IP=0;

for(a=0;a<9;a++){

Delay(500);

P1=display[a];

}

}

}

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

函数功能:外中断T0的中断服务程序

**************************************************************/ void int0_isr(void) interrupt 0 using 1 //外中断0的中断编号为1 {

uchar n;

for(n=0;n<10;n++){

p1=0x0f;

Delay(500);

P1=0xf0;

Delay(500);

}

}

void int1_isr (void) interrupt 2 using 2{

uchar n;

for(n=0;n<10;n++){

p1=0xff;

Delay(500);

P1=0;

Delay(500);

}

}

实验三:定时器/计数器实验

1.实验目的

(1)熟悉51单片机中断初始化编程方法

(2)熟悉51单片机定时计数器的初始化编程方法

(3)掌握定时计数器的应用

2.实验内容

通过使用定时器T0的中断来控制P2.0引脚的的LED的灯闪烁,要求闪烁时间2S,既亮1 S,灭1 S。

3.实验运行结果图

M1

M2

A

B

C

D

X1

CRYSTAL

C1

1uF

XTAL2

18

XTAL1

19

ALE

30

EA

31

PSEN

29

RST

9

P0.0/AD0

39

P0.1/AD1

38

P0.2/AD2

37

P0.3/AD3

36

P0.4/AD4

35

P0.5/AD5

34

P0.6/AD6

33

P0.7/AD7

32

P1.0

1

P1.1

2

P1.2

3

P1.3

4

P1.4

5

P1.5

6

P1.6

7

P1.7

8

P3.0/RXD

10

P3.1/TXD

11

P3.2/INT0

12

P3.3/INT1

13

P3.4/T0

14

P3.7/RD

17

P3.6/WR

16

P3.5/T1

15

P2.7/A15

28

P2.0/A8

21

P2.1/A9

22

P2.2/A10

23

P2.3/A11

24

P2.4/A12

25

P2.5/A13

26

P2.6/A14

27

U1

AT89C51

R1

330R

R2

330R

M1

M2

VCC

C2

33P

C3

33P

R3

10k

D1

LED-YELLOW

D2

LED-YELLOW

4.源代码

#include // 包含51单片机寄存器定义的头文件

sbit D1=P1^4; //将D1位定义为P1.4引脚

unsigned char Countor; //设置全局变量,储存定时器T0中断次数

/************************************************************** 函数功能:主函数

**************************************************************/ void main(void)

EA=1; //开总中断

ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式2

TH0=(65536-15536)/256; //定时器T0的高8位赋初值

TL0=(65536-15536)%256; //定时器T0的高8位赋初值

TR0=1; //启动定时器T0

Countor=0; //从0开始累计中断次数

while(1)//无限循环等待中断

;

}

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

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

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

void Time0(void) interrupt 1 using 0 //"interrupt"声明函数为中断服务函数

//其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器

{

Countor++; //中断次数自加1

if(Countor==20) //若累计满20次,即计时满1s

{

D1=~D1; //按位取反操作,将P2.0引脚输出电平取反

Countor=0; //将Countor清0,重新从0开始计数

}

TH0=(65536-15536)/256; //定时器T0的高8位重新赋初值

TL0=(65536-15536)%256; //定时器T0的高8位重新赋初值

}

实验四:串行口实验

1.实验目的

(1)掌握单片机的串行口的工作原理

(2)掌握单片机串行口收发数据的方法

2.实验内容

本实验要求单片机U1通过其串行口TXD向单片机U2发送数据。单片机U1的P1口接8个开关,U2的P1口接8个发光二极管。U1设置为只能发送不能接收,U1读入P1口的8个开关状态后,通过串行口发送到U2,U2将接收到的数据送入P1口,由P1口上连接的8个发光二极管显示8个开关的状态。

3.实验运行结果图

4.源代码

/*********发送单片机的发送程序***********/

#include //包含寄存器的头文件

/*********向PC发送一个字节数据**************/

void Send(unsigned char date)

{

SBUF=date;

while(TI==0);

TI=0;

}

/*********延时约150ms*********/

void delay(void)

{

unsigned char m,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/*******函数功能:主函数*********/

void main(void)

{

unsigned char temp;

TMOD=0x20; //定时器T1工作于方式2

SCON=0x40; //串口工作方式1

PCON=0x00; //波特率9600

TH1=0xfd; //根据规定给定时器T1赋初值

TL1=0xfd; //根据规定给定时器T1赋初值

TR1=1; //启动定时器T1

P1=0xff; //读取P1端口数据

while(1)

{

temp=P1;

Send(temp); //发送数据i

delay(); //50ms发送一次检测数据

}

}

/**********接收单片机的接收程序***********/

#include //包含单片机寄存器的头文件

/**接收一个字节数据******/

unsigned char Receive(void)

{

unsigned char date;

while(RI==0) ; //只要接收中断标志位RI没有被置“1” //等待,直至接收完毕(RI=1)

RI=0; //为了接收下一帧数据,需将RI清0

date=SBUF; //将接收缓冲器中的数据存于dat return date;

}

/*****主函数*******/

void main(void)

{

TMOD=0x20; //定时器T1工作于方式2

SCON=0x50; //SCON=0101 0000B,串口工作方式1,REN=1 PCON=0x00; //PCON=0000 0000B,波特率9600

TH1=0xfd; //根据规定给定时器T1赋初值

TL1=0xfd; //根据规定给定时器T1赋初值

TR1=1; //启动定时器T1

REN=1; //允许接收

while(1)

{

P1=Receive(); //将接收到的数据送P1口显示

}

}

实验五:输入接口实验

1.实验目的

(1)掌握共阴极、共阳极LED的使用方法

(2)掌握矩阵键盘输入扫描和识别程序编写

2.实验内容

设计一个4X4的矩阵键盘,键盘的号码0~15,要求编写出一个键盘输入扫描程序,要求单片机能根据键盘排列顺序,能将按下去键盘号正确识别出来,并采用两个数码管分别键盘号码的个位和十位。

3.实验运行结果图

4.源代码

#include //包含51单片机寄存器定义的头文件

sbit P14=P1^4;

sbit P15=P1^5;

sbit P16=P1^6;

sbit P17=P1^7;

unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9的段码

unsigned char keyval;

/************************************************************** 函数功能:数码管动态扫描延时

**************************************************************/ void led_delay(void)

{

unsigned char j;

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

;

}

/************************************************************** 函数功能:按键值的数码管显示子程序

**************************************************************/ void display(unsigned char k)

{

P2=0xbf;

P0=Tab[k/10];

led_delay();

P2=0x7f;

P0=Tab[k%10];

led_delay();

}

/************************************************************** 函数功能:软件延时子程序

**************************************************************/ void delay20ms(void)

{

unsigned char i,j;

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

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

;

}

/************************************************************** 函数功能:主函数

**************************************************************/ void main(void)

{

EA=1;

ET0=1;

TMOD=0x01;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

TR0=1;

keyval=0x00;

while(1)

{

display(keyval);

}

}

/************************************************************** 函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位

**************************************************************/ void time0_interserve(void) interrupt 1 using 1

{

TR0=0;

P1=0xf0;

if((P1&0xf0)!=0xf0)

delay20ms();

if((P1&0xf0)!=0xf0)

{

P1=0xfe;

if(P14==0)

keyval=1;

if(P15==0)

keyval=2;

if(P16==0)

keyval=3;

if(P17==0)

keyval=4;

P1=0xfd;

if(P14==0)

keyval=5;

if(P15==0)

keyval=6;

if(P16==0)

keyval=7;

if(P17==0)

keyval=8;

P1=0xfb;

if(P14==0)

keyval=9;

if(P15==0)

keyval=10;

if(P16==0)

keyval=11;

if(P17==0)

keyval=12;

P1=0xf7;

if(P14==0)

keyval=13; if(P15==0) keyval=14; if(P16==0)

keyval=15; if(P17==0) keyval=16; }

TR0=1;

TH0=(65536-500)/256;

TL0=(65536-500)%256;

}

实验六:LCD 循环显示实验

1.实验目的

(1)掌握单片机驱动显示屏的方法 (2)掌握LCD1602的使用方法 2.实验内容

采用1602型LCD 循环显示字符串“Welcome to Heifei Normal University ”。其中LCD 显示模式为:16*2显示、5*7点阵、8位数据口;显示开、有光标开且光标闪烁;光标右移,字符不移。 3.实验运行结果图

P 00

P00P 01

P 03

P 04

P 06

P 07

P07

P06P05P01P02

P04P03P 05

P 02

P 00P 01P 02P 03P 04P 05P 06P 07XTAL2

18

XTAL119

ALE 30EA 31

PSEN

29

RST

9

P0.0/AD0

39

P0.1/AD138

P0.2/AD237P0.3/AD336

P0.4/AD435

P0.5/AD534

P0.6/AD633

P0.7/AD732P1.0

1

P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821

P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1

AT89C51

D 7

14

D 613D 512D 411D 310D 29D 18D 07

E 6

R W 5R S 4V S S 1V D D 2V E E

3

LCD1

LM016L

+5V

R1

10k

R2

10k

R3

10k

R4

10k

R5

10k

R6

10k

R7

10k

R8

10k

R9

10k

C1

10uF

+5V

+5V

G N D

4.源代码

#include //包含单片机寄存器的头文件 #include //包含_nop_()函数定义的头文件

sbit RS=P2^0; //寄存器选择位,将RS 位定义为P2.0引脚 sbit RW=P2^1; //读写选择位,将RW 位定义为P2.1引脚 sbit E=P2^2; //使能信号位,将E 位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,,将BF 位定义为P0.7引脚 unsigned char code string[ ]={"Welcome to China "}; /***************************************************** 函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒

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

void delay1ms()

{

unsigned char i,j;

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

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

;

}

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

函数功能:延时若干毫秒

入口参数:n

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

void delay(unsigned char n)

{

unsigned char i;

for(i=0;i

delay1ms();

}

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

函数功能:判断液晶模块的忙碌状态

返回值:result。result=1,忙碌;result=0,不忙

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

unsigned char BusyTest(void)

{

bit result;

RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1; //E=1,才允许读写

_nop_(); //空操作

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

result=BF; //将忙碌标志电平赋给result

E=0;

return result;

}

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

函数功能:将模式设置指令或显示地址写入液晶模块

入口参数:dictate

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

void WriteInstruction (unsigned char dictate)

{

while(BusyTest()==1); //如果忙就等待

RS=0; //根据规定,RS和R/W同时为低电平时,可以写

入指令

RW=0;

E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,

// 就是让E从0到1发生正跳变,所以应先置"0"

_nop_();

_nop_(); //空操作两个机器周期,给硬件反应时间

P0=dictate; //将数据送入P0口,即写入指令或地址

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=1; //E置高电平

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令

}

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

函数功能:指定字符显示的实际地址

入口参数:x

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

void WriteAddress(unsigned char x)

{

WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"

}

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

函数功能:将数据(字符的标准ASCII码)写入液晶模块

入口参数:y(为字符常量)

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

void WriteData(unsigned char y)

{

while(BusyTest()==1);

RS=1; //RS为高电平,RW为低电平时,可以写入数据

RW=0;

E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, // 就是让E从0到1发生正跳变,所以应先置"0"

P0=y; //将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

AT89C51单片机的基本结构和工作原理

AT89C51单片机的主要工作特性: ·内含4KB的FLASH存储器,擦写次数1000次; ·内含28字节的RAM; ·具有32根可编程I/O线; ·具有2个16位可编程定时器; ·具有6个中断源、5个中断矢量、2级优先权的中断结构; ·具有1个全双工的可编程串行通信接口; ·具有一个数据指针DPTR; ·两种低功耗工作模式,即空闲模式和掉电模式; ·具有可编程的3级程序锁定定位; AT89C51的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz. AT89C51各部分的组成及功能: 1.单片机的中央处理器(CPU)是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。

(1)运算器 运算器主要用来实现算术、逻辑运算和位操作。其中包括算术和逻辑运算单元ALU、累加器ACC、B寄存器、程序状态字PSW和两个暂存器等。 ALU是运算电路的核心,实质上是一个全加器,完成基本的算术和逻辑运算。算术运算包括加、减、乘、除、增量、减量、BCD码运算;逻辑运算包括“与”、“或”、“异或”、左移位、右移位和半字节交换,以及位操作中的位置位、位复位等。 暂存器1和暂存器2是ALU的两个输入,用于暂存参与运算的数据。ALU的输出也是两个:一个是累加器,数据经运算后,其结果又通过内部总线返回到累加器;另一个是程序状态字PSW,用于存储运算和操作结果的状态。 累加器是CPU使用最频繁的一个寄存器。ACC既是ALU处理数据的来源,又是ALU运算结果的存放单元。单片机与片外RAM或I/O扩展口进行数据交换必须通过ACC来进行。 B寄存器在乘法和除法指令中作为ALU的输入之一,另一个输入来自ACC。运算结果存于AB寄存器中。 (2)控制器 控制器是识别指令并根据指令性质协调计算机内各组成单元进行工作的部件,主要包括程序计数器PC、PC增量器、指令寄存器、指令译码器、定时及控制逻辑电路等,其功能是控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。AT89C51单片机中,PC是一个16位的计数器,可对64KB程序存储器进行寻址。复位时PC的内容是0000H. (3)存储器 单片机内部的存储器分为程序存储器和数据存储器。AT89C51单片机的程序存储器采用4KB的快速擦写存储器Flash Memory,编程和擦除完全是电器实现。 (4)外围接口电路 AT89C51单片机的外围接口电路主要包括:4个可编程并行I/O口,1个可编程串行口,2个16位的可编程定时器以及中断系统等。 AT89C51的工作原理: 1.引脚排列及功能 AT89C51的封装形式有PDIP,TQFP,PLCC等,现以PDIP为例。 (1)I/O口线 ·P0口 8位、漏极开路的双向I/O口。 当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。在编程时,P0口可用于接收指令代码字节;程序校验时,可输出指令字节。P0口也可做通用I/O口使用,但需加上拉电阻。作为普通输入时,应输出锁存器配置1。P0口可驱动8个TTL负载。 ·P1口 8位、准双向I/O口,具有内部上拉电阻。 P1口是为用户准备的I/O双向口。在编程和校验时,可用作输入低8位地址。用作输入时,应先将输出锁存器置1。P1口可驱动4个TTL负载。 ·P2 8位、准双向I/O口,具有内部上拉电阻。 当使用外存储器或外扩I/O口时,P2口输出高8位地址。在编程和校验时,P2口接收高字节地址和某些控制信号。 ·P3 8位、准双向I/O口,具有内部上拉电阻。 P3口可作为普通I/O口。用作输入时,应先将输出锁存器置1。在编程/校验时,P3口接收某些控制信号。它可驱动4个TTL负载。 (2)控制信号线

单片机原理及应用在线考试(附答案)

一、单项选择题 1. 下面哪一种传送方式适用于处理外部事件( (A) 无条件传递进 (B) DMA (C) 中断 (D) 查询 分值:2.5 完全正确 得分:2.5 )
2.
在 MCS-51 单片机中,需要软件实现中断撤销的是:( ) (A) 电平触发的外部中断 (B) 脉冲触发的外部中断 (C) 定时中断 (D) 串行中断 分值:2.5 答题错误 得分:0
3.
十进制数 126 其对应的十六进制可表示为( )。 (A) 7E

(B) 8E (C) 8F (D) FE 分值:2.5 完全正确 得分:2.5
4.
在 LED 显示中,为了输出位控和段控信号,应使用的指令是:( ) (A) MOVC (B) MOV (C) MOVX (D) XCH 分值:2.5
5.
在单片机中,通常将一些中间计算结果放在( (A) 累加器 (B) 程序存储器 (C) 数据存储器 (D) 控制器
)中

分值:2.5 完全正确 得分:2.5
6.
MCS-51 单片机的堆栈区应建立在( )。 (A) 片内数据存储区 (B) 片内数据存储区的低 128 字节单元 (C) 片内数据存储区的高 128 字节单元 (D) 程序存储区 分值:2.5 完全正确 得分:2.5
7.
CPU 主要的组成部部分为( ) (A) 加法器、寄存器 (B) 运算器、控制器 (C) 运算器、寄存器 (D) 运算器、指令译码器 分值:2.5
完全正确 得分:2.5

单片机原理及应用总结

单片机原理及应用 第一章绪论 1.什么叫单片机?其主要特点有哪些? 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 特点:控制性能和可靠性高、体积小、价格低、易于产品化、具有良好的性价比。 第二章80C51的结构和原理 1.80C51的基本结构 a.CPU系统 ●8位CPU,含布尔处理器; ●时钟电路; ●总线控制逻辑。 b.存储器系统 ●4K字节的程序存储器 (ROM/EPROM/FLASH,可外扩 至64KB); ●128字节的数据存储器(RAM,可 外扩至64KB); ●特殊功能寄存器SFR。 c.I/O口和其他功能单元 ●4个并行I/O口; ●2个16位定时/计数器; ●1个全双工异步串行口; ●中断系统(5个中断源,2个优先 级) 2.80C51的应用模式 a.总线型单片机应用模式 ◆总线型应用的“三总线”模式; ◆非总线型应用的“多I/O”模式 3.80C51单片机的封装和引脚 a.总线型DIP40引脚封装 ●RST/V PO:复位信号输入引脚/备用 电源输入引脚; ●ALE/PROG:地址锁存允许信号 输出引脚/编程脉冲输入引脚;●EA/V PP:内外存储器选择引脚/片 内EPROM编程电压输入引脚;●PSEN:外部程序存储器选通信号 输出引脚 b.非总线型DIP20封装的引脚 ●RST:复位信号输入引脚 4.80C51的片内存储器 增强型单片机片内数据存储器为256 字节,地址范围是00H~FFH。低128字节的配情况与基本型单片机相同。高128字节一般为RAM,仅能采用寄存器间接寻址方式询问。注意:与该地址范围重叠的特殊功能寄存器SFR 空间采用直接寻址方式询问。 5.80C51的时钟信号 晶振周期为最小的时序单位。一个时钟周期包含2个晶振周期。晶振信号12分频后形成机器周期。即一个机器周期包含12个晶振周期或6个时钟周期。 6.80C51单片机的复位 定义:复位是使单片机或系统中的其他部件处于某种确定的初始状态。 a.复位电路 两种形式:一种是上电复位;另一种是上电与按键均有效的复位。 b.单片机复位后的状态 单片机的复位操作使单片机进入初始化状态。初始化后,程序计数器 PC=0000H,所以程序从0000H地址单元开始执行。 特殊功能寄存器复位后的状态是确定的。P0~P3为FFH,SP为07H,SBUF 不定,IP、IE和PCON的有效位为0,其余的特殊功能寄存器的状态为00H.相应的意义为: ●P0~P3=FFH,相当于各口锁存器已 写入1,此时不但可用于输出,也 可以用于输入; ●SP=07H,堆栈指针指向片内RAM

单片机第一次实验报告

单片机第一次实验报告 姓名: 学号: 班级:

实验报告 课程名称:微机原理与接口技术指导老师:学生姓名:学号:专业:自动化日期:20140327 地点: 实验一实验名称 1. 实验目的和要求 1.掌握keil软件和STC-ISP 软件的使用方法 2.点亮第一个发光管. 3.点亮1,3,5,7发光管 4.尝试让第一个发光管闪烁. 2. 主要仪器设备 1.一台pc机 2.一个单片机开发板 点亮第一个发光管. #include void main () { P1 &=0xFE; while(1) } 点亮1,3,5,7发光管 void main () { P1 &=0xAA;

while(1) } 尝试让第一个发光管闪烁. #include #define uint unsigned int #define uchar unsigned char void delay_ms(uint timer) { uchar j = 0; while(timer--) { for(j = 124;j>0;j--) { ; } } } void main (void) { while(1) { P1 &=0xFE; delay_ms(100); P1 |=0x01; delay_ms(100); } }

实验心得:这第一次试验,没准备,所以这次实验一上机啥都不会,也不知道该做啥,在同学的帮助下安装了程序和驱动,代码也是问同学才明白的。第一个代码,通过很顺利,但是测试第二个代码的时候电脑无法连接板子,后来重新安装了驱动才就能连接了。虽然感觉还是好多不懂的,不过还是学到了一些东西,有一点成就感。

单片机实验报告

仲恺农业工程学院实验报告纸 自动化学院(院、系)工业自动化专业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集成开发环境的工程建立、编辑与编译功能。加深对内部存储器读写的认识。

51单片机原理及应用期末考试试题汇总7

一、选择题 从下列各题4个备选答案中选出一个或二个正确答案 并将其代号写在题干后面的括号内。 1、8051基本型单片机内部程序存储器容量为 C 。 A、16KB B、8KB C、4KB D、128B 2、8051基本型单片机内部RAM容量为D。 A、16KB B、8KB C、4KB D、128B 3、当优先级的设置相同时 若以下几个中断同时发生 A 中断优先响应。 A、外部中断0 B、T1 C、串口 D、T0 4、在80C51单片机应用系统中 可以作为时钟输出的是 C 引脚。 A、EA B、RST C、ALE D、PSEN 5、当CPU响应外部中断1 的中断请求后 将自动转向 B 。 A、0003H B、0013H C、000BH D、001BH 6、为了能够使MCS-51单片机在正常工作中及时服务于多个外设 以下传送方式最适用的是 D 。 A、异步 查询 传送 B、同步 无条件 传送 C、DMA传送 D、中断传送 7、已知1只共阴极LED显示器 其中a笔段为字形代码的最低位 若需显示数字1 它的字形代码应为(A )。A、06H B、0F9H C、30H D、0CFH 8、已知1只共阳极LED显示器 其中a笔段为字形代码的最低位 若需显示小数点“.” 它的字形码应为(A)。A、7FH B、0F9H C、30H D、80H 9、已知1只共阴极LED显示器 其中a笔段为字形代码的最低位 若需显示小数点“.”共阳极 它的字形码应为(A )。A、80H B、0F9H C、30H D、7FH 10、下列数据字定义的数表中 (C、D)是错误的。 A、DW “AA” B、DW “A” C、DW “OABC” D、DW 1ABC2H 11、若P1口接有一个4×4的行列键盘 则P1口一定有 C、D 。 A、8位输入口 B、8位输出口 C、4位输入口 D、4位输出口 12、以下指令中能够产生WR信号的是 B、D 。 A、MOV @R0,A B、MOVX @R0,A C、MOVX A @DPTR D、MOVX @DPTR,A 13、8031单片机的定时器T1用作定时方式时是 A、B 。 A、以内部时钟频率为定时基准 12个时钟周期加1 B、以内部时钟频率为定时基准 1个机器周期加1 C、以外部脉冲为定时基准 12个脉冲加1 D、以外部脉冲为定时基准 每个脉冲加1 14、DAC0832在单片机系统中是一种 B、D 器件。 A、输入 B、输出 C、将数字量转换成模拟量 D、将模拟量转换成数字量 15、家用电器中使用的单片机应属于计算机的 B 。 A、辅助设计应用B.测量、控制应用C.数值计算应用 D.数据处理应用 16、对程序存储器的读操作 只能使用 D 。 A MOV指令 B. PUSH指令 C. MOVX指令 D. MOVC指令 17、若82C55的PC口接有一个4×4的行列键盘 则PC口一定有 C、D 。 A、8位输入口 B、8位输出口 C、4位输入口 D、4位输出口 18、下列说法正确的是 A、B 。 A、立即数寻址方式是操作数本身就在指令中 而不是它的地址在指令中。

单片机实验报告

院系:计算机科学学院专业:智能科学与技术年级: 2012 学号:2012213865 姓名:冉靖 指导教师:王文涛 2014年 6月1日

一. 以下是端口的各个寄存器的使用方式: 1.方向寄存器:PxDIR:Bit=1,输出模式;Bit=0,输入模式。 2.输入寄存器:PxIN,Bit=1,输入高电平;Bit=0,输入低电平。 3.输出寄存器:PxOUT,Bit=1,输出高电平;Bit=0,输出低电平。 4.上下拉电阻使能寄存器:PxREN,Bit=1,使能;Bit=0,禁用。 5.功能选择寄存器:PxSEL,Bit=0,选择为I/O端口;Bit=1,选择为外设功能。6.驱动强度寄存器:PxDS,Bit=0,低驱动强度;Bit=1,高驱动强度。 7.中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。 8.中断触发沿寄存器:PxIES,Bit=1,下降沿置位,Bit=0:上升沿置位。 9.中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。 二.实验相关电路图: 1 MSP430F6638 P4 口功能框图: 主板上右下角S1~S5按键与MSP430F6638 P4.0~P4.4口连接: 2按键模块原理图: 我们需要设置两个相关的寄存器:P4OUT和P4DIR。其中P4DIR为方向寄存器,P4OUT 为数据输出寄存器。 主板上右下角LED1~LED5指示灯与MSP430F6638 P4.5~P4.7、P5.7、P8.0连接:

3 LED指示灯模块原理图: P4IN和P4OUT分别是输入数据和输出数据寄存器,PDIR为方向寄存器,P4REN 为使能寄存器: #define P4IN (PBIN_H) /* Port 4 Input */ #define P4OUT (PBOUT_H) /* Port 4 Output */ #define P4DIR(PBDIR_H) /* Port 4 Direction */ #define P4REN (PBREN_H) /* Port 4 Resistor Enable */ 三实验分析 1 编程思路: 关闭看门狗定时器后,对P4.0 的输出方式、输出模式和使能方式初始化,然后进行查询判断,最后对P4.0 的电平高低分别作处理来控制LED 灯。 程序流程图: 2 关键代码分析: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P4DIR |= BIT5; // 设置4.5口为输出模式 P4OUT |= BIT0; // 选中P4.0为输出方式 P4REN |= BIT0; // P4.0使能 while (1) // Test P1.4 { if (P4IN & BIT0) //如果P4.0为1则执行,这是查询方式按下去后是低,否则为高

单片机原理与应用赵德安习题答案

第一章习题 2. 根据程序存储器的差别,单片机可以分为哪几种类型? 答:MCS-51 系列单片机按片内不同程序存储器的配置来分,可以分为以下 3 种类型: ①片内带Mask ROM(掩膜ROM)型:8051 、80C51 、8052 、80C52 。此类芯片是由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM 中。其应用程序只能委托半导体厂家“写入” ,一旦写入后不能修改。此类单片机适合大批量使用。 ②片内带EPROM 型:8751、87C51 、8752 。此类芯片带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除重新写入。此类单片机价格较贵,不宜于大批量使用。 ③片内无ROM(ROMLess)型:8031、80C31 、8032 。此类芯片的片内没有程序存储器,使用时必须在外部并行扩展程序存储器存储芯片。此类单片机由于必须在外部并行扩展程序存储器存储芯片,造成系统电路复杂,目前较少使用。 3. 单片机的主要特点是什么?它适宜构成通用微机系统还是专用微机系统?为什么? 答:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据 处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O 口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。其主要特点如下: 1、价格便宜。10 元以内计算机。 2、功能不大。只能专用在适用的领域。但在适用的领域中,性价比却是最 佳。 3、可靠性高,抗干扰能力强。 4 、功耗比较低。对电源要求低。适用面广。 5、外围扩展能力强。可以应用到不同的控制系统中。根据其特点可知,单片机功能不

《单片机原理及应用》教学大纲

《单片机原理及应用》教学大纲 大纲说明 课程代码:3335014 总学时:48学时(讲课40学时,实验8学时) 总学分:3 课程类别:专业模块选修课 适用专业:机械设计制造及其自动化专业、电气工程及自动化专业 预修要求:数字电子技术、模拟电子技术、电路、计算机基础、微机原理、汇编语言 一、课程的性质、目的、任务: 性质:是机电一体化专业的专业必修课。是一门面向应用的、具有很强实践性与综合性的课程。 目的:通过学习利于改善学生的知识结构,使其获得利用单片机解决某些工程技术问题所需的知识,为学习后续课程及在今后工作中利用单片机实现电器控制、过程控制、信息处理和管理奠定必要的基础。 任务:通过学习要求学生掌握单片机的工作原理,了解有关单片机的基本知识,掌握该单片机的指令系统及汇编语言设计的基本方法,掌握单片机的基本功能及典型接口技术,获得相关领域内应用单片机的初步能力。 二、课程教学的基本要求: 原理部分以讲授为主;程序设计提倡多读程序、多写、多上机;硬件接口应在掌握了硬件的工作原理的基础上结合实验提高动手能力;教学手段应多样化避免单调的教学模式;实验环节重点学习单片机的硬件组成、工程应用及系统开发;课后作业的主要目的是掌握本章的学习要点,巩固前面所学的内容,为下一章学习做好准备;考试采用闭卷理论考试,结合实验和平时成绩,在内容上尽量体现单片机的基本常识性问题,结合实际,做到质、量结合。 三、大纲的使用说明: 本课程的先修课程为:《电路》《电子技术》《计算机基础》《程序设计》《微机原理》;电子机械专业学生应掌握大纲所要求的大部分内容;课程可根据总课时数而定。 大纲正文 第一章绪论学时:1学时(讲课1学时实验0学时)本章讲授要点:有关微型机的基本知识,包括分类、结构和组成,以及单片机的结构、典型产品及应用,单片机应用系统开发。 重点:单片机的特点、开发方式。 难点:单片机开发方式。 §1.1 电子计算机的发展概述 §1.2 单片机的发展过程及产品近况 §1.3 单片机的特点及应用领域

单片机实验报告

单片机实验报告 班级:信科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处左键双击使之变黑,键入引脚名称。

单片机实验报告

南京晓庄学院电子工程学院 实验报告 课程名称:单片机系统设计与应用 姓名:森 专业:电子信息科学与技术 年级: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)

基于AT8951单片机原理及应用

◎<习题一>◎<习题二>◎<习题三> ◎<习题四>◎<习题五>◎<习题六> ◎<习题七>◎<习题八>◎<习题九> ◎<习题十>◎<总复习题> ※<习题一> 第一章习题答案 一、选择题 DCABD DACAC ACDBA BCCBA BB (ABE) B 二、计算题 1、将下列十进制数分别转换成二进制、十六进制和BCD码的 形式 (1)33D=00100001B=21H=00110011BCD (2)22 .37D=00010110.0101B=16.5H=00100010.00110111BCD 2、将下列二进制数分别转换成十进制、十六进制的形式。(1) 10101100 B=172D=ACH (2) 1001.01 B= 9.25D=9.4H (3)11001100. 011B=CC.6H=204.375D 3、将下列十六进制数分别转换成二进制、十进制的形式。(1)7B H=01111011B=123D (2)0E7.2 H=231.125D=11100111.0010B (3)21A9H=8617D=0010000110101001B 4、将下列BCD码转换成十进制数。 (1)10010010BCD=92D (2)01010010=52D (3)1000111. 0110=47.6D 5、将下列带符号数分别用原码、反码、补码来表示。 (1)+39 原码、反码、补码为00100111B

(2)-121 原码为11111001B,反码为10000110B,反码为10000111B 三、填空题 1、带符号数在机器中可用_原_码、_反_码和_补_码表示。 2、___运算器___和_控制器_____是计算机硬件的核心,称为中央处理器(CPU)。 3. CPU一次可处理的二进制数的位数称为___字长___。 4、字长为___8___的整数倍。 5、.MCS-51的最基本时间单位是_ 时钟___周期。 6、.8051的一个机器周期由___12___个时钟周期组成。 7、半导体存储器分为__ROM__和__RAM____。 8、根据信息传送的属性,总线可分为___地址总线___、_数据总线_____和__控制总线____。 四、问答题 1、什么是字长?Intel公司的MCS-51系列单片机的字长是多少?答:字长是指计算机能一次处理二进制数码的位数,MCS—51系列单片机字长为8位,又称8位机。 2、简述半导体存储器的分类及各类存储器的功能。 答:(1)只读存储器(ROM) ROM在使用过程中,存储的信息只能被读出,而不能用通常的方法写入。在系统断电时,ROM中的信息并不会丢失。因此,这类存储器适用于存放各种固定的系统程序、应用程序和常数等。 ROM按制造工艺的不同可分为以下几种: A)掩膜ROM 存储在ROM中的信息是在生产过程中用“掩膜”工艺固化在ROM芯片中的,一旦做好,不能更改。只适用于存储成熟的固定程序和数据,在大批量生产时,可降低成本。 B)可编程ROM(PROM) PROM中的信息是由用户写入,但只能写一次,写入后的信息以后不能更改。 C)可擦除ROM 允许用户对已写入的信息进行多次修改,但修改之前要先将原来的内容擦除掉,按擦除方法不同,又分为两种: 紫外线擦除的ROM(EPROM):在芯片上有一窗口,用紫外线擦抹器照射该窗口约20分钟后就可擦除,然后加规定的编程电压可重新写入程序。 电擦除的ROM(EEPROM):它允许用户利用+5V的电压擦除已存入的信息,并可进行重新写入,擦除和写入过程可在线完成,不需将芯片从用户系统中取出。

单片机实验报告

单片机实验报告 实验一:存储器块清零或赋值 一、实验目的 1 熟悉存储器的读写方法,熟悉51汇编语言结构。 2 熟悉循环结构程序的编写。 3 熟悉编程环境和程序的调试。 二、实验内容 指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。例如将4000H开始的10个字节内容清零或全部赋值为33H。 注意: 1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。 2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容 3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR 4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。 5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。 三、实验仪器 微机、VW,WA VE6000编程环境软件,(单片机实验箱) Lab6000/Lab6000通用微控制器MCS51实验 四、实验步骤 1、新建工程文件。(注意:文件不要用中文名称保存时不要用中文路径)

2、编写程序。 3、运行和调试过程。 外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH): 单步执行程序,观察SFR中外部地址指针的变化; 全速执行程序,可以看到外部数据存储器已赋值33H:

五、实验结果 可以看到外部数据存储器已赋值33H: 六、问题讨论 本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。同时,学习掌握汇编程序的编写和调试过程。 实验二:存储块移动 一、实验目的 1 熟悉51汇编语言程序结构。 2 熟悉循环结构程序的编写,进一步熟悉指令系统。 3 熟悉编程环境和程序的调试。 二、实验内容 将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。 注意:在编程环境中,可以通过软件仿真,观察程单片机运行情况。 由于源地址和目的地址的内容都一样(FF),调试时看不到内容的变化,所以需要给源地址内容赋值。有多种赋值方式(比如在搬移循环体内,赋值一个搬移一个,请在空白处添

单片机实验报告书

并行I/O接口实验 一、实验目的 熟悉掌握单片机并行I/O接口输入和输出的应用方法。 二、实验设备及器件 个人计算机1台,装载了Keil C51集成开发环境软件。https://www.360docs.net/doc/2815877734.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/2815877734.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

单片机原理及应用作业答案

作业答案0-1 绪论 1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM和RAM))、(总线)、(定时器/计数器)、(输入/输出接口(I/O口))及(中断系统)等部件集成在一块芯片上的微型计算机。 2.什么叫单片机其主要特点有哪些 解: 将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)、中断系统和其他多种功能器件集成在一块芯片上的微型计机,称为单片微型计算机,简称单片机。 单片机的特点:可靠性高、便于扩展、控制功能强、具有丰富的控制指令、低电压、低功耗、片内存储容量较小、集成度高、体积小、性价比高、应用广泛、易于产品化等。 第1章 MCS-51单片机的结构与原理 15. MCS-51系列单片机的引脚中有多少根I/O线它们与单片机对外的地址总线和数据总线之间有什么关系其地址总线和数据总线各有多少位对外可寻址的地址空间有多大 解: MCS-51系列单片机有4个I/O端口,每个端口都是8位双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输入驱动器和输入缓冲器。通常把4个端口称为P0~P3。在无片外扩展的存储器的系统中,这4个端口的每一位都可以作为双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。 MCS-51系列单片机数据总线为8位,地址总线为18位,对外可寻址空间为64KB。25. 开机复位后,CPU使用的是哪组工作寄存器(R0-R n)它们的地址是什么CPU如何确定和改变当前工作寄存器组(R0-R n) 解: 开机复位后,CPU使用的是第0组工作寄存器。它们的地址是00H-07H。CPU通过对程序状态字PSW中RS1和RS0的设置来确定和改变当前工作寄存器组。 27. MCS-51单片机的时钟周期、机器周期、指令周期是如何定义的当主频为12MHz的时候,一个机器周期是多长时间执行一条最长的指令需要多长时间 解:

单片机实验报告

单片机实验报告 学院:姓名:学号:指导老师:

目录 第一章实验内容、目的及要求 (2) 一、内容 (2) 二、目的及要求 (3) 第二章实验 (3) 实验一数字量输入输出实验 (3) 实验二定时器/计数器实验 (4) 实验三A/D、D/A转换实验 (11) 实验四串行通信设计 (20) 第三章实验体会 (28)

第一章实验内容、目的及要求 一、内容 实验一数字量输入输出实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目。 实验二定时器/计数器实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.3 定时/计数器实验”基本实验项目。 提高部分:定时器控制LED灯 由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。编写程序模拟时序控制装置。开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。 实验三A/D、D/A转换实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目。 提高部分:(要求:Proteus环境下完成) 小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A 转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。 实验四串行通讯实验 阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。(要求:实验仪器上完成)提高部分:(要求:Proteus环境下完成) 利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 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;

MCS—51单片机原理与结构

一、填空题: 1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。 2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。 3、当使用8751且EA=1,程序存储器地址小于1000H 时,访问的是片内ROM。 4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。 5、MCS-51有4组工作寄存器,它们的地址范围是00H~1FH 。 6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。 7、PSW中RS1 RS0=10时,R2的地址为12H 。 8、PSW中RS1 RS0=11时,R2的地址为1AH 。 9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第0 组,8个寄存器的单元地址为00H ~ 07H 。 10、PC复位后为0000H 。

11、一个机器周期= 12 个振荡周期= 6 个时钟周期。 12、PC的内容为将要执行的的指令地址。 13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为2us 。 14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H 。 15、若A中的内容为63H,那么,P标志位的值为0 。 16、8051单片机复位后,R4所对应的存储单元的地址为04H ,因上电时PSW= 00H 。这时当前的工作寄存器区是第0 工作寄存器区。 17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。 18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区 和用户RAM区。 19、通过堆栈操作实现子程序调用,首先就要把PC 的内容入栈,以进行断点保护。 调用返回时,再进行出栈保护,把保护的断点送回到PC 。 20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS -51的PC是16位的,因此其寻址的范围为64 KB。 21、MCS-51单片机片内RAM的寄存器共有32 个单元,分为 4 组寄存器,每组8 个单元,以R0~R7作为寄存器名称。 22、但单片机的型号为8031/8032时,其芯片引线EA一定要接低电平。 二、选择题: 1、当MCS-51复位时,下面说法正确的是( A )。 A、PC=0000H B、SP=00H C、SBUF=00H D、P0=00H 2、PSW=18H时,则当前工作寄存器是( D )。 A、0组 B、1组 C、2组 D、3组 3、MCS-51上电复位后,SP的内容应是( B )。 A、00H B、07H C、60H D、70H 4、当ALE信号有效时,表示( B )。 A、从ROM中读取数据 B、从P0口可靠地送出低8位地址 C、从P0口送出数据 D、从RAM中读取数据 5、MCS—51单片机的CPU主要的组成部分为(A)。 A、运算器、控制器 B、加法器、寄存器 C、运算器、加法器 D、运算器、译码器 6、单片机上电复位后,PC的内容和SP的内容为(B)。 A、0000H,00H B、0000H,07H C、0003H,07H D、0800H,08H 7、单片机8051的ALE引脚是( B )。 A、输出高电平 B、输出矩形脉冲,频率为fosc的1/6 C、输出低电平 D、输出矩形脉冲,频率为fosc的1/2 8、访问外部存贮器或其它接口芯片时,作数据线和低8位地址线的是( A )。 A、P0口 B、P1口 C、P2口 D、P0口和P2口 9、PSW中的RS1和RS0用来( A )。 A、选择工作寄存器区号 B、指示复位 C、选择定时器 D、选择工作方式 10、上电复位后,PSW的值为( D )。 A、1 B、07H C、FFH D、0 11、单片机上电复位后,堆栈区的最大允许范围是( B )个单元。 A、64 B、120 C、128 D、256 12、单片机上电复位后,堆栈区的最大允许范围是内部RAM的( D )。

相关文档
最新文档