实验三单片机范文

2022-06-07

第一篇:实验三单片机范文

单片机实验三

实验三 单片机I/O口控制程序实验

一、实验目的和要求:

掌握单片机串行传输输入输出的应用方法。

二、实验设备:

安装了THGY51的计算机,单片机实验箱。

三、实验内容和步骤:

1、编辑一个程序,实现以下功能:

A程序(编程下载到A实验箱):

初始化为打开外部0中断,同时设置串口为方式1,波特率为1200bps(用T1溢出率来实现),同时禁止串行中断,用单脉冲信号连接到INT0(P3.2)上,当按下单脉冲按钮时,引发外部0中断,A实验箱从串口用查询方式发送01H到B实验箱,按一次发一次,内容从01H开始加1发送。(如: 第一次按,发01H,第二次按,发02H……)

B程序(编程下载到B实验箱):

初始化为允许串行接收中断,波特率与A实验箱相同。当接收到A实验箱发送来的数据后(使用查询方式或中断方式皆可),将其从P1口输出,P1连接到LED灯上显示。

2、在A实验箱上,将P3。2接到单脉冲发生器上,在 B实验箱上将P1口接到LED上。用两个实验箱A和 B,它们的RXD、TXD交叉连接,GND(地线)相连。

3、打开实验箱调试程序(图标为THGY51字样,与上学期8088实验图标类似),在里面输入调试成功的程序,下载程序到实验箱,运行程序,按单脉冲发生器3次,观察LED灯。

四、实验报告要求:

1、写出:确定串口工作于方式1,波特率为1200bps时,T1采用的工作方式;计算定时计数初值的过程及结果。(系统晶振为11.0592MHz)

2、记录调试通过的实验程序源文件。

3、总结叙述一下单片机串行工作时,应该怎么设置?

4、考虑如果让A也具有B的功能,B也具有A的功能,(即双方都可以发数,让对方显示)该怎么做?

第二篇:单片机实验报告(三)

实验报告书

信息工程系

电气自动化

11班

姓名:张青

日期:2014.10.14 实验一:完成AT89S51单片机与PC机的RS232串行通信接口电路实物制作。该部分电路可在实物电路板Ⅰ上进行搭建。

实验二:设计串口初始化程序,要求:工作方式

1、查询方式、允许接收、波特率为2400bps,设时钟频率为12MHz。

实验三:串口查询方式设计带参数字符发送子程序,并在此基础上利用MOVC查表指令完成带参数串发送子函数设计,自定义被发送字符串。要求工作方式1,波特率4800,时钟频率为11.0592MHz。 实验四:串口中断方式编写单字符接收程序,存储收接收并进行回显,波特率设为9600,时钟频率为11.0592MHz。 实验五:完成PC机远程控制小灯系统的软硬件仿真设计,并在实物电路板上测试程序的功能实现。 实验六:利用MOVC查表指令在试验电路板Ⅰ上拓展完成小灯多种显示功能的实现。

实验七:拓展题:结合定时器中断程序拓展完成PC机远程控制小灯闪烁、左右移动等功能的实现。

实验二:ORG 0000H LJMP START ORG 0030H START: LCALL INIT_S ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;串行口初始化子程序 ;;;;;;;;;;

INIT_S: MOV SCON,#40H MOV TMOD,#20H

MOV TH1,#0FAH

MOV TL1,#0FAH

SETB TR1

SETB REN

RET END

实验三:

ORG 0000H

LJMP START

ORG 0030H START:

LCALL INIT_S

MOV DPTR,#HELLO_TAB

LCALL

SEND_STRENG

LJMP $

INIT_S: MOV

SCON,#40H

MOV

TMOD,#20H

MOV

TH1,#0FAH

MOV

TL1,#0FAH

SETB TR1

CLR EA

RET

SEND_STRENG:MOV R1,#00H SEND_NEXT : MOV A,R1

MOVC A,@A+DPTR

CJNE A,#0FFH,SEND_B

RET

SEND_B: LCALL SEND_BYTE

INC R1

LJMP SEND_NEXT

SEND_BYTE:CLR TI

MOV SBUF,A

JNB TI,$

RET

ORG 0100H

HELLO_TAB:DB

"tang zi li shi ge da sb"

DB

0DH,0AH,0FFH

END 实验四:

RX_D_FIRST EQU 45H RX_D_P EQU 30H RX_COM_OK BIT 00H

ORG 0000H

LJMP START

ORG 0023H

LJMP INT_SERIAL

ORG 0030H START: LCALL INIT_S

MOV RX_D_P,#RX_D_FIRST

CLR RX_COM_OK

MOV DPTR,#HELLO_TAB

LCALL SEND_STRING

MOV DPTR,#COM_MESSAGE

LCALL SEND_STRING

LJMP $ 串行口初始化子程序

INIT_S: MOV SCON,#40H

MOV TMOD,#20H

MOV TH1,#0FDH

MOV TL1,#0FDH

SETB TR1

SETB EA

SETB ES

SETB REN

RET SEND_BYTE: CLR TI

MOV SBUF,A

JNB TI,$ RETURN: RET ; SEND_STRING: MOV R4,#00H SEND_NEXT: MOV A,R4

MOVC A,@A+DPTR

CJNE A,#0FFH,SEND_B

RET

SEND_B: LCALL SEND_BYTE

INC R4

LJMP SEND_NEXT INT_SERIAL: CLR EA

JBC RI, RX_DAT

JBC TI, INT_RETURN RX_DAT: MOV R1,RX_D_P

INC RX_D_P

MOV A,SBUF

CJNE A,#0DH,LOAD_DAT

MOV DPTR,#RECEIVE_OK

LCALL SEND_STRING

MOV RX_D_P,#RX_D_FIRST

SETB RX_COM_OK

LJMP INT_RETURN LOAD_DAT: MOV SBUF,A

MOV @R1,A

INT_RETURN: SETB EA

RETI

ORG 0100H HELLO_TAB: DB "Welcome to online operating system!"

DB 0DH,0AH,0FFH COM_MESSAGE: DB "Please input the command to control the LED."

DB 0DH,0AH,0FFH RECEIVE_OK: DB 0DH,0AH

DB "Receiving the command is ok!"

DB 0DH,0AH,0FFH

END

第三篇:单片机实验二实验报告

实验报告

课程名称:微机原理与接口技术

指导老师:李素敏

学生姓名:

学号:

专业: 自动化

日期:2014-04-10 地点:理工楼603

实验二

1. 实验目的和要求

① 掌握keil软件和STC-ISP 软件的使用方法 ② 熟悉发光管的工作原理 ③ 通过编程体验发光管的延时闪烁及移位等功能

2. 主要仪器设备

PC机

单片机学习开发套件(型号:89C52RC)

3. 实验内容

①实验内容1:第一个发光管以间隔200ms闪烁

源程序:

#include #define uint unsigned int

//宏定义

main() {

while(1) { P1=0xfe; delay(200); P1=0xff; delay(200); } } void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {

uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

一台一件

}

实验结果说明:要使发光管闪烁,只需设置合适的时间延时即可。

②实验内容2 : 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

源程序:

#include

#include //后面要用到它里面的_crol_(k,l)函数 //这个函数的意思是把一个字符变量k 循环左移l 位 #define uint unsigned int

//宏定义

unsigned char a,b,k,j;

//定义五个字符变量 sbit beep=P2^3; // 定义蜂鸣器的接口

void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {

uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); }

void main() {

k=0xfe; //先给k一个初值11111110等待移位 while(1) {

delay500ms();

beep=0; //打开蜂鸣器

delay500ms(); //让它响500ms

beep=1; //关闭蜂鸣器

j=_crol_(k,1); //把k循环左移一位

k=j; //把移完的值再送给k

P1=j; //同时把值送到P1口点亮发光二极管 } //再次循环 }

实验结果说明:在此程序中用到了_crol_(k,l)函数,此函数的功能在于循环移位,在每次发光管闪烁相应时间后左移一位,把移完的值再送到P口,点亮对应的发光管。这样循环往复,达到发光管流动的效果。

③实验内容3 :用8个发光管演示出8位二进制数累加过程,即用8个二极管表示8个二进制位(亮为1,灭为0),依次以二进制形式显示0,1,2,……255。

源程序: #include

#include //包含有左右循环移位子函数的库 #define uint unsigned int

//宏定义 #define uchar unsigned char //宏定义

void delay(uint z) //延时函数,z的取值为这个函数的延时ms数, {

uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void main()

//主函数 {

} uchar a; while(1)

//大循环 {

} a++; P1=~a; delay(200);

实验结果说明:在此定义一个无符号字符变量a,a的值进行累加,但是由于表示的二进制数要求亮为1,灭为0,与发光管的0亮1灭正好相反,所以将a的计数取反并设置相应延时,重复此过程就得到了在发光管上显示八位二进制数的累加过程。

④实验内容4 :间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

源程序:

#include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义

void delay(uint z) //延时函数,z的取值为这个函数的延时ms数 {

uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void main() //主函数 { uchar a,i,j; while(1) //大循环

} {

} a=0xfe; //赋初值

for(j=0;j<8;j++) { for(i=0;i<8-j;i++) //左移

} {

P1=a; //点亮小灯

delay(300); //延时300毫秒

a=_crol_(a,1); //将a变量循环左移一位

} a=_crol_(a,j); //补齐,方便下面的左移一位 P1=0xff; //全部关闭

a=a<<1; //左移一位让多一个灯点亮

4.心得体会:此次实验中练习较多的就是闪烁和移位,在编程过程中,设置闪烁的时间必须达到人眼正常观察的要求,这就需要计算合适的闪烁时间,不停的尝试,最终选择适宜观察的时间间隔。发光管的循环移位时调用_crol_(k,l)函数

可以大大简化编程的行数。所以熟悉单片机的函数库,可以方便我们编程。所以在以后的实验中还得继续学习这个函数库,从而更轻松的完成实验内容。

第四篇:单片机实验报告

实验

四、中断交通灯实验

林立强

1000850116

一、实验目的

1、了解MCS-51单片机的组成、中断原理,中断处理过程、外部中断的中断方式。

2、掌握中断响应及处理的编程方法。

二、实验原理

MCS-51的中断系统中有5个中断源:外部中断INTO,INT1,定时器/计数器TO、T1中断和串口UART中断,它们对应不同的中断矢量。 如表:

IE是中断允许寄存器,其中EXO,ETO,EX1,ET1,ES分别是上述5个中断的允许控制位,EA位是中断总允许位,每个中断只有在相应中断允许且总中断也允许的情况下,才能得到中断响应。80XX51的5个中断都可以设为高低2个优先级,IP是中断优先级寄存器,其中PXO,PTO,PX1,PT1,PS位分别对应5个中断的优先级设置,置“1”时设为高优先级中断,为“0”时是低优先级中断。在有中断嵌套要求时,低优先级中断可被高优先级所中断。当同一级的中断同时到来时,先响应中断矢量排在前面的中断。

三、实验电路

电路原理图如下,所需元件为:AT89C

51、SW-SPDT、LED-RED、LED-GREEN、 LED-YELLOW、RES、TRAFFICLIGHTS

四、实验内容

参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。

1、在生成HEX文件后,用Proteus软件对电路图进行计算机仿真;

2、程序下载到单片机实验板上验证; (实验板数码管的驱动程序见附件)。

五、程序流程图

仿真图:

紧急情况:

源程序:

ORG 0000H

AJMP START

ORG 0023H //串口中断地址

AJMP SBR1

START:MOV TMOD,#00100000B

//定时器方式2

MOV TL1,#0FDH //9600bps/11.0592MHz

MOV TH1,#0FDH

SETB TR1

MOV SCON,#01100000B //方式1

MOV R0,#20H

MOV R1,#40H

ACALL SOUT

SJMP $

SBR1: JNB RI,SEND

ACALL SIN

SJMP NEXT SEND: ACALL SOUT NEXT: RETI

SOUT: MOV A,@R0

MOV C,P

CPL C

MOV ACC.7,C

INC R0

MOV SBUF,A

CLR TI

RET

SIN: MOV A,SBUF

MOV C,P

CPL C

ANL A,#7FH

MOV @R1,A

INC R1

CLR RI

RET

PLAY: MOV A,R7

MOV B,#10

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

// 0

A B C D E F

END

第五篇:单片机实验报告

单片机实验一

实验报告

课程名称: 姓

名: 系

别: 专

业: 年

级: 学

号: 指导教师:

单片机原理及应用实验

陈璐 信息系

电气工程及其自动化

2012级 120712041 李莉

2015 年

6 月 25

1.实验目的和要求

1)熟悉Keil 软件界面,以及编辑、编译、运行程序的步骤;

2)熟悉Proteus软件界面,掌握用Proteus画仿真图的方法。 2.主要仪器设备

Keil 软件与Proteus仿真软件 3. 实验设计要求

利用单片机、1个开关和1个发光二极管,构成一个简单的开关检测系统的仿真电路图。单片机P3.0引脚接按钮开关,P1.0引脚接发光二极管的阴极。当开关闭合时,发光二极管亮;开关打开时,发光二极管灭;按钮开关与发光二极管没有任何电气上的联系。

单片机对开关K的状态的检测由程序检测P3.0引脚的输入电平。当开关K闭合,即P3.0脚输入低电平;当开关K打开,即P3.0脚输入高电平。使用发光二极管,阳极接+5V,阴极接P1.0端口。当程序控制P1.0输出高电平时,发光二极管D1灭;当程序控制P1.0输出低电平时,发光二极管D1亮。 4.操作方法与实验步骤

(1)Keil C51软件使用

在Keil C51集成开发环境下,建立一个工程并编辑以下源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。

#include "reg51.h" #define uchar unsigned char #define uint unsigned int sbit in=P3^0; sbit out=P1^0; void main(void) { while(1) { in=1; if(in= =0)out=0; else out=1; } } (2)建立新文件

进入Proteus ISIS界面,单机主菜单项【文件】→“新建设计”选项,就会弹出“新建设计”窗口,窗口中提供了多种模版选择。其中横向图纸为Landscape,纵向图纸为Portrait,DEFAULT为默认模版。单击选择的模版图标,再单击“确定”按钮,即建立一个该模版的空白文件。如果直接单击“确定”按钮,即选用系统默认的DEAFAUILT模版。

单击保存按钮,在弹出的对话框“保存ISIS设计文件”中输入文件名再单击“保存”,则完成新建设计文件的保存操作,其后缀自动为“.DSN”。

(3)设定绘图纸大小 单击菜单中的【系统】→“设置图纸大小”,选择所需图纸的尺寸位A4。

(4)选取元器件并添加到对象选择窗口中

单击器件选择按钮,弹出选取元器件对话框。在其左上角“关键字”一栏中输入元器件名称“AT89C51”,则出现关键字匹配的元器件列表。选中AT89C51所在行或单击AT89C51所在行后,再单击“确定”按钮,便将元器件AT89C51加入到ISIS对象选择窗口中。按此操作方法逐一完成其他元器件的选取。本设计中使用的各元器件的关键字相应为“AT89C51”、“BUTTON”(按钮开关)、“CAP”(瓷片电容)、“CAP-ELEC”(电解电容)、“CRYSTAL”(晶振)、“RES”(电阻)等。被选取的元器件加入到ISIS对象选择窗口中。 (5)放置、移动、旋转元器件

单击ISIS对象选择窗口中的元器件名,蓝色条出现在该元器件名上。把鼠标指针移到编辑区某位置后,单击就可放置元器件于该位置,每单击一次,就放置一个元器件。如果要移动元器件,先右击元器件使其处于选中状态,再按住鼠标左键进行拖动,达到目标处后,松开鼠标即可。如要调整元器件方向,先将指针指在元器件上单击鼠标右键选中,再单击相应的旋转按钮。若多个对象一起移动或转向,可选择相应的块操作命令。 (6)放置电源、地(终端)

单击工具箱的终端模式按钮,然后在对象选择窗口中单击POWER来选中电源,然后使用元器件调整工具按钮进行方向调整,最后在编辑区中单击放置电源。 (7)电路图布线

单击元器件引脚间、线间等接线处,自动生成连线。 (8)电气检测

单击电器检查快捷键按钮,根据电气检查列表的指示修改设计中的错误,完成实验。 5.实验内容及实验数据记录

每当按下K时,LED灯就会发光。

C2U130pF19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617X112MHz18XTAL2D1R24.7K930pFRSTR4220293031C310uFPSENALEEAKR310K10K12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51LED-GREENC1R1220 6.实验数据处理与分析

每当按下K时,in(p3.0)I/O口就会变为低电平,该信号使得CPU给out(p3.0)I/O口发送低电平,使得LED灯发亮。 7.实验过程中遇到的问题及解决方法

一开始安装软件的时候最后一步设置完通信设置时,鼠标点击“好”,但是屏幕一直显示“通信错误”的提示,经过重复操作,还是没有成功,结果是因为“端口选择”处选择错了,改正后最终安装成功。 8.心得体会

对于这次单片机实验不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固等,在以后的学习中尤其应该注意。

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:升学宴谢师宴范文下一篇:述职报告护士范文