硬件实验八 外部中断,定时器与串行口综合实验
一.实验目的
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上的串口调试助手上显示。需要设置延迟时间,使它们在相同时间延迟 因篇幅问题不能全部显示,请点此查看更多更全内容