单片机实验报告程序
单片机实验报告

unsigned int count;
void display(unsigned int d);
void delay(unsigned int n);
main()
{
second=0;
count=0;
TMOD=0x61; //T0定时器方式1 T1计数器方式2
TH1=255; TL1=255; //T2计数初值计一次即中断
}
else
{TR1=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;} //满一分钟停止TR1
}
void time1(void)interrupt 3 using 2
{
second++;
}
void int_1() interrupt 0 using 3 //0号中断(外中断0),使用3号寄存器组
{
display(second);
}
}
void time0(void) interrupt 1 using 1
{
count++; //中断一次计一次数
if(count<1200)
{
TH0=(65536-50000)/256; //T1计数初值(65535-50000)/fosc/12 50ms
TL0=(65536-50000)%256;
outdata[2]=10; //不显示
outdata[3]=d/10000; //取最高位
outdata[4]=d/1000%10; //取次高位
outdata[5]=d/100%10; //取次次高位
outdata[6]=ቤተ መጻሕፍቲ ባይዱ/10%10; //取次低位
proteus单片机实验报告

proteus单片机实验报告
Proteus单片机实验报告
一、实验目的
本次实验旨在通过Proteus单片机仿真软件,探索单片机的基本原理和应用,加深对单片机工作原理的理解,提高对单片机编程的熟练程度。
二、实验内容
1. 搭建单片机电路
在Proteus中选择合适的单片机模型,搭建基本的单片机电路,包括单片机、晶振、电源等。
2. 编写程序
利用Proteus提供的编程环境,编写简单的单片机程序,如LED灯闪烁、数码管显示等。
3. 仿真调试
通过Proteus的仿真功能,调试程序,观察单片机在仿真环境下的运行情况,检查程序是否正常运行。
三、实验步骤
1. 打开Proteus软件,选择合适的单片机模型,搭建单片机电路。
2. 编写简单的单片机程序,如让LED灯交替闪烁。
3. 在Proteus中进行仿真调试,观察程序运行情况。
四、实验结果
通过实验,我们成功搭建了单片机电路,并编写了简单的程序。
在Proteus的仿真环境下,LED灯按照设定的程序交替闪烁,证明程序正常运行。
五、实验总结
通过本次实验,我们加深了对单片机的理解,掌握了在Proteus中搭建单片机电路、编写程序并进行仿真调试的基本方法。
同时,也提高了对单片机编程的熟练程度。
总之,Proteus单片机实验为我们提供了一个良好的学习平台,使我们能够更好地理解单片机的工作原理和应用,为以后的学习和实践打下了坚实的基础。
希望通过不断地实践和探索,能够更深入地理解单片机的原理,并在实际应用中发挥其巨大的作用。
单片机实验报告

实验一:8255输入、输出实验一.实验要求编写程序,使用8255可编程并行口芯片,来检测八位拨动开关的状态,并控制八位发光二极管。
使得八位发光二极管的亮灭变化与八位拨动开关的状态相一致。
实验中用8255PB口作输入,PC口做输出。
二.实验目的了解8255芯片结构及编程方法。
三.实验电路及连线8255的PB0~PB7(PB口)接至八位拨动开关K0~K7。
将PC0~PC7(PC口)接至八位发光二极管L0 – L7。
CS8255接F228。
四.实验说明可编程通用接口芯片8255A有三个八位的并行I/O口,请用户仔细阅读有关书籍掌握其特点和各种用法。
由于8255的A1、A2脚分别接至地址线的A0、A1。
所以相对应8255各口/寄存器的地址分配如下:PA口:F228H; PB口:F229H;PC口:F22AH;控制寄存器地址:F22BH。
本示例程序中使用PB口作输入,检测八位拨动开关的状态;使用PC口作输出,控制八个发光二极管的亮灭。
五.实验程序及框图实验示例程序见8255.ASM。
实验示例程序流程框图如下:开设置8255工作状态PB口读入八位开关量PC口输出至八位二极管程序代码:;FOR EAT598;---------------------------------------------------------D8255 EQU 0F22BH ;8255命令口地址D8255A EQU 0F228H ;8255 PA口地址D8255B EQU 0F229H ;8255 PB口地址D8255C EQU 0F22AH ;8255 PC口地址;---------------------------------------------------------ORG 0000HLJMP STARTORG 0100HSTART:LCALL DELAY ;延时MOV DPTR,#D8255MOV A,#82H ;置8255状态;方式0,PA,PC口输出,PB口输入MOVX @DPTR,AROTATE:MOV DPTR,#D8255BMOVX A,@DPTR ;读开关状态MOV DPTR,#D8255CMOVX @DPTR,A ;点亮对应的LEDSJMP ROTATEDELAY: MOV R0,#0H ;延时子程序DELAY1: MOV R1,#0HDJNZ R1,$DJNZ R0,DELAY1RETEND实验二:扫描键盘、显示实验一.实验要求利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由PA口控制的七段数码管上。
单片机实验报告

单片机实验报告一、实验目的本次单片机实验的主要目的是通过实际操作和编程,深入了解单片机的工作原理和应用,掌握单片机系统的设计、开发和调试方法,提高自身的动手能力和解决问题的能力。
二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil)4、下载器5、示波器6、万用表三、实验内容1、点亮 LED 灯通过编写简单的程序,控制单片机的引脚输出高低电平,从而点亮或熄灭连接在该引脚上的 LED 灯。
这是单片机最基础的操作之一,旨在熟悉单片机的编程环境和引脚控制方式。
2、数码管显示利用单片机驱动数码管,实现数字的显示。
需要了解数码管的工作原理和驱动方式,通过编程控制数码管的段选和位选信号,显示不同的数字。
3、按键输入设计按键电路,通过读取按键的状态,实现对单片机系统的输入控制。
例如,通过按键切换不同的显示模式或控制其他外部设备。
4、定时器/计数器应用使用单片机的定时器/计数器功能,实现定时、计数等操作。
例如,设计一个定时闪烁的 LED 灯,或者通过计数器统计外部脉冲的个数。
5、串口通信实现单片机与计算机之间的串口通信,将单片机采集到的数据发送到计算机上进行显示和处理,或者接收计算机发送的指令对单片机系统进行控制。
四、实验原理1、单片机的基本结构单片机通常由中央处理器(CPU)、存储器(包括程序存储器和数据存储器)、输入输出接口(I/O 口)、定时器/计数器、中断系统等部分组成。
2、编程语言本次实验采用 C 语言进行编程。
C 语言具有简洁、高效、可移植性强等优点,非常适合单片机的开发。
3、引脚功能单片机的引脚分为电源引脚、时钟引脚、复位引脚、I/O 引脚等。
通过对这些引脚的合理配置和控制,可以实现各种功能。
4、数码管驱动原理数码管分为共阴极和共阳极两种类型。
通过控制数码管的段选和位选信号,可以使数码管显示不同的数字和字符。
5、按键检测原理按键通常采用上拉电阻或下拉电阻的方式连接到单片机的I/O 引脚。
单片机汇编语言程序设计实验报告

单片机实验1 汇编语言程序设计实验---- 存储器块赋值一.实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。
例如将4000H 开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。
)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPU Lab8000/Lab6000通用微控制器 MCS51实验 8051前3个软件实验勾选√使用伟福软件模拟器四实验步骤注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
编译器默认设置:程序框图参考例程序:Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #10 ; 清10个字节mov a, #33h ; 将33H赋值给aLoop:movx @dptr, a 将a写入外部RAMinc dptr ; 指向下一个地址djnz r0, Loop ; 记数减一ljmp $ ; $当前程序指针相当于一直执行自己;ljmp $ end说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp $,程序死循环要求赋值数据为10,9,8,7,6,5,4,3,2,1则以上程序该如何改动? 自己修改程序实现。
单片机实验报告范文

单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。
二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。
2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。
通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。
三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,点亮LED灯。
2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将按键和LED灯与单片机相连。
(3)编写程序,实现按下按键控制LED灯亮灭。
3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将数码管与单片机相连。
(3)编写程序,将数字输出到数码管上显示。
4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,实现定时器功能。
四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。
2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。
按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。
3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。
通过程序设计,可以实现数码管显示不同的数字。
4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。
通过调节定时器的参数,可以实现不同的定时功能。
五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。
通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。
这些技能对于日常生活和工程设计都具有很大的实用性。
在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。
C51单片机实验报告

C51单片机实验报告
一、实验内容
本次实验的目的是实现用C51单片机实现简易的闹钟功能:即用户可以设置闹钟时间,当到达闹钟的设定时间的时候,单片机会控制LED灯或者蜂鸣器发出报警信号来提醒用户。
二、实验任务
本次实验任务如下:
1.使用C51单片机读取外部时钟的时间。
2.实现从按键输入闹钟设定的时间。
3.使用定时器实现任务调度,即在每个时刻检查一次外部时钟的时间是否到达闹钟的设定时间,如果到达设定时间,则控制LED灯或者蜂鸣器发出报警信号。
三、实验过程
1.硬件部分:本实验使用的硬件是硬件C51单片机,它具有单片机主频11.059MHz,外部内存2K和内部RAM 128字节。
本次实验采用的C51单片机核心是AT89C51,它具有4K字节的Flash存储器,它有128个8位I/O口和3个定时器/计数器。
本次实验使用到的外设有:LCD1602显示模块、4个4*4的数字键盘、AT24C02的IIC从机存储器、LED灯和蜂鸣器。
2.软件部分:本次实验使用的软件工具是Keil C51编译器,使用它来编写C51单片机程序。
单片机实验报告1

单片机实验报告第一单元1-1(1)原程序:$include (C8051F020.inc)LCALL Init_DeviceMOV A, #0FFH ;清除挂接在总线上的数码管的显示内容MOV DPTR, #00HMOVX @DPTR,AMOV A,#07FH ;赋初始值并在发光二极管上显示该数值MOV P1,A修改:MOV A,#80H ;赋初始值80H并在发光二极管上显示该数值CPL A ;正逻辑,点亮发光二极管(2)修改:将RR A改为RL A,即左移(3)修改:减少CALL DELAY指令个数即可加快点亮速度。
第二单元2-1(1)修改:将原程序中STAR中断入口地址0003H与STOP中断入口地址0013H 对调,并将程序中EX0与EX1 ,IE0与IE1对调。
在中断子程序中设置INT1为高优先级,即将MOV IP,#01H指令改为MOV IP,#04H(2)修改:INITIAL: SETB 7FHLOOP: CLR EA ;关闭中断JB 7FH,LEFTRR ASJMP NEXTLEFT: RL ANEXT: MOV P1,A ;刷新发光二极管控制数据INC R1 ;发光二极管点亮位置计数值增1SETB EA ;开放中断LCALL DELAY1 ;延时LCALL DELAY1LCALL DELAY1 ;延时LCALL DELAY1CJNE R1,#8,LOOP ;发光二极管点亮位置计数值有效性检测MOV R1,#0H ;发光二极管点亮位置计数值等于8则回0SJMP LOOP ;无限次循环STOP: CPL 7FH2-2 原程序:LOOP: MOV A,TL0 ;读计数器0的计数值CJNE A,#10H,L1 ;如果A中为16时MOV TL0,#0 ;计数器0清0MOV A,TL0MOV DP_L,A ;在DS2显示计数器0的计数值CALL DISPLAY ;调用显示子程序显示计数值SJMP LOOP ;无限次循环修改:LOOP: MOV A,TL0 ;读计数器0的计数值CJNE A,#10H,L1 ;如果A中为16时MOV TL0,#0 ;计数器0清0MOV A,TL0INC DP_HMOV R0,DP_HCJNE R0,#10H,L1MOV DP_H,#0L1: MOV DP_L,A ;在DS2显示计数器0的计数值CALL DISPLAY ;调用显示子程序显示计数值SJMP LOOP ;无限次循环第三单元3-1(1)修改:将TIM_L EQU 0FDH 与TIM_H EQU 0FDH指令中0FDH 改为0F4H(2)修改:将L0中ADD A,#30H指令改为ADD A,#40H(3)原程序:REC1: PUSH ACC ;保护累加器AMOV A SBUF ;接收串行数据PUSH ACC ;暂存ANL A,#0FH ;取低4位MOV DP_L,A ;送低位显示数据缓冲器POP ACC ;读取暂存数据SWAP AANL A,#0FH ;取高4位MOV DP_H,A ;送高位显示数据缓冲器CALL DISPLAY ;调用显示子程序POP ACC ;恢复累加器ACLR RI ;清除接收中断标志RETI ;中断返回修改:REC1: PUSH ACC ;保护累加器AMOV A,SBUF0 ;读接收缓冲器CPL AMOV P1,APOP ACC ;恢复累加器ACLR RIRETI ;中断返回。
单片机c语言程序设计---单片机实验报告

单片机c语言程序设计---单片机实验报告实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器实验内容:一.定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。
(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。
)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。
方式2有自动重装初值的功能,初始化后不必再置初值。
将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。
TMOD=60H。
定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。
程序:#include<REGX51.H>void main(){P1_0=0;TMOD=0x60;TH1=0xFD;TL1=0xFD;ET1=1;EA=1;TR1=1;while(1){}}void timer1_Routine()interrupt3{P1_0=~P1_0;}实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。
分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。
主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。
实验要求:完成计数实验和中断计数实验。
具体包括绘制仿真电路图、编写c源程序、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,对仿真结果进行总结。
程序:#include<REGX51.H>#include"Delay.h"int i;int j=0;void main(){ P1=0; P2=0;P3=0; P0=0; TMOD=0x01;TH0=0x3C;TL0=0xB0;ET0=1;EA=1;TR0=1;while(1) {}}void timer0_Routine()interrupt1 {TH0=0x3C;TL0=0xB0;j++;if(j>=150){ j=0; for(i=0;i<20;i++){P1=~P1;P2=~P2;P3=~P3;P0=~P0;Delay(200); } }}实验分析:心得体会:。
单片机实验报告

单片机实验报告龙品辛2807303014实验二移位及霓虹灯实验一、实验目的:1、掌握串口方式0的用法及其相关指令。
2、掌握8位移位寄存器74LS164的结构及使用方法。
3、学习使用指令:RL、RR、RLC、RRC4、了解霓虹灯的变化原理。
二、实验内容:●开始实验前,先将实验板左边的跳线S20如下图所示连接:1、输入程序并运行,观看“流水”演示。
单步执行其各条指令,注意每条指令所产生的效果。
2、改变DELAY1S程序中的立即数的值,观察“流水”速度的变化。
3、将演示程序ROTATE子程序的RRC依次改为RLC、RR、RL,观察现象。
4、修改真值表和ROTATE中“移位”指令,使“流水”方向相反。
三、实验原理:1、 MCS-51单片机串口工作模式 0:MCS-51单片机的串口共有4种工作模式,本次实验所采用的模式 0,其余 3 种方在此处不作介绍。
模式0为同步移位寄存器方式,串行数据都通过RXD(P3.0)输入或输出、TXD(P3.1)端输出同步移位脉冲,RXD和TXD的波形如图2-2所示。
接收/发送的8位数据,其低位先发(低位在前)。
波特率固定在fosc/12。
即:如果晶振为12MHz,则波特率为1MHz。
当一个数据写入串口发送缓冲区SBUF时,串行口自动将此8位数据以fosc/12的波特率自动从RXD引脚输出,同时TXD引脚输出同步钟。
8位数据送完需时8个机器周期。
程序中每次向SBUF送完数据后都要延时就是为了等待SBUF将数据全部输出。
波特率:每秒传输数据的位,称为“BAUD”波特率。
即:1波特=1位/秒。
单位:BPS1 移位寄存器74LS164:移位寄存器74LS164可将串行的输入数据变为并行的输出数据。
它内部含有8 个串接在一起的触发器,作为数据寄存器;一个清除端/MR,当其为低电平时清除所有触发器中的数据;一个时钟脚CLK,当/MR为高电平时,CLK端出现一个上升沿则触发器中的数据依次向后移动一位;数据输入端为A、B,通常都是将它们接在一起作为数据输入端。
单片机实验报告

中国石油大学(北京)本科生实验报告学生姓名:学号:班级:过程时间:2010-12-26课程名称:单片机原理及应用总学时:48 教师:成绩:实验名称:实验七——直流数字电压表设计一、电路原理图二、源程序#include<reg51.h>sbit _st=P2^5; //定义AD启动位,_stsbit _eoc=P2^6; //定义AD结束位,_eocsbit _oe=P2^7; //定义AD使能位,_oesbit led0=P2^3; //定义数码管最低位,led0sbit led1=P2^2; //定义数码管第二位,led1sbit led2=P2^1; //定义数码管第三位,led2unsigned char ad_result=0;//定义AD转换结果变量,ad_resultunsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义十进制显示字模数组,table[] void delay(unsigned int time){ //延时函数unsigned int j = 0;for(;time>0;time--)for(j=0;j<125;j++);}void disp(void){ //动态显示函数led2=0; //第三位数码清0P0=table[ad_result/100];//输出第三位的字模delay(10);//延时10msled2=1;//第三位位码置1led1=0;//第二位位码清0P0=table[(ad_result/10)%10];//输出第二位的字模delay(10);//延时10 msled1=1;//第二位位码置1led0=0;//最低位位码清0P0=table[ad_result%10];//输出最低位的字模delay(10);//延时10msled0=1;//最低位位码置1}void main(void){while(1){_st=0;//模拟启动时序,发出启动AD转换脉冲_st=1;_st=0;while(!_eoc==0);//查询EOC标志,若EOC=0,原地等待_oe=1;//若EOC=1,使能OE置1ad_result=P1;//读取AD转换结果_oe=0;//使能OE置0disp();//动态显示函数调用}}三、运行效果图四、软件延时长短对动态显示效果的影响当延时较短时,利用人的视觉暂留原理,可以同时看到三个数字同时显示,如上图1显示的133;当延时较长时,超出了人的视觉暂留范围,就只能看到一个数字,如上图2显示的9五、通用IO口接口方式与采用总线接口方式的差别。
单片机原理实验报告

单片机原理实验报告班级:姓名:学号:实验日期:成绩:实验一基本操作实验目的:熟悉伟福仿真机软件的基本操作,熟悉MCS-51指令。
实验内容A:数据传送程序实验程序:实验步骤:(1)从起始地址开始全速运行程序Ⅰ,检查运行结果, 外部数据窗口中7000H~700FH单元的内容皆为00H;(2)按要求修改程序如Ⅱ,用单步/跟踪运行程序, 查看寄存器和外部数据窗口;(3)在PLUS处设置断点,从起始地址开始全速运行程序,查看寄存器和外部数据窗口;(4)清除断点,用运行到当前行方式将程序运行到PLUS的下一条指令,查看运行结果是否正确。
实验内容B: 1 , 当X>0时求符号函数Y= 0 , 当X=0时-1 , 当X<0时实验程序:实验步骤:(1)准备好三个有代表性的数据,分三次用单步/跟踪方式运行程序,注意PC指针的变化;当(40H)= _____(X>0) 时,ACC.7= 0 , 运行后(41H)= _01H_____(Y= 1),当(40H)= _00H____(X=0) 时,ACC.7= 0 , 运行后(41H)= __00H____(Y= 0),当(40H)= _____(X<0) 时,ACC.7= 1 , 运行后(41H)= FFH (Y=﹣1)(2)思考:能否用“JC POSI ”指令替代“JB ACC.7, POSI ”指令, 修改运行程序,验证结果。
注意“CJNE A, #00H, NZEAR”执行后CY位为0/1 ?单片机原理实验报告班级:姓名:学号:实验日期:成绩:实验二输入/输出控制实验实验目的:掌握单片机I/O口输入输出的控制方法,学会编写数码管的显示程序。
实验内容A:P1 口做输出口,接8只发光二极管L1~L8(高电平时发光二极管点亮),编写程序,使L1~L8流水闪烁。
ORG 0000HSTART: MOV A,#01HMOV R2,#08HLOOP:MOV P1,ALCALL DELAYRL ADJNZ R2,LOOPAJMP STARTDELAY:MOV R5,#40 ;延时1秒D1:MOV R6,#50D2:MOV R7,#248D3:DJNZ R7,D3DJNZ R6,D2DJNZ R5,D1RETEND实验内容B:P1 口做输入口,接拨动开关K1~K8。
单片机实训报告实验步骤

一、实验目的1. 掌握单片机的基本工作原理和硬件结构。
2. 熟悉单片机的编程方法,提高编程能力。
3. 学习单片机的调试技巧,提高调试效率。
4. 通过实际操作,培养动手能力和团队合作精神。
二、实验仪器与设备1. 单片机实验开发板2. 编译器(如Keil、IAR等)3. 仿真软件(如Proteus、Multisim等)4. 连接线、电源、示波器等辅助设备三、实验步骤1. 熟悉单片机实验开发板(1)观察开发板的硬件结构,了解各个模块的功能和连接方式。
(2)熟悉开发板上的按键、LED、串口、I2C、SPI等接口。
2. 编写程序(1)根据实验要求,设计程序功能。
(2)选择合适的编程语言(如C语言、汇编语言等)。
(3)使用编译器编写程序代码,并进行语法检查。
3. 程序调试(1)使用仿真软件(如Proteus)对程序进行仿真调试。
(2)观察程序运行结果,检查程序是否存在错误。
(3)根据仿真结果,修改程序代码,直至程序正常运行。
4. 硬件连接(1)根据程序功能,连接开发板上的相关硬件模块。
(2)确保连接正确,避免短路或接触不良。
5. 实验运行(1)打开电源,启动单片机。
(2)观察程序运行情况,验证程序功能是否实现。
(3)根据实验要求,调整程序参数或硬件配置,优化程序性能。
6. 数据采集与记录(1)使用示波器等设备,采集实验过程中的数据。
(2)记录实验数据,为后续分析提供依据。
7. 结果分析(1)对实验数据进行整理和分析,评估程序性能。
(2)总结实验过程中的经验教训,提出改进措施。
8. 实验报告撰写(1)整理实验过程,包括实验步骤、实验数据、实验结果等。
(2)分析实验结果,总结实验经验教训。
(3)撰写实验报告,要求格式规范、内容完整。
四、实验注意事项1. 确保实验环境安全,避免触电、短路等事故。
2. 严格遵守实验操作规程,避免损坏实验设备。
3. 注意程序调试过程中的细节,提高调试效率。
4. 实验过程中,积极思考,勇于创新,提高动手能力。
80C51单片机-实验报告

实验一 CPU片内(外)清零1.CPU片内RAM清零一、实验目的:掌握MCS-51汇编语言的设计,了解单片机的寻址方式以及调试方法。
二、实验内容:把单片机片内的30H~7FH单元清零。
三、实验框图:四、实验步骤:用连续或者单步的方式运行程序,检查30H-7FH执行前后的内容变化。
五、参考实验程序:程序名称:PNQL.ASMORG 0000HJMP MAINORG 0030HMAIN:MOV R0,#30H ;30H送R0寄存器CLR1:MOV A,#00H ;00送累加器AMOV @R0,A ;00 送到30H-7FH单元INC R0 ;R0加1CJNE R0,#7FH,CLR1 ;不到7F字节再清WAIT:LJMP WAITEND六、实验思考:如果把30H-7FH的内容改为99H,如何修改程序。
2.CPU 片外RAM清零一、实验目的:掌握MCS-51汇编语言的设计,了解单片机的寻址方式以及调试方法。
二、实验内容:把外部扩展的RAM的0000H-00FFH单元内容清零。
三、实验框图:四、实验步骤:用连续或者单步的方式运行程序,检查0000H-00FFH执行前后的内容变化。
五、参考实验程序:程序名称:PWQL.ASMORG 0000HMAIN:MOV SP,#60HMOV DPTR,#0000H ;0000H送DPTR寄存器MOV R6,#0FFH ;FFH送R6寄存器(计数)CLR1:MOV A,#00H ;00送累加器AMOVX @DPTR,A ;00 送到0000H-00FFH单元INC DPTR ;DPTR+1DJNZ R6,CLR1 ;不到FF个字节再清WAIT:SJMP WAITEND六、实验思考:把1-10先对应存入片内0030H起始的单元内,然后再从片内取出,对应存入片外7FFFH起始的单元中去。
实验二P1口亮灯实验一、实验目的:学习MCS-51单片机P1口的使用方法二、实验内容:P1口做输出,接8个发光管,编写程序,使得8个二极管循环点亮。
《单片机C语言程序设计》实验报告一

《单片机C语言程序设计》实验报告一、实验目的和要求1、熟悉单片机硬件结构及其工作原理。
2、掌握单片机的I/O端口应用。
二、实验内容和原理实验1——P1作为输入端口(1)硬件设计P1端口的高四位P14、P15、P16和P17分别接4个独立按键S01、S02、S03、S04以及4个LED VD5、VD6、VD7、VD8;当独立按键按下时,对应发光二极管亮,比如S01按下时,VD5被点亮,同时P30输出低电平VD17被点亮。
电路原理图如图所示P1端口作为输入端口所需元器件入表所示(2)C源程序实验1:实验2:#include <REGX51.H>#include <Delay10ms.h>unsigned char tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; unsigned char tab2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; unsigned char tab3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};int i;void MOD1(void){for(i=0;i<8;i++){P1= tab1[i];Delay10ms();}P1= tab1[8];for(i=0;i<8;i++){P0= tab1[i];Delay10ms();}P0= tab1[8];for(i=0;i<8;i++){P3= tab1[i];Delay10ms();}P3= tab1[8];for(i=0;i<8;i++){P2= tab1[i];Delay10ms();}P2= tab1[8];}void MOD2(void){for(i=0;i<8;i++){P2= tab2[i];Delay10ms();}for(i=0;i<8;i++){P3= tab2[i];Delay10ms();}for(i=0;i<8;i++){P0= tab2[i];Delay10ms();}for(i=0;i<8;i++){P1= tab2[i];Delay10ms();}}void MOD3(void) {for(i=0;i<8;i++){P1= tab3[i];Delay10ms();}for(i=0;i<8;i++){P0= tab3[i];Delay10ms();}for(i=0;i<8;i++){P3= tab3[i];Delay10ms();}for(i=0;i<8;i++){P2= tab3[i];Delay10ms();}}int main (void){while(1){MOD1();MOD2();MOD3();}三、主要仪器设备Protues硬件仿真调试软件Keil编程软件四、操作方法与实验步骤1、根据实验一新建工程操作,新建工程。
单片机实验报告(完整版)

单片机原理与应用实验报告学院(部):专业:学生姓名:班级:学号:最终评定成绩:实验一存储器读写一、实验目的: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仿真、调试等基本操作方法。
单片机实验报告

MOV TL1,#0F4H
MOV TH1,#0F4H
SETB TR1
DLAL:MOV SBUF,#99H
CHECK_99:JBC TI,WAIT_RSPS
JMP CHECK_99
WAIT_RSPS:JBC RI,CHECK_01
JMP WAIT_RSPS
CHECK_01:MOV A,SBUF
二.实验目的
(1)掌握中断系统的工作原理
(2)掌握中断向量的概念。
(3)学习外部中断的基本使用方法。
(4)学习外部中断的基本使用方法。
(5)学习中断处理程序的处理方法。
(6)掌握规范的程序设计方法。
三.实验元件
(1)AT89C51,LED-RED,RED-GREEN,BUTTON,RES
(2)AT89C51,LED-RED,BUTTON1,BUTTON2,RES
MOV TL0,#9CH
MOV TCON,#50H
MOV IE,#9AH
AJMP $
PINT0:MOV TL0,#9CH
CPL P1.0
RETI
PINT1:MOV TH0,#38H
CPL P1.1
RETI
END
(4)T0方式3 定时300us 输出占空比1/3矩形波查询方式
ORG 0000H
LJMP MAIN
D1:MOV R4,#255
D2:MOV R5,#255
D3:DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
SETB P0.1
RETI
END
(2)INT0、INT1中断控制LED
ORG 0000H
LJMP MAIN
单片机程序实验报告

122207202149 张雷实验1-1程序#include <reg51.h>#include<intrins.h>void delay(unsigned int d);void main (){unsigned char sel,i;while(1){ sel=0xfe;for (i=0;i<8;i++){P1=sel;delay(50000);sel=_crol_(sel,1);}}}void delay( unsigned int d){while (--d>0);}原理图1-2程序#include <reg52.h>void ISR0(void ) interrupt 0 {P0=~P0;}void ISR1(void ) interrupt 2 {P1=~P1;}void main (){P0=0x00; P1=0xff;IT0=1;IT1=1;EX0=1;EX1=1;EA=1;while (1);}实验2-1程序#include <reg51.h>#include <intrins.h> unsigned char sel;void main (){P1=0xfe;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;//IT0=1;sel=P1;EA=1; ET0=1;TR0=1;while(1);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;sel=_crol_(sel,1);}原理图实验2-2程序#include<reg51.h>#define uchar unsigned char #define uint unsigned int void main (){uchar i=0x55;uint j=0;TMOD =0X20;TL1=TH1=0XF4;PCON=0X00;SCON=0X50;while (1){SBUF=i;do{} while (!RI);RI=0;TI=0;i=SBUF;P1=i;i=~i;for (j=0;j<12500;j++);}}原理图实验3-1程序/****************************************************************************** ***** FileName: 八段数码管显示** Copyright (c) 2000-2011 **** The company technology development department** Creater:** Date:** Modifier:** Date:** Comment:** version:******************************************************************************* **/#include<absacc.h>#define LEDLen 6#define mode 0x03;#define CAddr XBYTE[0xe100]/* 控制字地址*/#define OUTBIT XBYTE[0xe101]/* 位控制口*/#define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位) */#define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */#define IN XBYTE[0xe103] /* 键盘读入口*/unsigned char LEDBuf[LEDLen]; /* 显示缓冲*/code unsigned char LEDMAP[] = { /* 八段管显示码*/0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;Pos = 0x20; /* 从左边开始显示*/for (i = 0; i < LEDLen; i++) {OUTBIT = 0; /* 关所有八段管*/LED = LEDBuf[i];for (j = 0; j < 8; j++) { /*送164*/if (LED & 0x80) DA T164 = 1; else DAT164 = 0;CLK164 = CLK164|0x02;CLK164 = CLK164&0xfd;LED <<= 1;}OUTBIT = Pos; /* 显示一位八段管*/Delay(1);Pos >>= 1; /* 显示下一位*/}OUTBIT = 0; /* 关所有八段管*/}void main(){unsigned char i = 0;//unsigned char j;CAddr = mode;while(1) {LEDBuf[0] = LEDMAP[2] ; //LEDMAP[ i & 0x0f];LEDBuf[1] = LEDMAP[0] ; //LEDMAP[(i+1) & 0x0f];LEDBuf[2] = LEDMAP[2] ; //LEDMAP[(i+2) & 0x0f];LEDBuf[3] = LEDMAP[1] ; //LEDMAP[(i+3) & 0x0f];LEDBuf[4] = LEDMAP[0] ; //LEDMAP[(i+4) & 0x0f];LEDBuf[5] = LEDMAP[2] ; //LEDMAP[(i+5) & 0x0f];// i++;//for(j=0; j<30; j++)DisplayLED(); /* 延时*/}}实验3-2DA程序#include <absacc.h>#define LEDLen 6#define MODE 0x03#define CS0832 XBYTE[0xa000]#define CAddr XBYTE[0xe100]/* 控制字地址*/#define OUTBIT XBYTE[0xe101]/* 位控制口*/#define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位) */ #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */ #define IN XBYTE[0xe103] /* 键盘读入口*/unsigned char LEDBuf[LEDLen]; /* 显示缓冲*/code unsigned char LEDMAP[] = { /* 八段管显示码*/0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;Pos = 0x20; /* 从左边开始显示*/for (i = 0; i < LEDLen; i++) {OUTBIT = 0; /* 关所有八段管*/LED = LEDBuf[i];for (j = 0; j < 8; j++) { /* 送164 */if (LED & 0x80) DA T164 = 1 ; else DA T164 = 0 ;CLK164 = CLK164| 0X02;CLK164 = CLK164& 0Xfd;LED <<= 1;}OUTBIT = Pos; /* 显示一位八段管*/Delay(1);Pos >>= 1; /* 显示下一位*/}OUTBIT = 0; /* 关所有八段管*/}void Write0832(unsigned char b){CS0832 = b;}void main(){unsigned char i = 0;unsigned char j;// unsigned char b;CAddr= MODE;while(1) {LEDBuf[0] = 0X3F;LEDBuf[1] = 0X7F;LEDBuf[2] = 0X4f;LEDBuf[3] = 0X5b;LEDBuf[4] = 0X00;LEDBuf[5] = 0X00;Write0832(i);LEDBuf[5] = LEDMAP[i & 0x0f] ;LEDBuf[4] = LEDMAP[i>>4 & 0x0f] ;i++;for(j=0; j<20; j++)DisplayLED(); /* 延时*/ };}原理图AD程序#include <absacc.h>#include <reg51.h>#define LEDLen 6#define MODE 0x03#define CS0809 XBYTE[0xa000]#define CAddr XBYTE[0xe100]/* 控制字地址*/#define OUTBIT XBYTE[0xe101]/* 位控制口*/#define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位) */ #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */ #define IN XBYTE[0xe103] /* 键盘读入口*/unsigned char LEDBuf[LEDLen]; /* 显示缓冲*/code unsigned char LEDMAP[] = { /* 八段管显示码*/0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;Pos = 0x20; /* 从左边开始显示*/for (i = 0; i < LEDLen; i++) {OUTBIT = 0; /* 关所有八段管*/LED = LEDBuf[i];for (j = 0; j < 8; j++) { /* 送164 */if (LED & 0x80) DA T164 = 1 ; else DA T164 = 0 ;CLK164 = CLK164| 0X02;CLK164 = CLK164& 0Xfd;LED <<= 1;}OUTBIT = Pos; /* 显示一位八段管*/Delay(1);Pos >>= 1; /* 显示下一位*/}OUTBIT = 0; /* 关所有八段管*/}unsigned char Read0809(){unsigned char i;CS0809 = 0; /* 起动A/D */for (i=0; i<0x20; i++) ; /* 延时> 100us */ return(CS0809); /* 读入结果*/}void main(){unsigned char j;unsigned char b;CAddr= MODE;while(1) {LEDBuf[0] = 0X3F;LEDBuf[1] = 0X7F;LEDBuf[2] = 0X3F;LEDBuf[3] = 0X6F;LEDBuf[4] = 0X00;LEDBuf[5] = 0X00;//b = Read0809();LEDBuf[5] = LEDMAP[Read0809() & 0x0f] ;LEDBuf[4] = LEDMAP[Read0809()>>4 & 0x0f] ;for(j=0; j<5; j++)DisplayLED(); /* 延时*/}}。
单片机实验报告

1.I/O口实验实验目的:掌握单片机通用I/O端口使用方法,掌握I/O数据输入输出方法实验内容:将P1.0-P1.3接发光二极管的LED1-LED4,当开关为全1时LED循环右移,当开关为全0时LED循环左移,当开关为0101时LED以5000ms/次闪烁,其他情况灭。
程序:#include <reg51.h>void delay(){unsignedint i;i= 50000;while(i)i--;}main(){unsigned char a,b;a=0xee;b=0x00;while(1){if(P2==0xff){P1=a;a=(a<<7)+(a>>1);delay();}else if(P2==0x0f){P1=a;a=(a>>7)+(a<<1);delay();}else if(P2==0x5f){if(b==0x00){P1=b;b=0xff;}else {P1=b;b=0x00;}delay();}else{P1=0xff;delay();}}}2.I/O口扩展实验(交通灯)实验目的:学习单片机扩展简单I/O方法;掌握通过总线输入输出的编程方法;掌握扩展总线接口芯片的地址分配方法。
实验内容:初始状态两个路口红灯全亮,5秒后转入状态A状态A:东西方向通车,东西绿,南北红。
5秒后东西绿灭,黄灯闪两秒后进入状态B状态B:南北方向通车,南北绿,东西红。
5秒后东西绿灭,黄灯闪两秒后进入状态A程序:#include<reg51.h>xdata unsigned char cs_273_at_0xffff;const unsigned char Led_const[]={0xbb;0xbe;0xbd;0xbf;0xeb;0xdb;0xfb;};void delay1(){unsignedint i;i=625000;while(i)i--;}void delay2(){unsignedint i;i=50000;while(i)i--;}main(){unsigned char j;while(1){cs_273=Led_const[0];delay1();cs_273=Led_const[1];delay1();for(j=0;j<5;j++){cs_273=Led_const[2];delay2();cs_273=Led_const[3];delay2();}cs_273=Led_const[4];delay1();for(j=0;j<5;j++){cs_273=Led_const[5];delay2();cs_273=Led_const[6];delay2();}}}3.电子琴实验目的:学习单片机发出不同音调的原理及编程方法;进一步熟练定时器的应用;掌握蜂鸣器的使用方法。
单片机实验报告_拼字程序

单片机实验报告_拼字程序
一、实验目的
本实验旨在掌握单片机的输入输出口的配置和使用,熟悉单片机界面及操作。
通过实现拼字游戏,提高学生对单片机程序设计的理解和应用能力。
二、实验器材
1. 套装板:STC89C52RC开发板 1块
2. USB线 1根
3. 1602液晶屏 1块
4. DAC芯片 1块
5. 电脑软件:Keil、STC-ISP
三、实验内容
1. 通过数码管显示当前选择的字母
2. 用按键进行可选字母上、下翻页
3. 用1602液晶显示出已拼接的单词
4. 实现音效,为已拼接的单词输出音效
四、实验原理
1.外设连接
(1)数码管连接到P2口,实现显示当前选中字母
(2)LCD连接到P0口,实现显示出已拼接的单词
2.程序流程
(1)初始化
包括数码管、LCD、按键和DAC的初始化
显示当前选中的字母,通过一个计数器进行控制
(3)按键扫描
进行按键扫描并作出响应
(4)捕捉拼字
如果按键被按下,则捕捉当前选中的字母并加入已拼接单词
(5)显示已拼接单词
(6)音效输出
当单词拼接完成后,进行音效输出
五、实验过程
1.确认电路连接无误,上电后数码管和1602液晶能正常显示
2.在Keil中编写程序,进行调试,确认程序逻辑无误,并可实现数码管和1602液晶的显示工作
3.将程序下载入开发板中,接上DAC音效芯片,进行测试
4.测试完成后,将程序重新上传至单片机,并将开发板与电源断开
六、实验结果
实现了拼字游戏程序,能够选定字母,并根据按键操作进行字母切换、单词拼接、单词显示和音效输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机应用技术实验报告指导教师:王宏波姓名:小组成员:1.延时实验一、实验题目(1)设fosc=6MHz,通过多级嵌套循环实现0.5S延时。
(2)通过调整晶振频率fosc,在上述延时程序的基础上实现延时0.25S循环点亮Pl.0口的LED。
二、实验目的(1)掌握8051汇编指令格式。
(2)掌握延时时间的计算方法。
(3)掌握Keil软件中延时时间的观察方法。
(4)掌握循环结构程序的设计方法。
(5)掌握汇编起始指令ORG、汇编结束指令END、位操作指令的使用方法。
(6)掌握8051驱动LED的方法。
(7)掌握示波器、直流电流表、直流电压表的使用方法。
三、实验元件(1)AT89C51。
(2)AT89C51、POT-HG、LED、DC AMMETER、DC VOLTMETER、OSCILLOSCOPE。
四、硬件设计六、汇编程序(1)0.5S 延时程序ORG0000H ;指令起始地址0000H;延时子程序,延时机器周期数1+10+500+500+(248*50*10+500+10+1)*2=250033DELAY: MOV R4,#10 ;1TmsLP1: MOV R5,#50 ;10TmsLP2: MOV R6,#248 ;50*10TmsNOP;50*10TmsLP3: DJNZR6,LP3 ;248*50*10TmsDJNZR5,LP2 ;50*10TmsDJNZR4,LP1 ;10TmsRET;1TmsEND(2)延时0.25S循环点亮Pl.0 口的LED;fosc=12 MHzORG 0000HLOOP: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP LOOPDELAY: MOV R4,#10LP1: MOV R5,#50LP2: MOV R6,#248NOPLP3: DJNZ R6,LP3DJNZ R5,LP2DJNZ R4,LP1RETEND;七、实验中遇到的问题及解决方法八、实验总结2 外部中断实验一、实验题目(1)外部中断1通过上拉电阻接按钮控制P0口的输出。
无中断发生时,P0.0口绿色LED常亮,P0.1口红色LED常灭。
按钮按下,外部中断1发生,熄灭绿色LED,点亮红色LED,经延时后恢复绿色LED常亮、红色LED常灭状态。
(2)外部中断0和外部中断1分别通过上拉电阻接按钮BUTTON1和BUTTON2控制P1.0口LED的状态,按钮BUTTON1按下,点亮LED,按钮BUTTON2按下,熄灭LED。
二、实验目的(1)掌握中断系统的工作原理。
(2)掌握中断向量的概念。
(3)学习外部中断的基本使用方法。
(4)学习中断处理程序的编写方法。
(5)掌握规范的程序设计方法。
三、实验元件(1):AT89C51、LED-RED、RED-GREEN、BUTTON、RES。
(2):AT89C51、LED-RED、BUTTON1、BUTTON2、RES。
四、硬件设计1.实验(1)2.实验(2)五、程序流程图(1)INT1 中断控制LEDORG 0000HMAIN: SETB EASETB EX1CLR IT0 GREEN: CLR P0.0LJMP GREENORG 0013HEXT1_RED: SETB P0.0CLR P0.1DLY2: MOV R3,#5D1: MOV R4,#255D2: MOV R5,#255DJNZ R5,$DJNZ R4,D2DJNZ R3,D1SETB P0.1RETIEND(2)INT0、INT1 中断控制LEDORG 0000HLJMP MAINORG 0003HLJMP INT_0ORG 0013HLJMP INT_1ORG 0030HMAIN: SETB EASETB EX0SETB EX1SETB IT0SETB IT1SJMP $INT_0: CLR P1.0RETIINT_1: SETB P1.0RETIEND七、实验中遇到的问题及解决方法八、实验总结3.定时器/计数器实验一、实验题目(1)T0方式0、定时,以查询方式输出周期为2ms的方波,fosc=6MHz。
(2)定时器/计数器T0工作于方式0,以中断方式在P1.0口输出周期为2ms 的方波,晶振频率fosc=6MHz。
(3)T0方式3、定时,以中断方式使P1.0输出周期为400us、P1.1输出周期为800us的方波,fosc=6MHz。
(4)T0方式3、定时,以查询方式输出周期为300us、占空比为1/3的方波,fosc=12MHz。
(5)T1方式2、计数P3.5引脚输入脉冲,每计数10次,对P1.0取反。
二、实验目的(1)学习51单片机定时/计数器的使用方法。
(2)掌握查询方式下的程序的编写方法。
(3)进一步掌握中断处理程序的编写方法。
(4)进一步掌握示波器的使用方法。
三、实验元件80C51。
四、硬件设计1.实验(1)、(2)、(4)硬件设计2.实验(3)3.实验(5)六、汇编程序(1)T0 方式 0 定时 2ms 方波查询方式ORG 0000HLJMP MAINORG 0050HMAIN: MOV TH0,#0F0HMOV TL0,#0CHMOV TMOD,#00HSETB TR0LP1: JBC TF0,LP2SJMP LP1LP2: MOV TH0,#0F0HMOV TL0,#0CHCPL P1.0SJMP LP1END(2)T0 方式0 定时2ms 方波中断方式ORG 0000HLJMP MAINORG 000BHLJMP T0INTORG 0030HMOV TL0,#0CHMOV TMOD,#00HSETB TR0SETB ET0SETB EASJMP $T0INT: MOV TH0,#0F0HMOV TL0,#0CHCPL P1.0RETIEND(3)T0 方式 3、定时,中断方式,P1.0 输出周期为 400us、P1.1 输出周期为800us 的方波ORG 0000HLJMP MAINORG 000BHLJMP PINT0ORG 001BHLJMP PINT1ORG 0030HMAIN: MOV TMOD,#03HMOV TH0,#38HMOV TL0,#9CHMOV TCON,#50HMOV IE,#9AHAJMP $PINT0: MOV TL0,#9CHCPL P1.0RETICPL P1.1RETIEND(4)T0 方式 3 定时 300us 输出占空比 1/3 矩形波查询方式ORG 0000HLJMP MAINORG 0030HMAIN: MOV TMOD,#03HLOAD: MOV TH0,#38HMOV TL0,#9CHSETB P1.0LCALL TL_DLYCLR P1.0LCALL TH_DLYJMP LOADTL_DLY: SETB TR0TL_CHK: JNB TF0,TL_CHKCLR TR0CLR TF0RETTH_DLY:SETB TR1TH_CHK:JNB TF1,TH_CHKCLR TR1CLR TF1RETEND(5)T1 方式 2、计数 P3.5 引脚输入脉冲,每计数 10 次,对 P1.0 取反。
ORG 0000HLJMP MAINORG 0030HMAIN: MOV TMOD,#60HMOV TH1,#0F5HMOV TL1,#0F5HSETB TR1LOOP: JBC TF1,REPSJMP LOOPREP: CPL P1.0SJMP LOOPEND七、实验中遇到的问题及解决方法八、实验总结4.双机通信实验一、实验题目(1)利用串行口进行双机通信,完成汇编程序设计,实现排队呼叫器功能,要求:(a)串行口工作方式1,波特率2400bps,T1工作方式2,SMOD=0,fosc = 11.0592MHz。
(b)单片机U2首先向单片机U1发起通信请求,发送呼叫号99H。
(c)单片机U1接收到呼叫号后,在P1口显示并确认,然后向单片机U2回送应答号01H。
(d)单片机U2接收到应答号后,在P1口显示并确认。
(e)通信未建立,单片机U1数码管不显示按键数据。
(f)通信建立,单片机U2向单片机U1传输按键数据,单片机U1用数码管显示接收到的按键数据。
二、实验目的(1)掌握双机通信的方法。
(2)掌握波特率的计算方法。
(3)掌握T1作为波特率发生器时相关寄存器的使用技巧。
三、实验元件(1)80C51、74LS47、LED-YELLOW、LED-BLUE、DIPSWC_8、RESPACK_8、RES、7SEG-COM-AN-GRN。
四、硬件设计五、程序流程图(1)主机U1六、汇编程序(1)双机通信排队呼叫器ORG 0000HLJMP MAINORG 0030HMAIN: MOV SCON,#70HMOV TMOD,#20HMOV TL1,#0F4HMOV TH1,#0F4HSETB TR1WAIT_DLAL:JBC RI,CHECK_99JMP WAIT_DLALCHECK_99: MOV A,SBUFMOV P1,ACJNE A,#99H,WAIT_DLALSEND_RESPONSE:MOV SBUF,#01HCHECK_01: JBC TI,RCIV_NUMJMP CHECK_01RCIV_NUM:JBC RI,DISPLAYJMP RCIV_NUMDISPLAY: MOV A,SBUFMOV P0,ACALL DELAYJMP RCIV_NUM DELAY: MOV R3,#5LP1: MOV R4,#2LP2: MOV R5,#248DJNZ R5,$DJNZ R4,LP2DJNZ R3,LP1RETEND(2)从机U2:ORG 0000HLJMP MAINORG 0030H MAIN: MOV SCON,#70HMOV TMOD,#20HMOV TL1,#0F4HMOV TH1,#0F4HSETB TR1DLAL: MOV SBUF,#99H CHECK_99:JBC TI,WAIT_RSPSJMP CHECK_99 WAIT_RSPS:JBC RI,CHECK_01JMP WAIT_RSPS CHECK_01: MOV A,SBUFMOV P1,ACJNE A,#01H,DLAL SEND_NUM:MOV A,P2MOV SBUF,ACHECK_SEND:JBC TI,FINISHJMP CHECK_SENDFINISH: JMP SEND_NUMEND七、实验中遇到的问题及解决方法八、实验总结5.单片机-计算机串口通信实验一、实验题目(1)利用串口调试助手和虚拟串口工具完成单片机和计算机之间的收发通信实验。
要求串口调试助手发送数据至单片机,单片机接收数据并送P1口显示。