单片机 汇编语言程序解析

ORG 0000h
ljmp main
org 000bh
ljmp itm0
org 0030h
main: clr P1.0
lcall dly500
cpl P1.0
lcall dly500
ljmp main
dly500:

mov tmod,#0001h
mov tl0,#0b0h
mov th0,#3ch
setb ea
setb et0
setb tr0
mov r0,#10
loop: mov a,r0
jz return

ljmp loop
itm0:
mov tl0,#0b0h
mov th0,#3ch
dec r0
reti
return:
ret
end
麻烦能人解析一下!!!!

这个程序很简单
org 000bh
ljmp itm0 定时器t0中断入口

main: clr P1.0 p1.0低电平
lcall dly500 调用延迟程序
cpl P1.0 p1.0高电平
lcall dly500 调用延迟
ljmp main 主程序,实现是p1.0口高低电平转换

dly500: 延时程序

mov tmod,#0001h
mov tl0,#0b0h
mov th0,#3ch 定时器t0初始化
setb ea 开总中断
setb et0 开t0中断
setb tr0 开始定时器计数
mov r0,#10 默认循环10次
loop: mov a,r0 a赋值10
jz return 判断a是否为零 为零跳转到return

ljmp loop 跳转loop

itm0: 中断运行程序
mov tl0,#0b0h
mov th0,#3ch 初始化定时器
dec r0 r0减一
reti 中断返回

仔细读一读就能懂了 好运!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-08
靠 汇编很好用的 简单上手 我给你翻译下
ORG 0000h 这个是定义开始的位置 一半都要写的 用途就不用说了
ljmp main 跳转
org 000bh 定时器中断0
ljmp itm0 跳转
org 0030h 一般都是从30开始的 因为30前面的地址都有特殊功能
main: clr P1.0 清零p1.0 为开始复位用的
lcall dly500 调用子程序dly500
cpl P1.0 取反p1.0
lcall dly500 再次调用子程序
ljmp main 跳转到开始的位置 main
dly500: 这个就是延迟时间了 子程序延迟的时间

mov tmod,#0001h 选择中断的方式为 定时器0的2模式
mov tl0,#0b0h
mov th0,#3ch
setb ea 中断总允许
setb et0
setb tr0 启动中断
mov r0,#10
loop: mov a,r0
jz return

ljmp loop
itm0:
mov tl0,#0b0h
mov th0,#3ch
dec r0
reti
return:
ret
end

这个程序的含义就是500ms翻转一次的脉冲输出
第2个回答  2009-03-08
送你一句话,学C语言吧!
汇编写得程序可读性极差,移植性极差,都是些老古董级别的骨灰级单片机开发者用的东西,过时啦!