help:2407对称pwm波发的不正确

[复制链接]
2613|4
 楼主| snakeemail 发表于 2007-12-27 19:41 | 显示全部楼层 |阅读模式
 楼主| snakeemail 发表于 2007-12-29 14:02 | 显示全部楼层

程序代码如下

设置的是Time1加减计数,下溢中断时取反一个引脚观察,结果发现Time1的pwm的脉冲不是和等腰三角形对称的,偏到了一边.从示波器上可以看到,PWM的脉宽时间是对的,下溢中断取反的引脚周期时间也是对的,就是不对称<br />void&nbsp;Timer1_Initializing()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVAIMRA&nbsp;=&nbsp;EVAIMRA&nbsp;|&nbsp;0x0200;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;允许定时器1的下溢中断&nbsp;P265<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000,0010,0000,0000&nbsp;=0x0200<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000&nbsp;0~~~&nbsp;~~~~&nbsp;~~~~&nbsp;[reserved]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~0~~&nbsp;~~~~&nbsp;~~~~&nbsp;[T1OFINT&nbsp;ENABLE]&nbsp;上溢中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~1~&nbsp;~~~~&nbsp;~~~~&nbsp;[T1UFINT&nbsp;ENABLE]&nbsp;UnderFlow&nbsp;下溢中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~0&nbsp;~~~~&nbsp;~~~~&nbsp;[T1CINT&nbsp;ENABLE]&nbsp;定时器1比较<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;0~~~&nbsp;~~~~&nbsp;[T1PINT&nbsp;ENABLE]1:允许定时器1的周期中断&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~000&nbsp;~~~~&nbsp;[reserved]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;0~~~&nbsp;[CMP3INT&nbsp;ENABLE]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~0~~&nbsp;[CMP2INT&nbsp;ENABLE]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~0~&nbsp;[CMP1INT&nbsp;ENABLE]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~0&nbsp;[PDPINTA&nbsp;ENABLE]&nbsp;<br />*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVAIFRA&nbsp;=&nbsp;EVAIFRA&nbsp;&&nbsp;0x0200;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除定时器1周期中断标志&nbsp;P262<br />/*&nbsp;&nbsp;0000,0010,1000,0000&nbsp;=0x0080<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0000&nbsp;0~~~&nbsp;~~~~&nbsp;~~~~&nbsp;[reserved]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~0~~&nbsp;~~~~&nbsp;~~~~&nbsp;[T1OFINT&nbsp;FLAG]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~1~&nbsp;~~~~&nbsp;~~~~&nbsp;[T1UFINT&nbsp;FLAG]&nbsp;UnderFlow标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~0&nbsp;~~~~&nbsp;~~~~&nbsp;[T1CINT&nbsp;FLAG]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;1~~~&nbsp;~~~~&nbsp;[T1PINT&nbsp;FLAG]1:清除定时器1周期中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~000&nbsp;~~~~&nbsp;[reserved]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;0~~~&nbsp;[CMP3INT&nbsp;FLAG]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~0~~&nbsp;[CMP2INT&nbsp;FLAG]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~0~&nbsp;[CMP1INT&nbsp;FLAG]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~0&nbsp;[PDPINTA&nbsp;FLAG]&nbsp;<br />*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1CON=0x080E;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//P277&nbsp;&nbsp;Timer1为连续增/减计数模式,预分频值为1,使用内部时钟<br />/*&nbsp;&nbsp;0000,1000,0000,0010&nbsp;=0x170C<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;[Free,Soft]&nbsp;00:一旦仿真挂起后,定时器1立即停止<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~0~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;[reserved]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~0&nbsp;1~~~&nbsp;~~~~&nbsp;~~~~&nbsp;[TMODE1,TMODE0]&nbsp;01:连续增/减计数模式 10:&nbsp;连续增计数模式&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~000&nbsp;~~~~&nbsp;~~~~&nbsp;[TPS2-TPS0]&nbsp;111:预定标系数,&nbsp;x/128<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;0~~~&nbsp;~~~~&nbsp;[T2SWT1]&nbsp;0:定时器2使用自身的周期寄存器&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~0~~&nbsp;~~~~&nbsp;[TENABLE]&nbsp;0:&nbsp;定时器1不工作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~00&nbsp;~~~~&nbsp;[&nbsp;TCLKS1,&nbsp;TCLKS0]&nbsp;00:&nbsp;使用内部CPU时钟&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;11~~&nbsp;[TCLD1,&nbsp;TCLD0]&nbsp;00:&nbsp;当计数值为0,重装载,&nbsp;11:&nbsp;保留&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~1~&nbsp;[TECMPR]&nbsp;0:&nbsp;禁止定时器比较操作&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~0&nbsp;[SELT1PR]0:&nbsp;该位在定时器1中保留<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1PER&nbsp;=&nbsp;800;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;周期寄存器值设为&nbsp;800:32M,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1CNT=0x000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Timer1的计数器清零<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPTCONA&nbsp;=&nbsp;0x004A;<br />//&nbsp;&nbsp;0000&nbsp;0000&nbsp;0100&nbsp;1010<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;保留<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~0~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;定时器状态2<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~0~&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;定时器状态1<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~0&nbsp;0~~~&nbsp;~~~~&nbsp;~~~~&nbsp;保留<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~00~&nbsp;~~~~&nbsp;~~~~&nbsp;00:不启动AD<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~0&nbsp;0~~~&nbsp;~~~~&nbsp;00:不启动AD<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~1~~&nbsp;~~~~&nbsp;1:允许定时器的比较输出<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~00&nbsp;~~~~&nbsp;保留<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;10~~&nbsp;定时器2输出极性 10:高有效<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~&nbsp;~~~~&nbsp;~~~~&nbsp;~~10 定时器1输出极性 10:高有效<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T1CMP&nbsp;=&nbsp;64;<br />}<br /><br />void&nbsp;interrupt&nbsp;INT2()<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(PIVR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;由外设中断向量寄存器PIVR判断<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0029:&nbsp;//下溢中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVAIFRA&nbsp;=&nbsp;EVAIFRA&nbsp;&&nbsp;0x0200;//清中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PFDATDIR&nbsp;=&nbsp;PFDATDIR&nbsp;^&nbsp;0x0004;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取反一个引脚,便于观察,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />} <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/200712/2007122914043500.zip'>https://bbs.21ic.com/upfiles/img/200712/2007122914043500.zip</a>
 楼主| snakeemail 发表于 2007-12-30 21:12 | 显示全部楼层

俺在想,是否和仿真有关系

因为事件比较器是硬件比较的,而我中断里面取反引脚是外部ram仿真运行的
 楼主| snakeemail 发表于 2008-1-4 19:34 | 显示全部楼层

果然,烧到flash好多了,闻亭的仿真器有问题,下个星期继续

  
 楼主| snakeemail 发表于 2008-1-7 10:20 | 显示全部楼层

nnd

烧到flash里,现在倒是没有完全偏到一边了,但还是不和中心对称,还是延后了1us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

1909

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部