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