单片机C51程序设计实验报告书word文档良心出品.docx
- 文档编号:8130564
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:23
- 大小:670.52KB
单片机C51程序设计实验报告书word文档良心出品.docx
《单片机C51程序设计实验报告书word文档良心出品.docx》由会员分享,可在线阅读,更多相关《单片机C51程序设计实验报告书word文档良心出品.docx(23页珍藏版)》请在冰豆网上搜索。
单片机C51程序设计实验报告书word文档良心出品
实验一并行输入输出口的使用
一、实验目的:
学会设计proteus7仿真电路,学习P1口的使用方法和延时子程序的编写用KeiluVision3编程实现发光二极管的流水点亮。
二、实验原理:
P1口为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。
P1口作为输出,接8个发光二极管D1~D8经限流电阻分别接至8个引脚。
本实验仿真电路图、流程图如下:
三、实验代码:
#include
#include
voiddelay(unsignedintd)//定义延时子函数
{while(--d>0);}
voidmain()
{unsignedchari,sel;
while
(1)
{sel=0xfe;
for(i=0;i<=8;i++)
{P1=sel;//显示变量赋给P1口
delay(50000);//延时
sel=_crol_(sel,1);//改变显示变量
}
}
}
四、实验结论:
用while语句实现发光二极管循环流水点亮,从上到下一次点亮。
实验二C51分支程序设计
一、实验目的:
学习多分支选择结构和switch语句,了解循环的嵌套。
二、实验原理:
dowhile循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。
本实验仿真电路图、流程图如下:
(仿真电路图)
(流程图)
三、实验代码:
#include
voidmain()
{chara;
do
{P1=0xff;
a=P1;
a=a&0x03;
switch(a)
{case0:
P2=0x0e;break;
case1:
P2=0x0d;break;
case2:
P2=0x0b;break;
case3:
P2=0x07;break;
}
}while
(1);
}
四、实验结论:
多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。
实验三外部中断实验
一、实验目的:
掌握外部中断的原理以及中断处理程序的编写方法。
二、实验原理:
外部中断0和外部中断1均为下降沿触发,当外部中断0发生时,P0端口的电平反向,当外部中断1发生时,P1端口的电平反向,LED状态取反,引脚P3.2、P3.3是外部中断INT0和INT1的输入端,本实验仿真电路图、流程图如下:
(仿真电路图)
(主程序)(中断服务程序)
三、实验代码:
#include
#include
voidISO(void)interrupt0
{P0=~P0;}//P0端口反向
voidIS1(void)interrupt2
{P1=~P1;}//P1端口反向
voidmain()
{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
sbitWave=P1^0;//位定义
voidT1ISR(void)interrupt3//定时器T1中断响应
{Wave=~Wave;//反向
TL1=0x0F0;//重置计数初值
TH1=0x0D8;}
voidmain(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闪烁,本实验仿真电路图、流程图如下:
(仿真电路图)
(主程序)(中断服务程序)
三、实验代码:
#include
sbitP32=P3^2;
voiddelay(unsignedintd)//定义延时子函数
{while(--d>0);
}
voidmain()
{P0=0xFF;//熄灭LED
IT0=1;IT1=1;//外中断0、1脉冲触发方式
EA=1;EX0=1;EX1=1;//开中断
for(;;)//延时等待中断发生
{;}
}
voidINT0_ISR()interrupt0//外中断0中断服务函数
{P0=0x00;}
voidINT1_ISR()interrupt2//外中断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将接收数据存入SBUF,再由SBUF装入累加器,并输出至P1,点亮相应端口的LED,本实验仿真电路图、流程图如下:
(仿真电路图)
(程序流程图)
三、实验代码:
单片机1的代码:
#include
#defineuintunsignedint
#defineucharunsignedchar
voidmain()
{uchari;
TMOD=0x20;
TH1=TL1=0xff;
SCON=0x50;
PCON=0x80;
TR1=1;
P1=0xff;
while
(1)
{P1=0xff;
i=P1;
SBUF=i;
while(TI==0){;}
TI=0;
}
}
单片机2的代码:
#include
#defineuintunsignedint
#defineucharunsignedchar
voidmain()
{uchari=0;
TMOD=0x20;
TH1=TL1=0xff;
SCON=0x50;
PCON=0x80;
TR1=1;
while
(1)
{while(RI==0){;}
RI=0;
i=SBUF;
P1=i;
}
}
四、实验结论:
当开关拨动到左边则对应的LED点亮,反之LED熄灭。
将双片单片机串行通信,结果存入SBUF并输出至P1使相应的LED点亮。
实验七单片机串口通信
(二)
一、实验目的:
加深对串行通信的基本概念和C51单片机的串行通信接口结构的了解,以及串口的工作方式、通信连线和应用编程。
二、实验原理:
甲、乙两机以方式1进行串行通信,甲机首先发送信号AA,乙机接收到后应答BB,甲收到BB后发送数据,数据发送完毕立即发送校验和。
乙机收齐一个数据块后,再接收甲发来的校验和,并将其与乙求得的校验和比较,若相等,说明接收正确,乙回答00H,若不等,说明接收不正确,乙回答0FFH,请求重新发送。
(程序流程图)
三、实验代码:
#include
#defineucharunsignedchar
#defineTR1//TR=1,发送
ucharidatabuf[10];
ucharpf;
/*串行口初始化子函数*/
voidinit(void)
{TMOD=0x20;//T1工作于方式2
TH0=0xE8;
TL0=0xE8;
TR1=1;
SCON=0X50;//串行口工作于方式1,REN=1
}
/*发送子函数*/
voidsend(ucharidata*d)
{uchari;
do
{SBUF=0xAA;//发送联络信号
while(TI==0)//等待一帧发送完毕
TI=0;//发送完毕,标志位清0
while(RI==0)//等待乙机应答信号
RI=0;
}while(SBUF^0xBB!
=0);//乙机未准备好,继续联络
do
{pf=0;//校验和变量清0
for(i=0;i<10;i++)
{SBUF=d[i];//发送一个数据
pf+=d[i];//计算校验和
while(TI==0)
TI=0;
}
SBUF=pf;//发送校验和
while(TI==0)TI=0;
while(RI==0)RI=0;//等待乙机应答
}while(SBUF!
=0);//回答出错,则重新发送
}
/*接收函数*/
voidreceive(ucharidata*d)
{uchari;
do
{while(RI==0)RI=0;
}while(SBUF^0xAA!
=0);//判断甲机是否请求
SBUF=0xBB;//发应答信号
while(TI==0)TI=0;
while
(1)
{pf=0;//清校验和
for(i=0;i<10;i++)
{d[i]=SBUF;//接收数据
pf+=d[i];
}//计算校验和
while(RI==0)RI=0;//接收甲校验和
if((SBUF^pf)==0)//比较校验和
{SBUF=0x00;break;}//校验和相等,发0x00
else
{SBUF=0xFF;//校验和不相等,发0xFF
while(TI==0)TI=0;
}
}
}
voidmain()
{init();//串行口初始化子函数
if(TR==0)
{send(buf);}//发送
else
{receive(buf);}//接收
}
四、实验结论:
甲、乙两单片机通过P3口连接,设置寄存器SBUF,串口工作于方式1.根据TR的设置,利用发送函数和接收函数分别实现发送和接收功能。
实验八多位七段数码动态显示
一、实验目的:
掌握数码管动态显示数字的原理和连接方式,学习端口输入输出的应用,以及74LS245驱动LED显示的电路设计。
二、实验原理:
轮流选中各位LED数码管,同时给P0口送不同的码字,并做一定的视觉残留,数码管就会同时出现不同的数字。
本实验仿真电路图、流程图如下:
(仿真电路图)
(流程图)
三、实验代码:
#include
#defineucharunsignedchar
uchardatadis_buf[6];//显示缓冲区
ucharcodetable[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};//代码表
voidd1_ms()//延时1ms函数
{unsignedintj;
for(j=0;j<200;j++);}
voiddisplay(void)//显示函数
{ucharsegcode,bitcode,i;
bitcode=0xfe;//位码赋初值
for(i=0;i<6;i++)
{segcode=dis_buf[i];//显示缓冲器内容查表
P0=table[segcode];
P3=bitcode;
d1_ms();
P3=0xff;//关闭显示
bitcode=bitcode<<1;//调整位码
bitcode=bitcode|0x01;
}
}
voidmain(void)
{dis_buf[0]=1;dis_buf[1]=2;//显示缓冲区赋初值
dis_buf[2]=3;dis_buf[3]=4;
dis_buf[4]=5;dis_buf[5]=6;
while
(1)
{display();}
}
四、实验结论:
七段数码管动态显示是一位一位轮流点亮各位数码管,每隔一段时间显示,设置点亮延时时间短,循环扫描点亮,使人眼分辨不出,看到各位数码管同时发光。
实验九数/模转换实验
一、实验目的:
学习掌握D/A转换基本原理,掌握D/A转换程序设计方法。
二、实验原理:
D/A转换器的功能主要是将输入的数字量信号转换成模拟量,检测按键执行相应的D/A转换,显示结果。
本实验仿真电路图、流程图如下:
(流程图)
三、实验代码:
#include
#include
#defineucharunsignedchar
#defineDAC0832XBYTE[0x7fff]
sbitP10=P1^0;
sbitP12=P1^2;
voidmain()
{DAC0832=0x80;
while
(1)
{P1=0xff;
if(P10==0)
{DAC0832=0xff;}
if(P12==0)
{DAC0832=0x00;}
}
}
四、实验结论:
通过手动按键将数字量DAC0832转换输出模拟电压信号。
实验十模/数转换实验
一、实验目的:
学习掌握A/D转换基本原理,掌握用无条件方式、查询方式、中断方式完成模/数转换程序的编写方法。
二、实验原理:
A/D转换是将模拟量转换为一定码制的数字量。
调节滑动变阻器将模拟量转换成数字量通过P1口输出显示。
本实验仿真电路图、流程图如下:
(流程图)
三、实验代码:
#include
#include
#defineucharunsignedchar
#defineADC08080XBYTE[0x78ff]
sbitP33=P3^3;
sbitP27=P2^7;
sbitP36=P3^6;
sbitP37=P3^7;
voidmain()
{EA=1;
EX1=1;
IT1=1;
ADC08080=0;//启动A/D
while
(1);
}
voidint0()interrupt2
{P1=ADC08080;//读取数据
ADC08080=0;//启动A/D
}
四、实验结论:
当A/D转换结束时,引脚EOC由低电平转换为高电平输出信号LED亮,调节滑动变阻器显示相应的LED亮。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 C51 程序设计 实验 报告书 word 文档 良心 出品
![提示](https://static.bdocx.com/images/bang_tan.gif)