微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机,请高手指点好的算法,题目如下

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

时间:10-02 整理:3721RD 点击:
使用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

好像很有问题呢。当定时器0工作在方式三,就成了TL0和TH0为两个独立的的8位寄存器,其中以TL0为寄存器的定时器使用原来Timer0中TMOD和TCON的控制位,即GATE0、TF0、TR0;以TH0为寄存器的定时器使用原来Timer1中TMOD和TCON的控制位,即GATE1、TF1、TR1。
定时器1在工作方式三中停止计数,不能使用了。但你这里居然还在用……
单是这里出问题了,其他的不再看下去了,你先改过这里先把。

我已经找到了答案,答案也是说不准确的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top