设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器0实现30ms定时中断,在P1.0在产生周期为60ms的方波 20
设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器0实现30ms定时中断,在P1.0在产生周期为60ms的方波。(1)计算TH0和TL0的值;(2)确定寄存...
设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器0实现30ms定时中断,在P1.0在产生周期为60ms的方波。
(1)计算TH0和TL0的值;
(2)确定寄存器TMOD,TCON和IE的值(寄存器中跟本题无关位取值为0);
(3)编写主程序和中断服务程序。
小弟初学者,跪求解答。 展开
(1)计算TH0和TL0的值;
(2)确定寄存器TMOD,TCON和IE的值(寄存器中跟本题无关位取值为0);
(3)编写主程序和中断服务程序。
小弟初学者,跪求解答。 展开
4个回答
展开全部
ORG 0000H
JMP MAIN
ORG 000BH
JMP T0_SR
COUNTER EQU 30H
MAIN:
CALL INIT
JMP $
INIT:
MOV TMOD, #01H
MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
SETB TR0
SETB ET0
SETB EA
RET
T0_SR:
MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
INC COUNTER
MOV R1, 30H
CJNE R1, #30, LOW_END
MOV R3, #0
CPL P1.0
RETI
LOW_END:
RETI
END
JMP MAIN
ORG 000BH
JMP T0_SR
COUNTER EQU 30H
MAIN:
CALL INIT
JMP $
INIT:
MOV TMOD, #01H
MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
SETB TR0
SETB ET0
SETB EA
RET
T0_SR:
MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
INC COUNTER
MOV R1, 30H
CJNE R1, #30, LOW_END
MOV R3, #0
CPL P1.0
RETI
LOW_END:
RETI
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
:
ORG 0000H
SJMP START
ORG 000BH ;T0中断入口.
SJMP T0_INT
START:
MOV TMOD, #01H ;设置T0定时方式1
MOV TH0, #(65536-60000/2) / 256 ;送入初始值.
MOV TL0, #(65536-60000/2) MOD 256 ;定时30000us@12MHz
;TH0和TL0的值,可由编译软件来算.
MOV IE, #10000010B ;开放总中断和T0中断.
SETB TR0 ;启动T0,TR0就是TCON中的控制位.
SJMP $ ;等着吧.
T0_INT:
MOV TH0, #(65536-60000/2) / 256 ;重新送入初始值.
MOV TL0, #(65536-60000/2) MOD 256 ;定时30000us@12MHz
CPL P1.0 ;输出方波.
RETI ;中断返回.
END ;完.
ORG 0000H
SJMP START
ORG 000BH ;T0中断入口.
SJMP T0_INT
START:
MOV TMOD, #01H ;设置T0定时方式1
MOV TH0, #(65536-60000/2) / 256 ;送入初始值.
MOV TL0, #(65536-60000/2) MOD 256 ;定时30000us@12MHz
;TH0和TL0的值,可由编译软件来算.
MOV IE, #10000010B ;开放总中断和T0中断.
SETB TR0 ;启动T0,TR0就是TCON中的控制位.
SJMP $ ;等着吧.
T0_INT:
MOV TH0, #(65536-60000/2) / 256 ;重新送入初始值.
MOV TL0, #(65536-60000/2) MOD 256 ;定时30000us@12MHz
CPL P1.0 ;输出方波.
RETI ;中断返回.
END ;完.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要汇编程序的 还是C的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询