51单片机,请高手指点好的算法,题目如下

2019-07-16 03:30发布

使用12M晶振,使T0工作在方式3,从P1.0输出周期为200us占空比为50%的方波,从P1.1输出周期为100us占空比为50%的方波,T1工作在方式2,从P1.2输出周期为80us占空比为50%的方波,(T1没有中断申请标志位,使用读取计数数据的方法进行判断)。请用汇编写出程序。
      由于我刚学单片机,还不会C语言,请用汇编指点。下边是我写的程序,输出频率误差好大啊,请指点一下该怎么写,谢谢。

ORG 0H
AJMP START
ORG 000BH
LJMP SUB_P10
ORG 0001BH
AJMP SUB_P11
ORG 0100H
START:
MOV TMOD,#13H;设置T0方式3,T1工作方式2,都为软件启动
MOV TL0,#9CH ;给定时器TL0赋初值,使定时100US
MOV TH0,#0CEH ;给定时器TH0赋初值,使定时50US
MOV TL1,#0H  ;给定时器T1赋初值,使定时40US
MOV TH1,#00H ;给定时器T1赋预装值
ANL P1,#0F8H ;P1低三位清零
SETB ET0     ;开T0中断使能位
SETB ET1     ;开T1中断使能位
SETB EA      ;
ORL TCON,#50H;开始计数
LOOP: CLR C   ;
   MOV A,#28H  ;设比较大小基数
MOV R0,TL1    ;T1计数值读入A
SUBB A,R0    ;比较计数是否到
JC SUB_P12 ;C为1,则定时到时,转移
WAIT:NOP          ;等待中断
;NOP
SJMP LOOP    ;无中断则转移,
ORG 0150H
SUB_P12:CPL P1.2     ;处理P1.2
LJMP WAIT        ;
SUB_P11:MOV TH0,#0CEH ;给定时器TH0赋初值
CPL P1.1         ;
REti
SUB_P10:MOV TL0,#9CH ;给定时器TL0赋初值
CPL P1.0         ;
RETI
END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。