单片机C51程序设计实验报告书

时间:2026-01-18

实验一 并行输入输出口的使用

一、实验目的:学会设计proteus 7仿真电路,学习P1口的使用方法和延时子程序的编写用Keil uVision 3编程实现发光二极管的流水点亮。

二、实验原理:P1口为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。P1口作为输出,接8个发光二极管D1~D8经限流电阻分别接至8个引脚。本实验仿真电路图、流程图如下:

三、实验代码: #include<reg51.h>

#include<intrins.h> //移位库函数包含于此头文件中 void delay(unsigned int d) //定义延时子函数 { while(--d>0);} void main()

{ unsigned char i,sel; while(1) { sel=0xfe; for(i=0;i<=8;i++) { P1=sel; //显示变量赋给P1口 delay(50000); //延时 sel=_crol_(sel,1); //改变显示变量 } } }

四、实验结论:用while语句实现发光二极管循环流水点亮,从上到下一次点亮。

实验二 C51分支程序设计

一、实验目的:学习多分支选择结构和switch语句,了解循环的嵌套。

二、实验原理:do while 循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。本实验仿真电路图、流程图如下:

(仿真电路图)

(流程图)

三、实验代码:

#include <reg51.h> void main() { char a; do

{ P1=0xff; a=P1; a=a&0x03; switch(a) { case 0:P2=0x0e;break; case 1:P2=0x0d;break; case 2:P2=0x0b;break; case 3:P2=0x07;break; } }while(1); }

四、实验结论:多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。

实验三 外部中断实验

一、实验目的:掌握外部中断的原理以及中断处理程序的编写方法。

二、实验原理:外部中断0和外部中断1均为下降沿触发,当外部中断0发生时,P0端口的电平反向,当外部中断1发生时,P1端口的电平反向,LED状态取反,引脚P3.2、P3.3是外部中断INT0和INT1的输入端,本实验仿真电路图、流程图如下:

(仿真电路图)

(主程序) (中断服务程序)

三、实验代码:

#include<reg51.h> #include<stdio.h>

void ISO(void) interrupt 0

{ P0=~P0; } //P0端口反向 void IS1(void) interrupt 2

{ P1=~P1; } //P1端口反向 void main ()

{ P0=0x00; P1=0xFF; SCON=0x50; TMOD=0x22; TH1=0xF3; TR1=1;

IT0=1; IT1=1; //设置下降沿触发方式 EX0=1; EX1=1; EA=1; //中断允许 while(1); }

四、实验结论:利用外中断程序可控制LED的亮灭,P0口、P1口电平反向,LED状态取反。

实验四 定时/计数器实验

一、实验目的:学习定时计数器的使用和编写方法,进一步掌握中断处理程序的方法以及对示波器的了解。

二、实验原理:启动定时器T1延时10ms,当定时时间到产生中断,执行中断程序,LED熄灭,T1再延时10ms,点亮LED,如此循环,本实验仿真电路图、流程图如下:

(仿真电路图)

(主程序) (中断服务程序)

三、实验代码: #include<reg51.h>

sbit Wave=P1^0; //位定义

void T1ISR(void) interrupt 3 //定时器T1中断响应

{ Wave=~Wave; //反向

TL1=0x0F0; //重置计数初值 TH1=0x0D8;}

void main(void)

{ Wave=0; //初始化P1.0=0

TMOD=0x10; //设置定时器T1为模式1 TL1=0x0F0; TH1=0x0D8; TR1=1; //启动定时计数器 ET1=1; EA=1; //开中断 while(1) { } }

四、实验结论:T1工作于模式1,定时器产生10ms的定时,定时中断产生,P1.0端口的输出在示波器中显示,LED闪烁。利用定时计数器可控制LED的显示时间变化。

实验五 外中断使用

一、实验目的:更熟练的掌握外部中断的原理与应用以及中断处理程序的编写方法。 二、实验原理:引脚P3.2、P3.3分别是外部中断INT0和外部中断INT1的输入端,均为低电平有效,下降沿触发。外中断0发生,8只LED全部点亮,外中断1发生,8只LED闪烁,本实验仿真电路图、流程图如下:

(仿真电路图)

Y

(主程序) (中断服务程序)

三、实验代码: #include<reg51.h> sbit P32=P3^2;

void delay(unsigned int d) //定义延时子函数 { while(--d>0); }

void main()

{P0=0xFF; //熄灭LED

IT0=1; IT1=1; //外中断0、1脉冲触发方式 EA=1; EX0=1; EX1=1; //开中断 for(;;) //延时等待中断发生 {;} }

void INT0_ISR() interrupt 0 //外中断0中断服务函数 { P0=0x00;}

void INT1_ISR() interrupt 2 //外中断1中断服务函数 { while(P32!=0) //如果有外中断0,退出 { delay(5000); P0=0x00; delay(5000); P0=0xFF; } }

四、实验结论:当外中断0发生,即按下了So按钮,8只LED点亮;当外中断1发生,即按下了S1按钮,8只LED闪烁,遇到外中断0发生,8只LED停止闪烁并保持点亮状态。

实验六 串行口双机通信实验

一、实验目的:理解串行通信的基本概念和C51单片机的串行通信接口结构,熟悉串口的4种工作方式、通信连线和应用编程。

二、实验原理:单片机1将P1口拨动开关数据装入SBUF,经由TXD将数据发送给单片机2,单片机2将接收数据存入S …… 此处隐藏:3632字,全部文档内容请下载后查看。喜欢就下载吧 ……

单片机C51程序设计实验报告书.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219