- 17
- 0
- 约1.56万字
- 约 63页
- 2017-03-23 发布于江苏
- 举报
系列单片机定时器计数器
第五章上机实验(4) 外部中断实验(急救车与交通灯) ----详见指导书 * 例5:设某用户系统中已使用了两个外部中断源,并置定时器T1为模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚上输出一个5KHZ的方波。fosc=12MHZ。 解:设T0工作模式3计数方式,把T0的引脚作附加的外部中断源输入,TL0的计数初值为FFH,当检测到T0引脚电平出现由1到0的负跳变时,TL0产生溢出,申请中断。这相当于边沿触发的外部中断源。 T0模式3下,TL0作计数用,而TH0可作为8位的定时器,定时控制P1.0引脚输出5KHZ的方波信号如图7.3-7所示。 ★ TL0的计数初值为FFH。 ★ TH0的计数初值X计算如下: 方波为5KHZ,故周期T=1/(5KHZ)=0.2ms=200μs 所以用TH0定时100μs时,TH0的初值X计算如下: (28-X)× 1μs=100μs X=256-100 =156=9CH 程序如下: MOV TMOD,#27H ;T0为模式3,计数方式;T1为模式2,定时方式 MOV TL0,#0FFH ;置TL0计数初值 MOV TH0,#156(9CH) ;置TH0计数初值 MOV TH1,#data ;dataJ是根据波特率要求设置的常数 MOV TL1,#data MOV TCON ,#55H ;外中断0、1边沿触发,启动T0,T1 MOV IE,#9FH ;开放全部中断 ┇ TL0溢出中断服务程序(由000B转来) TL0INT:MOV TL0,#0FFH ;TL0重赋初值 ( 中断处理) RETI TH0溢出中断服务程序(由001B转来) TH0INT:MOV TH0,#156(9CH) ;TH0重赋初值 CPL P1.0 ;P1.0取反输出 RETI ②计算计数器的计数初值: 编程时将计数初值送THi、 TLi; 可编程器件在使用前需要进行初始化: ①确定TMOD控制字:编程时将控制字送TMOD; ③ 开中断(如果使用中断方式): 编程实置位EA、ETi ④ TRi位置位控制定时器的启动和停止。 例题1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0 输出。试以中断方式实现。 8051 P1.0 500μs ① TMOD确定 T1控制 T0控制 X X X X 1 0 0 0 M0 M1 C/T GATE M0 M1 C/T GATE 控制字10H 要产生500μs 的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现。为此,定时间应为250μs 。使用6MHz晶振,则一个机器周期为2μs,设待求计数初值为X,则: ② 计算计数器的计数初值; (216–X)×2×10 -6 =250×10 -6 即216–X=125 X=21=0FF83H 所以,初值为: TH1=0FFH,TL1=83H 6-125=10000H-7DH ③ 采用中断方式:编程时打开全局和局部中断。 ④ 由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。 TR1=1,启动; TR1=0,停止。 程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 001BH LJMP INTT1 ;T1中断入口 INTT1: MOV TH1,#0FFH ;重新设置初值 MOV TL1,#83H CPL P1.0 ;输出取反 RETI ORG 1000H MAIN:MOV TMOD, #10H ;T1为方式1 MOV TH1, #0FFH MOV TL1,#83H ;初值 SETB
原创力文档

文档评论(0)