/*-----------------------------------------------------*
*文件描述:本文件包含了串行通信的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
[单片机]
PIC16系列单片机与PC机 串行通信的软硬件实现
1 前言 美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机。其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片机,并已经得到了越来越广泛的应用。 但是在许多需要大量计算的运用中,还必须借助微机的强大数据处理能力。这样必须通过通信电路实现PIC单片机与微机间
[单片机]
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
[单片机]
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) 发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提
[网络通信]