串口中断服务函数集

合集下载

ch32串口dma中断回调函数

ch32串口dma中断回调函数

ch32串口dma中断回调函数在嵌入式系统中,串口通信是一种常见的通信方式。

而DMA (Direct Memory Access,直接内存访问)是一种可以直接在外设和内存之间进行数据传输的技术。

当串口使用DMA进行数据传输时,可以通过中断回调函数来处理传输完成的事件。

本文将讨论ch32串口dma中断回调函数的相关内容。

我们需要了解什么是ch32串口。

ch32是一种常见的串口通信协议,它可以用于实现嵌入式系统与外部设备的数据传输。

在ch32串口通信中,数据通过串行方式传输,即一位一位地发送或接收。

为了提高数据传输的效率和可靠性,我们可以使用DMA技术来进行数据传输。

DMA技术是一种通过直接访问内存来实现数据传输的技术。

它可以减少CPU的负载,提高数据传输的效率。

在串口通信中,DMA 可以用来实现数据的发送和接收。

当需要发送或接收数据时,可以通过配置DMA通道来实现数据的传输。

在传输完成后,DMA会触发中断,然后调用中断回调函数来处理传输完成的事件。

ch32串口dma中断回调函数是在DMA传输完成后被调用的函数。

它可以用来处理传输完成的事件,例如接收到了新的数据或数据已经成功发送。

在ch32串口dma中断回调函数中,我们可以根据具体的需求来编写相应的代码。

在编写ch32串口dma中断回调函数时,我们需要注意以下几点:1. 确定中断优先级:在使用ch32串口dma中断回调函数时,我们需要为中断设置适当的优先级。

中断优先级的设置需要根据具体的应用需求来确定,以确保中断的及时响应和处理。

2. 处理传输完成事件:ch32串口dma中断回调函数应该能够正确处理传输完成的事件。

例如,在接收数据时,可以将接收到的数据保存到指定的缓冲区中;在发送数据时,可以检查数据是否发送成功,并进行相应的处理。

3. 错误处理:在ch32串口dma中断回调函数中,我们还需要考虑错误处理。

如果在数据传输过程中发生了错误,我们需要及时处理错误,并采取相应的措施。

串口收发 中断配置函数 usart1_irqhandler

串口收发 中断配置函数 usart1_irqhandler

函数原型:void USART1_IRQHandler(void)功能:处理 USART1 中断请求,包括接收和发送中断。

中断配置步骤:1.确定 USART1 中断向量号:这通常在芯片手册中指定,例如在 STM32F103系列中为IRQ_USART1。

2.在中断向量表中启用 USART1 中断:在中断向量表中将 USART1 中断向量号指向USART1_IRQHandler函数。

可以在启动代码中或使用函数NVIC_EnableIRQ()来完成此操作。

3.配置 USART1 中断优先级:使用函数NVIC_SetPriority()设置 USART1 中断的优先级。

优先级较高的中断将在低优先级中断之前得到响应。

4.配置 USART1 中断屏蔽:使用函数USART_ITConfig()或寄存器USART_CR1->RXNEIE和USART_CR1->TXEIE来配置 USART1 的接收(RXNE)和发送(TXE)中断。

中断服务例程:USART1_IRQHandler函数是 USART1 中断服务例程,它将在 USART1 发生中断时执行。

该函数通常会检查中断标志寄存器USART_SR中的标志位,以确定中断源并相应地采取操作。

以下是一个处理 USART1 接收和发送中断的示例中断服务例程:void USART1_IRQHandler(void){// 检查接收中断标志if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET){// 读取接收数据uint8_t data = USART_ReceiveData(USART1);// 处理接收到的数据}// 检查发送中断标志if(USART_GetITStatus(USART1, USART_IT_TXE)!= RESET){// 发送数据USART_SendData(USART1, data);// 禁用发送中断(发送数据后)USART_ITConfig(USART1, USART_IT_TXE, DISABLE);}}。

C语言的中断服务函数

C语言的中断服务函数

C语言的中断服务函数中断服务函数是一种特殊的函数,用于处理系统或外设发生的中断事件。

在C语言中,中断服务函数常用于嵌入式系统的开发中,用于实现硬件的响应和处理。

下面是关于C语言中断服务函数的详细介绍,包括定义、注册、实现和应用等方面。

一、中断服务函数的定义中断服务函数(Interrupt Service Routine,ISR)是一段特殊的代码,用于响应和处理中断事件。

它与普通的函数不同,不是由程序主动调用的,而是由系统或硬件触发的。

中断事件一般包括硬件的输入、定时器的溢出、软件触发等。

在C语言中,中断服务函数的定义方式与普通的函数类似,但需要使用特殊的关键字和参数。

如下是一个C语言中断服务函数的定义示例:```void interrupt_service_functio//中断处理代码```在上述示例中,`void`表示中断服务函数不返回值,`interrupt_service_function`是函数的名称。

根据不同的开发平台和编译器,中断服务函数的定义可能有所不同。

二、中断服务函数的注册要使用一个中断服务函数,需要将其注册到相应的中断源中。

中断源可以是系统的中断控制器,也可以是外设的中断引脚。

注册中断服务函数的目的是告诉系统,在相应中断事件发生时调用该函数。

以8051单片机为例,注册中断服务函数的方式如下所示:```void mairegister_interrupt_service_function(interrupt_service_functi on);//其他代码```在上述示例中,`register_interrupt_service_function`是用于将中断服务函数`interrupt_service_function`注册到系统中断控制器的函数。

在实际开发中,不同平台和配置会有不同的注册方式。

三、中断服务函数的实现中断服务函数的实现主要包括对中断事件的处理和相应操作。

中断服务函数的实现需要了解特定硬件的中断机制和相关的寄存器操作。

stm32 hal库 串口中断接收函数

stm32 hal库 串口中断接收函数

stm32 hal库串口中断接收函数在STM32开发中,使用串口通信是很常见的一种方式。

而在使用STM32 HAL库进行开发时,我们可以方便地使用HAL库提供的接口来进行串口通信。

其中,使用串口中断接收数据可以提高数据的实时性和稳定性,因此本文将介绍STM32 HAL库中串口中断接收函数的使用方法。

1. 串口中断接收函数的定义首先,我们需要了解一下STM32 HAL库中串口中断接收函数的定义。

在HAL库中,串口中断接收函数的定义如下:void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 该函数是由HAL库提供的一个回调函数,即当串口接收到数据后,会自动调用该函数。

其中,参数huart是串口句柄,用于标识当前是哪个串口接收到了数据。

2. 串口中断接收函数的使用方法在使用串口中断接收函数时,我们需要按照以下步骤进行操作:(1)使能串口中断在使用串口中断接收函数之前,我们需要先使能串口中断。

具体地,可以使用HAL库提供的函数HAL_UART_Receive_IT()来使能串口中断,代码如下:HAL_UART_Receive_IT(&huart1, uart1_rx_data, 1);其中,第一个参数是串口句柄,第二个参数是接收缓存区,第三个参数是接收数据的长度。

(2)编写串口中断接收函数接下来,我们需要编写串口中断接收函数。

在该函数中,我们可以对接收到的数据进行处理。

例如,将接收到的数据存储到一个全局变量中,代码如下:void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if(huart == &huart1){uart1_rx_buf[uart1_rx_len++] = uart1_rx_data[0];}}在该函数中,我们首先通过判断huart参数来确定是哪个串口接收到了数据,然后将接收到的数据存储到全局变量uart1_rx_buf中,并将接收数据的长度uart1_rx_len自增1。

stc8系列单片机前5个中断源的中断子函数框架

stc8系列单片机前5个中断源的中断子函数框架

stc8系列单片机前5个中断源的中断子函数框架中断是单片机中一种重要的事件处理机制,能够在系统发生某个指定的事件时,立即打断当前的程序执行,转而执行中断服务程序。

STC8系列单片机提供了多种中断源,本文将介绍其中前5个中断源的中断子函数框架。

一、外部中断0外部中断0是通过INT0引脚触发的中断源。

当INT0引脚的电平发生变化时,可触发外部中断0。

以下是外部中断0的中断子函数框架:```Cvoid INT0_ISR() interrupt 0{// 中断服务程序的代码// ...}```二、外部中断1外部中断1是通过INT1引脚触发的中断源。

当INT1引脚的电平发生变化时,可触发外部中断1。

以下是外部中断1的中断子函数框架:```Cvoid INT1_ISR() interrupt 2{// 中断服务程序的代码// ...}```三、定时器0中断定时器0中断是使用定时器0作为中断源。

定时器0可以设定一个计时周期,当计时器溢出时,会触发定时器0中断。

以下是定时器0中断的中断子函数框架:```Cvoid TIMER0_ISR() interrupt 1{// 中断服务程序的代码// ...}```四、定时器1中断定时器1中断是使用定时器1作为中断源。

定时器1可以设定一个计时周期,当计时器溢出时,会触发定时器1中断。

以下是定时器1中断的中断子函数框架:```Cvoid TIMER1_ISR() interrupt 3{// 中断服务程序的代码// ...}```五、串口中断串口中断是通过串口通信接收和发送数据时触发的中断源。

当接收到数据或发送完成时,可触发串口中断。

以下是串口中断的中断子函数框架:```Cvoid UART_ISR() interrupt 4{// 判断中断类型if (RI){// 接收中断// 中断服务程序的代码// ...}else if (TI){// 发送中断// 中断服务程序的代码// ...}}```总结:以上是STC8系列单片机前5个中断源的中断子函数框架。

stm32hal库串口中断接收函数

stm32hal库串口中断接收函数

stm32hal库串口中断接收函数STM32 HAL库提供了一种简单可靠的方式实现串口通信,其中使用中断接收函数自动接收字节流数据。

串口接收中断函数需要在初始化时开启,同时设置串口中断接收缓冲区大小,并在主程序中调用相关的中断处理函数。

中断接收函数的基本原理是:每当收到一个字节时,串口硬件会触发一个中断,并将接收到的字节存入中断接收缓冲区。

当有数据到达时,中断接收处理器会检测是否有可用的数据,并将数据读取到应用程序中。

以下是STM32 HAL库串口中断接收函数的代码示例:```c/* 串口中断接收处理函数 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {/* 判断是否发生串口中断 */if (huart->Instance == USARTx) {/* 读取缓冲区中的字节 */rx_buffer[rx_index] = (uint8_t)(huart->Instance->RDR &0xFF);/* 增加接收缓存区的索引 */rx_index++;/* 如果接收数据超过了缓存区大小,则清除缓存区 */if (rx_index == BUFFER_SIZE) {rx_index = 0;}/* 开始下一次中断接收 */HAL_UART_Receive_IT(huart, &rx_buffer[rx_index], 1);}}```在主程序中,我们需要开启串口中断接收并设置接收缓冲区大小:```c/* 开启串口中断接收 */HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], 1);/* 设置接收缓冲区大小 */#define BUFFER_SIZE 1024uint8_t rx_buffer[BUFFER_SIZE];uint16_t rx_index = 0;```这样,在主程序中循环读取缓冲区的数据即可。

串口中断处理函数接收和发送

串口中断处理函数接收和发送
串口中断处理函数是一种常用的数据通讯方式,它可以在不占用CPU 时间的情况下实现数据的接收和发送。

在使用串口中断处理函数时,需要注意以下几点:
1. 接收数据:在串口接收数据时,中断处理函数可以通过读取
数据寄存器获取接收到的数据。

接收到的数据可以直接存储在缓冲区中,或者经过处理后再存储。

2. 发送数据:在串口发送数据时,中断处理函数可以通过写入
数据寄存器将数据发送出去。

发送数据时需要注意数据的格式和长度,避免出现数据丢失或接收端无法识别的情况。

3. 中断优先级:在使用多个中断时,需要设置不同的中断优先级,以确保高优先级的中断能够及时响应。

在串口通讯中,接收中断的优先级应该高于发送中断的优先级,以确保接收到的数据能够及时处理。

4. 缓冲区管理:在串口通讯中,需要使用缓冲区来存储接收和
发送的数据。

需要注意缓冲区的大小和数据的读写顺序,避免出现缓冲区溢出或数据丢失的情况。

总之,串口中断处理函数是一种非常实用的通讯方式,可以提高数据传输的效率和稳定性。

在使用中需要注意以上几点,以确保数据的正确接收和发送。

- 1 -。

中断服务函数

中断服务函数51中断:5个 ES串⼝,ET1定时器1,ET0定时器0,EX1外部中断1,EX0外部中断0⾸先要了解相关的与中断有关的寄存器:IE寄存器:中断控制的寄存器,要实现中断就要配置该寄存器。

EA为总开关,只有先打开EA才能对相应的寄存器进⾏操作TCON寄存器:⽤来控制中断的触发⽅式,是低电平触发还是下降沿触发,由图知道:⾸先相应触发⽅式,然后看是低电平还是下降沿触发(给0或1,1下降沿触发)然后对应的IE寄存器相当于开关的作⽤,然后是IP寄存器控制中断的优先级要是⽤中断 得记住:这个就是对应中断的对应触发⽅式的⼊⼝外部中断0:INT0 中断的优先级 0定时计数器中断0:TF0 1外部中断1:INT1 2定时器中断1:TF1 3串⼝中断:R1/T1 4中断函数写的时候,⾸先要初始化,就是打开相应的中断请求,如打开外部中断0⾸先定义⼀个初始化的函数INT0,然后打开触发⽅式IT0=1,然后打开总开关EA=1;然后打开定时器0的开关EX0=1;然后定义中断0的服务函数,中断号是0,如果打开外部中断1 那么定义⼀个初始化的函数INT1,然后打开触发⽅式IT1=1,然后打开总开关EA=1,打开中断的开关EX1=1;注意中断服务函数的⼊⼝是2也可以采⽤看图配置寄存器来使⽤,按照16进制看图来配置,如何让产⽣中断后进⾏相关操作,可以定义⼀个状态变量,当产⽣中断时,状态变量翻转,然后根据相关的状态来进⾏相关的操作总结:中断函数⾸先进⾏初始化的定义,看是使⽤外部中断(0,1)0的话先打开下降沿的触发信号IT0,然后再打开总开关EA=1,然后⼤开外部中断0(INT0)的开关EX0=1,然后定义相关的中断服务函数 中断号为0,中断服务函数中尽量少些程序,可以⽤状态值来调⽤中段函数,例如我可以先定义⼀个状态变量为0,进⼊中断函数后状态变量为1,然后在定义⼀个相关的函数进⾏操作,让状态变量函数成为判断条件,进⾏完相关的操作后,将状态变量的值该变为原来的状态 值得注意的是在定义相关开关的时候,可以直接对寄存器进⾏相关的操作,就是直接给0或者1让其打开相关的寄存器,然后写成16进制。

gd32串口中断函数

GD32是中国兆易创新(GigaDevice)推出的一款通用微控制器(MCU),其串口(UART)模块提供了一些中断功能。

以下是一个基本的GD32串口中断函数的示例:c复制代码#include"gd32f10x.h"UART_HandleTypeDef huart1;void UART1_Init(void){huart1.Instance = UART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if(HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}}void UART1_IRQHandler(void){/* Check if the UART1 global interrupt flag is set */if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_GLBLINTR) != RESET){/* Check if the UART Rx Underrun interrupt is set */if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXUDR) != RESET){/* Clear the UART Rx Underrun flag */__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_RXUDR);/* Re-enable the UART Rx Interrupt */__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);}/* Check if the UART Parity Error interrupt is set */if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_PERR) != RESET){/* Clear the UART Parity Error flag */__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_PERR);/* Re-enable the UART Parity Error Interrupt */__HAL_UART_ENABLE_IT(&huart1, UART_IT_PARE);}/* Check if the UART Framing Error interrupt is set */if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_FERR) != RESET) {/* Clear the UART Framing Error flag */__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_FERR);/* Re-enable the UART Framing Error Interrupt */__HAL_UART_ENABLE_IT(&huart1, UART_IT_FE);}/* Check if the UART Transmission complete interrupt is set */ if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != RESET){/* Clear the UART Transmission complete flag */__HAL。

hal库串口中断函数

hal库串口中断函数HAL库是嵌入式领域常用的一个库,常常被选择作为初学嵌入式编程的入门工具,因为它对各种片上外设的驱动已经进行了封装,开发者不需要去深入了解芯片的底层细节就能够方便地进行开发。

而串口在嵌入式系统中是非常常用的一个模块,HAL库对串口的封装也非常便于使用。

在这里,我们主要讲一下HAL库中的串口中断函数。

首先要明确的是,串口中断指的是串口接受数据之后的中断,在HAL库中这个中断会触发一个回调函数,这个回调函数就是串口中断函数。

在使用HAL库进行串口开发时,要实现串口接收数据后的回调函数,我们需要使用以下代码:```cvoid HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {/* your code here */}```其中的参数`huart`是一个指向UART_HandleTypeDef结构体的指针,这个结构体中保存着串口相关的信息,比如数据长度、波特率等。

我们可以在这个回调函数中编写相应的代码来处理串口接受到的数据,比如将接收到的数据存储到一个数组中,或者对接收到的数据进行解析、判断等等。

值得注意的是,如果使用的是半主动方式接收数据,即不是通过`HAL_UART_Receive_IT`函数启动接受过程,需要在`HAL_UART_RxCpltCallback`函数中自行开启下一次接受,否则串口将不会再接受到数据。

总结来说,HAL库中串口中断函数是非常必要的一个函数,它能够帮助我们在串口收到数据后及时做出响应,并做出相应处理。

这样我们可以更便捷地进行串口开发,在数据交互方面得到更好的效率和体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串口中断服务函数集 2003-4-22 电子工程师网站//本函数集来自“51单片机世界”,作者斑竹丁丁(聂小猛)。

//主页地址//串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理//出入均设有缓冲区,大小可任意设置。

//可供使用的函数名://char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。

//getline(char idata *line, unsigned char n); 获取一行数据回车结束,必须定义最大输入字符数//putbyte(char c);放入一个字节到发送缓冲区//putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度//putstring(unsigned char code *puts);发送一个定义在程序存储区的字符串到串口//puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。

//putchar(uchar c,uchar j);输出一个无符号字符数的十进制表示,必须标示小数点的位置,自动删除前面无用的零//putint(uint ui,uchar j);输出一个无符号整型数的十进制表示,必须标示小数点的位置,自动删除前面无用的零//delay(unsigned char d); 延时n x 100ns//putinbuf(uchar c);人工输入一个字符到输入缓冲区//CR;发送一个回车换行//********************************************************************** ***#include <w77e58.h>#define uchar unsigned char#define uint unsigned int#define OLEN 32 /* size of serial transmission buffer */idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置#define ILEN 12 /* size of serial receiving buffer */idata unsigned char inbuf[ILEN];unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置unsigned char idata *getlast=inbuf; //最后取走的字节位置bit outbufsign0; //最后一个数据覵BUF发完标志发完=0bit outbufsign; //输出缓冲区非空标志有=1bit inbufsign; //接收缓冲区非空标志有=1bit inbufful; //输入缓冲区满标志满=1#define CR putstring("\r\n") //CR=回车换行</P><P>//*****************************//延时n x 100nsvoid delay(unsigned char d) //在源程序开头定义是否用w77e58或22。

1184M晶振{unsigned char j;do{ d--; </P><P>//110592 & 89c52#ifndef cpuw77e58#ifndef xtal221184j=21; //k=38 cpu80320 100us k=21 cpu 8052#elsej=42;#endif#else#ifndef xtal221184j=38;#elsej=76;#endif#endifdo {j--;} while(j!=0);}while(d!=0);}//*****************************//放入一个字节到发送缓冲区</P><P>putbyte(char c){uchar i,j;ES=0; /*暂停串行中断,以免数据比较时出错? *///if (outlast=putlast)while ( (((outlast-putlast)==2) && (outlast > putlast )) || ((outlast < putlast) && (OLEN-(putlast-outlast)==2))){ ES=1; c++;c--;ES=0;// i=(0-TH1);// do{i--;j=39; do {j--;}while(j!=0); }while(i!=0); //i=39}*putlast=c; //放字节进入缓冲区putlast++; //发送缓冲区指针加一if (putlast==outbuf+OLEN) putlast=outbuf; //指针到了顶部换到底部outbufsign=1;if (!outbufsign0) {outbufsign0=1;TI=1; } //缓冲区开始为空置为有,启动发送ES=1;}//******************************//放一串数据到发送缓冲区putbytes(unsigned char *outplace,unsigned char j){ int i;for(i=0;i<j;i++){putbyte(*outplace);outplace++;}}//******************************//输出一个无符号字符数的十进制表示,必须标示小数点的位置,自动删除前面无用的零//例如putchar(0x32,2),输出"4.8".//putchar(0x32,3),输出"0.48".//putchar(0x32,1),输出"48".putchar(uchar c,uchar j){uchar idata free[4];uchar data i;i=0;free[i++]=(c/100+0x30);if (j==3) free[i++]='.';free[i++]=(c%100)/10+0x30;if (j==2) free[i++]='.';if (j==2 && free[i-3]==0x30) free[i-3]=0x20;free[i++]=(c%10)+0x30;if (j==1 && free[i-3]==0x30) free[i-3]=0x20;if (j==1 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20; putbytes(free,i);}</P><P>//******************************//输出一个无符号整型数的十进制表示,必须标示小数点的位置,自动删除前面无用的零putint(uint ui,uchar j){uchar idata free[6];uchar data i;i=0;free[i++]=(ui/10000+0x30);if (j==5) free[i++]='.';free[i++]=((ui%10000)/1000+0x30);if (j==4) free[i++]='.';if (j==4 && free[i-3]==0x30) free[i-3]=0x20;free[i++]=((ui%1000)/100+0x30);if (j==3) free[i++]='.';if (j==3 && free[i-4]==0x30) free[i-4]=0x20;if (j==3 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;free[i++]=((ui%100)/10+0x30);if (j==2) free[i++]='.';if (j==2 && free[i-5]==0x30) free[i-5]=0x20;if (j==2 && free[i-5]==0x20 && free[i-4]==0x30) free[i-4]=0x20;if (j==2 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;free[i++]=(ui%10+0x30);if (j==1 && free[i-5]==0x30) free[i-5]=0x20;if (j==1 && free[i-5]==0x20 && free[i-4]==0x30) free[i-4]=0x20;if (j==1 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;if (j==1 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20;putbytes(free,i);}//***************************************//发送一个定义在程序存储区的字符串到串口putstring(unsigned char *puts){for (;*puts!=0;puts++) //遇到停止符0结束putbyte(*puts);}//*************************************//发送一个字节的hex码,分成两个字节发。

相关文档
最新文档