您的当前位置:首页正文

外部中断,定时器与串行口综合实验

2023-01-27 来源:好走旅游网


硬件实验八 外部中断,定时器与串行口综合实验

一.实验目的

1.进一步巩固外部中断,定时计数器和串行口的原理

2.进一步巩固外部中断,定时计数器使用和编程方法

3.进一步巩固串行口与PC机通信的实现方法

二.实验内容

独立按键按下后,单片机每隔3s将内部的RAM60H开始的存储单元中的数据发送到串行口,并在PC上的串行调试助手上显示。再次按下,则停止传送。若继续按下,则继续传送。以此类推。

三.实验连线

用杜邦线将P3.0口和独立按键连接起来

四.实验说明

本实验结合外部中断,定时计数器和串行口的知识,实现数据定式传输。独立按键的按下将产生从高到低的电平变化,可作为外部中断的输入信号。

主程序中,应首先对外部中断,定时计数器和串行口进行初始化。在外部中断程序中判断是发送还是停止发送,若需要发送数据则开启定时器,若停止发送数据则关闭定时器。在定时器中断服务程序中发送数据。

五.实验代码及其现象

程序代码:

#include

#define uchar unsigned char

#define uint unsigned int

char code table[]=\"communication engineering char *p;

uint i;

int k=0;

char overtime,flag;

void init() //初始化函数

{

TMOD=0x21; //置工作方式

TH0=(65536-50000)/256;

kingsam 1006052150\";

TL0=(65536-50000)%256;

TH1=0xfd;

TL1=0xfd;

EA=1;

EX0=1;

ET0=1;

IT0=1;

ES=1;

TR1=1; //启动定时器R1 SCON=0x40;

p=0x60;

p=table;

}

void int0() interrupt 0

//外部中断子函数

{

if(flag==0)

{

flag=1;

TR0=1;

}

else

{

flag=0;

TR0=0;

}

}

void T0_interrupt() interrupt 1 {

//定时器T0中断函数

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

if(i==60) {

i=0;

overtime=1;

}

}

void main() {

init();

while(1)

{

//定时3秒

//主函数

if(overtime==1)

{

*p=table[k++];

SBUF=*p;

p++;

while(TI==0);

TI=0;

overtime=0;

if(k==42)

{

k=0;

}

}

}

}

实验思路:本实验要求实现按下独立按键之后,单片机每隔3s将内部RAM60H开始的存储单元中的数据发送到串行口,并在PC上的串口调试助手上显示。再次按下,则停止发送。若继续按下,则继续发送,以此类推。故我们可以把整个实验程序分成三个模块来完成。外部中断模块,定时器定时模块以及串口发送模块。首先在外部中断模块内部控制定时器T0的使能端是否置一,从而控制定时器T0开始计数的时间,以实现按下一次独立按键,数据发送,再按一下,数据不发送的功能。然后在定时器模块内部定时的时间,我们本题设计为3s。最后就是串行口的发送模块,每经过3s,则发送一个数据,然后在电脑的串口测试助手上接收一个数据。

实现现象:在PC上的串口调试助手上显示出如下图的字符,每显示一个字符,间隔为3s

六.实验心得

这次实验有些难度,需要提前复习找材料,主要是考验大家综合能力,把外部中断,定时器与串行口实验综合运用,单片机每隔3s将内部RAM60H开始的存储单元中的数据发送到串行口,并在PC上的串口调试助手上显示。需要设置延迟时间,使它们在相同时间延迟

因篇幅问题不能全部显示,请点此查看更多更全内容