单片机程序解释请逐行解释下这2个程序.CNTA EQU 30H COUNT EQU 31HORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H START:MOV CNTA,#00H MOV COUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-1000) / 256 MOV TL0,#(65536-1000) MOD 256 SETB TR0 SETB ET0 SE
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/18 21:38:35
单片机程序解释请逐行解释下这2个程序.CNTA EQU 30H COUNT EQU 31HORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H START:MOV CNTA,#00H MOV COUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-1000) / 256 MOV TL0,#(65536-1000) MOD 256 SETB TR0 SETB ET0 SE
单片机程序解释
请逐行解释下这2个程序.
CNTA EQU 30H
COUNT EQU 31H
ORG 00H
LJMP START
ORG 0BH
LJMP T0X
ORG 30H
START:MOV CNTA,#00H
MOV COUNT,#00H
MOV TMOD,#01H
MOV TH0,#(65536-1000) / 256
MOV TL0,#(65536-1000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT:JB P2.0,WT
MOV R6,#5
MOV R7,#248
D1:DJNZ R7,$
DJNZ R6,D1
JB P2.0,WT
INC COUNT
MOV A,COUNT
CJNE A,#03H,NEXT
MOV COUNT,#00H
NEXT:JNB P2.0,$
SJMP WT
T0X:NOP
MOV TH0,#(65536-1000) / 256
MOV TL0,#(65536-1000) MOD 256
MOV DPTR,#TAB
MOV A,CNTA
MOVC A,@A+DPTR
MOV P3,A
MOV DPTR,#GRAPH
MOV A,COUNT
MOV B,#8
MUL AB
ADD A,CNTA
MOVC A,@A+DPTR
MOV P1,A
INC CNTA
MOV A,CNTA
CJNE A,#8,NEX
MOV CNTA,#00H
NEX:RETI
TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
GRAPH:DB 12H,14H,3CH,48H,3CH,14H,12H,00H
DB 00H,00H,38H,44H,44H,44H,38H,00H
DB 30H,48H,44H,22H,44H,48H,30H,00H
END
单片机程序解释请逐行解释下这2个程序.CNTA EQU 30H COUNT EQU 31HORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H START:MOV CNTA,#00H MOV COUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-1000) / 256 MOV TL0,#(65536-1000) MOD 256 SETB TR0 SETB ET0 SE
CNTA EQU 30H ;定义CNTA为寄存器30H
COUNT EQU 31H ;定义COUNT为寄存器31H
ORG 00H ;程序开始
LJMP START ;开始程序入口
ORG 0BH ;定时器T0中断程序入口地址,不过最好用ORG 000BH
LJMP T0X ;T0中断程序入口
ORG 0030H ;主程序开始地址,初始化开始
START:MOV CNTA,#00H ;
MOV COUNT,#00H
MOV TMOD,#01H ;定时器T0工作方式1
MOV TH0,#(65536-1000) / 256 ;这是C的方式,不知道汇编支持不支持?
MOV TL0,#(65536-1000) MOD 256
SETB TR0 ;T0计时开始
SETB ET0 ;开T0中断
SETB EA ;开总中断(你这边最好按 SETB EA
SETB ET0
SETB TR0的顺序)
WT:JB P2.0,WT ;判断P2.0,如果是高,等待.
MOV R6,#5 ;如果P2.0为低,延时开始
MOV R7,#248 ;这个延时是为了消抖
D1:DJNZ R7,$ ;以防误判
DJNZ R6,D1
JB P2.0,WT ;延时结束,继续判断P2.0的状态,如果不为低,继续等待
INC COUNT ;如果为低,COUNT加1
MOV A,COUNT ;判断COUNT的数值
CJNE A,#03H,NEXT ;如果COUNT不等于3,转到 NEXT执行
MOV COUNT,#00H ;如果是3,清COUNT为0
NEXT:JNB P2.0,$ ;等待P2.0为高
SJMP WT ;如果P2.0释放,循环
T0X:NOP ;T0中断服务程序
MOV TH0,#(65536-1000) / 256 ;重装初值
MOV TL0,#(65536-1000) MOD 256
MOV DPTR,#TAB ;把表的基址赋予DPTR
MOV A,CNTA ;把变址给A
MOVC A,@A+DPTR ;查表
MOV P3,A ;把查出的表值给P3口
MOV DPTR,#GRAPH ;把GRAPH赋予DPTR
MOV A,COUNT ;把COUNT值给A
MOV B,#8 ;
MUL AB ;AB相乘,值放A里
ADD A,CNTA ;A加CNTA的值放A里做变址
MOVC A,@A+DPTR ;查表
MOV P1,A ;查表值给P1口
INC CNTA ;连续查
MOV A,CNTA
CJNE A,#8,NEX ;不到8次,中断返回,下次接着上个地址查表
MOV CNTA,#00H ;8次到了,从头开始
NEX:RETI ;中断返回指令
TAB:DB ;表0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
GRAPH:DB 12H,14H,3CH,48H,3CH,14H,12H,00H
DB 00H,00H,38H,44H,44H,44H,38H,00H
DB 30H,48H,44H,22H,44H,48H,30H,00H
END