文档介绍:单片机中断实验总结单片机实验报告单片机 io 口中断实验单片机实验心得体会单片机中断优先级篇一:单片机中断实验报告实验三定时器中断实验一、实验目的 1 、掌握 51 单片机定时器基本知识; 2 、掌握定时器的基本编程方法; 3 、学会使用定时器中断。二、实验内容 1、利用定时器设计一个秒表, 计数范围为 0— 59, 并在数码管实时显示。三、实验设备 PC 机一台、单片机实验箱主要器件: AT89C52 、 7SEG-BCD 、四、实验步骤 1 、使用 Proteus 设计仿真原理图; 2 、使用 Keil 设计程序; 3 、联合调试仿真。五、实验流程图六、实验程序与结果#include<> #define uint unsigned int #define uchar unsigned char sbit F=P2 ; void timer1_init() { TMOD=0x10;// 将定时器 1 设置为工作方式 1 TH1=(65536-6000)/256;// 定时器每加一时间为 1/fsoc , 定时时间 为 1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000 , 所以装入 16 位定时器中值为 65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3{ TH1=(65536-6000)/256;// 每次进入中断, 重装初值 TL1=(65536-6000)%256; F=~F;// 每次进入中断 口取反} #include<> #define uint unsigned int #define uchar unsigned char sbit F=P2 ; void timer0_init() {TMOD=0x01;// 将定时器 0 设置为工作方式 1 TH0=(65536-83)/256;// 定时器每加一时间为 1/fsoc , 定时时间为 2Khz, 既 500us //500us/6us= TL0=(65536-83)%256;//fsoc=6000000 , 所以装入 16 位定时器中值为 65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1{ TH0=(65536-83)/256;// 每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;// 每次进入中断 口取反,表示定时时间到} #include<> //包含51 单片机寄存器定义的头文件#define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2 将 D1 位定义为 引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0; /*************************************************** *********** 函数功能:主函数*************************************************** ***********/ void main(void) { uint time,time1,temp1,temp2,temp3; seg_data=0; seg_data2=0; TMOD=0x11; // 使用定时器 T0 的模式 2 TH0=0xFC; // 定时器 T0 的高 8 位赋初值 1000-500 TL0=0x18; // 定时器 T0 的低 8 位赋初值 TH1=(65536-50000)/256; // 定时器 T1 的高 8 位赋初值 TL1=(65536-50000)%256; // 定时器 T1 的低 8 位赋初值 EA=1; // 开总中断 ET0=1; // 定时器 T0 中断允许 ET1=1; TR0=1; // 启动定时器 T0 TR1=1; while(1)// 无限循环等待中断{ temp1=(decade&0x0F)<<4; temp2=unit&0x0F; time=temp2|temp1; seg_data=time; t