汇编p1口输出双窄脉冲的程序哪里错
时间:10-02
整理:3721RD
点击:
ORG 0000H ;程序入口
MOV B,#05H ;设置循环次数为5次
MOV DPTR,#TAB ;将表首地址送入DPTR中
RESET: AJMP MAIN ;转入主程序
ORG 000BH ;T0中断入口
AJMP IT0P0 ;转T0中断处理程序
ORG 001BH ;T1中断入口
AJMP IT0P1 ;转T1中断处理程序
ORG 0100H ;主程序入口
MAIN: MOV SP,#60H ;设置堆栈指针
MOV TMOD ,#01H ;设置T0为方式1定时
MOV TMOD ,#10H ;设置T1为方式1定时
ACALL PT0M0 ;调用初始化子程序PT0M0
HERE: AJMP HERE ;原地循环等待中断,模拟一段主程序
PT0M0: MOV P1,#00H ;P1口输出低电平
MOV TL0,#7DH ;T0初始化子程序,装入计数初值的低8位
MOV TH0,#0F9H ;装入计数初值的高8位
SETB ET0 ;允许T0中断
SETB EA ;总中断允许
SETB TR0 ;启动T0
RET
IT0P0: MOV A,#00H ;将A寄存器清零
MOVC A,@A+DPTR ;查表结果送入A
MOV P1,A ;将A中的数据传送到P1
MOV TL1,#7DH ;T1初始化子程序,装入计数初值的低8位
MOV TH1,#0F9H ;装入计数初值的高8位
SETB ET1 ;允许T1中断
SETB EA ;允许总中断
SETB TR1 ;启动T1
RET
IT0P1: INC DPTR
DJNZ B,PT0M0 ;B减1不为0则跳转到PT0M0
TAB: DB 21H,03H,06H,0CH,18H,30H
END
MOV B,#05H ;设置循环次数为5次
MOV DPTR,#TAB ;将表首地址送入DPTR中
RESET: AJMP MAIN ;转入主程序
ORG 000BH ;T0中断入口
AJMP IT0P0 ;转T0中断处理程序
ORG 001BH ;T1中断入口
AJMP IT0P1 ;转T1中断处理程序
ORG 0100H ;主程序入口
MAIN: MOV SP,#60H ;设置堆栈指针
MOV TMOD ,#01H ;设置T0为方式1定时
MOV TMOD ,#10H ;设置T1为方式1定时
ACALL PT0M0 ;调用初始化子程序PT0M0
HERE: AJMP HERE ;原地循环等待中断,模拟一段主程序
PT0M0: MOV P1,#00H ;P1口输出低电平
MOV TL0,#7DH ;T0初始化子程序,装入计数初值的低8位
MOV TH0,#0F9H ;装入计数初值的高8位
SETB ET0 ;允许T0中断
SETB EA ;总中断允许
SETB TR0 ;启动T0
RET
IT0P0: MOV A,#00H ;将A寄存器清零
MOVC A,@A+DPTR ;查表结果送入A
MOV P1,A ;将A中的数据传送到P1
MOV TL1,#7DH ;T1初始化子程序,装入计数初值的低8位
MOV TH1,#0F9H ;装入计数初值的高8位
SETB ET1 ;允许T1中断
SETB EA ;允许总中断
SETB TR1 ;启动T1
RET
IT0P1: INC DPTR
DJNZ B,PT0M0 ;B减1不为0则跳转到PT0M0
TAB: DB 21H,03H,06H,0CH,18H,30H
END
主函数中给TMOD赋值语句是不是有问题啊。第二次赋值是不是把第一次的赋值给覆盖了啊。