单片机控制技术进阶:深入理解中断、定时器和通信

发布时间: 2024-07-12 03:45:36 阅读量: 62 订阅数: 28
PDF

51单片机进阶,处于瓶颈的你必看!

![单片机控制技术进阶:深入理解中断、定时器和通信](https://img-service.csdnimg.cn/img_convert/ad7648f42e98693eb08ed69a31f40107.png) # 1. 单片机控制技术基础 单片机是一种集成了微处理器、存储器和输入/输出接口于一体的微型计算机。它具有体积小、功耗低、成本低、可靠性高、易于使用等优点,广泛应用于各种电子设备中。 单片机控制技术是利用单片机来控制外部设备或系统的一种技术。它涉及到单片机的硬件结构、软件编程、系统设计等方面。通过学习单片机控制技术,可以掌握单片机的基本原理、编程方法和应用技巧,为后续的单片机系统开发奠定基础。 # 2. 单片机中断机制 ### 2.1 中断的类型和优先级 中断是单片机处理突发事件的一种机制,当外部事件或内部事件发生时,单片机会暂停当前正在执行的程序,转而执行中断服务程序。中断按其来源可分为外部中断和内部中断。 #### 2.1.1 外部中断 外部中断是由外部设备或信号触发,例如按钮按下、传感器检测到变化等。外部中断通常通过单片机的外部中断引脚触发,可以配置为上升沿触发、下降沿触发或电平触发。 #### 2.1.2 内部中断 内部中断是由单片机内部事件触发,例如定时器溢出、看门狗定时器超时等。内部中断通常通过单片机的内部中断控制器触发,可以配置为使能或禁止。 ### 2.2 中断处理程序 当发生中断时,单片机会执行中断服务程序(ISR)。ISR是一段专门用于处理中断事件的代码,通常由编译器自动生成。 #### 2.2.1 中断服务程序的编写 ISR的编写需要遵循以下步骤: 1. **保存现场:**ISR开始时,需要保存当前程序的现场,包括程序计数器、寄存器等。 2. **处理中断:**根据中断源,执行相应的处理操作,例如读取输入、清除中断标志等。 3. **恢复现场:**ISR结束时,需要恢复现场,以便继续执行中断前的程序。 #### 2.2.2 中断处理流程 中断处理流程如下: 1. **中断发生:**外部或内部事件触发中断。 2. **保存现场:**ISR开始时,保存现场。 3. **ISR执行:**执行ISR,处理中断事件。 4. **恢复现场:**ISR结束时,恢复现场。 5. **返回主程序:**中断处理完成后,单片机返回主程序继续执行。 ### 2.3 中断嵌套和屏蔽 #### 2.3.1 中断嵌套 中断嵌套是指在ISR执行过程中,又发生另一个中断。单片机可以配置为允许或禁止中断嵌套。允许中断嵌套可以提高系统的响应能力,但需要考虑嵌套中断的处理顺序和优先级。 #### 2.3.2 中断屏蔽 中断屏蔽是指禁止特定中断的发生。单片机可以配置为屏蔽外部中断或内部中断。中断屏蔽可以防止低优先级中断干扰高优先级中断的处理。 下表总结了中断机制的类型、优先级和处理流程: | 类型 | 来源 | 优先级 | 处理流程 | |---|---|---|---| | 外部中断 | 外部设备或信号 | 可配置 | 保存现场 -> 处理中断 -> 恢复现场 -> 返回主程序 | | 内部中断 | 单片机内部事件 | 可配置 | 保存现场 -> 处理中断 -> 恢复现场 -> 返回主程序 | | 中断嵌套 | ISR执行过程中发生另一个中断 | 可配置 | 允许:嵌套执行ISR;禁止:禁止嵌套ISR | | 中断屏蔽 | 特定中断被禁止 | 可配置 | 禁止:中断不会发生;允许:中断可以发生 | # 3.1 定时器的类型和功能 单片机定时器是一种用于测量时间间隔或生成特定时间事件的硬件模块。它具有多种类型,每种类型都具有特定的功能和应用。 #### 3.1.1 定时器/计数器 定时器/计数器是最常见的定时器类型。它可以执行以下功能: - **计时:**测量时间间隔。 - **计数:**计数外部事件的发生次数。 - **脉宽调制(PWM):**生成可变占空比的脉冲波形。 #### 3.1.2 看门狗定时器 看门狗定时器是一种特殊的定时器,用于防止单片机系统死锁或崩溃。它通过定期复位单片机来实现这一目的。如果单片机在特定时间间隔内没有复位看门狗定时器,则定时器将触发复位信号。 ### 3.2 定时器编程 定时器编程涉及配置定时器寄存器以实现所需的定时功能。通常需要以下步骤: #### 3.2.1 定时器的配置 - **时钟源选择:**选择定时器的时钟源,如系统时钟或外部时钟。 - **定时模式选择:**选择定时器的模式,如计数模式、捕获模式或比较模式。 - **定时周期设置:**设置定时器的定时周期,即定时器溢出或捕获事件发生的间隔。 #### 3.2.2 定时器的中断处理 定时器可以产生中断,以便在特定时间事件发生时通知单片机。中断处理程序可以执行以下任务: - **清除中断标志:**清除定时器中断标志,以允许后续中断的发生。 - **执行定时器相关的操作:**执行与定时器相关的操作,如更新定时器周期或读取捕获值。 ### 3.3 定时器的应用 定时器在单片机系统中具有广泛的应用,包括: #### 3.3.1 延时生成 定时器可以用于生成特定时间间隔的延时。这对于控制设备操作、实现闪烁效果或进行数据传输等应用非常有用。 #### 3.3.2 脉宽调制 定时器可以用于生成脉宽调制(PWM)波形。PWM波形是一种可变占空比的脉冲波形,用于控制模拟设备,如电机、LED和扬声器。 # 4. 单片机通信技术 ### 4.1 串行通信 串行通信是一种通过单根信号线进行数据传输的通信方式,数据以比特流的形式依次发送。串行通信具有布线简单、成本低廉的优点,广泛应用于各种单片机系统中。 #### 4.1.1 UART通信 UART(通用异步收发传输器)是一种常用的串行通信接口,支持异步数据传输。UART通过一个发送缓冲区和一个接收缓冲区实现数据交换,数据传输速率可通过波特率配置。 ```c // UART初始化 void UART_Init(uint32_t baudrate) { // 配置波特率 UART_SetBaudRate(baudrate); // 配置数据格式 UART_SetDataFormat(8, UART_PARITY_NONE, UART_STOPBITS_1); // 启用UART UART_Enable(); } ``` #### 4.1.2 SPI通信 SPI(串行外围接口)是一种同步串行通信接口,支持高速数据传输。SPI使用四根信号线进行通信:时钟线(SCK)、主设备输出数据线(MOSI)、从设备输出数据线(MISO)和片选线(CS)。 ```c // SPI初始化 void SPI_Init(uint32_t baudrate) { // 配置时钟极性、相位和数据模式 SPI_SetClockMode(SPI_CLOCK_MODE_0); // 配置波特率 SPI_SetBaudRate(baudrate); // 启用SPI SPI_Enable(); } ``` #### 4.1.3 I2C通信 I2C(两线串行总线)是一种低速串行通信接口,使用两根信号线进行通信:数据线(SDA)和时钟线(SCL)。I2C支持多主设备和多从设备共存,广泛应用于传感器、显示器等低速外设的连接。 ```c // I2C初始化 void I2C_Init(uint32_t baudrate) { // 配置时钟极性和数据模式 I2C_SetClockMode(I2C_CLOCK_MODE_0); // 配置波特率 I2C_SetBaudRate(baudrate); // 启用I2C I2C_Enable(); } ``` ### 4.2 并行通信 并行通信是一种通过多根信号线同时传输数据的通信方式,具有高速传输的特点。并行通信主要用于连接速度要求较高的外设,如存储器、显示器等。 #### 4.2.1 GPIO通信 GPIO(通用输入/输出)是一种基本的并行通信方式,通过单片机的GPIO引脚直接与外设进行数据交换。GPIO通信简单易用,但传输速率较低。 ```c // GPIO初始化 void GPIO_Init(GPIO_TypeDef *GPIOx, uint32_t pin) { // 配置GPIO引脚为输出模式 GPIO_SetMode(GPIOx, pin, GPIO_MODE_OUTPUT); // 配置GPIO引脚为推挽输出 GPIO_SetType(GPIOx, pin, GPIO_TYPE_PUSH_PULL); } ``` #### 4.2.2 DMA通信 DMA(直接内存访问)是一种高速并行通信方式,允许外设直接访问单片机的内存,无需CPU参与数据传输过程。DMA可以大幅提高数据传输速率,广泛应用于大数据量传输的场景。 ```c // DMA初始化 void DMA_Init(DMA_Channel_TypeDef *DMAx_Channel) { // 配置DMA源地址和目的地址 DMA_SetSourceAddress(DMAx_Channel, source_address); DMA_SetDestinationAddress(DMAx_Channel, destination_address); // 配置DMA传输数据量 DMA_SetTransferCount(DMAx_Channel, data_count); // 配置DMA传输模式 DMA_SetMode(DMAx_Channel, DMA_MODE_NORMAL); // 启用DMA DMA_Enable(DMAx_Channel); } ``` ### 4.3 无线通信 无线通信是一种通过无线电波进行数据传输的通信方式,可以实现远距离、无障碍的数据交换。无线通信主要用于连接移动设备、传感器等需要无线连接的设备。 #### 4.3.1 蓝牙通信 蓝牙是一种短距离无线通信技术,支持设备之间的点对点连接。蓝牙具有低功耗、低成本的优点,广泛应用于手机、耳机、智能家居等设备的连接。 ```c // 蓝牙初始化 void Bluetooth_Init(void) { // 配置蓝牙模块 Bluetooth_SetMode(BLUETOOTH_MODE_PAIRING); // 启用蓝牙模块 Bluetooth_Enable(); } ``` #### 4.3.2 ZigBee通信 ZigBee是一种低功耗、低速率的无线通信技术,支持多设备组网。ZigBee具有自组网、自愈合等优点,广泛应用于传感器网络、智能家居等领域。 ```c // ZigBee初始化 void ZigBee_Init(void) { // 配置ZigBee模块 ZigBee_SetChannel(11); ZigBee_SetNetworkID(0x1234); // 启用ZigBee模块 ZigBee_Enable(); } ``` # 5. 单片机控制技术实践 ### 5.1 单片机控制LED灯 #### 5.1.1 硬件连接 * 将LED灯的正极连接到单片机的GPIO口,负极连接到地线。 * 使用电阻器限制流经LED的电流,通常为220Ω~1kΩ。 #### 5.1.2 软件编程 ```c // 定义LED引脚 #define LED_PIN GPIO_PIN_0 // 初始化LED引脚 void led_init() { // 设置LED引脚为输出模式 GPIO_SetMode(LED_PIN, GPIO_MODE_OUTPUT); } // 控制LED灯亮灭 void led_control(bool on) { // 根据on参数设置LED引脚电平 GPIO_WriteBit(LED_PIN, on ? 1 : 0); } ``` ### 5.2 单片机控制电机 #### 5.2.1 硬件连接 * 将电机的正极连接到单片机的PWM输出引脚,负极连接到地线。 * 使用电容滤波PWM信号,提高电机转速的稳定性。 #### 5.2.2 软件编程 ```c // 定义电机引脚 #define MOTOR_PIN GPIO_PIN_1 // 初始化电机引脚 void motor_init() { // 设置电机引脚为PWM输出模式 GPIO_SetMode(MOTOR_PIN, GPIO_MODE_PWM); // 设置PWM时钟和占空比 PWM_SetClock(MOTOR_PIN, 10000); // 10kHz PWM时钟 PWM_SetDuty(MOTOR_PIN, 50); // 50%占空比 } // 控制电机转速 void motor_control(uint8_t duty) { // 根据duty参数设置PWM占空比 PWM_SetDuty(MOTOR_PIN, duty); } ``` ### 5.3 单片机控制液晶显示屏 #### 5.3.1 硬件连接 * 将液晶显示屏的控制引脚(RS、RW、E、D0~D7)连接到单片机的GPIO口。 * 使用电阻器限制流经液晶显示屏的电流。 #### 5.3.2 软件编程 ```c // 定义液晶显示屏引脚 #define LCD_RS GPIO_PIN_2 #define LCD_RW GPIO_PIN_3 #define LCD_E GPIO_PIN_4 #define LCD_D0 GPIO_PIN_5 #define LCD_D1 GPIO_PIN_6 #define LCD_D2 GPIO_PIN_7 #define LCD_D3 GPIO_PIN_8 // 初始化液晶显示屏 void lcd_init() { // 设置液晶显示屏引脚为输出模式 GPIO_SetMode(LCD_RS, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_RW, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_E, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_D0, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_D1, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_D2, GPIO_MODE_OUTPUT); GPIO_SetMode(LCD_D3, GPIO_MODE_OUTPUT); // 发送初始化指令 lcd_write_command(0x38); // 设置为8位数据模式 lcd_write_command(0x0C); // 打开显示 lcd_write_command(0x06); // 设置光标向右移动 } // 向液晶显示屏写入命令 void lcd_write_command(uint8_t command) { // RS引脚置低,表示写入命令 GPIO_WriteBit(LCD_RS, 0); // RW引脚置低,表示写入 GPIO_WriteBit(LCD_RW, 0); // E引脚置高,使能数据传输 GPIO_WriteBit(LCD_E, 1); // 发送命令数据 GPIO_WritePort(LCD_D0~LCD_D3, command >> 4); GPIO_WritePort(LCD_D0~LCD_D3, command); // E引脚置低,结束数据传输 GPIO_WriteBit(LCD_E, 0); } // 向液晶显示屏写入数据 void lcd_write_data(uint8_t data) { // RS引脚置高,表示写入数据 GPIO_WriteBit(LCD_RS, 1); // RW引脚置低,表示写入 GPIO_WriteBit(LCD_RW, 0); // E引脚置高,使能数据传输 GPIO_WriteBit(LCD_E, 1); // 发送数据 GPIO_WritePort(LCD_D0~LCD_D3, data >> 4); GPIO_WritePort(LCD_D0~LCD_D3, data); // E引脚置低,结束数据传输 GPIO_WriteBit(LCD_E, 0); } ``` # 6. 单片机控制技术进阶 ### 6.1 单片机嵌入式系统设计 #### 6.1.1 嵌入式系统架构 嵌入式系统是一种以单片机为核心,集硬件和软件于一体的专用计算机系统。其架构通常包括: - **处理器:**单片机,负责执行程序指令和控制系统。 - **存储器:**ROM、RAM,用于存储程序和数据。 - **外设:**如传感器、执行器、通信接口等,用于与外部环境交互。 - **操作系统(可选):**实时操作系统,负责管理系统资源和任务调度。 #### 6.1.2 嵌入式系统开发流程 嵌入式系统开发流程一般包括: 1. **需求分析:**确定系统的功能和性能要求。 2. **硬件设计:**选择单片机、外设和电路设计。 3. **软件开发:**编写程序代码,实现系统功能。 4. **调试和测试:**验证系统是否满足要求。 5. **集成和部署:**将硬件和软件集成,部署到实际应用中。 ### 6.2 单片机实时操作系统 #### 6.2.1 实时操作系统的概念 实时操作系统(RTOS)是一种专门为嵌入式系统设计的操作系统,具有以下特点: - **实时性:**能够在规定的时间内响应外部事件。 - **确定性:**任务执行时间可预测。 - **资源管理:**高效管理系统资源,如任务调度、内存分配。 #### 6.2.2 单片机实时操作系统的选择 选择单片机实时操作系统时需要考虑以下因素: - **系统需求:**如任务数量、响应时间要求。 - **硬件平台:**单片机类型、外设配置。 - **开发工具:**编译器、调试器等。 - **成本和许可:**商业 RTOS 通常需要付费许可。 ### 6.3 单片机应用于物联网 #### 6.3.1 物联网的概念和架构 物联网(IoT)是一种将物理设备、传感器和网络连接起来,实现数据采集、传输和分析的系统。其架构通常包括: - **感知层:**设备、传感器,采集数据。 - **网络层:**通信网络,传输数据。 - **平台层:**云平台、边缘计算,处理和存储数据。 - **应用层:**应用程序,使用数据。 #### 6.3.2 单片机在物联网中的应用 单片机在物联网中主要用于: - **数据采集:**通过传感器采集环境数据。 - **数据传输:**通过通信模块传输数据到云平台或边缘设备。 - **控制和执行:**根据云平台或边缘设备的指令,控制执行器执行动作。
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

Big黄勇

硬件工程师
广州大学计算机硕士,硬件开发资深技术专家,拥有超过10多年的工作经验。曾就职于全球知名的大型科技公司,担任硬件工程师一职。任职期间负责产品的整体架构设计、电路设计、原型制作和测试验证工作。对硬件开发领域有着深入的理解和独到的见解。
专栏简介
本专栏全面解析单片机控制技术,从基础入门到高级应用,涵盖了中断、定时器、通信、智能家居、故障排除、物联网、工业自动化、医疗设备、机器人、航空航天等领域的应用。专栏还深入探讨了PID控制、模糊控制、实时操作系统、无线通信、图像处理、语音识别等高级技术,并提供了丰富的实战案例和故障诊断指南。此外,专栏还关注单片机控制技术在人工智能领域的应用,帮助读者打造智能化系统。本专栏旨在为工程师、学生和爱好者提供全面且实用的单片机控制技术知识,助力他们设计和开发各种智能系统。

专栏目录

最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【XJC-608T-C控制器与Modbus通讯】:掌握关键配置与故障排除技巧(专业版指南)

![XJC-608T-C压力控制器说明书+modbus通讯简易说明.pdf](http://www.energetica21.com/images/ckfinder/images/Screenshot_3(45).jpg) # 摘要 本文全面介绍了XJC-608T-C控制器与Modbus通讯协议的应用与实践。首先概述了XJC-608T-C控制器及其对Modbus协议的支持,接着深入探讨了Modbus协议的理论基础,包括其发展历史和帧结构。文章详细说明了XJC-608T-C控制器的通信接口配置,以及如何进行Modbus参数的详细设置。第三章通过实践应用,阐述了Modbus RTU和TCP通讯模

掌握Walktour核心原理:测试框架最佳实践速成

![掌握Walktour核心原理:测试框架最佳实践速成](https://slideplayer.com/slide/13717409/85/images/2/Contents+1.+Overview+2.+Manual+Test+3.+Auto+Test+4.+Data+Management.jpg) # 摘要 本文详细介绍了Walktour测试框架的结构、原理、配置以及高级特性。首先,概述了测试框架的分类,并阐述了Walktour框架的优势。接着,深入解析了核心概念、测试生命周期、流程控制等关键要素。第三章到第五章重点介绍了如何搭建和自定义Walktour测试环境,编写测试用例,实现异常

【水文模拟秘籍】:HydrolabBasic软件深度使用手册(全面提升水利计算效率)

![HydrolabBasic广东水文水利计算软件使用手册.pdf](https://img-blog.csdnimg.cn/392403990b974da4905e38b5b73e1ee4.png#pic_center) # 摘要 本文全面介绍HydrolabBasic软件,旨在为水文学研究与实践提供指导。文章首先概述了软件的基本功能与特点,随后详细阐述了安装与环境配置的流程,包括系统兼容性检查、安装步骤、环境变量与路径设置,以及针对安装过程中常见问题的解决方案。第三章重点讲述了水文模拟的基础理论、HydrolabBasic的核心算法以及数据处理技巧。第四章探讨了软件的高级功能,如参数敏感

光盘挂载效率优化指南:提升性能的终极秘籍

![光盘挂载效率优化指南:提升性能的终极秘籍](https://media.geeksforgeeks.org/wp-content/uploads/20200302205148/NTFS-File-System-11.png) # 摘要 本文全面探讨了光盘挂载的基础知识、性能瓶颈、优化理论及实践案例,并展望了未来的发展趋势。文章从光盘挂载的技术原理开始,深入分析了影响挂载性能的关键因素,如文件系统层次结构、挂载点配置、读写速度和缓存机制。接着,提出了针对性的优化策略,包括系统参数调优、使用镜像文件以及自动化挂载脚本的应用,旨在提升光盘挂载的性能和效率。通过实际案例研究,验证了优化措施的有效

STM32F407ZGT6硬件剖析:一步到位掌握微控制器的10大硬件特性

![STM32F407ZGT6硬件剖析:一步到位掌握微控制器的10大硬件特性](https://img-blog.csdnimg.cn/direct/10c17a74ab934a1fa68313a74fae4107.png) # 摘要 本文针对STM32F407ZGT6微控制器进行了全面的概述,重点分析了其核心处理器与存储架构。文章详细阐述了ARM Cortex-M4内核的特性,包括其性能和功耗管理能力。同时,探讨了内部Flash和RAM的配置以及内存保护与访问机制。此外,本文还介绍了STM32F407ZGT6丰富的外设接口与通信功能,包括高速通信接口和模拟/数字外设的集成。电源管理和低功耗

【系统性能优化】:专家揭秘注册表项管理技巧,全面移除Google软件影响

![删除全部Google软件的注册表项](https://gotapi.com/wp-content/uploads/2023/09/image-3-1-1024x577.jpg) # 摘要 注册表项管理对于维护和优化系统性能至关重要。本文首先介绍了注册表项的基础知识和对系统性能的影响,继而探讨了优化系统性能的具体技巧,包括常规和高级优化方法及其效果评估。文章进一步深入分析了Google软件对注册表的作用,并提出了清理和维护建议。最后,通过综合案例分析,展示了注册表项优化的实际效果,并对注册表项管理的未来趋势进行了展望。本文旨在为读者提供注册表项管理的全面理解,并帮助他们有效提升系统性能。

SAPRO V5.7高级技巧大公开:提升开发效率的10个实用方法

![SAPRO V5.7高级技巧大公开:提升开发效率的10个实用方法](https://community.sap.com/legacyfs/online/storage/blog_attachments/2023/01/2-25.png) # 摘要 本文全面介绍SAPRO V5.7系统的核心功能与高级配置技巧,旨在提升用户的工作效率和系统性能。首先,对SAPRO V5.7的基础知识进行了概述。随后,深入探讨了高级配置工具的使用方法,包括工具的安装、设置以及高级配置选项的应用。接着,本文聚焦于编程提升策略,分享了编码优化、IDE高级使用以及版本控制的策略。此外,文章详细讨论了系统维护和监控的

线扫相机选型秘籍:海康vs Dalsa,哪个更适合你?

# 摘要 本文对线扫相机技术进行了全面的市场分析和产品比较,特别聚焦于海康威视和Dalsa两个业界领先品牌。首先概述了线扫相机的技术特点和市场分布,接着深入分析了海康威视和Dalsa产品的技术参数、应用案例以及售后服务。文中对两者的核心性能、系统兼容性、易用性及成本效益进行了详尽的对比,并基于不同行业应用需求提出了选型建议。最后,本文对线扫相机技术的未来发展趋势进行了展望,并给出了综合决策建议,旨在帮助技术人员和采购者更好地理解和选择适合的线扫相机产品。 # 关键字 线扫相机;市场分析;技术参数;应用案例;售后服务;成本效益;选型建议;技术进步 参考资源链接:[线扫相机使用与选型指南——海

【Smoothing-surfer绘图性能飞跃】:图形渲染速度优化实战

![【Smoothing-surfer绘图性能飞跃】:图形渲染速度优化实战](https://assetsio.gnwcdn.com/astc.png?width=1200&height=1200&fit=bounds&quality=70&format=jpg&auto=webp) # 摘要 图形渲染是实现计算机视觉效果的核心技术,其性能直接影响用户体验和应用的互动性。本文第一章介绍了图形渲染的基本概念,为理解后续内容打下基础。第二章探讨了图形渲染性能的理论基础,包括渲染管线的各个阶段和限制性能的因素,以及各种渲染算法的选择与应用。第三章则专注于性能测试与分析,包括测试工具的选择、常见性能

专栏目录

最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )