有关单片机的问题,仔细分析这个程序是什么意思,分析到第五行的时候遇到困难了,求高手解答,急急急急

ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV TMOD,#00000100B
MOV TL0,#03CH
MOV TH0,#0B0H
MOV R0,#0
MOV A,#0
MOV DPTR,#CASE
MOV R2,#10
SETB TR0
LOOP:MOV 30H,TL0
MOVC A,@A+DPTR
MOV P1,A
MOV A,TL0
LOOPY:CJNE A,30H,LOOPX

MOV 30H,TL0
SJMP LOOPY
LOOPX:INC R0
MOV A,R0
DJNZ R2,LOOP
SJMP MAIN
CASE:DB 40H,4FH,24H,30H,19H
DB 12H,02H,78H,00H,10H

RET
END
第五行和第六行在整个程序的作用是什么,是不是可有可无呢,还有第五行的#03CH加1之后是什么多少呢?怎么算呢?一经算出,立即采纳

在汇编里,一般用#开头表示立即数
第五行
MOV TL0,#03CH ;意思是把TL0赋值为3cH即十进制的60
第六行
MOV TH0,#0B0H ;意思是把TH0赋值为0B0H即十进制的176 ,B前面的0不能省(因为字母开始的前面必须要有0)
在单片机里,这两个八位组成一个十六位的定时器,一般的定时器有累加(即一个时钟加1)有累减(即一个时钟减1),当它溢出时(加/减到0)就会产生一个中断标志,这时如果开了中断就会产生中断。因此,当你需要一定时间就产生这个中断标志时,这个值就要你亲自计算然后赋值,所以说并不是可有可无。
#03cH加1后是03Dh,十进制是61
计算方法,H在后面表示十六进制,用0--9,A,B,C,D,E,F表示,A为10,B为11,C为12,D为13,E为14,F为15,03CH化为十进制就等于12(C为12)+3*16(十六进制,每进一位乘16)=60追问

TL0的作用 是啥呢 ???

追答

TL0是系统寄存器,只要程序里开启了定时器0,那么TL0和TH0组成的16位定时器器就会累加(有些芯片是累减),你对它赋值就会影响它累加(累减)到0的时间,也就是说TL0和TH0的作用就是确定产生定时器0中断标志的时间
楼主要遵守诺言:“一经算出,立即采纳”。我已经一个个帮你算出

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-31
这程序编写的!

下面的:
CASE:DB 40H,4FH,24H,30H,19H
DB 12H,02H,78H,00H,10H
是共阳数码管的段码,弄的很奇特的排列方式。

下面的:
MOV TL0,#03CH
MOV TH0,#0B0H
这两行的数据,好像写反了。

程序是计数方式,每当P3.4收到一个脉冲,T0中的数值(初始值3CB0)就加一。
P1外接的共阳数码管,显示的数字也加一。
数码管的显示是:0~9。
T0的计数值是五万。不过到了五万,这程序,也没有干什么。
这程序,看来是编着玩的。
第2个回答  2012-05-29
程序中貌似有个死循环 ,好像跳不出去
LOOPY:CJNE A,30H,LOOPX

MOV 30H,TL0
SJMP LOOPY追问

,这只是个选择程序目的是跳到LOOPX,为什么 这么说呢,

追答

不好意思,说错了,没死循环。这步可以理解为扫描按键,每给P3.4一个脉冲,程序跳到LOOPX,
楼下Small_tiny 讲得挺细的,

第3个回答  2012-05-30
MOV TL0,#03CH
MOV TH0,#0B0H
这2行?这不是定时器0加载初值
第4个回答  2012-05-29
嗖嗖嗖
相似回答