;试验环境:ATTiny2313,晶振8MHz,5V供电,PD5/PD6/PD1各接一个发光二极管限流电阻。PD低电平时灯亮 ;正常工作过程是初始化--设置WDT--PD5/PD6灯交替闪--PD1灯长亮。 ;把看门狗设置8S,并在写入熔丝图时DF,D9,FF 。 ;程序初始化后增加延时程序,用DF DB(与时间有关) FF 不能解决问题。 ;天冷时出现双闪+14度左右,用电吹风吹热芯片后,在开启电源工作正常。 ;与看门狗开启有关,天冷时,只要开启看门狗,就双闪不断,应该是连续的看门狗复位引起的 ;硬件开启看门狗编程WDTON=0,用 DF CB FF 双闪问题依旧出现
.include "tn2313def.inc"; .org $0000 ; rjmp START ; .def TEMP =r16 ; .def TEMP1 =r17 ;工况判断 .def temp2 =r18 .def temp3 =r19 .def temp6 =r20 .def JS1 =r22 ;1秒钟计算 .def JS2 =r23 ;1秒累计 .def JS3 =r24 ;排污1秒累计 .def BZ1 =r25 ;状态** .def BZ2 =r21 ;输出保护 ;............................................. .org $0006 ;2313的T0中断地址是$0006而8515的是$0007 rjmp T0INT .org $0030 ;-------------------------------------------------------------------- START: ;初始化程序 ldi TEMP,low(ramend); out spl,temp; ldi TEMP,$02; out TIMSK,TEMP; 开T0中断 ldi TEMP,$00;------------初始化看门狗并关闭2007.3.22 out MCUSR,TEMP; ldi TEMP,$1F; 使WDCE、WDE同时为一 out WDTCR,TEMP; ldi TEMP,$21; 写分频数同时关闭看门狗 8s out WDTCR,TEMP;---------------------------------- SEI ; RCALL wait_2;程序初始化后增加延时程序,用DF DB(与时间有关) FF 。不解决问题。 ;....... 开T0定时器 ldi TEMP,$05; out TCCR0,TEMP; $05 101: CK/1024 8000000/1024=7812.5 T=0.128ms ldi TEMP,$04; out TCNT0,TEMP; T0=252*0.128=32.256ms * 31=999.936ms LDI TEMP,$00 ;PORTB设定为输入 OUT DDRb,TEMP LDI TEMP,$FF ; OUT DDRd,TEMP ;PORTD设定为输出 OUT PORTD,TEMP ;输出高电平 clr JS1 ; clr JS2; ; LDI BZ1,$04 ;初始化;2003,5,25改为2塔先工作;BZ1《---04 LDI BZ2,255; ;--------自检程序 zjzj: RCALL ZJCX; 开机自检 ;------------------------------------------------------------------ CLI WDR; 先喂狗一次 in TEMP,MCUSR; 启动看门狗2007.3.22 andi TEMP,$F7; WDRF=0 out MCUSR,TEMP; in TEMP,WDTCR; ori TEMP,$18; 使WDCE、WDE同时为一 out WDTCR,TEMP; ori TEMP,$08; 启动看门狗。 此处用andi TEMP,$f7;关闭看门狗,双闪现象不出现。 out WDTCR,TEMP; ; WDR; 启动就喂狗 SEI ; in TEMP,MCUSR; ; andi TEMP,$F7; WDRF=0 ; out MCUSR,TEMP; ; WDR; 启动就喂狗 ;--------------------------------------------------------------------- MN00: cpi JS1,$1F ;0.128ms*252=32.256ms 31(1F)*32.256=999.936ms BRLO MN00; 小于1秒转移 ; 大于等于1秒 clr JS1; -------- 一秒到--------------------------- WDR; 一秒钟喂狗一次 ANDI BZ2,$0FD; 输出A工作 PD1灯亮 OUT PORTD,BZ2; rjmp MN00; ;******************************************************** ; T0中断服务子程序 T0INT: ldi TEMP6,$04; out TCNT0,TEMP6; inc JS1; 0.128ms*252=32.26ms RETI ;*****************开机自检************************************** ZJCX: ANDI BZ2,$9F; PD6,PD5灯亮 OUT PORTD,BZ2; cpi JS1,$A ; BRLO ZJCX; clr JS1; ZJ1: ORI BZ2,$60;; PD6,PD5灯灭 OUT PORTD,BZ2; cpi JS1,$8 ; BRLO ZJ1; clr JS1; ZJ2: ANDI BZ2,$bF; PD6灯亮 OUT PORTD,BZ2; cpi JS1,$A ; BRLO ZJ2; clr JS1; ZJ3: ORI BZ2,$60; PD6灯灭 OUT PORTD,BZ2; cpi JS1,$8 ; BRLO ZJ3; clr JS1; ZJ00: ANDI BZ2,$dF; PD5灯亮 OUT PORTD,BZ2; cpi JS1,$A ; BRLO ZJ00; clr JS1; ZJ11: ORI BZ2,$60;; PD5灭 OUT PORTD,BZ2; cpi JS1,$8 ; BRLO ZJ11; clr JS1; ZJ21: ANDI BZ2,$9F; PD6,PD5灯亮 OUT PORTD,BZ2; cpi JS1,$A ; BRLO ZJ21; clr JS1; ZJ31: ORI BZ2,$60; PD6,PD5灯灭 OUT PORTD,BZ2; clr JS1; RET
|