试用定时 计数器T1,编程实现延时1小时后从P1.0输出高电平。(已知fosc=6MHz)
1个回答
展开全部
【答案】:定时/计数器4种工作方式中,方式1定时时间最长。fosc=6MHz时,最大定时时间为65536×2μs≈131ms,取整数为100ms。
1)计算定时初值:T1初值=216-100ms/2μs=65536-50000=15536=3CB0H。
2)设置100ms计数器循环次数:N=1小时/100ms=36000,需分二重循环,内循环R2=200,外循环R3=180,200×180=36000。
编程如下:
ORG 0000H ;复位地址
LJMP STAT ;转复位初始化
ORG 001BH ;T1中断入口地址
LJMP IT1 ;转T1中断服务程序
ORG 1000H ;初始化程序首地址
STAT:MOV SP,#60H ;置堆栈
MOV TMOD,#10H ;置T1定时器,方式1
MOV IP,#08H ;置T1高优先级
MOV TH1,#3CH ;置T1初值,定时100ms
MOV TL1,#0B0H ;
MOV TL1,#0B0H ;
SETB TR1 ;T1运行
MOV IE,#88H ;T1开中
MOV R2,#200 ;置1小时延时内循环初值
MOV R3,#180 ;置1小时延时外循环初值
LJMP MAIN ;转主程序,并等待中断
ORG 2000H ;T1中断服务子程序首地址
IT1:MOV TH1,#3CH ;重置T1定时初值100ms
MOV TL1,#0B0H ;
DJNZ R2,IT10 ;判内循环,未满转中断返回
MOV R2,#200 ;重置内循环初值
DJNZ R3,IT10 ;判外循环,未满转中断返回
SETB P1.0 ;延时1小时满,从P1.0输出高电平
CLR TR1 ;T1停
CLR ET1 ;T1禁中
IT10:RETI ;中断返回
1)计算定时初值:T1初值=216-100ms/2μs=65536-50000=15536=3CB0H。
2)设置100ms计数器循环次数:N=1小时/100ms=36000,需分二重循环,内循环R2=200,外循环R3=180,200×180=36000。
编程如下:
ORG 0000H ;复位地址
LJMP STAT ;转复位初始化
ORG 001BH ;T1中断入口地址
LJMP IT1 ;转T1中断服务程序
ORG 1000H ;初始化程序首地址
STAT:MOV SP,#60H ;置堆栈
MOV TMOD,#10H ;置T1定时器,方式1
MOV IP,#08H ;置T1高优先级
MOV TH1,#3CH ;置T1初值,定时100ms
MOV TL1,#0B0H ;
MOV TL1,#0B0H ;
SETB TR1 ;T1运行
MOV IE,#88H ;T1开中
MOV R2,#200 ;置1小时延时内循环初值
MOV R3,#180 ;置1小时延时外循环初值
LJMP MAIN ;转主程序,并等待中断
ORG 2000H ;T1中断服务子程序首地址
IT1:MOV TH1,#3CH ;重置T1定时初值100ms
MOV TL1,#0B0H ;
DJNZ R2,IT10 ;判内循环,未满转中断返回
MOV R2,#200 ;重置内循环初值
DJNZ R3,IT10 ;判外循环,未满转中断返回
SETB P1.0 ;延时1小时满,从P1.0输出高电平
CLR TR1 ;T1停
CLR ET1 ;T1禁中
IT10:RETI ;中断返回
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询