第8周实验 基于中断DMA方式的串口通信

第8周实验 基于中断/DMA方式的串口通信

一、DMA串口通信与中断

DMA (Direct Memory Access) 是一种数据传输方式,用于实现高速的设备之间的数据传输,而不需要 CPU 的干预。在传统的串口通信中,数据的传输需要 CPU 介入,通过轮询或中断的方式进行数据的收发。而使用 DMA 串口通信,可以通过 DMA 控制器直接进行数据的传输,减轻了 CPU 的负担,提高了数据传输的效率。

DMA 串口通信的流程如下:

  1. 配置串口通信参数:包括波特率、数据位数、停止位等参数;
  2. 配置 DMA 控制器:设置 DMA 通道和传输方向(接收或发送);
  3. 配置 DMA 缓冲区:设置用于数据传输的缓冲区地址和大小;
  4. 启动 DMA 传输:通过编程方式启动 DMA 传输;
  5. 在传输完成后,DMA 控制器会触发中断通知 CPU。

中断是一种机制,用于处理异步事件或外部设备的请求。在串口通信中,中断可以用于通知 CPU 数据的传输完成或数据的接收。当 DMA 传输完成时,DMA 控制器会发出中断信号,中断控制器会将中断请求传递给 CPU,CPU 接收到中断请求后会执行相应的中断处理程序。

中断处理程序的流程如下:

  1. CPU 接收到中断请求后,保存当前的执行现场(包括程序计数器、寄存器等);
  2. 执行中断处理程序,处理与中断相关的操作,如数据的接收或发送、状态的更新等;
  3. 中断处理程序执行完毕后,恢复之前保存的执行现场,继续执行被中断的程序。

通过使用 DMA 串口通信和中断,可以实现高效的数据传输和并行处理,提高系统的性能和效率。

二、实验过程

1.设置项目

打开STM32CubeMX,创建一个新项目,选择芯片,进入设置
在这里插入图片描述

设置RCC
在这里插入图片描述

设置SYS
在这里插入图片描述

设置USART
在这里插入图片描述

设置NVIC
在这里插入图片描述

创建项目
在这里插入图片描述

2.keil设置

项目创建完毕,打开项目,点击uzer里面的main.c,修改main.c里面的内容
在这里插入图片描述

main.c函数代码如下:

#include “main.h”
#include “usart.h”
#include “gpio.h”
#include <string.h>

void SystemClock_Config(void);

char start[6] = “start”;
char message[]=“hello Windows\r\n”;//输出信息
char tips[]=“CommandError\r\n”;//提示1
char tips1[]=“Start…\r\n”;//提示2
char tips2[]=“Stop…\r\n”;//提示3
int flag=0;//标志 0:停止发送 1.开始发送

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();

//设置接受中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&start, 1);


//当flag为1时,每秒发送一次信息
//当flag为0时,停止
while (1)
{
if(flag==1){
//发送信息
HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF);

		//延时
		HAL_Delay(1000);
	}

}
}

int stringcompare(char str1[6],char str2[6])
{
for(uint8_t i = 0 ; i < 6 ; i++)
{
if (str1[i] != str2[i])
return 0;
}
return 1;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

if(stringcompare(start,"stop!"))//输入为stop时,标志位置0
{
	flag=0;
	
}


else if(stringcompare(start,"start"))//输入为 start时,标志位置1
{
	flag=1;
}

//重新设置中断
HAL_UART_Receive_IT(&huart1,(uint8_t*)start,5);

}
/* USER CODE END 4 /
/
*

  • @brief System Clock Configuration
  • @retval None
    */
    void SystemClock_Config(void)
    {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the RCC Oscillators according to the specified parameters

  • in the RCC_OscInitTypeDef structure.
    /
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    Error_Handler();
    }
    /
    * Initializes the CPU, AHB and APB buses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**

  • @brief This function is executed in case of error occurrence.
  • @retval None
    /
    void Error_Handler(void)
    {
    /
    USER CODE BEGIN Error_Handler_Debug /
    /
    User can add his own implementation to report the HAL error return state /
    __disable_irq();
    while (1)
    {
    }
    /
    USER CODE END Error_Handler_Debug */
    }

执行结果:

在这里插入图片描述

三、实验分析与总结

rn state /
__disable_irq();
while (1)
{
}
/
USER CODE END Error_Handler_Debug */
}

执行结果:

[外链图片转存中…(img-SrbgBOZM-1698929792811)]

三、实验分析与总结

本次实验在上一次实验的基础上,新增加了中断功能,扩展的地方主要就是我们需要发送信息,芯片接收到信息之后反馈信息。难度的话变化不算太大,有上一次的基础这次做来也会容易一些。HAL库的方式确实让整个过程都变得轻松不少。本次实验用字符串来控制接收发送,这也需要注意不能弄错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者: 李江全 汤智辉 朱东芹 出版社:人民邮电出版社   本书从测控工程应用的角度出发,对visual basic(缩写vb)开发测控程序的各种方法进行了全面阐述。内容包括在vb工程中调用activex控件和dll动态链接库等开发板卡数据采集与控制程序,在vb工程中利用mscomm控件、调用api函数等方法开发串口通信程序等。每种程序都提供了多个设计方法,每个设计都提供了线路图、详细的任务实现和完整的程序代码,所有代码均编译通过。   书中提供的典型测控应用实例都有详细的操作步骤,学习者可以按步骤用vb编程实现各种测控功能,实践操作性强是本书的特色。   本书内容丰富,论述深入浅出,有较强的实用性和可操作性,可供自动化、计算机应用、电子信息、机电一体化、测控仪器等专业的大学生、研究生以及从事计算机测控系统研发的工程技术人员学习和参考。 目录 第1章 计算机测控系统概述 1 1.1 计算机测控系统的含义与工作原理 1 1.1.1 计算机测控系统的含义 1 1.1.2 计算机测控系统的工作原理 2 1.2 计算机测控系统的任务和特点 3 1.2.1 计算机测控系统的任务 3 1.2.2 计算机测控系统的特点 5 1.3 计算机测控系统的组成 5 1.3.1 测控系统硬件组成 6 1.3.2 测控系统软件组成 8 1.4 计算机测控系统的分类 10 1.4.1 按功能分类 10 1.4.2 按设备形式分类 15 1.5 计算机测控系统应用软件的开发工具 17 1.5.1 面向机器的语言 17 1.5.2 高级语言 18 1.5.3 组态软件 19 第2章 vb程序设计基础 20 2.1 vb语言概述 20 2.1.1 vb语言的特点 20 .2.1.2 vb中文版集成开发环境 21 2.1.3 vb的操作对象 24 2.2 vb程序设计步骤 25 2.2.1 建立新工程项目 25 2.2.2 设计程序界面 26 2.2.3 设置对象属性 26 2.2.4 编写程序代码 27 2.2.5 运行应用程序 28 2.2.6 保存应用程序 28 2.2.7 编译形成可执行文件 29 2.2.8 打包发布 29 2.3 vb控制语句的使用 30 2.3.1 赋值语句 30 2.3.2 条件语句 30 2.3.3 选择语句 31 2.3.4 循环语句 32 2.4 vb内部函数 33 2.4.1 数学函数 33 2.4.2 字符串函数 34 2.4.3 日期与时间函数 35 2.4.4 转换函数 35 2.4.5 判断函数 36 2.4.6 颜色设置函数 36 2.4.7 字符串的处理 38 2.5 vb用户界面设计 39 2.5.1 内部控件 39 2.5.2 activex控件 49 2.5.3 对话框 51 2.5.4 菜单设计 55 2.5.5 工具栏设计 57 第3章 基于板卡的数据采集与控制系统 60 3.1 数据采集与控制系统的组成 60 3.1.1 硬件子系统 60 3.1.2 软件子系统 62 3.1.3 系统特点 62 3.2 数据采集卡概述 63 3.2.1 数据采集卡的产生 63 3.2.2 数据采集卡的输入与输出信号 63 3.2.3 数据采集卡的类型 65 3.2.4 数据采集卡的性能指标 66 3.3 多功能板卡的安装 69 3.3.1 pci-1710hg多功能板卡介绍 69 3.3.2 用pci-1710hg多功能板卡组成测控系统 69 3.3.3 pci-1710hg板卡设备的安装 71 3.3.4 pci-1710hg板卡设备的测试 73 3.4 vb与数据采集 75 3.4.1 vb数据采集概述 75 3.4.2 activedaq控件的安装 75 3.4.3 activedaq控件说明 76 3.5 数据采集卡的编程方式 81 3.5.1 软件触发方式 81 3.5.2 中断传输方式 81 3.5.3 dma数据传输方式 81 3.6 在vb环境下建立activedaq应用工程 81 第4章 数据采集与控制程序设计典型实例 85 4.1 基于板卡的模拟量输入程序设计 85 4.1.1 设计目的 85 4.1.2 设计用软、硬件 85 4.1.3 硬件线路图 85 4.1.4 设计任务 86 4.1.5 任务实现 86 4.1.5.1 任务实现(一):利用activedaq控件实现模拟量输入 86 4.1.5.2 任务实现(二):利用dll函数实现模拟量输入 89 4.2 基于板卡的模拟量输出程序设计 93 4.2.1 设计目的 93 4.2.2 设计用软、硬件 93 4.2.3 硬件线路图 94 4.2.4 设计任务 94 4.2.5 任务实现 94 4.2.5.1 任务实现(一):利用activedaq控件实现模拟量输出 94 4.2.5.2 任务实现(二):利用dll函数实现模拟量输出 96 4.3 基于板卡的开关量输入程序设计 98 4.3.1 设计目的 98 4.3.2 设计用软、硬件 99 4.3.3 硬件线路图 99 4.3.4 设计任务 99 4.3.5 任务实现 100 4.3.5.1 任务实现(一):利用activedaq控件实现开关量输入 100 4.3.5.2 任务实现(二):利用dll函数实现开关量输入 101 4.4 基于板卡的开关量输出程序设计 103 4.4.1 设计目的 103 4.4.2 设计用软、硬件 103 4.4.3 硬件线路图 104 4.4.4 设计任务 104 4.4.5 任务实现 104 4.4.5.1 任务实现(一):利用activedaq控件实现开关量输出 104 4.4.5.2 任务实现(二):利用dll函数实现开关量输出 106 4.5 基于板卡的计数器输入程序设计 107 4.5.1 基于板卡的计数器输入程序设计目的 107 4.5.2 基于板卡的计数器输入程序设计用软、硬件 108 4.5.3 基于板卡的计数器输入程序硬件线路图 108 4.5.4 设计任务 108 4.5.5 任务实现 108 4.5.5.1 任务实现(一):利用activedaq控件实现计数器输入 108 4.5.5.2 任务实现(二):利用dll函数实现计数器输入 110 4.6 基于板卡的脉冲量输出程序设计 112 4.6.1 基于板卡的脉冲量输出程序设计目的 112 4.6.2 基于板卡的脉冲量输出程序设计用软、硬件 112 4.6.3 基于板卡的脉冲量输出程序硬件线路图 113 4.6.4 设计任务 113 4.6.5 任务实现 113 4.6.5.1 任务实现(一):利用activedaq控件实现脉冲量输出 113 4.6.5.2 任务实现(二):利用dll函数实现脉冲量输出 115 4.7 基于板卡的温度测量与控制程序设计 117 4.7.1 基于板卡的温度测量与控制程序设计目的 117 4.7.2 基于板卡的温度测量与控制程序设计用软、硬件 117 4.7.3 基于板卡的温度测量与控制程序硬件线路图 117 4.7.4 设计任务 118 4.7.5 任务实现 118 4.7.5.1 任务实现(一):利用activedaq控件实现温度测量与控制 118 4.7.5.2 任务实现(二):利用dll函数实现温度测量与控制 125 第5章 vb与串口通信 131 5.1 串行接口简介 131 5.1.1 串口通信的基本概念 131 5.1.2 rs-232c串口通信标准 136 5.1.3 串口通信线路连接 139 5.1.4 计算机中的串行端口 141 5.2 串行通信控件mscomm 143 5.2.1 mscomm控件处理通信的方式 143 5.2.2 mscomm控件的引用 144 5.2.3 mscomm控件的常用属性 145 5.2.4 mscomm控件的事件 149 5.2.5 mscomm控件通信步骤 151 5.3 应用api函数 152 5.3.1 动态链接库与api函数 152 5.3.2 vb与动态链接库 153 5.3.3 api函数声明 154 5.3.4 与串口通信有关的api函数 155 5.3.5 利用api函数实现串口通信的查询法 160 5.4 直接端口访问 161 5.4.1 动态链接库(dll)的生成 161 5.4.2 vb对动态键接库(dll)的读写 162 5.4.3 vb程序访问串口方式 163 5.5 串口通信调试 164 5.5.1 调试软件 164 5.5.2 串口调试应用实例 165 5.5.3 用虚拟串口调试 170 第6章 vb串口通信程序设计典型实例 172 6.1 pc与pc串口通信程序设计 172 6.1.1 pc与pc串口通信程序设计目的 172 6.1.2 pc与pc串口通信程序设计用软、硬件 172 6.1.3 pc与pc串口通信程序硬件线路图 172 6.1.4 设计任务 173 6.1.5 任务实现 173 6.1.5.1 利用mscomm控件实现字符型数据发送与接收 173 6.1.5.2 利用api函数实现字符型数据发送与接收 177 6.1.5.3 利用mscomm控件实现pc双串口互通信 182 6.2 pc与单片机串口通信程序设计 184 6.2.1 pc与单片机串口通信程序实训目的 184 6.2.2 pc与单片机串口通信程序设计用软、硬件 184 6.2.3 pc与单片机串口通信程序硬件线路图 184 6.2.4 设计任务 185 6.2.5 任务实现 185 6.2.5.1 利用keil c51实现单片机与pc串口通信任务1 185 6.2.5.2 利用vb实现pc与单片机串口通信任务1 188 6.2.5.3 利用keil c51实现单片机与pc串口通信任务2(方法1) 191 6.2.5.4 利用vb实现pc与单片机串口通信任务2(方法1) 197 6.2.5.5 利用keil c51实现单片机与pc串口通信任务2(方法2) 202 6.2.5.6 利用vb实现pc与单片机串口通信任务2(方法2) 204 6.3 pc与智能仪器串口通信程序设计 206 6.3.1 pc与智能仪器串口通信程序设计目的 206 6.3.2 pc与智能仪器串口通信程序设计用软、硬件 206 6.3.3 pc与智能仪器串口通信程序硬件线路图 206 6.3.4 设计任务 208 6.3.5 任务实现 208 6.4 pc与plc串口通信程序设计 212 6.4.1 pc与plc串口通信程序设计目的 213 6.4.2 pc与plc串口通信程序设计用软、硬件 213 6.4.3 pc与plc串口通信程序设计硬件线路图 213 6.4.4 设计任务 214 6.4.5 任务实现 214 6.4.5.1 pc与西门子s7-200plc串口通信 214 6.4.5.2 pc与三菱fx2n-32mrplc串口通信 221 6.5 pc与读卡器串口通信程序设计 228 6.5.1 pc与读卡器串口通信程序设计目的 228 6.5.2 pc与读卡器串口通信程序设计用软、硬件 228 6.5.3 pc与读卡器串口通信程序硬件线路图 229 6.5.4 设计任务 229 6.5.5 任务实现 229 6.6 pc与gsm模块串口通信程序设计 232 6.6.1 pc与gsm模块串口通信程序设计目的 233 6.6.2 pc与gsm模块串口通信程序设计用软、硬件 233 6.6.3 pc与gsm模块串口通信程序硬件线路图 233 6.6.4 设计任务 234 6.6.5 任务实现 234 6.7 pc与调制解调器串口通信程序设计 247 6.7.1 pc与调制解调器串口通信程序设计目的 247 6.7.2 pc与调制解调器串口通信程序设计用软、硬件 247 6.7.3 pc与调制解调器串口通信程序硬件线路图 247 6.7.4 设计任务 248 6.7.5 任务实现 248 6.7.5.1 用vb编程实现向调制解调器发送指令并接收返回的字符 248 6.7.5.2 调制解调器与调制解调器连线通信 249 6.8 pc与云台控制系统串口通信程序设计 251 6.8.1 pc与云台控制系统串口通信程序设计目的 251 6.8.2 pc与云台控制系统串口通信程序设计用软、硬件 251 6.8.3 pc与云台控制系统串口通信程序硬件线路图 252 6.8.4 设计任务 252 6.8.5 任务实现 252 6.9 pc与电机驱动系统串口通信程序设计 257 6.9.1 pc与电机驱动系统串口通信程序设计目的 258 6.9.2 pc与电机驱动系统串口通信程序设计用软、硬件 258 6.9.3 pc与电机驱动系统串口通信程序硬件线路图 258 6.9.4 设计任务 259 6.9.5 任务实现 259 6.10 pc与常用测试仪器串口通信程序设计 262 6.10.1 pc与常用测试仪器串口通信程序设计目的 263 6.10.2 pc与常用测试仪器串口通信程序设计用软、硬件 263 6.10.3 pc与常用测试仪器串口通信程序硬件线路图 263 6.10.4 设计任务 263 6.10.5 任务实现 263 6.10.5.1 vb与噪音计串口通信 263 6.10.5.2 vb与电功率计串口通信 266 6.10.5.3 vb与转速计串口通信 270 第7章 集散控制系统及其程序设计典型实例 273 7.1 中小型dcs 273 7.1.1 中小型dcs的基本结构 273 7.1.2 rs-485串口通信标准 274 7.2 can总线控制技术 276 7.2.1 can总线技术特点 276 7.2.2 can总线接口的结构 277 7.2.3 典型的can总线测控系统 277 7.3 pc与智能仪器构成的dcs程序设计 279 7.3.1 pc与智能仪器构成的dcs程序设计目的 279 7.3.2 pc与智能仪器构成的dcs程序设计用软、硬件 280 7.3.3 pc与智能仪器构成的dcs程序硬件线路图 280 7.3.4 设计任务 281 7.3.5 任务实现 282 7.4 pc与远程i/o模块构成的dcs程序设计 287 7.4.1 pc与远程i/o模块构成的dcs程序设计目的 287 7.4.2 pc与远程i/o模块构成的dcs程序设计用软、硬件 287 7.4.3 pc与远程i/o模块构成的dcs程序硬件线路图 287 7.4.4 设计任务 291 7.4.5 任务实现 291 7.5 pc与can总线模块构成的dcs程序设计 294 7.5.1 pc与can总线模块构成的dcs程序设计目的 295 7.5.2 pc与can总线模块构成的dcs程序设计用软、硬件 295 7.5.3 pc与can总线模块构成的dcs程序硬件线路图 295 7.5.4 设计任务 296 7.5.5 任务实现 296 参考文献 302
DELPHI串口编程剖析 1 第一章 背景知识 3 1. 概述 3 2. 什么是接口? 3 3. 接口分类. 3 4. 为什么需要I/O接口? 3 5. I/O接口的功能 4 6. I/O接口的通信方式 5 7. I/O接口的分类 5 8. 串口的分类 8 9. 串口通信分类 11 10. 奇偶校验 12 第二章 串口通信编程简介 13 1. 串口的通信编程流程 13 2. Unix平台下对串口进行开发的方法 13 3. Windows平台下对串口进行开发的方法 13 第三章 使用DELPHI工具进行串口通信编程 15 第四章 串口编程的调试及其相关工具 27 串口通信编程剖析 第一章 背景知识 1. 概述 串口是计算机上I/O接口的一种,要掌握串口通信编程的相关知识,必须先了解I/O接口的相关知识。 I/O接口是接口的一种。 2. 什么是接口? 众所知计算机是由CPU,存储器,外部终端设备组成. 接口就是用于CPU与外部设备、存储器的连接和数据交换的设备。 3. 接口分类. 广义的计算机接口有二种,见下表: 类別 用途 电路实现复杂性 存储器接口: 用于CPU与外部设备、存储器的连接 简单 I/O接口 数据交换 复杂 习惯上说到接口只是指I/O接口。本文沒作特別介绍的地方都叫I/O接口. 4. 为什么需要I/O接口? 计算机的外围设备品种繁多,几乎都采用了机电传动设备,因此,CPU在与I/O设备进行数据交换时存在以下问题: 速度不匹配: I/O设备的工作速度要比CPU慢许多,而且由于种类的不同,他们之间的速度差异也很大,例如硬盘的传输速度就要比打印机快出很多。 时序不匹配: 各个I/O设备都有自己的定时控制电路,以自己的速度传 输数据,无法与CPU的时序取得统一。 信息格式不匹配: 不同的I/O设备存储和处理信息的格式不同,例如可以分为串行和并行两种;也可以分为二进制格式、ACSII编码和BCD编码等。 信息类型不匹配: 不同I/O设备采用的信号类型不同,有些是数字信号,而有些是模拟信号,因此所采用的处理方式也不同。    基于以上原因,CPU与外设之间的数据交换必须通过I/O接口来完成。 5. I/O接口的功能 通常I/O接口有以下一些功能: 1)设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度 差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输; 2)能够进行信息格式的转换,例如串行和并行的转换; 3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平 转换驱动器、数/模或模/数转换器等;    4)协调时序差异;    5)地址译码和设备选择功能;    6)设置中断DMA控制逻辑,以保证在中断DMA允许的情况下产生中断DMA请求信号,并在接受到中断DMA应答之后完成中断处理和DMA传输。    6. I/O接口的通信方式 CPU通过接口对外设进行控制的方式有以下几种: 1)程序查询方式 这种方式下,CPU通过I/O指令询问指定外设当前的状态,如果外设 准备就绪,则进行数据的输入或输出,否则CPU等待,循环查询。 这种方式的优点是结构简单,只需要少量的硬件电路即可,缺点是由 于CPU的速度远远高于外设,因此通常处于等待状态,工作效率很 低。 2)中断处理方式 在这种方式下,CPU不再被动等待,而是可以执行其他程序,一旦 外设为数据交换准备就绪,可以向CPU提出服务请求,CPU如果响 应该请求,便暂时停止当前程序的执行,转去执行与该请求对应的 服务程序,完成后,再继续执行原来被中断的程序。   中断处理方式的优点是显而易见的,它不但为CPU省去了查询外设 状态和等待外设就绪所花费的时间,提高了CPU的工作效率,还满 足了外设的实时要求。但需要为每个I/O设备分配一个中断请求号 和相应的中断服务程序,此外还需要一个中断控制器(I/O接口芯 片)管理I/O设备提出的中断请求,例如设置中断屏蔽、中断请求 优先级等。此外,中断处理方式的缺点是每传送一个字符都要进行 中断,启动中断控制器,还要保留和恢复现场以便能继续原程序的 执行,花费的工作量很大,这样如果需要大量数据交换,系统的性 能会很低。 3)DMA(直接存储器存取)传送方式 DMA最明显的一个特点是它不是用软件而是采用一个专门的控制 器来控制内存与外设之间的数据交流,无须CPU介入,大大提高 CPU的工作效率。   在进行DMA数据传送之前,DMA控制器会向CPU申请总线控 制 权,CPU如果允许,则将控制权交出,因此,在数据交换时, 总线控制权由DMA控制器掌握,在传输结束后,DMA控制器将 总线控制权交还给CPU。    7. I/O接口的分类 7.1. 并行接口   目前,计算机中的并行接口主要作为打印机端口,接口使用的不再是36针接头而是25针D形接头。所谓“并行”,是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,容易出错。   现在有五种常见的并口:4位、8位、半8位、EPP和ECP,大多数PC机配有4位或8位的并口,许多利用Intel386芯片组的便携机配有EPP口,支持全部IEEE1284并口规格的计算机配有ECP并口。   标准并行口4位、8位、半8位:   4位口一次只能输入4位数据,但可以输出8位数据;8位口可以一次输入和输出8位数据;半8位也可以。   EPP口(增强并行口):由Intel等公司开发,允许8位双向数据传送,可以连接各种非打印机设备,如扫描仪、LAN适配器、磁盘驱动器和CDROM 驱动器等。   ECP口(扩展并行口):由Microsoft、HP公司开发,能支持命令期、数据期和多个逻辑设备寻址,在多任务环境下可以使用DMA(直接存储器 访问)。   目前几乎所有的586机的主板都集成了并行口插座,标注为 Paralle1或LPT1,是一个26针的双排针插座。 7.2. 串行接口   计算机的另一种标准接口是串行口,现在的PC机一般至少有两个串行口COM1和COM2。串行口不同于并行口之处在于它的数据和控制信息是一位接一位串行地传送下去。这样,虽然速度会慢一些,但传送距离较并行口更长,因此长距离的通信应使用串行口。通常COM1使用的是9针D形连接器,而COM2有些使 用的是老式的DB25针连接器。    7.3. 磁盘接口 1)IDE接口   IDE接口也叫做ATA端口,只可以接两个容量不超过528M的硬盘驱动器,接口的成本很低,因此在386、486时期非常流行。但大多数IDE接口不支持DMA数据传送,只能使用标准的PCI/O端口指令来传送所有的命令、状态、数据。几乎所有的586主板上都集成了两个40针的双排针IDE接口插座,分别标注为IDE1和IDE2。 2)EIDE接口 EIDE接口较IDE接口有了很大改进,是目前最流行的接口。 首先,它所支持的外设不再是2个而是4个了,所支持的设备除了硬盘,还包括CD-ROM驱动器磁盘备份设备等。   其次,EIDE标准取消了528MB的限制,代之以8GP限制。   第三,EIDE有更高的数据传送速率,支持PIO模式3和模式4标准。    7.4. SCSI接口   SCSI(SmallComputerSystemInterface)小计算机系统接口,在做图形处理和网络服务的计算机中被广泛采用SCSI接口的硬盘。除了硬盘以外,SCSI接口还可以连接CD-ROM驱动器、扫描仪和打印机等,它具有以下特点:   *可同时连接7个外设;   *总线配置为并行8位、16位或32位;   *允许最大硬盘空间为8.4GB(有些已达到9.09GB);   *更高的数据传输速率,IDE是2MB每秒,SCSI通常可以达到5MB每秒,FASTSCSI(SCSI-2)能达到10MB每秒,最新的SCSI-3甚至能够达到40MB每秒,而EIDE最高只能达到16.6MB每秒;   *成本较IDE和EIDE接口高很多,而且,SCSI接口硬盘必须和SCSI接口卡配合使用,SCSI接口卡也比IED和EIDE接口贵很多。   *SCSI接口是智能化的,可以彼此通信而不增加CPU的负担。在IDE和EIDE设备之间传输数据时,CPU必须介入,而SCSI设备在数据传输过程中起主动作用,并能在SCSI总线内部具体执行,直至完成再通知CPU。   
作者: 李江全 汤智辉 朱东芹 出版社:人民邮电出版社  本书从测控工程应用的角度出发,对visual basic(缩写vb)开发测控程序的各种方法进行了全面阐述。内容包括在vb工程中调用activex控件和dll动态链接库等开发板卡数据采集与控制程序,在vb工程中利用mscomm控件、调用api函数等方法开发串口通信程序等。每种程序都提供了多个设计方法,每个设计都提供了线路图、详细的任务实现和完整的程序代码,所有代码均编译通过。   书中提供的典型测控应用实例都有详细的操作步骤,学习者可以按步骤用vb编程实现各种测控功能,实践操作性强是本书的特色。   本书内容丰富,论述深入浅出,有较强的实用性和可操作性,可供自动化、计算机应用、电子信息、机电一体化、测控仪器等专业的大学生、研究生以及从事计算机测控系统研发的工程技术人员学习和参考。 目录 第1章 计算机测控系统概述 1 1.1 计算机测控系统的含义与工作原理 1 1.1.1 计算机测控系统的含义 1 1.1.2 计算机测控系统的工作原理 2 1.2 计算机测控系统的任务和特点 3 1.2.1 计算机测控系统的任务 3 1.2.2 计算机测控系统的特点 5 1.3 计算机测控系统的组成 5 1.3.1 测控系统硬件组成 6 1.3.2 测控系统软件组成 8 1.4 计算机测控系统的分类 10 1.4.1 按功能分类 10 1.4.2 按设备形式分类 15 1.5 计算机测控系统应用软件的开发工具 17 1.5.1 面向机器的语言 17 1.5.2 高级语言 18 1.5.3 组态软件 19 第2章 vb程序设计基础 20 2.1 vb语言概述 20 2.1.1 vb语言的特点 20 .2.1.2 vb中文版集成开发环境 21 2.1.3 vb的操作对象 24 2.2 vb程序设计步骤 25 2.2.1 建立新工程项目 25 2.2.2 设计程序界面 26 2.2.3 设置对象属性 26 2.2.4 编写程序代码 27 2.2.5 运行应用程序 28 2.2.6 保存应用程序 28 2.2.7 编译形成可执行文件 29 2.2.8 打包发布 29 2.3 vb控制语句的使用 30 2.3.1 赋值语句 30 2.3.2 条件语句 30 2.3.3 选择语句 31 2.3.4 循环语句 32 2.4 vb内部函数 33 2.4.1 数学函数 33 2.4.2 字符串函数 34 2.4.3 日期与时间函数 35 2.4.4 转换函数 35 2.4.5 判断函数 36 2.4.6 颜色设置函数 36 2.4.7 字符串的处理 38 2.5 vb用户界面设计 39 2.5.1 内部控件 39 2.5.2 activex控件 49 2.5.3 对话框 51 2.5.4 菜单设计 55 2.5.5 工具栏设计 57 第3章 基于板卡的数据采集与控制系统 60 3.1 数据采集与控制系统的组成 60 3.1.1 硬件子系统 60 3.1.2 软件子系统 62 3.1.3 系统特点 62 3.2 数据采集卡概述 63 3.2.1 数据采集卡的产生 63 3.2.2 数据采集卡的输入与输出信号 63 3.2.3 数据采集卡的类型 65 3.2.4 数据采集卡的性能指标 66 3.3 多功能板卡的安装 69 3.3.1 pci-1710hg多功能板卡介绍 69 3.3.2 用pci-1710hg多功能板卡组成测控系统 69 3.3.3 pci-1710hg板卡设备的安装 71 3.3.4 pci-1710hg板卡设备的测试 73 3.4 vb与数据采集 75 3.4.1 vb数据采集概述 75 3.4.2 activedaq控件的安装 75 3.4.3 activedaq控件说明 76 3.5 数据采集卡的编程方式 81 3.5.1 软件触发方式 81 3.5.2 中断传输方式 81 3.5.3 dma数据传输方式 81 3.6 在vb环境下建立activedaq应用工程 81 第4章 数据采集与控制程序设计典型实例 85 4.1 基于板卡的模拟量输入程序设计 85 4.1.1 设计目的 85 4.1.2 设计用软、硬件 85 4.1.3 硬件线路图 85 4.1.4 设计任务 86 4.1.5 任务实现 86 4.1.5.1 任务实现(一):利用activedaq控件实现模拟量输入 86 4.1.5.2 任务实现(二):利用dll函数实现模拟量输入 89 4.2 基于板卡的模拟量输出程序设计 93 4.2.1 设计目的 93 4.2.2 设计用软、硬件 93 4.2.3 硬件线路图 94 4.2.4 设计任务 94 4.2.5 任务实现 94 4.2.5.1 任务实现(一):利用activedaq控件实现模拟量输出 94 4.2.5.2 任务实现(二):利用dll函数实现模拟量输出 96 4.3 基于板卡的开关量输入程序设计 98 4.3.1 设计目的 98 4.3.2 设计用软、硬件 99 4.3.3 硬件线路图 99 4.3.4 设计任务 99 4.3.5 任务实现 100 4.3.5.1 任务实现(一):利用activedaq控件实现开关量输入 100 4.3.5.2 任务实现(二):利用dll函数实现开关量输入 101 4.4 基于板卡的开关量输出程序设计 103 4.4.1 设计目的 103 4.4.2 设计用软、硬件 103 4.4.3 硬件线路图 104 4.4.4 设计任务 104 4.4.5 任务实现 104 4.4.5.1 任务实现(一):利用activedaq控件实现开关量输出 104 4.4.5.2 任务实现(二):利用dll函数实现开关量输出 106 4.5 基于板卡的计数器输入程序设计 107 4.5.1 基于板卡的计数器输入程序设计目的 107 4.5.2 基于板卡的计数器输入程序设计用软、硬件 108 4.5.3 基于板卡的计数器输入程序硬件线路图 108 4.5.4 设计任务 108 4.5.5 任务实现 108 4.5.5.1 任务实现(一):利用activedaq控件实现计数器输入 108 4.5.5.2 任务实现(二):利用dll函数实现计数器输入 110 4.6 基于板卡的脉冲量输出程序设计 112 4.6.1 基于板卡的脉冲量输出程序设计目的 112 4.6.2 基于板卡的脉冲量输出程序设计用软、硬件 112 4.6.3 基于板卡的脉冲量输出程序硬件线路图 113 4.6.4 设计任务 113 4.6.5 任务实现 113 4.6.5.1 任务实现(一):利用activedaq控件实现脉冲量输出 113 4.6.5.2 任务实现(二):利用dll函数实现脉冲量输出 115 4.7 基于板卡的温度测量与控制程序设计 117 4.7.1 基于板卡的温度测量与控制程序设计目的 117 4.7.2 基于板卡的温度测量与控制程序设计用软、硬件 117 4.7.3 基于板卡的温度测量与控制程序硬件线路图 117 4.7.4 设计任务 118 4.7.5 任务实现 118 4.7.5.1 任务实现(一):利用activedaq控件实现温度测量与控制 118 4.7.5.2 任务实现(二):利用dll函数实现温度测量与控制 125 第5章 vb与串口通信 131 5.1 串行接口简介 131 5.1.1 串口通信的基本概念 131 5.1.2 rs-232c串口通信标准 136 5.1.3 串口通信线路连接 139 5.1.4 计算机中的串行端口 141 5.2 串行通信控件mscomm 143 5.2.1 mscomm控件处理通信的方式 143 5.2.2 mscomm控件的引用 144 5.2.3 mscomm控件的常用属性 145 5.2.4 mscomm控件的事件 149 5.2.5 mscomm控件通信步骤 151 5.3 应用api函数 152 5.3.1 动态链接库与api函数 152 5.3.2 vb与动态链接库 153 5.3.3 api函数声明 154 5.3.4 与串口通信有关的api函数 155 5.3.5 利用api函数实现串口通信的查询法 160 5.4 直接端口访问 161 5.4.1 动态链接库(dll)的生成 161 5.4.2 vb对动态键接库(dll)的读写 162 5.4.3 vb程序访问串口方式 163 5.5 串口通信调试 164 5.5.1 调试软件 164 5.5.2 串口调试应用实例 165 5.5.3 用虚拟串口调试 170 第6章 vb串口通信程序设计典型实例 172 6.1 pc与pc串口通信程序设计 172 6.1.1 pc与pc串口通信程序设计目的 172 6.1.2 pc与pc串口通信程序设计用软、硬件 172 6.1.3 pc与pc串口通信程序硬件线路图 172 6.1.4 设计任务 173 6.1.5 任务实现 173 6.1.5.1 利用mscomm控件实现字符型数据发送与接收 173 6.1.5.2 利用api函数实现字符型数据发送与接收 177 6.1.5.3 利用mscomm控件实现pc双串口互通信 182 6.2 pc与单片机串口通信程序设计 184 6.2.1 pc与单片机串口通信程序实训目的 184 6.2.2 pc与单片机串口通信程序设计用软、硬件 184 6.2.3 pc与单片机串口通信程序硬件线路图 184 6.2.4 设计任务 185 6.2.5 任务实现 185 6.2.5.1 利用keil c51实现单片机与pc串口通信任务1 185 6.2.5.2 利用vb实现pc与单片机串口通信任务1 188 6.2.5.3 利用keil c51实现单片机与pc串口通信任务2(方法1) 191 6.2.5.4 利用vb实现pc与单片机串口通信任务2(方法1) 197 6.2.5.5 利用keil c51实现单片机与pc串口通信任务2(方法2) 202 6.2.5.6 利用vb实现pc与单片机串口通信任务2(方法2) 204 6.3 pc与智能仪器串口通信程序设计 206 6.3.1 pc与智能仪器串口通信程序设计目的 206 6.3.2 pc与智能仪器串口通信程序设计用软、硬件 206 6.3.3 pc与智能仪器串口通信程序硬件线路图 206 6.3.4 设计任务 208 6.3.5 任务实现 208 6.4 pc与plc串口通信程序设计 212 6.4.1 pc与plc串口通信程序设计目的 213 6.4.2 pc与plc串口通信程序设计用软、硬件 213 6.4.3 pc与plc串口通信程序设计硬件线路图 213 6.4.4 设计任务 214 6.4.5 任务实现 214 6.4.5.1 pc与西门子s7-200plc串口通信 214 6.4.5.2 pc与三菱fx2n-32mrplc串口通信 221 6.5 pc与读卡器串口通信程序设计 228 6.5.1 pc与读卡器串口通信程序设计目的 228 6.5.2 pc与读卡器串口通信程序设计用软、硬件 228 6.5.3 pc与读卡器串口通信程序硬件线路图 229 6.5.4 设计任务 229 6.5.5 任务实现 229 6.6 pc与gsm模块串口通信程序设计 232 6.6.1 pc与gsm模块串口通信程序设计目的 233 6.6.2 pc与gsm模块串口通信程序设计用软、硬件 233 6.6.3 pc与gsm模块串口通信程序硬件线路图 233 6.6.4 设计任务 234 6.6.5 任务实现 234 6.7 pc与调制解调器串口通信程序设计 247 6.7.1 pc与调制解调器串口通信程序设计目的 247 6.7.2 pc与调制解调器串口通信程序设计用软、硬件 247 6.7.3 pc与调制解调器串口通信程序硬件线路图 247 6.7.4 设计任务 248 6.7.5 任务实现 248 6.7.5.1 用vb编程实现向调制解调器发送指令并接收返回的字符 248 6.7.5.2 调制解调器与调制解调器连线通信 249 6.8 pc与云台控制系统串口通信程序设计 251 6.8.1 pc与云台控制系统串口通信程序设计目的 251 6.8.2 pc与云台控制系统串口通信程序设计用软、硬件 251 6.8.3 pc与云台控制系统串口通信程序硬件线路图 252 6.8.4 设计任务 252 6.8.5 任务实现 252 6.9 pc与电机驱动系统串口通信程序设计 257 6.9.1 pc与电机驱动系统串口通信程序设计目的 258 6.9.2 pc与电机驱动系统串口通信程序设计用软、硬件 258 6.9.3 pc与电机驱动系统串口通信程序硬件线路图 258 6.9.4 设计任务 259 6.9.5 任务实现 259 6.10 pc与常用测试仪器串口通信程序设计 262 6.10.1 pc与常用测试仪器串口通信程序设计目的 263 6.10.2 pc与常用测试仪器串口通信程序设计用软、硬件 263 6.10.3 pc与常用测试仪器串口通信程序硬件线路图 263 6.10.4 设计任务 263 6.10.5 任务实现 263 6.10.5.1 vb与噪音计串口通信 263 6.10.5.2 vb与电功率计串口通信 266 6.10.5.3 vb与转速计串口通信 270 第7章 集散控制系统及其程序设计典型实例 273 7.1 中小型dcs 273 7.1.1 中小型dcs的基本结构 273 7.1.2 rs-485串口通信标准 274 7.2 can总线控制技术 276 7.2.1 can总线技术特点 276 7.2.2 can总线接口的结构 277 7.2.3 典型的can总线测控系统 277 7.3 pc与智能仪器构成的dcs程序设计 279 7.3.1 pc与智能仪器构成的dcs程序设计目的 279 7.3.2 pc与智能仪器构成的dcs程序设计用软、硬件 280 7.3.3 pc与智能仪器构成的dcs程序硬件线路图 280 7.3.4 设计任务 281 7.3.5 任务实现 282 7.4 pc与远程i/o模块构成的dcs程序设计 287 7.4.1 pc与远程i/o模块构成的dcs程序设计目的 287 7.4.2 pc与远程i/o模块构成的dcs程序设计用软、硬件 287 7.4.3 pc与远程i/o模块构成的dcs程序硬件线路图 287 7.4.4 设计任务 291 7.4.5 任务实现 291 7.5 pc与can总线模块构成的dcs程序设计 294 7.5.1 pc与can总线模块构成的dcs程序设计目的 295 7.5.2 pc与can总线模块构成的dcs程序设计用软、硬件 295 7.5.3 pc与can总线模块构成的dcs程序硬件线路图 295 7.5.4 设计任务 296 7.5.5 任务实现 296 参考文献 302
第1章 微型计算机概述 1 1.1 微型计算机的发展与应用 1 1.1.1 微处理器的产生和发展 1 1.1.2 微型计算机的分类 4 1.1.3 微型计算机的特点与性能指标 4 1.1.4 微型计算机的应用 6 1.2 微型计算机的硬件结构及系统组成 8 1.2.1 微型计算机硬件的基本结构 8 1.2.2 微型计算机的系统组成 11 1.3 计算机中的信息表示 12 1.3.1 计算机中的数制及其转换 13 1.3.2 计算机中数值数据的表示 15 1.3.3 计算机中常用的编码 18 本章小结 21 思考与练习题 21 第2章 典型微处理器 23 2.1 微处理器性能简介 23 2.1.1 典型微处理器的主要性能指标 23 2.1.2 微处理器的基本功能 24 2.2 Intel 8086微处理器的内、外部结构特性 24 2.2.1 8086微处理器内部组成结构 24 2.2.2 8086微处理器的寄存器 结构 27 2.2.3 8086微处理器的外部引脚特性 30 2.3 存储器和I/O组织 32 2.3.1 存储器组织 32 2.3.2 I/O端口组织 36 2.4 8086微处理器的总线期和工作方式 36 2.4.1 8284A时钟信号发生器 37 2.4.2 8086总线期 37 2.4.3 8086微处理器的最小/最大工作方式 38 2.5 32位微处理器简介 41 2.5.1 80386微处理器 41 2.5.2 80486微处理器 42 2.5.3 Pentium系列微处理器 44 2.5.4 Pentium微处理器采用的新技术 48 本章小结 50 思考与练习题 50 第3章 寻址方式与指令系统 53 3.1 指令格式及寻址 53 3.1.1 指令系统与指令格式 53 3.1.2 寻址及寻址方式的概念 54 3.2 8086指令系统的寻址方式 54 3.2.1 与操作数有关的寻址方式 55 3.2.2 与I/O端口有关的寻址方式 57 3.3 8086指令系统 58 3.3.1 数据传送类指令 58 3.3.2 算术运算类指令 61 3.3.3 逻辑运算与移位类指令 64 3.3.4 串操作类指令 67 3.3.5 控制转移类指令 70 3.3.6 处理器控制类指令 74 3.4 DOS和BIOS中断调用 74 3.4.1 DOS功能调用 74 3.4.2 BIOS中断调用 76 3.5 Pentium微处理器新增寻址方式和指令 76 3.5.1 Pentium微处理器的内部寄存器 76 3.5.2 Pentium微处理器的新增寻址方式 77 3.5.3 Pentium系列微处理器专用指令 78 3.5.4 Pentium系列微处理器控制指令 78 本章小结 79 思考与练习题 79 第4章 汇编语言 82 4.1 汇编语言简述 82 4.1.1 汇编语言及语句格式 82 4.1.2 汇编语言程序结构 86 4.1.3 汇编语言常用伪指令 87 4.1.4 汇编语言程序上机过程 94 4.2 汇编语言程序设计 94 4.2.1 程序设计的基本步骤及 程序基本结构 94 4.2.2 顺序结构程序设计 96 4.2.3 分支结构程序设计 98 4.2.4 循环结构程序设计 101 4.2.5 子程序设计 103 4.2.6 DOS调用程序设计 105 4.3 高级汇编技术 107 4.3.1 宏汇编 107 4.3.2 重复汇编与条件汇编 109 本章小结 113 思考与练习题 114 第5章 总线技术 116 5.1 概述 116 5.1.1 总线的概念 116 5.1.2 总线的结构 117 5.1.3 总线的分类 118 5.1.4 总线性能及标准 119 5.1.5 总线传输和控制 120 5.2 系统总线 121 5.2.1 概述 121 5.2.2 ISA总线 122 5.3 局部总线 128 5.3.1 PCI总线 128 5.3.2 AGP总线 132 5.4 外部设备总线 133 5.4.1 USB总线 133 5.4.2 IEEE 1394总线 136 5.5 I2C总线 139 5.5.1 I2C总线简介 139 5.5.2 I2C总线特性 139 5.5.3 I2C总线原理 140 本章小结 141 思考与练习题 141 第6章 存储器系统 143 6.1 存储器概述 143 6.1.1 存储器的分类 143 6.1.2 存储器的常用性能指标 144 6.1.3 存储系统的层次结构 145 6.1.4 半导体存储器的结构 146 6.2 随机存取存储器(RAM) 148 6.2.1 静态RAM(SRAM) 148 6.2.2 动态RAM(DRAM) 150 6.3 只读存储器(ROM) 152 6.3.1 掩膜ROM 152 6.3.2 可编程PROM 153 6.3.3 光可擦除EPROM 153 6.3.4 电可擦除E2PROM 153 6.3.5 闪速存储器 154 6.4 存储器的扩展与寻址 154 6.4.1 位扩展 155 6.4.2 字扩展 155 6.4.3 字位扩展 155 6.4.4 存储器的寻址 156 6.5 存储器与微处理器的连接 157 6.5.1 连接时应注意的问题 157 6.5.2 典型微处理器与存储器的连接 157 6.6 辅助存储器 159 6.6.1 硬盘存储器及其接口 159 6.6.2 光盘存储器及其接口 162 6.7 新型存储器技术 164 6.7.1 多体交叉存储器 165 6.7.2 高速缓冲存储器(cache) 165 6.7.3 虚拟存储器 167 本章小结 169 思考与练习题 170 第7章 输入/输出接口技术 172 7.1 概述 172 7.1.1 输入/输出接口电路要解决的问题 172 7.1.2 输入/输出接口的结构与功能 173 7.1.3 CPU与I/O接口之间传递的信息 175 7.1.4 I/O端口的编址方式 176 7.2 输入/输出的数据传送方式 177 7.2.1 无条件传送方式 177 7.2.2 查询传送方式 178 7.2.3 中断传送方式 180 7.2.4 DMA传送方式 182 本章小结 183 思考与练习题 183 第8章 可编程DMA控制器8237A 184 8.1 概述 184 8.1.1 8237A的主要功能 184 8.1.2 8237A的工作状态 184 8.2 8237A内部结构及引脚 185 8.2.1 8237A内部结构 185 8.2.2 8237A引脚及功能 186 8.3 8237A的工作方式 188 8.3.1 单字节传送方式 188 8.3.2 数据块传送方式 188 8.3.3 请求传送方式 189 8.3.4 级联传送方式 189 8.4 8237A内部寄存器功能及格式 189 8.4.1 当前地址寄存器 190 8.4.2 当前字节寄存器 190 8.4.3 基地址寄存器 190 8.4.4 基字节寄存器 190 8.4.5 命令寄存器 191 8.4.6 工作方式寄存器 192 8.4.7 请求寄存器 193 8.4.8 屏蔽寄存器 193 8.4.9 状态寄存器 194 8.4.10 暂存寄存器 195 8.4.11 软件命令 195 8.5 8237A的编程及应用 195 8.5.1 8237A主要寄存器端口地址分配 195 8.5.2 8237A编程一般步骤 196 8.5.3 8237A应用举例 198 本章小结 199 思考与练习题 199 第9章 中断技术 200 9.1 概述 200 9.1.1 中断的概念 200 9.1.2 中断源 201 9.1.3 中断处理过程 202 9.1.4 中断优先级管理 204 9.2 8086中断系统 206 9.2.1 中断类型 206 9.2.2 中断向量表 208 9.3 可编程中断控制器8259A及其应用 209 9.3.1 8259A内部结构及引脚 210 9.3.2 8259A中断管理方式 212 9.3.3 8259A中断响应过程 215 9.3.4 8259A编程及应用 215 本章小结 223 思考与练习题 224 第10章 可编程并行接口芯片8255A 225 10.1 并行接口概述 225 10.1.1 并行接口的分类 225 10.1.2 并行接口的特点 226 10.2 并行接口芯片8255A 226 10.2.1 内部结构及引脚 226 10.2.2 8255A的工作方式 229 10.2.3 8255A的编程及应用 235 本章小结 239 思考与练习题 239 第11章 可编程串行接口芯片8251A 241 11.1 串行传输的基本概念 241 11.1.1 串行通信概述 241 11.1.2 信号的调制与解调 243 11.2 串行接口芯片8251A 244 11.2.1 8251A的基本性能 244 11.2.2 8251A的基本结构 244 11.2.3 8251A的编程控制 248 11.2.4 8251A的初始化和编程应用 250 11.3 PC串行异步通信接口 254 11.3.1 串行异步通信的 基本概念 254 11.3.2 BIOS串行异步通信接口的功能调用 255 本章小结 258 思考与练习题 259 第12章 可编程定时器/计数器接口芯片8253 260 12.1 可编程定时器/计数器8253 260 12.1.1 定时器/计数器的基本原理 260 12.1.2 8253的特点 261 12.1.3 8253内部结构和 引脚功能 261 12.1.4 8253的初始化 263 12.1.5 8253的工作方式 265 12.2 8253的应用 272 12.2.1 8253的初始化编程 272 12.2.2 8253与系统的连接 273 12.2.3 8253应用实例 274 本章小结 275 思考与练习题 276 第13章 人机交互设备及接口 277 13.1 人机交互设备概述 277 13.2 键盘与鼠标 278 13.2.1 键盘的分类及工作原理 278 13.2.2 PC键盘分类及编程应用 281 13.2.3 鼠标工作原理及编程应用 284 13.3 显示器及接口 285 13.3.1 CRT显示器 286 13.3.2 CRT显示器接口电路编程方法 291 13.3.3 LED与LCD显示 294 13.4 打印机接口 298 13.4.1 常用打印机及工作原理 298 13.4.2 主机与打印机的接口 299 13.4.3 打印机的中断调用 300 13.5 其他外设简介 301 13.5.1 扫描仪原理及性能指标 301 13.5.2 数码照相机原理及其应用 302 13.5.3 触摸屏原理及其应用 303 本章小结 303 思考与练习题 304 第14章 D/A及A/D转换器 306 14.1 概述 306 14.2 典型D/A转换器及其应用 307 14.2.1 D/A转换器工作原理 307 14.2.2 D/A转换器的主要性能指标 309 14.2.3 8位D/A转换器DAC0832及其应用 309 14.3 典型A/D转换器及其应用 314 14.3.1 A/D转换器工作原理 314 14.3.2 A/D转换器的主要性能指标 315 14.3.3 8位A/D转换器ADC0809及其应用 316 14.3.4 A/D转换器的选择原则 322 14.4 A/D和D/A转换的应用实例 323 本章小结 324 思考与练习题 324
1. 配置串口使用串口通信前,需要对串口进行配置。配置包括波特率、数据位、停止位、奇偶校验位等等。以STM32F103C8T6为例,使用的是USART1,所以需要先打开USART1外设时钟,然后进行配置。以下是代码示例: //打开USART1外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //定义USART1相关参数 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; //波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位长度 USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶校验位 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制 //初始化USART1 USART_Init(USART1, &USART_InitStructure); //使能USART1 USART_Cmd(USART1, ENABLE); 2. 配置DMA DMA是直接内存访问,可以在无需CPU干预的情况下进行数据传输。使用DMA可以提高数据传输效率,提高系统性能。在使用DMA前,需要打开DMA外设时钟,然后进行配置。以下是代码示例: //打开DMA外设时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //定义DMA相关参数 DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; //外设地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)TxBuffer; //存储器地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //数据传输方向,外设到存储器 DMA_InitStructure.DMA_BufferSize = TxBufferSize; //数据传输量 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址不增加 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //存储器地址自增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设数据宽度,字节 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //存储器数据宽度,字节 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //DMA传输模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA传输优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //存储器到存储器传输禁止 //初始化DMA DMA_Init(DMA1_Channel4, &DMA_InitStructure); 3. 配置中断串口接收数据时,需要配置中断来处理接收到的数据。以USART1为例,需要打开USART1接收中断,然后在中断处理函数中读取接收到的数据。以下是代码示例: //打开USART1接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //中断处理函数 void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断是否接收到数据 { RxBuffer[RxCounter++] = USART_ReceiveData(USART1); //读取接收到的数据 if(RxCounter == RxBufferSize) //接收到的数据量达到预设值,关闭接收中断 { USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); } } } 4. 发送数据 在发送数据时,需要使用DMA进行数据传输。以USART1为例,需要打开DMA发送通道,然后启动DMA传输。以下是代码示例: //打开DMA发送通道 DMA_Cmd(DMA1_Channel4, ENABLE); //启动DMA传输 USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值