完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用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 |
|
相关推荐
2个回答
|
|
好像很有问题呢。当定时器0工作在方式三,就成了TL0和TH0为两个独立的的8位寄存器,其中以TL0为寄存器的定时器使用原来Timer0中TMOD和TCON的控制位,即GATE0、TF0、TR0;以TH0为寄存器的定时器使用原来Timer1中TMOD和TCON的控制位,即GATE1、TF1、TR1。
定时器1在工作方式三中停止计数,不能使用了。但你这里居然还在用…… 单是这里出问题了,其他的不再看下去了,你先改过这里先把。 |
|
|
|
我已经找到了答案,答案也是说不准确的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11988 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 14:06 , Processed in 0.553063 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号