《单片机原理及应用》实验报告Word文档下载推荐.docx
《《单片机原理及应用》实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》实验报告Word文档下载推荐.docx(46页珍藏版)》请在冰豆网上搜索。
//包含单片机寄存器的头文件
sfrx=0xb0;
//P3口在存储器中的地址就是b0H,通过sfr可定义8051内核单片机
//的所有内部8位特殊功能寄存器,对地址x的操作也就就是对P1口的操作
/****************************************
函数功能:
延时一段时间
*****************************************/
voiddelay(void)
{
unsignedchari,j;
for(i=0;
i<
255i++)
for(j=0;
j<
255j++)
;
//利用循环等待若干机器周期,从而延时一段时间
}
/*****************************************
主函数
******************************************/
voidmain(void)
{
while
(1)
x=0xfe;
//第一个灯亮
delay();
//调用延时函数
x=0xfd;
//第二个灯亮
x=0xfb;
//第三个灯亮
x=0xf7;
//第四个灯亮
x=0xef;
//第五个灯亮
delay();
x=0xdf;
//第六个灯亮
x=0xbf;
//第七个灯亮
x=0x7f;
//第八个灯亮
//调用延时函数
}
实验二:
中断实验
(1)熟悉51单片机中断初始化编程方法。
(2)掌握51单片机外部中断源的设计使用。
(3)中断处理应用程序的设计与调试技巧。
2.实验内容
通过对P3、2、P3、3引脚的电平控制,实现外部中断处理,从而控制输出口P1的输出效果变化。
/用外中断0的中断方式进行数据采集与处理
//包含51单片机寄存器定义的头文件
sbitS=P3^2;
//将S位定义为P3、2,
/*******************************************
主函数
******************************************/
EA=1;
//开放总中断
EX0=1;
//允许使用外中断
IT0=1;
//选择负跳变来触发外中断
P1=0xff;
while
(1)
;
//无限循环,防止程序跑飞
/**************************************************************
外中断T0的中断服务程序
**************************************************************/
voidint0(void)interrupt0using0//外中断0的中断编号为0
P1=~P1;
//每产生一次中断请求,P1取反一次。
//用外中断0的中断方式进行数据采集与处理
#defineucharunsignedchar
voidDelay(unsignedinti)
ucharj;
for(;
i>
0;
i--)
for(j=0;
125;
j++)
{;
}
//sbitS=P3^2;
uchardisplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedinta;
while
(1){
EX0=1;
EX1=1;
IT0=1;
IT1=1;
IP=0;
for(a=0;
a<
9;
a++){
Delay(500);
P1=display[a];
voidint0_isr(void)interrupt0using1//外中断0的中断编号为1
ucharn;
for(n=0;
n<
10;
n++){
p1=0x0f;
Delay(500);
P1=0xf0;
voidint1_isr(void)interrupt2using2{
ucharn;
for(n=0;
p1=0xff;
Delay(500);
P1=0;
实验三:
定时器/计数器实验
(1)熟悉51单片机中断初始化编程方法
(2)熟悉51单片机定时计数器的初始化编程方法
(3)掌握定时计数器的应用
通过使用定时器T0的中断来控制P2、0引脚的的LED的灯闪烁,要求闪烁时间2S,既亮1S,灭1S。
//包含51单片机寄存器定义的头文件
sbitD1=P1^4;
//将D1位定义为P1、4引脚
unsignedcharCountor;
//设置全局变量,储存定时器T0中断次数
EA=1;
//开总中断
ET0=1;
//定时器T0中断允许
TMOD=0x01;
//使用定时器T0的模式2
TH0=(65536-15536)/256;
//定时器T0的高8位赋初值
TL0=(65536-15536)%256;
TR0=1;
//启动定时器T0
Countor=0;
//从0开始累计中断次数
while
(1)//无限循环等待中断
定时器T0的中断服务程序
voidTime0(void)interrupt1using0//"
interrupt"
声明函数为中断服务函数
//其后的1为定时器T0的中断编号;
0表示使用第0组工作寄存器
Countor++;
//中断次数自加1
if(Countor==20)//若累计满20次,即计时满1s
D1=~D1;
//按位取反操作,将P2、0引脚输出电平取反
Countor=0;
//将Countor清0,重新从0开始计数
TH0=(65536-15536)/256;
//定时器T0的高8位重新赋初值
实验四:
串行口实验
1.实验目的
(1)掌握单片机的串行口的工作原理
(2)掌握单片机串行口收发数据的方法
本实验要求单片机U1通过其串行口TXD向单片机U2发送数据。
单片机U1的P1口接8个开关,U2的P1口接8个发光二极管。
U1设置为只能发送不能接收,U1读入P1口的8个开关状态后,通过串行口发送到U2,U2将接收到的数据送入P1口,由P1口上连接的8个发光二极管显示8个开关的状态。
/*********发送单片机的发送程序***********/
//包含寄存器的头文件
/*********向PC发送一个字节数据**************/
voidSend(unsignedchardate)
SBUF=date;
while(TI==0);
TI=0;
/*********延时约150ms*********/
voiddelay(void)
unsignedcharm,n;
for(m=0;
m<
200;
m++)
250;
n++)
/*******函数功能:
主函数*********/
unsignedchartemp;
TMOD=0x20;
//定时器T1工作于方式2
SCON=0x40;
//串口工作方式1
PCON=0x00;
//波特率9600
TH1=0xfd;
//根据规定给定时器T1赋初值
TL1=0xfd;
TR1=1;
//启动定时器T1
//读取P1端口数据
{
temp=P1;
Send(temp);
//发送数据i
delay();
//50ms发送一次检测数据
/**********接收单片机的接收程序***********/
/**接收一个字节数据**