1 / 11
文档名称:

单片机实验报告.doc

格式:doc   大小:73KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

单片机实验报告.doc

上传人:xunlai783 2018/5/8 文件大小:73 KB

下载得到文件列表

单片机实验报告.doc

相关文档

文档介绍

文档介绍:实验三定时计数器实验
一、实验要求
。编程对该外部脉冲个数进行计数,并将计数值按二进制数在P1口驱动发光二极管显示出来,计到15秒再从0开始计。
二、实验目的
1. 学****8031内部定时/计数器的使用及编程方法;
2. 进一步掌握中断处理程序的编写方法。
三、实验元件
外部脉冲PULSE的频率为1Hz,幅度为5V,占空比50%
(T0),~-GREEN。
四、实验步说明与步骤
8031内部有两个定时/计数器T0与T1。本实验中T1做定时器,产生15秒定时,T0做计数器,。
对定时器来说,最大的定时时间与定时器的工作方式相关,所以要根据定时时间来确定定时器的工作方式。
对计数器而言,8031在每个机器周期采样一次从外部输入的波形,如有跳变,则计数值自动加1,因此单片机至少需两个机器周期才能检测到一次跳变。这就要求输入脉冲的频率不能超过机器周期的频率,在设置外部单脉
冲时,要注意其频率。

,,然后循环150次即有15的定时,定时器初值为a=-*6000000/12,于是
th1=-50000/256=3ch,tl1=-50000%256=0b0h
其汇编语言描述如下:
org 0h
ajmp start
org 000bh
ajmp t0int
org 001bh
ajmp t1int
start:
mov sp,#60h
mov th1,#3ch
mov tl1,#0b0h
mov tl0,#00h
mov th0,#00h
mov tmod,#16h
setb tr0
setb et0
setb tr1
setb et1
setb ea
main: mov r7,#00h
mov tl0,#00h
mov th0,#00h
l1: mov p1,tl0
cjne r7,#150,l1
jmp main
t0int:reti
t1int:inc r7
mov th1,#3ch
mov tl1,#0b0h
reti
end
改用C语言描述如下:
#include ""
int a= -*6000000/12; //求T1计数初值使用
int count; //必须定义成整数变量,*150从而得到15s
void main ()
{ TMOD = 0x15;
TH1 = a/256;
TL1 = a%256;
TH1 = 0;
TL1 = 0;
ET1 = 1;
EA = 1; //允许T1中断
TR0 = 1;
TR1 = 1; //启动T0 ,T1开始计数
while(1)
{
P1=TL0; //主程序中显示计数的值
}
}
void T1_srv(void) interrupt 3 using 1 //T0的中断函数,当
T0溢出中断时(),系统自动调用
{
TH1 = a/256;
TL1 = a%256;
count++;
if(count==150) //达到定时时间15s对T0进行清零
{
count=0;
TH0=0;
TL0=0;
}
}
实验结果如下:
当时间到15s时,计数器清零,重新计数。

本次实验是利用汇编语言进行设计的,进一步学****掌握了单片机中定时器和计数器的工作过程。在进行设计的过程中最先想利用C语言进行编写,但是计数器T0却始终未能正常工作,而且在语法中不能使用P10等表示,与从书上的知识有些冲突。改用汇编之后,计数器正常,可能与使用的调试工具有关。个人喜欢对那些不懂的问题进行研究,想找到原因,因此花了两天晚上的时间尝试了各种语法,总算找到了症结所在,最先的未能正常计数仅因为是调试文件太乱了,在重写建立文件之后恢复正常,而定时器的累加次数超过128则需定义成整数变量才够使用。其实这些问题都不算是问题,但在实验过程中这些小小的问题反而制约着我们进一步向前,却又不可避免的。只希望能冷静思考快速解决问题。
实验四串行通信实验
一、实验要求
利用虚拟终端,实现上位机与下位机的通信。上位机发出指定字符,下位机收到后返回原字符。采用中断和查询两种方式。虚拟终端通过PC的键盘发送数据到单片机系统,单片机将接收到的数据再回发给虚拟终端,虚拟终端接收到数据后通过虚拟终端窗口显示出来,与