实验二:外部中断与定时器/计数器中断实验

//若系统时钟频率为60MHZ,编写软件实现:按一下按键,产生一次外部中断0中断信号,启动T1计时,使P1.0输出周期为1ms的方波。

1、汇编查询
       ORG 0000H           //汇编查询
       LJMP MAIN
MAIN:  MOV  SP,   #60H
       MOV  TMOD, #20H      //工作方式选择为
       MOV  TL1,  #06H     //设置定时器1初值
       MOV  TH1,  #06H
       CLR  TR1
       SETB ET1             //中断初始化
       SETB EX0
       CLR  IT0
       SETB EA
EXINT0:JB P3.2, EXINT0        
       SETB TR1
TIMER1:JNB TF1,TIMER1
       CLR TF1
       CPL P1.0
       SJMP TIMER1
       END
2、汇编终端
      ORG 0000H          //汇编中断方式
      LJMP MAIN
      ORG 0003H
      SETB TR1
      RETI
      ORG 001BH
      CPL P1.0
      RETI
 MAIN:MOV  SP,   #60H        
      MOV  TMOD, #20H         //选择工作方式
      MOV  TL1,  #06H         //设置定时器1初值
      MOV  TH1,  #06H
      CLR  TR1                //中断初始化
      SETB ET1
      SETB EX0
      SETB IT0
      SETB EA
HERE: AJMP HERE
      END

      ORG 0000H      //汇编中断方式
      LJMP MAIN
      ORG 0003H
      LJMP EX0INT 
      ORG 001BH
      LJMP T1INT
 MAIN:MOV  SP,   #60H        
      MOV  TMOD, #20H//选择工作方式
      MOV  TL1,  #06H//设置定时器1初值
      MOV  TH1,  #06H
      CLR  TR1       //中断初始化
      SETB ET1          
      SETB EX0
      SETB IT0
      SETB EA
EX0IN:SETB TR1   //开启定时器
      RETI       //中断返回
T1INT:CPL P1.0   //P1.0取反
      RETI
      END
3、C51查询
#include <reg52.h>       //中断查询
sbit P10 = P1^0;
sbit P32 = P3^2;
void main()
{   
    SP=0x60;         
    TMOD = 0x20;         //选择工作模式2
    TH1 = 0x06;          //设置T1定时器初值
    TL1 = 0x06;          
    TR1 = 0;            //  初始化
    ET1 = 1;            //定时器溢出允许控制位
    IT0 = 1;             //中断触发控制方式
    EX0 = 1;            //外部中断0允许控制位
    EA = 1;              //开总中断
    while(!IE0);        //循环查询
    TR1 = 1;            //启动T1
    while(1)        
    {
        if(TF1)
        {
            P10 = !P10;    //当TF1=1时,P1.0求反
            TF1 = 0;     //TF1定时器溢出中断请求标志位清零              
        }   
    }
}
4、C51中断
#include <reg52.h>           //C中断方式
sbit P10 = P1^0;
void main()
{    SP=0x60;        
    TMOD = 0x20;         //选择工作模式2
    TH1 = 0x06;          //设置T1定时器初值
    TL1=0x06;
    TR1 = 0;              // 初始化 
    ET1 = 1;              //定时器溢出允许控制位
    EX0 = 1;             //外部中断0允许控制位
    IT0 = 1;            //中断触发控制方式,下降沿触发
    EA = 1;              //开总中断
    while(1);           
}
void exint0() interrupt 0     //外部中断0
{   TR1 = 1;             //开定时器
}
void timer1() interrupt 3    //定时器中断   
{
    P10 = !P10;         }
  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值