1、实验三 定时器实验
一、实验目的
1、掌握单片机系统定时器断的原理及使用方法。
2、掌握矩阵键盘实现方法。
3、掌握串口传送的实现方法
二、实验内容
1、见图一。假设单片机晶振频率设定为12MHz。用中断方式来完成以下要求,且通过虚拟示波器观看波形。
A、使用定时器1 以方式1 产生周期为500us 的等宽方波连续脉冲,并由P1.0 输出。用中断方式来完成。
#include
2、MOD=0x10;
EA=1;
ET1=1;
TR1=1;
TH1=0xff;
TL1=0x06;
while(1);
}
void t1_int() interrupt 3
{TH1=0xff;
TL1=0x06;
p10=~p10;}
B、完成A功能,用查询方式来完成
#include
3、0x06;
for( ; ;)
{if(TF1==1)
TF1=0;p10=~p10;}
}
C、使用定时器0 以方式2 产生周期为200us 的等宽方波连续脉冲,并由P1.1 输出。用中断方式来完成。
#include
4、nt() interrupt 1
{p10=~p10;}
D、编程使T0 工作于定时工作方式1,产生500us 等宽方波从P2.7 输出。T1 工作于计数工作方式2,其计数外部脉冲由T0 产生,即P2.7 引脚与P3.5(T1 引脚)相连,T1 每计数100个,P1.2 取反输出一次。
#include
5、 ET1=1; TR0=1; TR1=1; TH0=0xff; TL0=0x06; TH1=0x9c; TL1=0x9c; while(1); } void t0_int() interrupt 1 { TH0=0xff; TL0=0x06; p2_7=~p2_7;} void t1_int() interrupt 3 {p3_5=~p3_5;} 图一 2、见图二。假设单片机晶振频率设定为12MHz。完成以下功能。 (按键元件名称 BUTTON) A、通过外部按键(INT1 引脚连接)以中断方式控制LED 的上移和下移。(利用连接
6、R2 R3的2个按键实现LED 的上移和下移)
B、通过外部按键(T0 引脚连接)以中断方式控制LED 的上移和下移。(利用连接R2 R3的2个按键实现LED 的上移和下移)
#include
7、rrupt 2
{P1=P1<<1|0x01;} //下移
void t0_int() interrupt 1
{P1=P1>>1|0x80;} // 上移
C、通过INT0 引脚外界4 输入与门扩展外部中断,编程实现扩展出的四个开关以中断方式,分别实现LED 的上移、下移、亮和灭。
#include 8、j++);}
void shangyi()
{while(1)
{P1=P1>>1|0x80;
delay(100);}
}
void xiayi()
{while(1)
{P1=P1<<1|0x01;delay(100);}
}
void main()
{EA=0;
EX0=0;
P1=0xff;
}
void int0() interrupt 0
{if(P2==0xfe)
{shangyi();}
if(P2==0Xfd)
{xiayi();}
if(P2==0xfb)
{P1=0x00;}
9、
if(P2==0xf7)
{P1=0xff;}
}
图二
3、见图三,编程实现以下功能。按不同位置按键,数码管显示该按键代表数值。若无按键按下时,显示上一次按键的数值。
#include 10、ode[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint k)
{uchar i,j;
for(i==0;i 11、scan1&0x0f)!=0xf)
{delay(20);
scan1=P1;
if((scan1&0x0f)!=0xf)
{P1=0xf0;
scan2=P1;
keycode=scan1|scan2;
for(a=0;a<16;a++)
{if (keycode==key_code[a])
{key=a;
return (key);}
}
}
}
else P1=0xff;
r 12、eturn (16);
}
void main()
{ while(1)
{P0=0x00;
P1=0xf0;
if((P1&0x0f)!=0xf)
{rekey();
show();
}
}
}
图三
4、要求单片机U2 采用串行方式发送给单片机U1 一段数据码。单片机U1 利用该数据码在七段数码管上显示数字0-F(间隔时间1 秒)。周而复始,循环不息。
设fosc=11.0592MHz.
#include 13、
#define uint unsigned int
uchar disp_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint k)
{uchar i,j;
for(i==0;i 14、未完成,等待
;
TI=0; //发送完成后,人工设置TI为0,以便下次发送数据
}
void main()
{uchar i;
TMOD=0x20;
TL1=0xe8;
TH1=0xe8;
PCON=0X00;
SCON=0X40;
TR1=1;
while(1)
{
for(i=0;i<16;i++)
{
send(disp_code[i]);
delay(1000);
}
}
#include 15、 unsigned char
#define uint unsigned int
uchar receive(void)
{
uchar data1;
while(RI==0);//判断是否接收完成,若未完成,等待
RI=0; //接收完成后,人工设置RI为0,以便下次接收数据
data1=SBUF; //将接收的数据给变量data1。
return data1;
}
void main()
{uchar i;
TMOD=0x20;
TL1=0xe8;
TH1=0xe8;
PCON=0X00;
SCON=0X50;
TR1=1;
while(1)
{
for(i=0;i<16;i++)
{P0=receive();}
}
}
图四
单片机实验报告
实验名称: 实验三 定时器实验
学生姓名: 刘凤楠
专 业: 电子信息工程
班 级: 电信09-2
学 号: 09034030253
日 期: 2011 年 11 月 11 日






