89C51实验三定时计数器实验Word下载.docx
《89C51实验三定时计数器实验Word下载.docx》由会员分享,可在线阅读,更多相关《89C51实验三定时计数器实验Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
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
3、见图二,利用动态扫描显示法,,让数码管显示数字01234567。
(数码管元件7SEG-MPX8-CA-BLUE,共阳极数码管)
图二
AJMPMAIN
ORG000BH
AJMPTEF
ORG33H
MOVSP,#60H
MOVR4,#0
MOVR3,#80H
MOVTMOD,#02H
MOVTH0,#06H
MOVTL0,#06H
SETBET0
SETBEA
SETBTR0
LP:
CJNER4,#8,NEXT
NEXT:
MOVA,R4
MOVR5,A
AJMPLP
TEF:
PUSHACC
MOVA,R3
RLA
MOVP1,A
MOVP2,R5
INCR4
MOVR3,A
POPACC
RETI
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
4、见图二,利用动态扫描显示法,,让数码管显示数字12.34.56,每隔一秒,数字变化相当于时间计时器。
对应数字分别为小时.分钟.秒。
ORG0000H
AJMPTRF0
ORG001BH
AJMPTRF1
ORG30H
SECEQU40H
MINEQU41H
HOUREQU42H
MOVSP,#60H
MOVR1,#80H
MOVDPTR,#TAB
MOVTMOD,#21H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#06H
MOVTL1,#06H
MOVIE,#0AH
SETBEA
MOVTCON,#50H
MOVB,#10
MOVA,SEC
DIVAB
MOVR7,A
MOVR6,B
MOVA,MIN
MOVR5,A
MOVR4,B
MOVA,HOUR
MOVR3,A
MOVR2,B
NT0:
CJNER1,#01H,NT1
MOVA,R3
MOVCA,@A+DPTR
MOVP2,A
NT1:
CJNER1,#02H,NT2
MOVA,R2
NT2:
CJNER1,#04H,NT3
MOVP2,#7FH
NT3:
CJNER1,#08H,NT4
MOVA,R5
NT4:
CJNER1,#10H,NT5
MOVA,R4
NT5:
CJNER1,#20H,NT6
NT6:
CJNER1,#40H,NT7
MOVA,R7
NT7:
CJNER1,#80H,NT0
MOVA,R6
LJMPLOOP
TRF1:
PUSHACC
MOVA,R1
RLA
MOVR1,A
MOVP1,A
POPACC
RETI
TRF0:
PUSHPSW
CLRRS1
SETBRS0
INCR7
CJNER7,#20,EXIT
MOVR7,#0
INCSEC
CJNEA,#60,EXIT
MOVSEC,#0
INCMIN
MOVMIN,#0
INCHOUR
CJNEA,#24,EXIT
MOVHOUR,#0
EXIT:
POPACC
POPPSW
RETI
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
5、见图三。
假设单片机晶振频率设定为6MHz。
完成以下要求,且通过虚拟示波器观看波形。
A、使用定时器1以方式0产生周期为500us的等宽方波连续脉冲,并由P1.0输出。
#include<
reg51.h>
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输出。
TMOD=0x02;
TH0=0xCE;
TL0=0xCE;
TR0=1;
if(TF0)
TF0=0;
C、编程使T0工作于定时工作方式1,产生500us等宽方波从P2.7输出。
T1工作于计数工作方式2,其计数外部脉冲由T0产生,即P2.7引脚与P3.5(T1引脚)相连,T1每计数100个,P1.2取反输出一次。
ORG0
AJMPTIME0OVF
AJMPCOUNTER1
ORG0030H
SETBP2.7
SETBP1.2
MOVTMOD,#61H
MOVTH0,#0FFH
MOVTH1,#156
MOVTL1,#156
MOVIE,#0AH
MOVTCON,#50H
AJMP$
TIME0OVF:
CPLP2.7
COUNTER1:
CPLP1.2
D、编程使T0工作于定时工作方式1,产生500us等宽方波从P2.6输出到P3.3(INT1脚),如图所示。
T1工作于定时工作方式2,由T1来测量P3.3脚信号的正脉冲宽度,并通过示波器加以验证。
AJMPTIMER0OVF
AJMPTIMER1OVF
SETBP2.6
MOVTMOD,#0A1H
MOVTH0,#0FEH
MOVTL0,#0CH
MOVTH1,#0
MOVTL1,#0
JBP2.6,$
SETBTR1
JNBP2.6,$
CLRTR1
MOVDPL,TL1
TIMER0OVF:
CPLP2.6
TIMER1OVF:
INCDPH
图三
6、见图四。
假设单片机晶振频率设定为12MHz。
编程实现以下功能:
A、发光二极管D1的秒闪。
(即亮一秒灭一秒)
ORG0
SETBP1.0
MOVR2,#20
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZR2,EXIT
CPLP1.0
EXIT:
B、实现发光二极管的同时亮灭、交替亮灭。
(即第一秒内,发光二极管同时亮灭,间隔0.1秒;
第二秒内,发光二极管交替亮灭(例如D1D3D5D7亮D2D4D6D8灭),间隔0.1秒)
ORG0
LJMPTIMER0OVF
MOVR3,#1
MOVR4,#2
MOVR6,#0FFH
MOVR7,#0AAH
CLRA
DJNZR2,NEXT
XRLA,R3
MOVR5,A
DJNZR4,EXIT
JNZTURN
MOVA,R6
XRLA,#0FFH
MOVR6,A
MOVA,R5
AJMPEXIT
TURN:
MOVA,R7
MOVR7,A
C、利用一个按键开关进行计数,计数十次,D1的闪烁1次;
计数20次,D2循环闪烁,计数30次,D1、D2熄灭,以此循环。
(本题只是用到D1D2)
SETBP0.0
MOVC,P0.0
JCMAIN
INCR2
INCR3
JNBP0.0,$
CJNER2,#10,NEXT1
MOVR2,#0
CLRP1.0
ACALLDELAY100MS
NEXT1:
CJNER3,#20,NEXT2
MOVR3,#0
CLRP1.1
SETBP1.1
JCLOOP
INCA
LOOP1:
JNBP0.0,LOOP1
CJNEA,#10,LOOP
NEXT2:
CJNEA,#10,MAIN
MOVA,#0
DELAY100MS:
MOVR7,#13H
MOVR6,#14H
MOVR5,#82H
图四
三、实验心得:
通过定时计数器的实验,我觉得自己对书本的理论知识掌握得不够扎实,经常忘了书中的一些指令,而且对那些指令的作用还不是很了解。
对于简单点的数码管的静态和动态扫描显示法的编程还是能比较熟悉的编写出来,但到了下面的定时计数器的初始化编程就不太熟悉了,要通过反复看书和上网找资料才能勉强的写出来。
通过整个实验的程序编写,还是学会了一点用定时计数器进行单片机控制程序设计,感觉自己做完这个实验后对单片机编程又有了提高。