CVAVR 软件中启动delay库,调用delay_ms()函数,自动带了喂狗程序.doc_第1页
CVAVR 软件中启动delay库,调用delay_ms()函数,自动带了喂狗程序.doc_第2页
CVAVR 软件中启动delay库,调用delay_ms()函数,自动带了喂狗程序.doc_第3页
CVAVR 软件中启动delay库,调用delay_ms()函数,自动带了喂狗程序.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CVAVR 软件中启动delay.h库,调用delay_ms()函数,自动带了喂狗程序近期在学习中发现个问题,CVAVR 中启动delay.h库,调用delay_ms()函数延时,系统怎么都不复位重启,即使打开看门狗熔丝位,看门狗也不会重启,找了很久原因,发现是调用调用系统自身带的delay_ms()函数引起的,换成自己的简单延时函数,问题就解决,看门狗可以正常工作,后面附带我自己写的简单延时函数。后来查找问题,发现系统中的delay_ms()函数自带了喂狗程序,所以不会自动的重启,请大家放心使用,用延时函数看门狗不溢出是正常的。后面附带软件编辑后生产的汇编程序,一看就知道确实带了喂狗。今天写出来供大家注意,不要犯我同样的问题。/*This program was produced by theCodeWizardAVR V1.25.9 StandardChip type : ATmega8LProgram type : ApplicationClock frequency : 1.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 256*/#include #include / Declare your global variables herevoid main(void)/ Declare your local variables here/ Input/Output Ports initialization/ Port B initialization/ Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In / State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;DDRB=0x00;/ Port C initialization/ Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In / State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;DDRC=0x00;/ Port D initialization/ Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In / State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;DDRD=0x00;/ Timer/Counter 0 initialization/ Clock source: System Clock/ Clock value: Timer 0 StoppedTCCR0=0x00;TCNT0=0x00;/ Timer/Counter 1 initialization/ Clock source: System Clock/ Clock value: Timer 1 Stopped/ Mode: Normal top=FFFFh/ OC1A output: Discon./ OC1B output: Discon./ Noise Canceler: Off/ Input Capture on Falling Edge/ Timer 1 Overflow Interrupt: Off/ Input Capture Interrupt: Off/ Compare A Match Interrupt: Off/ Compare B Match Interrupt: OffTCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;/ Timer/Counter 2 initialization/ Clock source: System Clock/ Clock value: Timer 2 Stopped/ Mode: Normal top=FFh/ OC2 output: DisconnectedASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;/ External Interrupt(s) initialization/ INT0: Off/ INT1: OffMCUCR=0x00;/ Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x00;/ Analog Comparator initialization/ Analog Comparator: Off/ Analog Comparator Input Capture by Timer/Counter 1: OffACSR=0x80;SFIOR=0x00;/ Watchdog Timer initialization/ Watchdog Timer Prescaler: OSC/2048k#pragma optsize- /#asm(cli) /关中断 /#asm(WDR) /看门狗计数器清零=喂狗 WDTCR=0x1F; /启动看门狗第一步 WDTCR=0x0F; /启动看门狗第二步 /#asm(sei) /打开中断#ifdef _OPTIMIZE_SIZE_#pragma optsize+#endifPORTB.1=0;DDRB.1=1; while (1) delay_ms(3000); /延时3秒,理论应该是会反复的重启,但是却没有重启。/Delay1000ms(); /换用自己的简单延时函数,看门狗问题解决/Delay1000ms();/Delay1000ms(); PORTB.1=1 ; #asm(WDR) /看门狗计数器清零=喂狗 在2.1秒溢出前必须清零 ;/之上是测试程序,下面是我写的一个简单的大约延时1秒函数,时间不精确,大家只可以借鉴一下。/大约延时1秒函数 void Delay1000ms()/1MHz大约1秒的延时程序unsigned char i, j, k;i = 4;j = 166;k = 210;dodowhile (-k); while (-j); while (-i);/下面是我打开汇编码,看到的结果; 31 while (1)_0x7:; 32 ; 33 ; 34 delay_ms(3000); /延时3秒,理论应该是会反复的重启,但是却没有重启。LDI R30,LOW(3000)LDI R31,HIGH(3000)ST -Y,R31ST -Y,R30RCALL _delay_ms;程序运行到这里执行了下面的_delay_ms程序,请继续往下看; 35 PORTB.1=1 ;SBI 0x18,1; 36 #asm(WDR) /看门狗计数器清零=喂狗 在2.1秒溢出前必须清零,这条是36行,执行的喂狗程序,下面的WDR就是喂狗WDR; 37 ;RJMP _0x7; 38 _0xC:RJMP _0xC_delay_ms:ld r30,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论