MCS-51单片机实验源程序

合集下载

MCS-51单片机程序设计

MCS-51单片机程序设计

+1
,当X>0
Y= 0
,当X=0
开始
-1
,当X<0
X=0
N
程序流程框图如图4.1所示。 Y
Y←0
X>0 Y
Y←1
N Y←-1
结束
程序如下: ORG
MOV CJNE MOV AJMP MP1: JB MOV LJMP MP2: MOV HERE: SJMP
1000H A,R0 A,#00H,MP1 R1,#00H HERE ACC.7 MP2 R1,#01H HERE R1,#0FFH HERE
1000H DPTR,#2000H DPL DPH DPTR,#3000H R2,DPL R3,DPH
;源数据区首地址 ;源首址暂存堆栈
;目的数据区首地址 ;目的首址暂存寄存器
LOOP:
POP POP MOVX INC PUSH PUSH MOV MOV MOVX MOV MOV DJNZ SJMP
;源数据区首地址 ;目的数据区首地址 ;循环次数 ;取数据 ;数据传送 ;源地址加1 ;目的地址加1 ;循环控制 ;结束
例4.8 外部RAM之间的数据传送程序。
把外部RAM 2000H开始单元中的数据传送到外部RAM 3000H开始的单 元中,数据个数在内部RAM的35H单元中。
START:
ORG MOV PUSH PUSH MOV MOV MOV
K=?
K=0
K=1
转向 0 分支 转向 1 分支
K= n-1
K=n
转向 n-1 分支 转向 n 分支
例4.5 设内部RAM的30H单元有一个数,根据该数值的不同 转移到不同的程序段进行处理,设数值的范围为0~10的 无符号数。

第三章 MCS-51系列单片机指令系统及汇编语言程序设计

第三章 MCS-51系列单片机指令系统及汇编语言程序设计

加1指令(5条)
INC INC INC INC INC A direct @Ri Rn DPTR
减1指令(4条)
DEC DEC DEC DEC A direct @Ri Rn
十进制调整指令(1条)
DA A ; DA指令只能放在加法指令后应用,把A中按二进制 相加后的结果调整成按BCD数相加的结果 。
堆栈操作类指令(2条)
PUSH direct POP direct 例:SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入 08H地址单元,SP=08H。
交换指令(5条)
XCH A,Rn XCH A,@Ri XCH A,direct XCHD A,@Ri SWAP A 例:A=80H,R0=32H,(32H)=FFH,指令XCHD A,@R0执行 后,A=8FH,(32H)=F0H。
• 作业: • 计算 2B46H * 8AH ,将计算结果放在片内 • RAM 4FH、4EH、4DH单元,4DH放最低 位。
3. 逻辑操作类指令(共24条)
“与”操作指令(6条)
ANL ANL ANL ANL ANL ANL A,direct A,#data A,Rn A,@Ri direct,A direct,#data
逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、 清0、左右移位等逻辑操作。
“或”操作指令(6条)
ORL A,direct ORL A,#data ORL A,Rn ORL A,@Ri ORL direct,A ORL direct,#data 例:(21H)=3AH,A=14H,指令ORL 21H,A执行后,(21H)=3EH。
CHENG: MOV A , R2 • MOV B , R3 • MUL AB • MOV R5 , A • MOV R6 , B • MOV A , R2 • MOV B , R4 • MUL AB • ADD A , R6 • MOV R6 , A • MOV A , B • ADDC A , #00H • MOV R7 , A • RET

MCS-51系列单片机的指令系统和汇编语言程序

MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。

3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。

(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。

3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。

3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。

3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。

3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。

(3)将累加器内容送片外RAM 的7BH 单元。

(4)将累加器内容送片外RAM 的007BH 单元。

(5)将ROM007BH 单元内容送累加器。

3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。

MCS-51单片机实验5-1外部中断实验1

MCS-51单片机实验5-1外部中断实验1

【实验流程图】
主程序
外部中断0初 始化
点亮P1.0口 LED灯
等待中断
主程序结束
中断程序
P1.0取反
中断程序返 回
【实验O程RG序代码】
0LJ0M00PH M ORAGIN 0003H
INTER0:CPL P1.7
RETI MAIN:SETB EA
SETB EX0
SETB IT0 CLR P1.7 SJMP $
END
实验一、外部中断实验1
【实验步骤】
将程序补充完整,并添加注释 运行程序观察实验现象。
ORG
0LJ0M00PH
;主程序入口
;转置主程序
330
M ORAGIN 0003H;外中0断入口
INTER0:CPL P1.7 ;;LLDDEE灯灯灭亮
74ls0
RETI
为避免占;用返其回他等中断待的入
实验一、外部中断实验1
【实验目的】
掌握外部中断的初始化方法 熟悉中断的触发过程
【接线方式】
P1.0接1个LED灯 P3.2接一个单脉冲发生器。
实验一、外部中断实验1
【实验内容及要求】
编写程序,实现以下功能 上电LED灯亮,中断一次,小灯变灭,再次中断, 小灯再次点亮,如此反复,即每发生一次中断, 灯的亮灭状态改变一次。
ORG 0013H入口地址初始化
SETB EA SETB EX1 SETB IT1
允许总中断
允许外部中断0 设置外部中断1的触发方式 为边沿触发方式
口地址,我们通常将中断
7 P1.7
MAIN:SETB入E口A处;放允一许条总跳中转断指令,单脉
SETB

可EX以0把;程允序许修外改中如断下。0

MCS51单片机原理与应用-焊接实验

MCS51单片机原理与应用-焊接实验

单片机开发板焊接实验
学习目标
熟悉电路板焊接基本流程 掌握电路板焊接基本技能
焊接准备
准备焊接工具
烙铁、焊锡丝、松香、镊子、放大镜等
准备电路装配图
电路装配图是电子元件的布局图
准备元件
元件清单
焊接原则
按功能模块焊接:
电源电路,振荡电路,UART电路(下载), 复位等
按器件高低大小焊接:
先焊接较低器件:电阻、电容、二极管、三极 管; 再焊接较高器件:连接器、IC插座、按键等
RS232电路焊接过程-2
• MAX232的焊接
– 注意1号脚的位置,芯 片上豁口的方向 – 在一个对角的焊盘上加 上焊锡,这里是8号脚 – 放上芯片,芯片上的1 号脚位置标志是一个凹 下去的圆点
RS232电路焊接过程-3
• 把芯片的引脚和焊盘 对齐,固定8号引脚 • 用电烙铁加热焊锡丝 固定16号引脚 • 一定要使芯片的引脚 和焊盘对齐
电源电路焊接过程-8
正常工作状态
焊接顺序
• • • • • • • • • • • 电源电路焊接 C11->C6->IC插座->晶振 RS232电路的焊接 LED:D1->D2 复位电路 Switch:SW1->SW2->SW3->SW4 电阻的焊接 三极管的焊接:Q1->..->Q8 排阻的焊接 LED点阵焊接 4*4键盘、限流电阻焊接
RS232电路的原理图
RS232电路PCB图
• 焊接顺序 • C8->C7->C10->C5->C4>C9->U2->J1
RS232电路焊接过程-1
• 按照电源电路部分电 阻电容的焊接方法, 焊接电容C10->C5->C4>C9->C8->C7 • 焊接顺序,按照上面 的顺序逐个焊接 • 焊接要保证焊接质量, 是焊点有光泽,没有 毛刺

MCS-51单片机实验

MCS-51单片机实验

MCS-51单片机实验第一部分软件实验 (2)软件实验一求一组数据的最大(小)值 (2)软件实验二二进制数转换为BCD数 (3)软件实验三二进制数转换为ASCII码 (3)第二部分硬件实验 (5)硬件实验一并行口输入、输出实验 (5)硬件实验二外部中断实验 (6)硬件实验三定时计数器实验 (9)硬件实验四串行通信实验 (11)第三部分综合实验 (13)综合实验一电子时钟 (13)第一部分软件实验软件实验一求一组数据的最大(小)值一、实验目的1.熟悉Keil μVision3软件,掌握C51语言程序的调试方法。

2.理解并掌握数组的定义及初始化。

3.熟悉并学会分支程序、循环程序的安排与设计。

二、实验设备装有Keil μVision3的计算机 1台三、实验内容••••1.用数组定义一组数据(如10个带符号数,每个占2字节),并赋初值;••••2.编程找出这组数的最大值、最小值,分别存在max、min变量中;••••3.编译后单步调试,打开Watches窗口和Memory窗口,观察变量值的变化以及它们在单片机存储器中的实际位置。

四、实验步骤1、建立项目文件:用鼠标单击【Project—New Project…】菜单命令,在弹出的“Creat New Project”窗口中选择项目保存的位置,在“文件名”后的框中输入项目文件名(可以与源程序文件名相同),单击“保存”。

并在弹出的窗口中选择器件型号。

2、建立源程序文件并添加到项目中:用鼠标单击【File—New…】菜单命令(或Create a new file),进入编辑窗口,在该窗口中输入源程序,单击【File—Save】菜单命令(或保存文件快捷按钮)保存文件(必须带扩展名)。

注意:用汇编语言写的程序,文件的扩展名为.ASM(必须写);如用C语言则扩展名为.C。

然后将该文件添加到项目中。

必要时对单片机的晶振频率、编译输出文件(.hex)进行设置。

3、编译程序:用鼠标单击【Project—Build target或Rebuild all target files】菜单命令(或相应的快捷按钮),对源文件进行编译。

MCS-51汇编语言程序设计

MCS-51汇编语言程序设计

01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
2
本章目录
4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 查表程序 4.2.5 子程序 4.3 汇编语言程序设计实例 习题与思考题
4.1 程序设计概述 4.1.1 程序设计的步骤 4.1.2 程序设计的方法 4.1.3 汇编语言的规范 4.1.4 汇编语言程序编辑和 汇编 4.2 结构化程序设计方法
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
15
4.1.3 汇编语言的规范
(5)定义字伪指令 )定义字伪指令DW
[标号:] 标号: DW 16位二进制数表 16位二进制数表
---伪指令 伪指令DW 伪指令
功能: DW 指令是在程序存储器 ( ROM ) 中 , 从指定的 指令是在程序存储器( 功能 : DW指令是在程序存储器 ROM) 地址单元开始,定义若干个16位数据 一个16位数 位数据。 地址单元开始,定义若干个16位数据。一个16位数 要占两个存储单元,其中高8位存入低地址单元, 要占两个存储单元, 其中高 8位存入低地址单元, 位存入高地址单元。 低8位存入高地址单元。 例如: 例如: ORG 1100H 1100H TAB : DW 1234H, 0ABH 10 1234H, 以上伪指令经汇编以后, 将对从1100H 以上伪指令经汇编以后 , 将对从 1100H 开始的若 干内存单元赋值。 干内存单元赋值。
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
16
4.1.3 汇编语言的规范
例如:ORG 1100H 例如: TAB :DW 1234H, 0ABH 10 (1100H)=12H (1101H)=34H (1102H)=00H (1103H)=ABH (1104H)=00H (1105H)=0AH

MCS-51单片机应用实验教程课程设计

MCS-51单片机应用实验教程课程设计

MCS-51单片机应用实验教程课程设计1. 简介MCS-51单片机是一种高性能、低功耗单片机,广泛应用于各个领域。

本文主要介绍MCS-51单片机应用实验教程课程设计内容,以帮助初学者了解MCS-51单片机的应用。

2. 实验环境•Keil C51编译器•STC89C52RC单片机•电路板和外围器件•PC3. 实验内容3.1 实验1:LED流水灯LED流水灯是MCS-51单片机入门实验,可以让学生熟悉MCS-51单片机基本指令和寄存器的使用,以及加深对位运算的理解。

实现方法:通过MCS-51单片机的IO口和位运算实现8个LED灯的流水效果。

3.2 实验2:数码管显示数码管是一种常见的数字显示器件,通过数码管的显示,可以实现对数字的显示和闪烁等效果。

该实验可以让学生了解MCS-51单片机的定时器和中断服务程序的使用,以及对数码管的控制。

实现方法:通过MCS-51单片机的定时器,按照一定的时间间隔对数码管进行显示和闪烁。

3.3 实验3:按键控制LED灯按键开关是电子产品常用的一种输入方式,通过按键的不同状态可以控制LED等输出设备的开关。

该实验可以让学生了解MCS-51单片机的IO口的输入状态读取和控制。

实现方法:通过MCS-51单片机的IO口读取按键输入状态,通过位运算控制LED灯的开关。

3.4 实验4:外部中断实现按钮控制LED灯外部中断是MCS-51单片机的一种重要功能,通过外部中断可以实现对按钮的响应,进而实现对LED等设备的控制。

该实验可以让学生进一步了解MCS-51单片机的外部中断服务程序的使用和IO口管理。

实现方法:通过MCS-51单片机的外部中断输入,响应按键状态,并通过位运算控制LED灯的开关。

3.5 实验5:定时器PWM控制LED灯亮度通过调节LED灯的亮度,可以达到调节电子产品亮度的效果。

该实验可以让学生了解MCS-51单片机的定时器的PWM输出功能,以及通过PWM实现对LED等设备的亮度调节。

MCS-51单片机实验4-1拆字与拼字程序

MCS-51单片机实验4-1拆字与拼字程序

A只CC是BCD 码,每个
数字不会超过0808039H,可
2以0不H 用屏蔽0,8直H 接相
加,实验中的程序,
21H 03H
适合0至F所有十六进
2制2数H 的拆解8与3拼H合。
B
0003HH
实验一、拆字与拼字程序
【实验目的】
掌握顺序结构程序设计方法 掌握数字的拆解与拼合方法(含BCD码)
【接线方式】
暂无
实验一、拆字与拼字程序
【实验内容及要求】
编写程序,实现以下功能 1、将片内RAM的20H内容拆开,高位送21H,低 位送22H。 编写程序, 2、将20H的低位、21H的低位送22H的高位、低 位。
【实验流开程始图】
(20H)送A,
A内数据高低 四位交换
屏蔽高四位保 留低四位
A送21H
(20H)送A 屏蔽高四位保
留低四位
A送22H
结束
开始 (20H)送
A, A内数据屏蔽高四
位保留低四位 A内数据高低
四位交换
A送B
(21H)送A
屏蔽A高四位 保留低四位
A加B送A
A加B送A
结束
【程序代码及运行结果 拆字程序】
ORG 0000H MOV A,20H
ACC
SWAP A
ANL A,#0FH MOV 21H,
20H
A MOV A,20H
21H
ANL A,#0FH
22H
MOV 22H,A
803388HH
83H
08H 03H
SJMP $
【程序代码及运行结果 拼字程序】
ORG
0000H
MOV A,20H
ANL A,#0FH

MCS51单片机实验及课程设计指导书

MCS51单片机实验及课程设计指导书

MCS—51单片机实验及课程设计指导书杨打生王忠远康瑞芳内蒙古电子信息职业技术学院2006.3目录实验实验一:WAVE软件使用实验二:常用指令的使用练习实验三:循环程序实验四:查表程序实验五:数制转换程序实验六实用子程序:(编程器的使用)实验七:输入检测与输出显示程序实验八:中断/定时程序课设一、课程设计目的和意义二、实验电路系统的结构和使用方法三、设计参考题目介绍和设计提示性思考题四、设计任务书及要求五、课程设计报告格式及要求六、考核办法七、课程设计内容及学时安排实验一:WAVE软件使用一、预习内容1、试验目的:学习WAVE软件安装和基本使用。

2、WAVE软件的安装选择WAVE文件夹下的SETUP.EXE文件并双击接着下一步最后到完成。

3、安装后写出软件窗口中工具栏中各按钮的名称。

参考说明书4、写出下面二实例各条指令的含义二、试验内容实例一指令的含义ORG 0000HMOV R0,#01HL1: MOV A,R0MOV P0,AINC R0AJMP L1END实例二ORG 0000H 指令的含义MOV R0,#01HL2: MOV A,R0MOV P2,ARL AMOV R0,ALJMP L2END1、打开WAVE见面,新建一个文件后输入实例一程序内容,并保存在我的文档名为A1.ASM ,执行编译按钮或项目菜单中的编译2、编译后,如正确扫描过去,不正确提示出错信息修改后再编译直到不提示错误为止。

3、打开窗口中的CPU窗口和数据窗口的CODE和DADE写出每条指令的机器操作代码。

4、打开窗口中的平排窗口,这样程序窗口、CPU窗口、数据存储器窗口就并排在整个屏幕。

5、点击单步按钮或F8键进行单步操作。

6、观测CPU窗口的A、P0和数据存储器窗口R0的状态并列表1记录每循环一次下列寄存器的值。

8、新建一个文件后输入实例二程序内容,并保存在我的文档名为A2.ASM ,执行编译按钮或项目菜单中的编译三、实验报告要求1、写出上述两试验程序各条指令的含义(与预习时相比是否一致)。

外部中断实验报告

外部中断实验报告

一、实验目的1. 理解单片机外部中断的概念和工作原理。

2. 掌握MCS-51单片机外部中断的编程方法。

3. 通过实验验证外部中断在实际应用中的效果。

二、实验环境1. 实验设备:MCS-51单片机实验板、按键、LED灯、面包板、连接线等。

2. 开发环境:Keil uVision5软件。

三、实验原理外部中断是单片机的一个重要功能,用于响应外部事件。

当外部事件发生时,CPU可以暂停当前程序,转而执行中断服务程序,处理外部事件。

MCS-51单片机有两个外部中断源,即INT0和INT1。

四、实验内容1. 硬件连接将按键连接到单片机的INT0或INT1引脚,LED灯连接到单片机的某个I/O口。

具体连接方式如下:- 将按键的一端连接到单片机的INT0或INT1引脚,另一端连接到地。

- 将LED灯的正极连接到单片机的某个I/O口,负极连接到地。

2. 程序设计(1)初始化单片机```cvoid main() {EA = 1; // 开启总中断EX0 = 1; // 开启INT0中断IT0 = 1; // 设置INT0为下降沿触发P1 = 0xFF; // 初始化P1口为高电平,关闭LED灯 while(1) {// 主循环}}```(2)编写中断服务程序```cvoid ext0_isr() interrupt 0 {P1 = 0x00; // 点亮LED灯delay(500); // 延时0.5秒P1 = 0xFF; // 熄灭LED灯}```(3)编写延时函数```cvoid delay(unsigned int ms) {unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 123; j++);}```3. 实验步骤1. 编写程序,并使用Keil uVision5软件进行编译和烧录。

2. 将程序烧录到单片机中,并连接好硬件电路。

3. 按下按键,观察LED灯是否闪烁。

单片机实验报告(完整版)

单片机实验报告(完整版)

单片机原理与应用实验报告学院(部):专业:学生姓名:班级:学号:最终评定成绩:实验一存储器读写一、实验目的:1、掌握寄存器、存储器读写等汇编指令;2、掌握编程软件编辑、编译、调试等基本操作。

二、实验仪器设备1.PC机,1台2.WAVE软件开发系统三、实验内容及步骤:1、将下面的汇编程序输入到W A VE集成开发软件中ORG 0000HSJMP STARTORG 0030HSTART:MOV R0,#07HMOV 70H,#08HMOV R1,#70HMOV DPTR,#2000HLOOP:MOVX A,@R1MOVX A,@DPTRINC R1INC ADJNZ R7,LOOPSJMP $END2、选择菜单“仿真器”→“仿真器设置”,按下图所示完成软件初始设置。

3、选择菜单“项目”下“编译”,编译通过后,选择“单步运行”,观察记录寄存器(R0、R1)、累加器(A)、程序状态字(PSW)、外部存储器(2000H单元)、I/O端口(P1)的数据变化。

四、源程序源程序:ORG 0000H ;定义起始地址SJMP STARTORG 0030HSTART:MOV R0,#07HMOV 70H,#08H ;给内部RAM的70H单元赋初值MOV R1,#70H ;使R1指向内部70H单元MOV DPTR,#2000H ;定义外部存储器开始单元LOOP:MOVX A,@R1 ;将R1所指向的70H的内容赋给AMOVX @DPTR,A;将A的内容赋给外部存储器单元INC R1 ;内部RAM地址加1INC DPTR ;外部存储器地址加1DJNZ R7,LOOP ;循环,直到RAM中70H~7FH;单元的内容全部相应赋给;外部2000H~2007H单元SJMP $END3、记录下程序单步运行时,寄存器(R0、R1)、累加器(A)、程序状态字(PSW)、外部存储器(2000H单元)、I/O端口(P1)的数据变化。

五、仿真效果图实验二I/O端口操作一、实验目的:1、掌握I/O端口读写等基本汇编指令;2、掌握单片机最小系统硬件电路设计及仿真软件PROTEUS仿真、调试等基本操作方法。

第5章 MCS-51单片机的程序设计

第5章 MCS-51单片机的程序设计

5.2.1 MCS-51伪指令
(4)数据地址赋值命令
格式: 字符名称
(5)定义字节指令 格式: [标号:]
DATA
表达式
DB
8位二进制数表
(6)定义字命令
格式: [标号:] (7)定义空间命令 DW 16位二进制数表
格式:[标号:]
(8)位地址符号命令 格式:字符名称
DS
表达式
BIT
位地址
5.2.2 汇编语言程序的格式
分析:
根据C51的数据类型规定,使用指针类型定义x,y,定位于片内RAM中。 程序如下: void delay_10ms (void) { unsigned char i,j; /*i,j定位于片内RAM中*/
for (i = 0; i < 13; i++)
/*i,j的循环次数由延时时间确定*/
for ( j=0 ; j<250 ; j++ ); }
例5-6:已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋 值,结果存入31H单元。 void main (void){
char data *x,*y;
x=0x30; y=0x31;
X 1, X 0 Y 0, X 0 1, X 0
if (*x>0){
T机器=12T时钟=121/fosc=1us
(假设晶振频率fosc为12MHz) 延时时间的简化计算结果: (1+1+2) X Y
若想延时100ms,只需修改计数初始值,即 (1+1+2) 125200us=100ms
5.3.4 循环程序
例5-8:编写延时10ms子程序,fosc=12MHz 。

第四章 MCS-51单片机的应用程序设计

第四章   MCS-51单片机的应用程序设计

二进制数转换成BCD码 (二翻十 二翻十). 例4-7 二进制数转换成 码 二翻十 假定一个待转换的16位二进制数 位二进制数0E1FH存 假定一个待转换的 位二进制数 存 放在(R3R2)中,现在要将它转换成 现在要将它转换成BCD码 ,并存 放在 中 现在要将它转换成 码 并存 放到数据区44H~40H中,如下所示 P71 如下所示: 放到数据区 中 如下所示 由于16位二进制数最大为 位二进制数最大为FFFFH,转换结 由于 位二进制数最大为 转换结 果为65535,共5位,所以需要 个结果单元 所以需要5个结果单元 果为 共 位 所以需要 个结果单元.
104=2710H 102=0064H
l03=03E8H 10=000AH =
第四章
入口
MCS-51单片机的应用程序设计
入口 否 过程 否 入口
P1
条件满足? 是
P2 过程A P3 出口 (a) 顺序结构 出口 (b) 分支结构 过程B
条件满足? 是
出口 (c)
一、 多字节数加法 1.多字节无符号数加法
运算程序
(43H)(42H)(41H)(40H) CY CY CY +) (53H)(52H)(51H)(50H) (43H)(42H)(41H)(40H)
下述程序提供的是另一种算法,其执行速度较快。 下述程序提供的是另一种算法,其执行速度较快。 程序以R 作为入口和出口 作为入口和出口. 程序以 2作为入口和出口 HEXASC2: M()V A.R2 : . ANL A,#0FH ;0AH ADD A,#90H ;9AH DA A ;(A)=00H,C=1 ADDC A,#40H ;41H DA A ;C=0 MOV R2,A ;(R2)=41H RET

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

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

单片机原理与应用实验报告学校:合肥工业大学姓名:吕增威学号:班级:计算机科学与技术08-03班目录前言 ------------------------3 第一章 MC51 单片机原理及应用软件实验实验1:系统认识实验--------------------6实验6:数据排序实验(验证性)---------- 11第二章 MC51 单片机原理及应用硬件实验实验1:广告灯实验----------------------15实验2:P1 口实验(验证性)-------------21实验16:串口转并口实验 ----------------32 实验心得与体会---------------37前言一.单片机原理实验的任务单片机原理实验是单片机原理及应用课程的一部分,它的任务是:1.通过实验进一步了解和掌握单片机原理的基本概念、单片机应用系统的硬件设计及调试方法。

2.学习和掌握单片机应用系统程序设计技术。

3.提高应用计算机的能力及水平,提高逻辑动手能力。

二.实验设备单片机实验所使用的设备由计算机、单片机实验开发系统(,其中计算机是软件开发平台,主要完成程序编辑、编译、下载程序等任务;单片机实验开发系统是硬件开发平台,是基于51/196 单片机的扩展实验系统。

计算机和单片机实验开发系统之间是通过RS232 串行接口进行通信的。

单片机实验开发系统配有开关电源、单片机、晶振、存储器、可编程并行接口芯片、键盘显示控制芯片、24 键键盘、六位LED 数码管显示、A/D 及D/A 转换芯片、简单输出口2个、简单输入口1 个、逻辑电平输入开关、发光二极管显示电路,并配有小直流电机、步进电机、继电器、音响等驱动电路。

在计算机软件的控制下可完成单片机基本实验及综合3设计性实验项目。

所有的MCS51 单片机原理及应用课程实验都是在这套实验系统上完成的。

Keil与Proteus的联合使用: Keil C51 6.02的使用:1.打开Keil,新建一个程序文件(File--New),在上面输入要调试的程序,保存为*.asm格式;2.新建一个工程(project--Newproject),保存,在CPU选项了选择Atmel--AT89C51,点击确定,在弹出的选项框中选择“否”。

MCS-51实验指导书

MCS-51实验指导书

单片机仿真实验系统MCS-51实验指导书南昌大学本实验指导是为适应单片机原理与应用方面的课程需做大量软硬件实验的需要而编写的,供学生编程用。

完成本实验指导中的实验,可使学生基本掌握MCS-51单片机的结构原理、接口技术、程序设计技巧。

实验指导书中详细叙述了各实验的目的、内容,列出了接线图、程序框图和实验步骤。

单片机实验注意事项:1:主CPU为8032,需要扩充一片6264作为数据区,连接6264的读写信号到CPU的读写信号,连接CS1到A15;连接数据线,连接地址高低线;2:实验仪上的波段开关必须选择9600波特率,和51系统;3:接线和拔线时必须断电, PC微机必须与本实验系统保持联机状态,即软件界面右上角有编译进度条,确定连机状态才可调试程序;4:通过RS232通信接口,利用上位机实现用户程序的编辑、编译和调试运行。

在软件的设置栏内,点击仿真模式,选择系统、系统;注意:上位机的存盘文件名只能用英文字母和数字组合,长度不能超过8位且存盘路径必须在默认的C 盘DAIS目录下;5:系统接口实验电路为单元电路方式,数据总线以8芯扁平线形式引出,硬件学生连线为电路图上粗实线。

部分机器硬件介绍可参考微机原理实验指导书。

目录软件实验部分:实验一清零程序实验二拆字程序实验三拼字程序实验四数据区传送子程序实验五数据排序实验实验六查找相同数个数实验七无符号双字节快速乘法子程序实验八多分支程序实验九脉冲计数(定时/计数器实验)实验十电脑时钟(定时器、中断综合实验)硬件实验部分:实验一 P1口亮灯实验实验二 P1口转弯灯实验实验三 P3.3口输入,P1口输出实验四工业顺序控制实验五继电器控制实验六 8255控制交通灯实验七 LED16×16点阵显示实验实验八串并转换实验实验九 A/D转换实验实验十 D/A转换实验十一电子音响实验十二步进电机控制实验十三 8032串行口应用实验㈠——双机通信实验十四小直流电机调速实验软件实验部分本节共编了十个软件实验,通过这些实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

基于c51的三用表源程序

基于c51的三用表源程序

下面是一份基于C51的三用表源程序的示例:```c#include <reg51.h>sbit TRIG = P1^0; // 发射引脚sbit ECHO = P1^1; // 接收引脚sbit LED = P2^0; // LED指示灯void delay(unsigned int ms) {unsigned int i, j;for(i = 0; i < ms; i++) {for(j = 0; j < 114; j++);}}void main() {unsigned int distance;while(1) {TRIG = 0; // 发送低电平信号,准备下一次触发 delay(10);TRIG = 1; // 发送高电平信号,触发超声波测距 delay(10);TRIG = 0;while(!ECHO); // 等待接收引脚变高TL0 = 0; // 计时器0低8位清零TH0 = 0; // 计时器0高8位清零while(ECHO); // 等待接收引脚变低TR0 = 1; // 启动计时器0while(!ECHO); // 等待接收引脚变高TR0 = 0; // 关闭计时器0distance = TL0 | (TH0 << 8); // 读取计时器0的值if(distance <= 30) {LED = 1; // LED亮起} else {LED = 0; // LED熄灭}// 暂停500毫秒delay(500);}}```这是一个基于C51单片机的三用表源程序。

程序通过超声波模块测量距离,并根据测量结果控制一个LED指示灯的亮灭状态。

当距离小于等于30厘米时,LED亮起,否则LED熄灭。

程序通过计时器模块实现对超声波传感器测量时间的计时,通过引脚的输入输出来与硬件连接。

程序使用延时函数实现时间的精确控制和延时操作。

循环不断地进行测量和LED状态的更新,以实现三用表的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MCS-51单片机实验源程序仅供参考。

没有最好,只有更好!希望大家设计出更好的程序来。

软件实验一求一组数据的最大(小)值/*软件实验的目的:熟悉单片机常用的基本程序(算法),调试时观察变量(含数组)值的变化,从而理解程序的功能,了解变量(含数组)在单片机存储器中的具体位置。

*/int a[]={-1,2,-30,40,-500,600,-7000,8000,-32750,32765}; //任意给出10个int型数(围:-32768~+32767),放在数组a中void main(){unsigned char i;int max,min;max=min=a[0]; //max,min先取该组数据的第一个for(i=1;i<10;i++){if(a[i]>max) max=a[i];if(a[i]<min) min=a[i];}while(1); //没有什么要做了,则用该语句作为main函数的结尾,无限循环}附调试截图:注意:由于是纯软件实验(单片机没有进行实际的输入与输出),有些变量要声明为全局会被Keil软件编译时优化掉(即:一些语句没有真正生变量(如上面的数组a),否则可能..成执行代码),导致无法观察到正确结果。

软件实验二二进制(十六进制)数转换为BCD数//按流程图,编写程序如下:#define uchar unsigned charvoid main(){uchar x=0xA5; //设二进制数为1010 0101,在Keil中只能用十六进制0xA5或十进制165(不能直接用二进制形式)uchar a[3];a[2]=x/100;x=x%100;a[1]=x/10;x=x%10;a[0]=x;while(1);}//或者用for循环语句,先取出个位#define uchar unsigned charvoid main(){uchar x=0xA5;uchar i,a[3];for(i=0;i<3;i++){a[i]=x%10;x=x/10;}while(1);}软件实验三二进制(十六进制)数转换为ASCII码//将0-9、A-F的ASCII码做成表格(数组)放到程序存储器ROM中#define uchar unsigned charuchar code ascii[]={"0123456789ABCDEF"}; //ASCII码表放ROM中/*上句赋值也可写成{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x41,0x42,0x43,0x44,0x45,0x46} *//* 还可写成{48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70} *//* 还可写成{'0','1','2','3','4','5','6','7','8','9','A','B','C','D', 'E','F'} */void main(){uchar x=0x5A; //设二进制数为0101 1010,在Keil中只能用十六进制0x5A或十进制90(不能直接用二进制形式)uchar cc,a[2];cc=x & 0x0f; //取x的低4位1010(即A)a[0]=ascii[cc]; //查表,a[0]存x低4位对应十六进制数(即A)的ASCII码cc=(x>>4)& 0x0f; //取x的高4位0101(即5)a[1]=ascii[cc]; //查表,a[1]存x高4位对应十六进制数(即5)的ASCII码while(1);}硬件实验一并行口输入、输出//P2做输出口,接8只LED,编写程序,使LED循环点亮(流水灯)#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){char a=0xfe;while(1){P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}}//P3.2和P3.3做输入口,分别接两个拨动开关到GND;P2.7~P2.4做输出口,接4只LED,用来指示两个开关的闭合状态组合#include<reg51.h>void main(){char a;while(1){a=P3; //读入P3口状态a=a&0x0C; //a中只保留P3.3、P3.2的值,其余位清零if(a==0x0C) P2=0x7F; //P3.3=1开,P3.2=1开,则P2.7=0亮if(a==0x08) P2=0xbF; //P3.3=1开,P3.2=0合,则P2.6=0亮if(a==0x04) P2=0xdF; //P3.3=0合,P3.2=1开,则P2.5=0亮if(a==0x00) P2=0xEF; //P3.3=0合,P3.2=0合,则P2.4=0亮}}//用一个共阳七段数码管循环显示0-9和A-F,每个数显示0.5s#include<reg51.h>sbit P1_0=P1^0;char code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳数码管段码(放在程序存储器ROM中)void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){ char j;P1_0=0; //位选信号while(1){for(j=0;j<16;j++){P0=TABLE[j];Delay(500);}}}硬件实验二外部中断//通过外部中断0(下降沿触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件bit LED=0; //位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void INT0_srv(void) interrupt 0 //INT0中断号为0{Delay(10); //延时10ms,去抖动if(INT0==0) LED=!LED; //每次中断时切换LED开启或关闭}void main(){char a=0xfe;IT0=1; //下降沿触发EX0=1; //允许INT0中断EA=1;while(1){if(LED) //开启{P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}else //关闭{P2=0xff;}}}//通过外部中断0(低电平触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭#include<reg51.h>#include<intrins.h> //部函数_crol_,_cror_等的头文件bit LED=0; //位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i;while(x--)for(i=0;i<123;i++);}void INT0_srv(void) interrupt 0 //INT0中断号为0{Delay(10); //延时10ms,去抖动if(INT0==0) LED=!LED; //每次中断时切换LED开启或关闭while(INT0==0); //如P3.2(INT0)还是0,则等待,变为1后才从中断返回}void main(){char a=0xfe;IT0=0; //低电平触发EX0=1; //允许INT0中断EA=1;while(1){if(LED) //开启{P2=a;Delay(500); //在12MHz晶振下,延时约500msa=_crol_(a,1); //循环左移,_cror_为循环右移}else //关闭{P2=0xff;}}}硬件实验三定时计数器//用单片机部定时器方式计时,实现每一秒钟P2口输出状态发生一次反转。

//设置定时器溢出时间为50ms,溢出20次则为1s//12MHz晶振下,部每个计数脉冲为1 s,50ms则需要50000个脉冲//在定时器方式1下初值为65536-50000//中断法#include<reg51.h>unsigned char count=20; //定时溢出次数void T0_int(void) interrupt 1//T0中断号为1{TH0=(65536-50000)/256; //每次溢出重新置初值TL0=(65536-50000)%256;count--;if(count==0) //溢出20次,即1s{count=20;P2=~P2;}}void main(){TMOD=0x01; //T0部定时,方式1TH0=(65536-50000)/256; //置初值TL0=(65536-50000)%256;ET0=1; //允许T0中断EA=1;TR0=1; //启动T0while(1); //循环等待}//查询法#include<reg51.h>unsigned char count=20; //定时溢出次数void main(){TMOD=0x01; //T0部定时,方式1,由TR0启动TH0=(65536-50000)/256; //置初值TL0=(65536-50000)%256;TR0=1; //启动T0while(1){while(!TF0); //等待定时溢出TF0=0; //溢出标志清零TH0=(65536-50000)/256; //溢出重新置初值TL0=(65536-50000)%256;count--;if(count==0) //溢出20次,即1s{count=20;P2=~P2;}}}//单片机对从P3.4(T0)输入的脉冲信号计数,T0工作于方式1,将计数结果送至P2口显示(二进制形式)//由于输出低电平时LED亮,故需反转后输出#include<reg51.h>void main(){TMOD=0x05; //T0外部计数,方式1,由TR0启动TH0=TL0=0; //置初值(可省略)TR0=1; //启动T0while(1){P2=~TL0; //将计数值实时送P2口显示,未考虑TH0}}//单片机对从P3.4(T0)输入的脉冲信号计数,T0工作于方式1,将计数结果用4位共阳数码管动态扫描显示(P0口输出段码,P1.0~P1.3分别选择千、百、十、个位,参见实验板原理图)#include<reg51.h>char code SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0~9的段码(放在程序存储器ROM中)char code bit_sel[]={0xf7,0xfb,0xfd,0xfe}; //个、十、百、千位选信号void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms{unsigned char i;while(x--)for(i=0;i<123;i++);}void main(){unsigned int count;unsigned char k;TMOD=0x05; //T0外部计数,方式1,由TR0启动TH0=TL0=0; //置初值(可省略)TR0=1; //启动T0while(1){count=TH0*256+TL0; //将计数值送countfor(k=0;k<4;k++) //动态扫描显示{P1=bit_sel[k]; //输出位选信号P0=SEG[count%10]; //输出段码Delay(5);count=count/10;}}}硬件实验四串行通信//单片机甲用于串行发送,单片机乙用于接收。

相关文档
最新文档