串行通信中断方式子程序

发布者:数据小巨人最新更新时间:2016-01-07 来源: eefocus关键字:串行通信  中断方式  子程序 手机看文章 扫描二维码
随时随地手机看文章
/*-----------------------------------------------------*

*文件描述:本文件包含了串行通信的4子程序,分别为:       
*(1)SCISend1:串行发送1字节                             *
*(2)SCISendN:串行发送n字节                             *
*(3)SCIRe1:串行接收1字节                               *
*(4)SCIReN:串行接收n字节                               *
//[以下为子程序源代码]
//[包含头文件]
#include "SCI.h"
/*SCISend1:串行发送1个字节-----------------------------*
*功  能:串行发送1个字节                                *
*参  数:要发送的数据                                   *
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISend1(unsigned char o)
 {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
   while(1) 
      if ((ReSendStatusR & (1<          { ReSendDataR=o;
           break;}
 }
/*SCISendN:串行发送N个字节-----------------------------*
*功  能:发送数组中的N个字节数据                        *
*参  数:待发送的数据字节数及其要存放的数组首地址              
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISendN(unsigned char n,unsigned char ch[])
  {int i;
   for(i=0;i        
 SCISend1(ch[i]);
  }
/*SCIRe1:串行收一个字节数据----------------------------*
*功  能:从串行口接收1个字节的数据                            
*参  数:标志指针p                                      *
*返  回:接收到的数据(若接收失败,返回0xff)           *
*说  明:参数*p带回接收标志=0收到数据,=1未收到数据     
*-----------------------------------------------------*/
unsigned char SCIRe1(unsigned char *p)
 { unsigned int k;
   unsigned char i;
   //ReStatusR第ReTestBit位为1表示可接收数据
 for(k=0;k<0xfbbb;k++)
   if ((ReSendStatusR & (1<       {i=ReSendDataR;
       *p=0x00;
       break;}
 if(k>=0xfbbb)
   {i=0xff;
    *p=0x01;}   
    return i;             //返回接收到的数据
 }
/*SCIReN:HC08串行接收N个字节---------------------------*
*功  能:接收N个字节数据,并存放在ch数组中                   
*参  数:待接收的数据字节数及其存放的数组首地址             
*返  回:接收标志=0收到数据,=1未收到数据                *
*-----------------------------------------------------*/
unsigned char SCIReN(unsigned char n,unsigned char ch[])
 {int m;                 
   unsigned char fp;
   m=0;
   while (m  {           
   ch[m]=SCIRe1(&fp);
   if (fp==1) return 1;
   m++;
  }
   return 0; 
 }

关键字:串行通信  中断方式  子程序 引用地址:串行通信中断方式子程序

上一篇:单片机有中断机制的理由
下一篇:串行通信可以分为两种类型:同步通信、异步通信

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

软件模拟串行通信——UART协议实现
起因 双单片机通信,MCU资源受限,无法使用片上UART通道,只可用普通I/O 成果 使用2个普通I/O端口,通过软件实现UART协议的数据全双工收发,8bits数据位、1600波特率,可移植其它单片机 资源占用 ·1个定时器 ·2个普通I/O端口 IDE keil V4 硬件 51最小系统板 一、UART协议 二、思路 1 数据的发送其实就是控制发送引脚Ptxd的电平随着固定时序变化,那么固定的、周期性的时序需要一个定时器来产生。为了保证定时器周期高精度稳定可控,选用自动重装定时器模式 。为了尽可能的减少资源占用,发送和接收共用一个定时器资源。 2 程序的设计采用状态机设计模式,这样可以避免独占CPU
[单片机]
软件模拟<font color='red'>串行通信</font>——UART协议实现
PIC16系列单片机与PC机 串行通信的软硬件实现
1 前言 美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机。其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片机,并已经得到了越来越广泛的应用。 但是在许多需要大量计算的运用中,还必须借助微机的强大数据处理能力。这样必须通过通信电路实现PIC单片机与微机间
[单片机]
PIC16系列单片机与PC机  <font color='red'>串行通信</font>的软硬件实现
89C52单片机串行通信编程两则
1.当89C52串行口按工作方式1进行串行数据通信时,假定波特率为1 200b/s,以中断方式传送数据,请编写全双工通信程序。 #include at89x52.h unsigned char data txbuf; unsigned char data rebuf; void main() { unsigned char temp; SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; ES=1; EA=1; } void comre() { rebuf=SBUF; } void comtx() { SBUF=txbuf;
[单片机]
子程序调用指令分析
子程序调用指令共两条:一条为长调用指令,另一条为绝对调用指令。都为1字节2 周期 指令,两条指令都从堆栈中取出以前压入的16位地址送入PC,从而完成子程序的返回。 长调用指令LCALL addr16是一条三字节的两周期指令,指令码格式为12,16位地址高8位,16位地址低8位。该指令完成下列操作:先将PC内容加3,再将PC内容压入堆栈,最后将指令中的16位地址addr16送入PC中,长调用的子程序调用范围是64KB。 在子程序结束时运行子程序返加指令RET,这条指令的运行过程:将堆栈指针SP指向的栈顶单元中的数据弹出以程序计数器PC的高8位中,堆栈指针SP减1,使其指向栈顶,此时,PC中的数据恰好就是子程序调用指令的下一条指令
[单片机]
编写3字节二进制减法子程序 -单片机编程
单片机不难的编程题!急,编写3字节二进制减法子程序。 用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。 入口:被减数:52H,51H,50H,50H为最低位; 减数:42H,41H,40H,40H为最低位; 出口:  差:外部数据存贮器2003H~2000H(2000H为最低位)。 有三个字节参加相减,且地址是连续的,那么循环3次即可。 MOV R0, #50H ;被减数地址 MOV R1, #40H ;减数地址 MOV DPTR, #2000H ;差的地址 CLR C MOV R2, #3 ;循环3次 S_LOOP: MOV A, @R0
[单片机]
【STM32CubeMX】HAL库中断方式UART串口通信
HAL库下,利用STM32CubeMX生成源代码,确实比较简单,比用标准库简单很多。 现在总结自己学习的过程: 硬件平台:正点原子探索者(STM32F407ZET6) 1、配置STM32CubeMX (1)打开STM32CubeMX,选择相应的芯片型号,并配置调试信息为:Serial Wire (2)配置RCC主频,选择外部高速晶振(HSE):Crystal/Ceramic Resonator(译文:水晶/陶瓷谐振器) 然后开始配置时钟树: 外部晶振为8MHz,配置PLL使主频为168MHz,如下图: (3)配置USART1:选择异步通信模式 (4)配置串口:115200
[单片机]
【STM32CubeMX】HAL库<font color='red'>中断</font><font color='red'>方式</font>UART串口通信
STM32串口中断方式接收
void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); } 首先中断的配置 void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,
[单片机]
针对单片机串行通信技术全解析
1、 什么是串行通信? 串行通信(英语:Serial communication)是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。 简言之:串行通讯就是排成一队走,并行就是排成一列走,如下图 2、同步串行通信(Synchronous serial communication)和异步串行通信(Asynchronous serial communication) 发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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