单片机程序解释

有两段程序,不大搞得懂,望高手解释一下这两段程序是如何得来的,如果有错,请帮忙指出改正
设fosc=12MHz,编写一个子程序,功能是使蜂鸣器响0.5秒

ORG 0000H
LJMP START
ORG 000BH
LJMP T0_INT
START:
MOV TMOD, #02
MOV TH0, #6
MOV TL0, #6
MOV R7, #40
MOV R6, #50
CLR P3.4 ;输出低电平,开始响了
SETB TR0
LLLL:
JNB TF0, $ ;等待
CLR TF0
DJNZ R7, LLLL
MOV R7, #40
DJNZ R6, LLLL
MOV R6, #50
CPL P3.4 ;输出高电平,停止发音
CLR TR0
SJMP $
END

若fosc=12MHz,用T0方式2产生250us定时中断,使用中断控制方法使P3.4输出周期为1秒的方波(使P3.4上接的指示灯以0.5秒速率闪亮)。试分别编写出T0和中断的初始化程序和中断服务程序。

ORG 0000H
LJMP START
ORG 000BH
LJMP T0_INT
START:
MOV TMOD, #02
MOV TH0, #6
MOV TL0, #6
SETB TR0
MOV IE, #10000010B
MOV R7, #40
MOV R6, #50
SJMP $
T0_INT:
DJNZ R7, T0_END
MOV R7, #40
DJNZ R6, T0_END
MOV R6, #50
CPL P3.4
T0_END:
RETI
END

急需解答,若程序有错,麻烦指出纠正。
谢谢啦

1、
ORG 0000H //程序入口
LJMP START //跳到START处
ORG 000BH //定义定时器/计数器T0的中断入口地址
LJMP T0_INT //跳到T0_INT处,即T0中断的服务程序标号
START:
MOV TMOD, #02 //设置定时器/计数器的工作方式,这里为方式2,8位的常数自动重装
MOV TH0, #6 //定时器置初值,T0的高位
MOV TL0, #6 //定时器置初值,T0的低位
MOV R7, #40 //赋值
MOV R6, #50 //赋值
CLR P3.4 ;输出低电平,开始响了// P3.4位清零
SETB TR0 //启动定时器
LLLL:
JNB TF0, $ ;等待 //等中断时间到
CLR TF0 //定时器的溢出标志位清零
DJNZ R7, LLLL
MOV R7, #40
DJNZ R6, LLLL //循环中断,一直让时间间隔满足0.5秒
MOV R6, #50
CPL P3.4 ;输出高电平,停止发音 // P3.4 取反
CLR TR0 //关闭定时器
SJMP $
END

2、 ORG 0000H //程序的入口地址
LJMP START //跳到START处
ORG 000BH //定义定时器T0的中断入口地址
LJMP T0_INT //跳到T0的中断服务程序处
START:
MOV TMOD, #02 //设置定时器/计数器的工作方式,这里为方式2,8位的常数自动重装
MOV TH0, #6 //定时器置初值,T0的高位
MOV TL0, #6 //定时器置初值,T0的低位
SETB TR0 //启动定时器T0
MOV IE, #10000010B 开启允许总中断和T0中断
MOV R7, #40 //赋值
MOV R6, #50 //赋值
SJMP $ //等待中断
T0_INT: // 中断服务程序
DJNZ R7, T0_END
MOV R7, #40
DJNZ R6, T0_END
MOV R6, #50 //以上的都是为了让时间足够
CPL P3.4 // P3.4取反
T0_END:
RETI //子程序返回
END追问

若fosc=12MHz,用T2产生50ms定时,是编写一个初始化程序,其功能是对T2、中断初始化,并清零时钟单元30H~32H,秒定时计数单元置初值,并编写T2中断程序,其功能为1s定时,并对时钟单元(时、分、秒)计数
求解该段程序的框图,帮帮忙啦!

追答

我也想帮你……

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-25
++c的意思就是c先自加1然后再进行运算,你的程序中,刚开始程序是不执行if语句里面的这些语句的
但是c要先加一然后再判断是不是比300大,知道第三百次到了,c值就变成300了,if语句的条件就满足,这时候才执行{ LedNumVal++ ; //每隔300个扫描周期加一次
C =0; //每隔300个扫描清零
}
至于那个显示的问题,我不知道程序要显示什么,但是我写显示程序的时候是不这么复杂的,直接编写共阳或者共阴数码管的0到9的字符代码(即共阳数码管你要想让某段点亮就要给某段一个低电平,要想让共阴数码管的哪一段点亮就让这一段的电平为高电平,一共有八段(加上小数点))让IO口输出这八段所需要的高低电平就行了。看下面的图如果是共阳的数码管,显示1的话就是让B C两段亮,就让这两段输出为低电平,如果用P0口接数码管的话P0.0到P0.7分别接a、b、c、d、e、f、g、dp那么要想显示1就要让P0.1和P0.2是低电平,即让P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7输出为10011111就能控制数码管显示1,其余的类似。
相似回答