中断和串口剖析

发布者:WhisperingLight最新更新时间:2015-12-25 来源: eefocus关键字:中断 手机看文章 扫描二维码
随时随地手机看文章
以前对STC89C52单片机的串口中断始终没有深入的了解

今天没什么事,就好好的琢磨了一下,前提是单片机开启了串口中断

1、先说串口接收数据中断吧:当单片机串口接收到数据后,产生中断,单片机跳到中断程序中,可以选择接收数据或者进行其他的操作,此时的串口数据可以作为控制信号,也可以仅仅是一个触发动作,具体的操作根据中断函数实现具体的功能。在中断函数最后,需要将串口接收标志位RI清0。

2、发送中断:当单片机向串口发送数据后,单片机产生串口发送中断,同理,所发送的数据仅仅是出发中断,中断函数的具体功能和所发的数据没有必然的关系,串口发送的作用是触发中断。同样,不要忘了在最后将 TI 清0.

 

总的来讲,在STC89C52中,串口发送和串口接收终端公用一个中断源,需要在中断函数中采用一个if...elseif...结构来判断接收中断标志位和发送中断标志位根据判断结果执行相应的函数。

 

如果需要读取串口数据,则在中断函数中将缓冲区的数据读入单片机进行相应的处理,如果不需要对接收到的数据进行处理,那么此时串口仅仅是作为一个开关,作用就是出发中断,然后用户根据需要在中断函数中进行相应的操作即可,串口发送总中断也是这样一个道理,只是通常我们都是将串口作为一个数据通道,中断的作用是,在接收和发送数据的同时还可以根据需要进行相关的操作。

 

VB下计算机与单片机的通讯:

(1)PC端程序:

 

Private Sub Command1_Click()
Dim Num As Integer
Dim outbte(0) As Byte
Num = Val(Text1.Text)
outbte(0) = CByte(Num)
MSComm1.OutBufferCount = 0
MSComm1.Output = outbte
End Sub

 

Private Sub Command2_Click()
Unload Me
End Sub

 

Private Sub Form_Load()
MSComm1.RThreshold = 2
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub

 

Private Sub MSComm1_OnComm()
Dim indata As Variant
Dim bte(0) As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
indata = MSComm1.Input
bte(0) = AscB(indata)
Text2.Text = bte(0)
MSComm1.InBufferCount = 0
End Select
End Sub

 

 

(2)单片机程序

#include

sbit CW = P1^1;
sbit CK2 = P1^2;
sbit CK1 = P1^3;
sbit M1 = P1^4;
sbit M2 = P1^5;
sbit REFIN = P1^6;
int m = 0;


void main(void)
{
 int k,n;
 TMOD = 0x20;
 TH0 = 0xEF;//ef;
 TL0 = 0xFF; 
 
 EA = 1;
 ET0 = 1;

 TR0 = 1;

 


 TH1 = 0xfd;
 TL1 = 0xfd;

 PCON = 0x00;
 SCON = 0x50;
// REN = 1;
// SM2 = 0;

 ET1 = 0;
 ES = 1; 

 TR1 = 1;


 REFIN = 0;
 M1 = 1;
 M2 = 0;
 CK1 = 1;
 CW = 1;
// n = 100;
 while(1)
 {
  for(k = 0; k < 30000; k++);
   SBUF = m;
 //   n--;
 }
}


void CLK() interrupt 1
{
 CK2 = !CK2;
 TH0 = 0xEF;
 TL0 = 0xFF;
 m++;
}

void SERIAL() interrupt 4
{

 //TI = 0;
}

关键字:中断 引用地址:中断和串口剖析

上一篇:模拟量输出通道之8位DAC0832及其与单片机接口
下一篇:浅谈三种单片机程序调试方法

推荐阅读最新更新时间:2024-03-16 14:41

PIC单片机定时中断
#INCLUDE P16F877.inc ORG 000H GOTO A1 ORG 004H;定时中断入口地址 GOTO ZD01; ORG 0CH A1 MOVLW 1;位1显示数 MOVWF 50H; MOVLW 2;位2显示数 MOVWF 51H; MOVLW 3;位3显示数 MOVWF 52H; MOVLW 4;位4显示数 MOVWF 53H; MOVLW 4;显示位数 MOVWF 40H; MOVLW B'00000001';位码 MOVWF 41H; MOVLW 50H; MOVWF FSR ;间接寻址 BSF ST
[单片机]
STM32实验4:按键中断
端口配置 #include stm32f10x.h //PA13 PA15void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能外设置时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //PA15上拉输入
[单片机]
ARM-Linux s3c2440 之中断分析(三)
Linux通过以下函数来注册中断以及中断相关的入口函数handle,只有先注册IRQ,才能正常使用。 int set_irq_chip(unsigned int irq, structirq_chip *chip) static inline void set_irq_handler(unsigned intirq, irq_flow_handler_t handle) static inline void set_irq_chained_handler(unsignedint irq, irq_flow_handler_t handle) 实现的代码如下: for(irqno = IRQ_E
[单片机]
stm32中断学习总结
经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的。但对于要做简单开发的我来说这些已经够了。 我学习喜欢从一个例程来看,下面的程序是我粘贴但是改编的,大部分都做了注释。 主要是感谢这位博主的文章:http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html 其实主要步骤就是: 1、将GPIO口配置成中断输入模式。 void Init_LED(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量 RCC_APB2PeriphCl
[单片机]
AVR 外部中断程序
系统功能 使用AVR外部中断INT1检测按键,并使用LED作出简单指示! 硬件设计 AVR主控电路原理图 LED控制电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! //目标系统: 基于AVR单片机 //应用软件: ICC AVR /*10101010101010101010101010101010101010101010101010101010101010101010 ---------------------------------------------------------------------- 实验内容: 使用AVR的外部中断INT1检
[单片机]
AVR 外部<font color='red'>中断</font>程序
C51编程13-中断篇(外部中断
CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。如果希望处理其他的功能,可以通过查询的方式进行,判断是否需要处理或者通过中断的方式,进入中断服务函数程序里面执行。 前者是在主程序中判断条件是否成立,如果成立则执行其他功能,否则不执行;后者是CPU在执行过程中,判断是否有中断标志位,响应中断进入中断服务函数,执行相关功能。 MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。 下面通过讲INT0说明外部中断,INT1同理。 原理图: P0连接8个LED,INT0引脚连接一个按钮连接到地。 在中断系统中,INT0设计的寄存器中
[单片机]
C51编程13-<font color='red'>中断</font>篇(外部<font color='red'>中断</font>)
PIC16F877定时器1的中断方式调试
PIC16F877单片机定时器1使用中断方式调试程序如下: #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(); uint intnum; void main() { init(); while(1) { /* if(intnum = 20) { intnum = 0; RD0 = !RD0; }*/ } } void init() { TRISD = 0; // PORTD = 0; //PORTD输出低电平 INTCON =
[单片机]
一文详解80C51单片机的中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]
一文详解80C51单片机的<font color='red'>中断</font>系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved