定时T0,在P1.7实现每10ms输出发生一次反转,晶振频率12MHz,采用汇编语言用中断法编写程序
1个回答
关注
展开全部
亲很高兴为您解答您好,首先,需要了解定时器的工作原理。定时器是一种计时器,可以在设定的时间到达时产生中断。在这个问题中,我们需要使用定时器 T0,并在 P1.7 上每 10ms 反转一次输出。在汇编语言中,我们可以使用中断向量表和中断服务程序来实现定时器中断。首先,需要设置定时器 T0 的计时方式和计时器初值。根据晶振频率 12MHz,可以计算出计时器初值为 65536 - (12000 / 12) = 55472(其中 12000 表示每秒钟计时器计数的次数,12 表示晶振频率)。接下来,需要编写中断服务程序。在中断服务程序中,需要将 P1.7 的输出状态反转,并重新设置定时器 T0 的初值。具体实现方法如下:```ORG 0H ; 中断向量表 LJMP STARTORG 0BH ; 定时器 T0 中断服务程序TIMER_ISR: CPL P1.7 ; 反转 P1.7 输出状态 MOV TH0, #55H ; 重新设置定时器 T0 的初值 MOV TL0, #72H RETI ; 返回中断
咨询记录 · 回答于2023-03-24
定时T0,在P1.7实现每10ms输出发生一次反转,晶振频率12MHz,采用汇编语言用中断法编写程序
亲很高兴为您解答您好,首先,需要了解定时器的工作原理。定时器是一种计时器,可以在设定的时间到达时产生中断。在这个问题中,我们需要使用定时器 T0,并在 P1.7 上每 10ms 反转一次输出。在汇编语言中,我们可以使用中断向量表和中断服务程序来实现定时器中断。首先,需要设置定时器 T0 的计时方式和计时器初值。根据晶振频率 12MHz,可以计算出计时器初值为 65536 - (12000 / 12) = 55472(其中 12000 表示每秒钟计时器计数的次数,12 表示晶振频率)。接下来,需要编写中断服务程序。在中断服务程序中,需要将 P1.7 的输出状态反转,并重新设置定时器 T0 的初值。具体实现方法如下:```ORG 0H ; 中断向量表 LJMP STARTORG 0BH ; 定时器 T0 中断服务程序TIMER_ISR: CPL P1.7 ; 反转 P1.7 输出状态 MOV TH0, #55H ; 重新设置定时器 T0 的初值 MOV TL0, #72H RETI ; 返回中断
START: MOV TMOD, #01H ; 设置定时器 T0 的计时方式为模式 1 MOV TH0, #55H ; 设置定时器 T0 的初值为 55472 MOV TL0, #72H SETB TR0 ; 启动定时器 T0 SETB EA ; 开启总中断MAIN: SJMP $```在程序中,设置了定时器 T0 的计时方式为模式 1,即 16 位自动重装载计数器。在定时器 T0 中断服务程序中,使用 CPL 指令反转 P1.7 的输出状态,并重新设置定时器 T0 的初值。在主程序中使用 SJMP 指令实现程序循环。经过以上步骤,就可以实现每 10ms 在 P1.7 上反转一次输出。
亲答案是您想要的吗