89C51实验三定时计数器实验.docx
- 文档编号:3805784
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:17
- 大小:126.86KB
89C51实验三定时计数器实验.docx
《89C51实验三定时计数器实验.docx》由会员分享,可在线阅读,更多相关《89C51实验三定时计数器实验.docx(17页珍藏版)》请在冰豆网上搜索。
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
图四
三、实验心得:
通过定时计数器的实验,我觉得自己对书本的理论知识掌握得不够扎实,经常忘了书中的一些指令,而且对那些指令的作用还不是很了解。
对于简单点的数码管的静态和动态扫描显示法的编程还是能比较熟悉的编写出来,但到了下面的定时计数器的初始化编程就不太熟悉了,要通过反复看书和上网找资料才能勉强的写出来。
通过整个实验的程序编写,还是学会了一点用定时计数器进行单片机控制程序设计,感觉自己做完这个实验后对单片机编程又有了提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 89 C51 实验 定时 计数器
![提示](https://static.bdocx.com/images/bang_tan.gif)