求助一段简单的单片机编程(汇编语言)
单片机P3.0口输出一定频率的脉冲,脉冲间隔为0.5秒,用普通的延时程序就行。晶振频率为6MH。...
单片机P3.0口输出一定频率的脉冲,脉冲间隔为0.5秒,用普通的延时程序就行。晶振频率为6MH。
展开
4个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
你的晶振为6MH,所以机器周期则为2us.即500MS(0.5秒的时间如下)
DELAY500Ms:
MOV R7,#0x0F
loop3:MOV R6,#0xCA
loop2:MOV R5,#0xA2
loop1:DJNZ R5,loop1
DJNZ R6,loop2
DJNZ R7,loop3
RET
延时总时间 = 三层循环 +子程序调用 2us + 子程序返回 2us = 499996+4 = 500000us =500ms
这个延时程序比较准确,你可以用示波器看下。
ORG 0000H
AJMP MIAN
ORG 0100H
MIAN:
NEXT:CPL P3.0
ACALL DELAY500Ms
SJMP NEXT
这个程序你可以直接编译后下载到单片机里去运行。
但我建议你不要用这种方法,因为它太占用系统时间,效率很差,你可以用定时做,这样不但非常准确而且不占用时间,系统还可以处理其它很多事情。
DELAY500Ms:
MOV R7,#0x0F
loop3:MOV R6,#0xCA
loop2:MOV R5,#0xA2
loop1:DJNZ R5,loop1
DJNZ R6,loop2
DJNZ R7,loop3
RET
延时总时间 = 三层循环 +子程序调用 2us + 子程序返回 2us = 499996+4 = 500000us =500ms
这个延时程序比较准确,你可以用示波器看下。
ORG 0000H
AJMP MIAN
ORG 0100H
MIAN:
NEXT:CPL P3.0
ACALL DELAY500Ms
SJMP NEXT
这个程序你可以直接编译后下载到单片机里去运行。
但我建议你不要用这种方法,因为它太占用系统时间,效率很差,你可以用定时做,这样不但非常准确而且不占用时间,系统还可以处理其它很多事情。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2021-01-14 广告
2021-01-14 广告
可以写对它写程序,让它听从你的安排,你让它实现什么功能它就能实现,比如电子钟、电子琴、打印机、手机、电梯控制,智能家具如:空调、冰箱、洗衣机等,如果这些家电没有它,什么都不能工作。单片机内部很复杂,你研究的越深你就会越爱上它,它可以帮你实现...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
楼上的写的是10S的延时程序,而且不是很精准,用push和pop也占用了很多资源。
DELAY:
MOV R7,#250
DELAY1:
MOV R6,#248
DJNZ R6,$
DJNZ R7,DELAY1
RET
这个程序只有6个us的误差
输出脉冲程序:
TT:CPL P3.0
ACALL DELAY
SJMP TT
这个是死循环,就是一直输出脉冲,除非来中断,如果你只是调用这个程序,然后做别的事情,之需要设置一个寄存器,做了几次就结束就ok。
DELAY:
MOV R7,#250
DELAY1:
MOV R6,#248
DJNZ R6,$
DJNZ R7,DELAY1
RET
这个程序只有6个us的误差
输出脉冲程序:
TT:CPL P3.0
ACALL DELAY
SJMP TT
这个是死循环,就是一直输出脉冲,除非来中断,如果你只是调用这个程序,然后做别的事情,之需要设置一个寄存器,做了几次就结束就ok。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ORG 0000H
AJMP START
ORG 0050H
START: ACALL KS0 ; 停止0.5S
CLR P1.0 ;输出
ACALL KSA ; 输出 0.5S
AJMP START
KS0: MOV R0,#008H
KS1: MOV R1,#0FFH
KS2: MOV R2,#03CH
DJNZ R2,$
DJNZ R1,KS2
DJNZ R0,KS1
RET
KSA: MOV R0,#008H
KSB: MOV R1,#0FFH
KSC: MOV R2,#03CH
DJNZ R2,$
CPL P1.0
DJNZ R1,KSC
DJNZ R0,KSB
RET
END
AJMP START
ORG 0050H
START: ACALL KS0 ; 停止0.5S
CLR P1.0 ;输出
ACALL KSA ; 输出 0.5S
AJMP START
KS0: MOV R0,#008H
KS1: MOV R1,#0FFH
KS2: MOV R2,#03CH
DJNZ R2,$
DJNZ R1,KS2
DJNZ R0,KS1
RET
KSA: MOV R0,#008H
KSB: MOV R1,#0FFH
KSC: MOV R2,#03CH
DJNZ R2,$
CPL P1.0
DJNZ R1,KSC
DJNZ R0,KSB
RET
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
仿真调试一下具体参数
程序就 是这样
_DELAY:
PUSH 0
PUSH 1
PUSH 2
MOV R0,#50
_D1:
MOV R1,#200
_D2:
MOV R2,#250
DJNZ R2,$
DJNZ R1, _D2
DJNZ R0, _D1
POP 2
POP 1
POP 0
RET
程序就 是这样
_DELAY:
PUSH 0
PUSH 1
PUSH 2
MOV R0,#50
_D1:
MOV R1,#200
_D2:
MOV R2,#250
DJNZ R2,$
DJNZ R1, _D2
DJNZ R0, _D1
POP 2
POP 1
POP 0
RET
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询