一、实验目的
1、 掌握MCS-51单片机中断的工作原理,体会外部中断的使用特点。 2、 掌握中断处理程序的编程方法和中断程序编程特点。
二、实验内容
用一按键作为外部中断INT0,并用单位数码管显示外部中断源INT0的中断次数(0-9),每当显示到5时,一LED等闪烁一下。
三、实验原理
中断就是停止正在运行的任务去执行突发任务,执行完突发任务后在回来执
行刚刚被暂停的任务。只要有突发状况发生,我们给外部中断两个引脚一个的脉冲,单片机通过检测这两个引脚上的脉冲方式就可以判断是否有突发状况发生了,给这两个引脚一个低电平或者一个下降沿脉冲都可以触发外部中断,然后程序执行中断。
四、硬件电路图
五、软件设计 1、程序流程图
开始 检测是否有中断信号
执行中断
返回中断点 结束 程序代码:
#include < reg51.h > #include
sbit led=P1^0; //申明单片机P1口的第一位 unsigned int i;
unsigned char code Disp_Tab[] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0—9数码管码表 void main(void) {
IT0=0;
IT0=1; //对外部相关寄存器进行设置 EA=1; EX0=1;
LedNumVal=0; while(1) {
P0=Disp_Tab[LedNumVal];
if(LedNumVal==10) //判断是否进入下一个循环 LedNumVal=0; } }
void counter(void) interrupt 0 //中断服务程序 {
EX0=0;
LedNumVal++; if(LedNumVal==5) {led=0;
for(i=50000;i>0;i--){} //插入一个延时程序
led=1; }
if(b==9)
b=0;} //进行下一次循环
六、实验结果分析
这次试验的要求比较高,需要将数码管、独立按键以及外部中断糅合在一起,既需要把握好对独立按键的设置,同时又要求相关变量的不重复性,这样做起来感觉还是比较的棘手。
实验六 串口通信实验
一、实验目的
1、熟悉51系列单片机定时器串口通信工作原理与工作方式。 2、掌握单片机定时器串口通信的程序编写。 3、进一步熟悉定时/计数器编程。
二、实验内容
编一个单片机串口自发自收程序,并发送0—F,并用一发光二极管指示发送过程。
三、实验原理
串行接口是单片机的一个重要接口,单片机通过它与外部设备进行通信,串口通信又
分为并行通信和串行通信,而串行通信又可分为:异步通信和同步通信。单片机与计算机通信其实就是数据的传送,采用的是串行异步(在线路上传送时以一个字符为单位)通信,那么在数据的传送过程中就涉及到数据的格式和传送数据的速度了,这就对应着串口通信中的两个概念:数据帧和波特率。在进行串口通信编程时,要对相关寄存器进行设置。
四、硬件电路设计
利用P0口作为数据(字型码)输出,驱动一位静态LED数码管显示串口接收到的字符。JP10接线排座(单片机I/O P0口)与JP3 接线排座(一位数码管字形码输入)用8PIN排线连接。这里,用单片机I/O的P0口作为数码管字形码的输出口。
因为本实验只需实现自发自收即可,故单片机的P3^0口和P3^1口用杜邦线直接相连即可。
五、程序设计
1、程序流程图
2、源程序 #include
code char tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数据管码表 Sbit P1_0=P1^0; void main(){
TMOD=0x20; //对定时器相关寄存器进行配置 TH1=0xf3; TL1=0xf3; //装入定时器初值 TR1=1;
SCON=0x50; //对串口通信进行寄存器配置 P0=tab[a]; P1_0=0; while(1){
for (a=0;a<=15;a++)
数码管显示 接收数据 发送数据 开始 结束 { SBUF=tab[a]; //发送数据 for(i=0;i<10000;i++); if(TI==1) {TI=0; if(RI==1) {RI=0; P0=SBUF;
//保存接收数据
//判断是否接收完
//判断是否完成发送
P1_0=~P1_0; for(i=0;i<15000;i++);}} }}}
六、实验结果分析
这次的实验感觉比较的难,一开始便程序的时候,把发送和接受没有区别
对待,以至于后面在板子上运行的结果是对的,但是却不是按照实验的要求来做的,所以,必须要对发送和接收进行很好的区分,同时也要注意判断时间的先后。