求助stc15系列定时器中断问题

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-11
STC单片机定时器中断问题

#include
unsigned char i;
main()
{
P2=0xff;
TMOD=0X01;//一般用方式1
EA=1;
ET0=1;
//IE=0xff;//多余
TH0=0;
TL0=0;
TR0=1;
while(1);
}
void time0() interrupt 1 //定时器0
{
TH0=0;
TL0=0;//重新装初值
P2--;
}
以上程序中断会每隔65536us(如果你眼睛够快的话,但是以这个速度人眼应该感觉不到,你可以每隔20次中断再让P2自减一次,这样效果更好)发生一次,但是由于P2--;自减8次之后就会变成0x00,所以之后就看不到任何现象,如果在P2之后添上如下语句就会一直看到所对应的现象(比如流水灯):
i++;
if(i==8)
{
i=0;
P2=0xff;
}
玩单片机一定要多练,希望对你有帮助,再不懂就给我留言,祝你成功

15L104W的定时器2跟89系列的有点不一样,仅仅支持16位自动重装。STC官网有用库函数写的例程。
http://www.stcmcu.com/STC-LIB/ST ... 95%E7%89%88V1.0.rar

P2.7=红外线人体感应器biss0001
P2.0~P2.4BY-8001语音模块
ORG 00000H
AJMP START
ORG 000BH
AJMP TIME0
ORG 30H
AUXR DATA 8EH
P0M1 EQU 093H
P0M0 EQU 094H
P4 EQU 0C0H
P4M1 EQU 0B3H
P4M0 EQU 0B4H
P5 EQU 0C8H
P5M1 EQU 0C9H
P5M0 EQU 0CAH
T0MS EQU 30H ;毫秒计数器0
T1MS EQU 31H ;毫秒计数器1
TMI EQU 32H ;分秒计数器
MAT EQU 4FH ;总任务限时
TCST BIT 05H ;探测状态标志
START:
MOV AUXR,#7FH
MOV SP,#80H
MOV TMOD,#0F0H ;设置定时计数器为工作模式0,可重载16位计数器
MOV TH0, #3CH
MOV TL0,#0B0H ;定时器0 预置15536,一个计数周期50000uS=50mS.
CLR TF0
SETB EA ;中断总开关
SETB ET0 ;定时器0中断开关
SETB TR0 ;定时器0开始计时
MOV T0MS,#00H
MOV T1MS,#00H
MOV TMI,#0
MOV 41H,#00H
MOV R2,#00H ;
MOV R3,#00H ;分计数器R3
MOV R4,#00H ;秒计数器R4
MOV R5,#00H ;秒计数器R5
MOV R6,#00H ;秒计数器R6
MOV R7,#00H ;SecondNum3
JNB P3.4,STRSP ;push strat
AJMP START
STRSP:

LP2:JNB P2.7,OC
CJNE R4,#10,LP2 ;如果持续10秒没有0信号代表没有人
CLR TCST ;设置探测标志位0代表没人
SETB P2.2 ;播放语言来监视端口读取及计时器运行状态
MOV R4,#0
MOV R6,#0
LP:CJNE R6,#1,LP
CLR P2.2
AJMP LOP
OC: ;如果10秒内有0输入代表有人
SETB TCST ;设置探测标志为1代表有人
SETB P2.0 ;播放语言来监视端口读取及计时器运行状态
MOV R6,#0
LP1:CJNE R6,#1,LP1
CLR P2.0
LOP:
MOV R6,#0
LP3:CJNE R6,#1,LP3
NOP
AJMP STRSP
AJMP START

;*****************************************************************************************************
;************************定时中断程序*********************************************************
TIME0: ;
PUSH ACC
PUSH PSW
INC T0MS ;毫秒计数器0+1
INC T1MS ;毫秒计数器1+1
MOV A,T0MS ;
CJNE A,#20,SCD1 ;20*50ms=1S 整秒检测,不到1s回到主程序
MOV A,TMI
INC A
MOV TMI,A ;分秒计数器+1
INC R4 ;秒计数器R3+1
INC R5 ;秒计数器R5+1
INC R6 ;秒计数器R6+1
MOV T0MS,#0 ;毫秒计数器0清零
CJNE A,#60,SCD4 ;60秒=1分钟检测
INC R3 ;分计数器+1
SCD4:CJNE R4,#200,SCD3
MOV R4,#0 ;秒计数器R4清零
SCD3:CJNE R5,#200,SCD2
MOV R5,#0 ;秒计数器R5清零
SCD2:CJNE R6,#200,SCD1
MOV R6,#0 ;秒计数器R6清零
SCD1:
MOV A,T1MS
CJNE A,#255,NEX
MOV T1MS,#0
NEX:
MOV TH0, #3CH
MOV TL0,#0AFH ;定时器0 预置15535,一个计数周期50000uS=50mS.
POP PSW
POP ACC
RETI
END

  • stc15同时使用定时器0和定时器2,定时器2进不了中断程序
    答:2、配置定时器参数和中断使能:在使用两个定时器的场景下,需要仔细检查定时器计数器、重载值、工作模式和中断使能等参数设置,确保两个定时器之间的计数互不干扰,并且满足用户自定义的功能需求。
  • 单片机STC15定时器(1)中断,数码管自动加1的电子钟,为什么不自动加1...
    答:单片机STC15定时器1显示的电子钟,这程序问题太多了,虽然能生成HEX文件,可那HEX代码有错误,电子钟当然不会自动加1计时了。主程序格式就不对,应该是下图这样。那中断程序应该有interrupt 1,才可以中断后执行中断程序。而你这样是不会执行中断程序的。中断程序中的变量是全局变量,红框内的变量应在...
  • 求助stc15系列定时器中断问题
    答:MOV TL0,#0B0H ;定时器0 预置15536,一个计数周期50000uS=50mS.CLR TF0 SETB EA ;中断总开关 SETB ET0 ;定时器0中断开关 SETB TR0 ;定时器0开始计时 MOV T0MS,#00H MOV T1MS,#00H MOV TMI,#0 MOV 41H,#00H MOV ...
  • STC15F104W的单片机为啥用定时器0中断时EEPROM就不能读出数据了_百度知 ...
    答:应该是中断导致读取时序被打断,建议在读取之前将中断禁止,读取结束后再打开
  • STC15W404AS和STC89C52RC的定时器配置和中断函数有什么不同,要改哪些...
    答:STC15W404AS虽然是1T的单片机,但定时器T0与STC89是兼容的,对定时器没影响。但不能用T1定时,因STC15W404AS没有T1定时器,见下表。另外,你原电路如果用到P0也不行了的,因STC15W404AS没有P0口了,电路要改,程序也要改。如下图的封装图。
  • stc15l104的定时器2有中断溢出标志吗
    答:有。根据查询CSDN博客官网显示,stc15l104单片机定时器x中有断溢出标志位,响应中断后由硬件清零,也可读取该位清零。
  • STC单片机定时器中断问题
    答:void time0() interrupt 1 //定时器0 { TH0=0;TL0=0;//重新装初值 P2--;} 以上程序中断会每隔65536us(如果你眼睛够快的话,但是以这个速度人眼应该感觉不到,你可以每隔20次中断再让P2自减一次,这样效果更好)发生一次,但是由于P2--;自减8次之后就会变成0x00,所以之后就看不到任何现象,...
  • stc15f2k60s2有多少个定时器和中断
    答:stc15f2k60s2单片机共有3个定时器,为T0,T1,T2,共有14个中断源。比传统的51单片机多了一个定时器T2,中断源多了9个。见下表,画箭头的一列。
  • STC15F104W的单片机为啥用定时器0中断时EEPROM就不能读出数据了?_百度...
    答:感觉如果在读EEPROM之前加一句TR0=0;应该是可以关闭T0的,多试试。
  • STC单片机的定时器下降沿中断是什么?
    答:就是下降沿触发的对应定时器中断啊