89C51实验三定时计数器实验.docx

上传人:b****3 文档编号:3805784 上传时间:2022-11-25 格式:DOCX 页数:17 大小:126.86KB
下载 相关 举报
89C51实验三定时计数器实验.docx_第1页
第1页 / 共17页
89C51实验三定时计数器实验.docx_第2页
第2页 / 共17页
89C51实验三定时计数器实验.docx_第3页
第3页 / 共17页
89C51实验三定时计数器实验.docx_第4页
第4页 / 共17页
89C51实验三定时计数器实验.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

89C51实验三定时计数器实验.docx

《89C51实验三定时计数器实验.docx》由会员分享,可在线阅读,更多相关《89C51实验三定时计数器实验.docx(17页珍藏版)》请在冰豆网上搜索。

89C51实验三定时计数器实验.docx

89C51实验三定时计数器实验

成绩

 

实验报告

 

实验名称定时计数器实验

实验班级电子08-2

姓名何达清

学号(后两位)12

指导教师

实验日期2010年11月12日

 

实验三定时/计数器实验

一、实验目的

1、掌握数码管的静态和动态扫描显示法。

2、掌握单片机定时计数器的初始化编程。

3、学会运用定时计数器进行单片机控制程序设计。

二、实验内容

1、见图一,利用静态扫描显示法,让数码管显示数字6。

(数码管元件7SEG-MPX1-CA,共阳极数码管)

0RG0000H

MOVP0,#82H

END

2、见图一,利用静态扫描显示法,让数码管显示数字0。

间隔时间1秒后,显示数字1。

间隔时间1秒后,显示数字2。

………间隔时间1秒后,显示数字F。

间隔时间1秒后,显示数字0。

周而复始,循环不息。

图一

程序如下:

ORG0000H

LJMPMAIN

MAIN:

MOVR0,#0FFH

LOOP:

INCR0

CJNER0,#16,SHOW

MOVR0,#0

SHOW:

MOVA,R0

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

ACALLDELAY1S

AJMPLOOP

DELAY1S:

;误差0us

MOVR7,#0A7H

DL1:

MOVR6,#0ABH

DL0:

MOVR5,#10H

DJNZR5,$

DJNZR6,DL0

DJNZR7,DL1

NOP

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

END

3、见图二,利用动态扫描显示法,,让数码管显示数字01234567。

(数码管元件7SEG-MPX8-CA-BLUE,共阳极数码管)

图二

程序如下:

ORG0000H

AJMPMAIN

ORG000BH

AJMPTEF

ORG33H

MAIN:

MOVSP,#60H

MOVR4,#0

MOVR3,#80H

MOVTMOD,#02H

MOVTH0,#06H

MOVTL0,#06H

SETBET0

SETBEA

SETBTR0

LP:

CJNER4,#8,NEXT

MOVR4,#0

NEXT:

MOVA,R4

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVR5,A

AJMPLP

TEF:

PUSHACC

MOVA,R3

RLA

MOVP1,A

MOVP2,R5

INCR4

MOVR3,A

POPACC

RETI

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH

END

4、见图二,利用动态扫描显示法,,让数码管显示数字12.34.56,每隔一秒,数字变化相当于时间计时器。

对应数字分别为小时.分钟.秒。

程序如下:

ORG0000H

AJMPMAIN

ORG000BH

AJMPTRF0

ORG001BH

AJMPTRF1

ORG30H

SECEQU40H

MINEQU41H

HOUREQU42H

MAIN:

MOVSP,#60H

MOVR1,#80H

MOVDPTR,#TAB

MOVTMOD,#21H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVTH1,#06H

MOVTL1,#06H

MOVIE,#0AH

SETBEA

MOVTCON,#50H

LOOP:

MOVB,#10

MOVA,SEC

DIVAB

MOVR7,A

MOVR6,B

MOVB,#10

MOVA,MIN

DIVAB

MOVR5,A

MOVR4,B

MOVB,#10

MOVA,HOUR

DIVAB

MOVR3,A

MOVR2,B

NT0:

CJNER1,#01H,NT1

MOVA,R3

MOVCA,@A+DPTR

MOVP2,A

NT1:

CJNER1,#02H,NT2

MOVA,R2

MOVCA,@A+DPTR

MOVP2,A

NT2:

CJNER1,#04H,NT3

MOVP2,#7FH

NT3:

CJNER1,#08H,NT4

MOVA,R5

MOVCA,@A+DPTR

MOVP2,A

NT4:

CJNER1,#10H,NT5

MOVA,R4

MOVCA,@A+DPTR

MOVP2,A

NT5:

CJNER1,#20H,NT6

MOVP2,#7FH

NT6:

CJNER1,#40H,NT7

MOVA,R7

MOVCA,@A+DPTR

MOVP2,A

NT7:

CJNER1,#80H,NT0

MOVA,R6

MOVCA,@A+DPTR

MOVP2,A

LJMPLOOP

TRF1:

PUSHACC

MOVA,R1

RLA

MOVR1,A

MOVP1,A

POPACC

RETI

TRF0:

PUSHPSW

PUSHACC

MOVTH0,#3CH

MOVTL0,#0B0H

CLRRS1

SETBRS0

INCR7

CJNER7,#20,EXIT

MOVR7,#0

INCSEC

MOVA,SEC

CJNEA,#60,EXIT

MOVSEC,#0

INCMIN

MOVA,MIN

CJNEA,#60,EXIT

MOVMIN,#0

INCHOUR

MOVA,HOUR

CJNEA,#24,EXIT

MOVHOUR,#0

EXIT:

POPACC

POPPSW

RETI

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

5、见图三。

假设单片机晶振频率设定为6MHz。

完成以下要求,且通过虚拟示波器观看波形。

A、使用定时器1以方式0产生周期为500us的等宽方波连续脉冲,并由P1.0输出。

程序如下:

#include

sbitP1_0=P1^0;

voidmain()

{

TMOD=0x00;

TH1=0xFC;

TL1=0x02;

TR1=1;

while

(1)

{

if(TF1)

{

TH1=0xFC;

TL1=0x02;

P1_0=~P1_0;

TF1=0;

}

}

}

B、使用定时器0以方式2产生周期为200us的等宽方波连续脉冲,并由P1.1输出。

程序如下:

#include

sbitP1_0=P1^0;

voidmain()

{

TMOD=0x02;

TH0=0xCE;

TL0=0xCE;

TR0=1;

while

(1)

{

if(TF0)

{

TF0=0;

P1_0=~P1_0;

}

}

}

C、编程使T0工作于定时工作方式1,产生500us等宽方波从P2.7输出。

T1工作于计数工作方式2,其计数外部脉冲由T0产生,即P2.7引脚与P3.5(T1引脚)相连,T1每计数100个,P1.2取反输出一次。

程序如下:

ORG0

AJMPMAIN

ORG000BH

AJMPTIME0OVF

ORG001BH

AJMPCOUNTER1

ORG0030H

MAIN:

SETBP2.7

SETBP1.2

MOVTMOD,#61H

MOVTH0,#0FFH

MOVTL0,#06H

MOVTH1,#156

MOVTL1,#156

MOVIE,#0AH

MOVTCON,#50H

SETBEA

AJMP$

TIME0OVF:

MOVTH0,#0FFH

MOVTL0,#06H

CPLP2.7

RETI

COUNTER1:

CPLP1.2

RETI

END

D、编程使T0工作于定时工作方式1,产生500us等宽方波从P2.6输出到P3.3(INT1脚),如图所示。

T1工作于定时工作方式2,由T1来测量P3.3脚信号的正脉冲宽度,并通过示波器加以验证。

程序如下:

ORG0

AJMPMAIN

ORG000BH

AJMPTIMER0OVF

ORG001BH

AJMPTIMER1OVF

ORG0030H

MAIN:

SETBP2.6

MOVTMOD,#0A1H

MOVTH0,#0FEH

MOVTL0,#0CH

MOVTH1,#0

MOVTL1,#0

MOVIE,#0AH

SETBEA

SETBTR0

JBP2.6,$

SETBTR1

JNBP2.6,$

JBP2.6,$

CLRTR1

MOVDPL,TL1

AJMP$

TIMER0OVF:

MOVTH0,#0FEH

MOVTL0,#0CH

CPLP2.6

RETI

TIMER1OVF:

INCDPH

RETI

END

图三

6、见图四。

假设单片机晶振频率设定为12MHz。

编程实现以下功能:

A、发光二极管D1的秒闪。

(即亮一秒灭一秒)

ORG0

AJMPMAIN

ORG000BH

AJMPTIMER0OVF

ORG0030H

MAIN:

SETBP1.0

MOVR2,#20

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBET0

SETBTR0

SETBEA

AJMP$

TIMER0OVF:

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZR2,EXIT

MOVR2,#20

CPLP1.0

EXIT:

RETI

END

B、实现发光二极管的同时亮灭、交替亮灭。

(即第一秒内,发光二极管同时亮灭,间隔0.1秒;第二秒内,发光二极管交替亮灭(例如D1D3D5D7亮D2D4D6D8灭),间隔0.1秒)

ORG0

AJMPMAIN

ORG000BH

LJMPTIMER0OVF

ORG0030H

MAIN:

MOVR2,#20

MOVR3,#1

MOVR4,#2

MOVR6,#0FFH

MOVR7,#0AAH

CLRA

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

SETBET0

SETBTR0

SETBEA

AJMP$

TIMER0OVF:

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZR2,NEXT

MOVR2,#20

XRLA,R3

NEXT:

MOVR5,A

DJNZR4,EXIT

MOVR4,#2

JNZTURN

MOVA,R6

XRLA,#0FFH

MOVP1,A

MOVR6,A

MOVA,R5

AJMPEXIT

TURN:

MOVA,R7

XRLA,#0FFH

MOVP1,A

MOVR7,A

MOVA,R5

EXIT:

RETI

END

C、利用一个按键开关进行计数,计数十次,D1的闪烁1次;计数20次,D2循环闪烁,计数30次,D1、D2熄灭,以此循环。

(本题只是用到D1D2)

ORG0

AJMPMAIN

MAIN:

SETBP0.0

MOVC,P0.0

JCMAIN

INCR2

INCR3

JNBP0.0,$

CJNER2,#10,NEXT1

MOVR2,#0

CLRP1.0

ACALLDELAY100MS

SETBP1.0

NEXT1:

CJNER3,#20,NEXT2

MOVR3,#0

LOOP:

CLRP1.1

ACALLDELAY100MS

SETBP1.1

ACALLDELAY100MS

SETBP0.0

MOVC,P0.0

JCLOOP

INCA

LOOP1:

CLRP1.1

ACALLDELAY100MS

SETBP1.1

ACALLDELAY100MS

JNBP0.0,LOOP1

CJNEA,#10,LOOP

NEXT2:

CJNEA,#10,MAIN

MOVA,#0

SETBP1.0

SETBP1.1

AJMPMAIN

DELAY100MS:

MOVR7,#13H

DL1:

MOVR6,#14H

DL0:

MOVR5,#82H

DJNZR5,$

DJNZR6,DL0

DJNZR7,DL1

RET

END

图四

三、实验心得:

通过定时计数器的实验,我觉得自己对书本的理论知识掌握得不够扎实,经常忘了书中的一些指令,而且对那些指令的作用还不是很了解。

对于简单点的数码管的静态和动态扫描显示法的编程还是能比较熟悉的编写出来,但到了下面的定时计数器的初始化编程就不太熟悉了,要通过反复看书和上网找资料才能勉强的写出来。

通过整个实验的程序编写,还是学会了一点用定时计数器进行单片机控制程序设计,感觉自己做完这个实验后对单片机编程又有了提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1