单片机实验报告
实验名称:
姓 名: 学 号: 班 级: 时 间:
定时器及外部中断实验
高知明 110404320 通信3班 2014.5
南京理工大学紫金学院电光系
一、 实验目的
1、理解定时/计数器的工作原理; 2、掌握外部中断的基本处理方法; 3、学习中断处理程序的编程方法;
二、 实验原理
1、P1口为计数值输出口,利用定时器实现1秒定时,计数初值为0,每隔1秒加1;另外,外部中断0引脚外接键盘BUTTON,按键使得显示数值加1。电路原理图如图:
2、系统板上硬件连线
把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。 把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上。 3、程序设计流程
开始 定时器赋初值 变量初始化 i-- TMOD初始化 i=0? 定时器赋初值 N Y 设置外部中断模式 a++ 出中断 开中断 (b)定时器中断流程图
P2口显示输出值 (a)主流程图
三、 实验内容
1、代码:
#include
#define uchar unsigned char
sbit p32=P3^2; sbit p33=P3^3; uchar num,a; uchar b; void main() {
a++ (c)外部中断流程
TMOD=0x01;
TH0=(65536-46082)/256; TL0=(65536-46082)%6; EA=1; ET0=1; TR0=1; TF0=0; EX0=1; IT0=0; EX1=1; IT1=0; P1=0xff; a=0; while(1) {
b=a+(a/10*6); P1=b; if(b==160) {
a=0; } } }
void T0_time()interrupt 1 {
TH0=(65536-46082)/256; TL0=(65536-46082)%6; num++; if(num==20) {
num=0; a++; } }
void X0()interrupt 0 { a++;
while(!p32); }
void X1()interrupt 2 { a=0;
while(!p33); }
2、电路图:
四、小结与体会
通过此次实验,我更深地理解了定时/计数器的工作原理,掌握了外部中断的基本处理方法以及在学习中断处理程序的编程方法