微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机中断小实验

单片机中断小实验

时间:11-23 来源:互联网 点击:
这两天一直搞不明白中断和定时,听说这东西可以提高CPU的效率,我想应该是很重要的编程方法,所以就在书上找了一个小程序,想从实验中发现点什么。

要求是利用定时器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统的时钟频率为12MHz。

先说程序,如下

ORG0000H
LJMPMAIN ;跳转到主程序
ORG000BH ;T0的终端入口地址
LJMPDVT0 ;转向中断服务程序
ORG0100H
MAIN: MOVTMOD,#01H ;置T0工作于方式1
MOV TH0,#0D8H
MOV TL0,#0F0H ;装入计数初值
SETBET0;T0开中断
SETB EA ;CPU开中断
SETB TR0 ;启动T0
SJMP $ ;等待中断
DVT0: CPL P1.0 ;P1.0取反输出
MOV TH0,#0D8H
MOV TL0,#0F0H ;重新装入初值
RETI ;中断返回
END

上面的程序采用的是中断的方式产生中断的,计数器每次加1需要花一定的时间,定时器定时就是靠这个时间的积累得到的,89C51有四个寄存器单元TH0,TL0,TH1,TL1是存放计数值的,每个寄存器8位,还有一个寄存器TMOD可以设置工作模式,每种模式计数地范围不一样,所具有的功能也不一样,这个问题以后有空再说一下。

定时器的控制是通过设置相关的寄存器得到的,主要有两个TCON 和TMOD

TCON是控制寄存器,里面有好多中断标志位,通过对它的设置可以控制单片机的中断,单片机通过它可以知道系统是不是有中断产生

TMOD是工作模式寄存器,它可以控制单片机的工作方式,通过它可以控制单片机的触发方式以及C/T的切换

因为本文的思想是采用中断控制的方式,所以还需要对中断控制位IE进行设置

在此再介绍一下KEIL软件和PROTEUS软件的联调

先看一下keil软件


这个软件是免费的,用起来非常方便,可以支持C语言编程和汇编编程,我们选择的是汇编编程,在编译前要建好工程

编译的时候,要注意,本软件最终要生成hex类型的文件以支持仿真,所以要点击一下target左边的按钮,如下图


打开之后,就是下面的界面,选择output选项卡,在creat hex file前面打钩


如果程序没有错误,就在工程那个文件夹下面生成了hex文件,好了,程序工作完成了

下面进入单片机硬件电路的设计(实际中应该是先硬件后软件,本文忘考虑这点了)

这是在proteus环境下的电路图,这是一款非常不错的仿真软件(注意要设置一下晶振的振荡频率为12MHz)


我的电路是要在P1.0口输出脉冲信号,下面是仿真


效果非常不错,小有成就感啊

通过此次设计,可以发现,单片机的中断是在单片机计数满之后产生的,那么计数器在这个过程就是一个准确的计时功能,产生中断,就要进入中断服务程序,这个程序是由我们自己编写的,为了脉冲可持续输出,需要在这个程序中为计数器赋初值,并且取反P1.0,好了,休息一下


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top