使用QY4时,采用了内部振荡器。做定时功能的时候发现误差很大,超过了20%。各位大侠帮我看看我哪个地方没有设置好。今天才用Freescale的单片机。相关程序如下:<br />#include <hidef.h> /* for EnableInterrupts macro */<br />#include "derivative.h" /* include peripheral declarations */<br /><br />typedef unsigned char UINT8;<br />typedef int INT16;<br />typedef unsigned int UINT16;<br />typedef unsigned long UINT32;<br />typedef long INT32;<br /><br /><br />void Init_Device(void)<br />{<br /> /* init the mcu register*/<br /> DisableInterrupts;<br /> CONFIG1 = 0x01; <br /> CONFIG2 = 0x00; <br /> OSCTRIM = *(unsigned char*far)0xFFC0; /* Initialize OSCTRIM register from a non volatile memory */<br /> DDRB = 0x3F; /*portb 0 to 5 as 2s,15m,1h,2h,3h,5h*/ <br /> DDRA = 0x10; /*porta4 as LED output*/<br /> TSC = 0x30; /* Stop and reset counter */<br /> TMOD = 0x2710; /* Period value setting */<br /> TSC = 0x45; /* Int. flag clearing (2nd part) and timer contr. register setting */<br /> PTA = 0x00;<br /> PTB = 0x00;<br /> EnableInterrupts; /* Enable interrupts */<br />}<br />void main(void) <br />{<br /> Init_Device();<br /> EnableInterrupts; /* enable interrupts */<br /> /* include your code here */<br /> for(;;) <br /> {<br /> __RESET_WATCHDOG(); /* feeds the dog */<br /> } /* loop forever */<br /> /* please make sure that you never leave main */<br />} |
|