单片机pic16f877的TMR0如何初始化?如何用TMRO定时1秒?

麻烦写出程序,我学的是精简指令,比如MOVWF,MOVLW,CLRF……

/********************* 
Forum:http://bbs.cepark.com
Author:hnrain 
Date:2010-12-28 
Email:[email protected] 
*************************** 
TMR0用作定时器时,定时器时钟=系统时钟/4; 
写TMR0时,会产生2个周期的的延时,如果不使用前置分频器,可通过设置 
初值进行补偿。 
例如 需要定时200个时钟周期时,TMR0 = 256 -200 + 2= 58
OPTION_REG:
bit5 T0CS:TMR0 Clock Source Select bit
1 = Transition on T0CKI pin
0 = Internal instruction cycle clock(CLKO)
bit 4 T0SE:TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on T0CKI pin
0 = Increment on low-to-high transition on T0CKI pin
bit 3 PSA:Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit2-0 PS2:PS0:Prescaler Rate Select bits
给大家一个意见:如果想用TMR0实现精确的定时,一旦用了预分频器后就不要对TMR0做任何写操作。
注意:在中断服务程序中查询TMR0中断时,既要查询T0IE位,还要查询T0IF位。 
***********************/ 
#include <pic.h> 
#include "../head/config.h"
__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN); 
//HS振荡,禁止看门狗,低压编程关闭,启动延时定时器
uint16 count = 0; 
void main(void) 

PSA = 1;//prescaler is assigned to the WDT 
T0CS = 0;//Internal instruction cycle clock
TMR0 = 58;//timer 200 cycle clock
GIE = 1;//global interrupt enable 
T0IE = 1;//TMR0 interrupt enable
PORTD = 0x00; 
TRISD = 0x00;
while(1) 
{} 
}
void interrupt ISR(void) 

if(T0IE && T0IF) 

T0IF = 0; 
count++; 
if(count == 1000) 

count = 0; 
PORTD = ~PORTD; 

TMR0 = TMR0 + 58; 

}

追问

不是c语言写的,能换成精简指令来写吗

追答

这个比较难了, pic的汇编好像只有台湾人或是香港人的书, 去淘宝找找pic 汇编.

温馨提示:答案为网友推荐,仅供参考
相似回答