求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢

求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢,第1张

当然不一样了

1电平触发是在高或低电平保持的时间内触发,

2而边沿触发是由高到低或由低到高这一瞬间触发

3 边沿触发一般时间短,边沿触发一般时间都是us级的,响应要快的,而电平触发只须是高和低就可以了,没时间要求,比如10s 时间内总是低电平,那么它也是触发的,

比如中断计时或计数,最好用边沿触发,用电平触发误差会很大,电平触发一般用于简单报警,开关一类(时间要求不高的)

这里TF、TR、IE、IT后面跟的0和1是对单片机寄存器中位的命名,因为有两个定时/计数器、两个中断,所以用0、1来区分。

各位的定义如下:

TF1、TF0:分别是定时器1、定时器0的溢出标志位。当定时器x计满溢出时,由硬件使TFx位置“1”,并申请中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。

TR1、TR0:分别是定时器1、定时器0的运行控制位。由软件清“0”关闭定时器。当GATE=1,且INTx为高电平时,TR置“1”启动定时器;当GATE=0,TRx置“1”启动定时器。

IE1、IE0:分别为外部中断1、外部中断0的请求标志位。

IT1、IT0:分别为外部中断1、外部中断0的触发方式选择位。当ITx=0,为低电平触发方式;当ITx=1,为下降沿触发方式。

扩展资料:

TCON初始化:

1、确定工作方式(即对TMOD赋值);

2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);

3、根据需要开放定时器/计数器的中断(直接对IE位赋值);

4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。

参考资料来源:百度百科-TCON

#include<reg51h>

#define uchar unsigned char

uchar led=0xfe;

sbit kr=P3^2;

sbit kl=P3^3;

uchar key;

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i<120;i++);

}

void ext0() interrupt 0

{

key=1;

while(kr==0);

}

void ext1() interrupt 2

{

key=2;

while(kl==0);

}

main()

{

EX0=1;

EX1=1;

IT0=1;

IT1=1;

EA=1;

while(1)

    {

    if(key==1){P1=led;led=_cror_(led,1);}

    else if(key==2){P1=led;led=_crol_(led,1);}

    else P1=0xff;

    delay(200);

    }

}

INT0/1为1下降沿触发 为0电平触发 ,而下降沿触发IE0和IE1可以自动清零,而电平触发得人为把IE0和IE1清零,要不然会一直启动中断。IE0/1可以自动清零,所以一般用下降沿触发

下面是修改的代码。你注意注释部分:

ORG

0000H

JMP

START

ORG

13H

//这里要改,因为it0和it1的中断向量表地址不同,这个地方要

//看你的单片机类型,51的话,就不是13这数值,你看看你的

//it0的中断起始地址应该是什么,把13H改了。

JMP

INT_0

//改为INT_0

START:

MOV

IE,#10000100B

//IE也需要改,设置中断控制寄存器:

//改为MOV

IE,#01001000B

MOV

SP,#30H

SETB

IT1

//这里要改为SETB

IT0

MOV

A,#01010101B

LOOP:

MOV

P0,A

CALL

DELAY

CPL

A

JMP

LOOP

INT_0:

PUSH

PSW

PUSH

ACC

SETB

RS0

MOV

R0,#3

INT_LOOP:MOV

A,#0FEH

MOV

R1,#7

INT_LOOPL:MOV

P0,A

CALL

DELAY

RL

A

DJNZ

R1,INT_LOOPL

MOV

R1,#7

INT_LOOPR:MOV

P0,A

CALL

DELAY

RR

A

DJNZ

R1,INT_LOOPR

DJNZ

R0,INT_LOOP

POP

ACC

POP

PSW

RETI

DELAY:

MOV

R7,#200

D1:

MOV

R6,#250

DJNZ

R6,$

DJNZ

R7,D1

RET

END

需要改的就这几个地方,希望你看看。因为你没有具体的限制是什么类型的单片机,这样的话,指令和中断地址就不能非常具体的给你改。你结合我的提示,改改吧。

以上就是关于单片机中IT0=1与IT0=0有什么区别全部的内容,包括:单片机中IT0=1与IT0=0有什么区别、单片机 TCON 每一位:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 表示什么意思0或1代表什么谢谢,百度百科都没、求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/8804088.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存