本帖最后由 smallred007 于 2012-3-29 22:45 编辑
#include<p18cxxx.h>
/************给程序写配置字*****************/
/*******************************************/
#pragma config OSC=HS,OSCS=ON//设置晶振为高速模式12MHZ,禁用晶体振荡器
#pragma config BORV=45,PWRT=ON,BOR=ON//掉电复位电压设为4.5V,启用上电定时器,
#pragma config WDT=OFF//关闭看门狗
#pragma config DEBUG=OFF,LVP=OFF,STVR=OFF//关背景调试,禁用栈溢出复位,禁用低电压
/**********写main主程序***********************/
/*********************************************/
#define mybit PORTDbits.RD4
void msdelay(void);
void main(void)
{
TRISDbits.TRISD4=0;
mybit=0;
while(1)
{
mybit=mybit^1;
msdelay();
}
}
/*晶振选择12MHZ,选择预分频为64:1*/
void msdelay(void)
{
T0CON=0x85;
TMR0H=0xA4;
TMR0L=0x72;
T0CONbits.TMR0ON=1;
while(INTCONbits.TMR0IF==0);
T0CONbits.TMR0ON=0;
INTCONbits.TMR0IF=0;
}
我想用定时器0产生0.5s的定时,使用12M的晶振,采用1:64预分频。
程序编写软件用PICC-MCC18编译。
程序可以顺利通过,为什么运行后发现这二极管灯闪的很快呢?
但我用MPLAB自带的SIM模拟,发现程序msdelay()确实是延时了0.5s的时间。
有高手能指点一二吗? |