0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
STC15W204S-35I-SOP16

STC15W204S-35I-SOP16

  • 厂商:

    STC(宏晶科技)

  • 封装:

    SOP16_150MIL

  • 描述:

    STC15W204S SOP16 256B 2.5~5.5V 8051 35MHz

  • 数据手册
  • 价格&库存
STC15W204S-35I-SOP16 数据手册
STC — 8051单片机全球第一品牌,全球最大的8051单片机设计公司 官方网站:www.STCMCU.com www.GXWMCU.com STC15F2K60S2系列单片机器件手册 ---超��������� 强抗干扰,���� 无法解密 ---采用STC第八代加密技术 ---不需要外部晶振和外部复位的单片机 ��� ---可省掉外部EEPROM,利用IAP技术 ��� ---ISP/IAP,在线编程,无需编程器/仿真器 ---��� 大容量2K字节SRAM ---双串口,两个独立串口 ---高速10位A/D转换器,8通道 ---1个时钟/机器周期8051 ---高速,高可靠 ---超低功耗,超低价 ---超���������� 强抗静电������ ,超强抗干扰 d e t i im L STC15F2K08S2 STC15L2K08S2 STC15F2K16S2 STC15L2K16S2 STC15F2K24S2 STC15L2K24S2 STC15F2K32S2 STC15L2K32S2 STC15F2K40S2 STC15L2K40S2 STC15F2K48S2 STC15L2K48S2 STC15F2K56S2 STC15L2K56S2 STC15F2K60S2 STC15L2K60S2 IAP15F2K61S2—本身就是仿真器—IAP15L2K61S2 C T S U C M 采用STC第八代加密技术,现悬赏 10万元人民币请专家帮忙查找加密有无漏洞 STC-ISP:最方便的在线升级软件,无需专用编程器,无需专用仿真器 STC——8051单片机全球第一品牌,全球最大的8051单片机设计公司 请同行不要再抄袭我们的规格、设计和管脚排列,再抄袭就很无。。。 全部中国本土独立自主知识产权,请全体中国人民支持,您的支持是中国本土 力量前进的����� 有力保证. 封装后,全部175℃八小时高温烘烤,高品质制造保证 技术支持网站:www.STCMCU.com www.GXWMCU.com Update date: 2014/2/23 STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 研发顾问QQ:800003751 TM STC micro 超强抗干扰,无法解密 8051单片机全球第一品牌,全球最大的8051单片机设计公司 全部中国大陆本土独立自主知识产权;品质保证:TSMC上海制造 宏 晶 科 技 www.STCMCU.com 官方网站: www.GXWMCU.com 南通 Tel: 0513-5501 2928 5501 2929 深圳 Tel: 0755-8294 8411 8294 8412 STC15F2K60S2系列1T 8051单片机,2K字节SRAM,超高速双串口,高速A/D 不需外部晶振的单片机 不需外部复位的单片机 61K Gnd 4 5组8位 微处理器 P1 超低功耗,超低价 并行端口 P0/P1 高速(0-35M),高可靠 P2/P3/P4 P3 超强抗干扰,无法解密 + P5.4 / P5.5 P4 A/D PWM可当D/A使用 高速10位8路 提升的是性能 降低的是成本 最多6个定时器 所有封装 S 普通 CCP 掉 大 A/D LQFP44/PDIP40 P 定时器 PCA 电 内部 内部 容 标准 8路 LQFP32 I 计数器 PWM 唤 低压 复位 量 外部 (3路 D SOP28/SKDIP28 S 串 仅 T0-T2 可当 醒 检测 (可 看 中断 PWM P EEP (现此系列未生产 R 行 有 外部 外部 专 中断 选复 门 支持 可当 T ROM PLCC44和SOP32封装) A 口 主 管脚 中断 用 并可 位门 狗 掉电 3路 R 部分封装 M 机 也能 并可 定 掉电 槛电 唤醒 D/A 价格(RMB ¥) 字 唤醒 压) 模 掉电 掉电 时 使用) SOP28 SKDIP28 LQFP32 PDIP40 LQFP44 节 式 唤醒 唤醒 器 STC15F2K60S2系列����������� 单片机选型价格一览表� ,另有STC15L系列(工作电压2.4V-3.6V) 特别提醒:3路CCP/PCA/PWM还可当3路定时器使用 2K 2 有 3 3-ch 有 5 10位 2 53K 有 8级 有 ¥3.8 ¥4.0 ¥3.9 ¥4.5 ¥4.0 3-ch 有 5 10位 2 45K 有 8级 有 ¥4.0 ¥4.2 ¥4.1 ¥4.7 ¥4.2 2K 2 有 3 3-ch 有 5 10位 2 37K 有 8级 有 ¥4.2 ¥4.4 ¥4.3 ¥4.9 ¥4.4 2K 2 有 3 3-ch 有 5 10位 2 29K 有 8级 有 ¥4.3 ¥4.5 ¥4.4 ¥5.0 ¥4.5 2K 2 有 3 3-ch 有 5 10位 2 21K 有 8级 有 ¥4.4 ¥4.6 ¥4.5 ¥5.1 ¥4.6 2K 2 有 3 2K 2 有 3 3-ch 有 5 10位 2 13K 有 8级 有 ¥4.4 ¥4.6 ¥4.5 ¥5.1 ¥4.6 3-ch 有 5 10位 2 5K 有 8级 有 ¥4.4 ¥4.6 ¥4.5 ¥5.1 ¥4.6 2K 2 有 3 3-ch 有 5 10位 2 1K 有 8级 有 ¥4.8 ¥5.0 ¥4.9 ¥5.5 ¥5.0 2K 2 有 3 ¥4.8 ¥5.0 ¥4.9 ¥5.5 ¥5.0 2K 2 有 3 3-ch 有 5 10位 2 IAP 有 8级 有 用户可将用户程序区的程序Flash当EEPROM使用 IRC15F2K63S2 使用内部24MHz 5.5-3.8 63.5K 2K 2 有 时钟或外部晶振 3 IAP15F2K61S 5.5-3.8 61K 2K 1 有 3 3-ch 有 - 5 有 5 STC15F408AD 5.5-3.8 8K 512 1 有 T0 / T2 3-ch 有 5 IAP15F413AD 5.5-3.8 13K 512 1 有 T0 / T2 3-ch 有 5 ¥5.5 ¥5.0 用户可将用户程序区的 程序Flash当EEPROM使用 ¥4.5 ¥4.0 10位 2 IAP 有 固定 有 - 2 IAP 有 8级 有 用户可将用户程序区的程序Flash当EEPROM使用 10位 1 5K 有 8级 有 ¥2.8 ¥3.0 10位 1 IAP 有 8级 有 ¥3.0 ¥3.2 ¥2.9 ¥3.1 - - P3.3/INT1/RSTOUT_LOW 7 P3.2/INT0 6 P3.1/T2 5 P3.0/INT4/T2CLKO SOP-8/DIP-8 每片单片机具有全球唯一 身份证号码(ID号), SS_2/ECI_3/A12/P2.4 CCP0_3/A13/P2.5 无法解密,加密坚不可摧 CCP1_3/A14/P2.6 提供客制化IC设计服务 P5 最多42个I/O 3路CCP/PCA/PWM 高频PWM: 6位/7位/8位 P2 CCP1_3/P2.6 CCP2_3/P2.7 RxD2/CCP1/ADC0/P1.0 TxD2/CCP0/ADC1/P1.1 ECI/SS/ADC2P1.2 MOSI/ADC3/P1.3 MISO/ADC4/P1.4 SCLK/ADC5/P1.5 XTLA2/RxD_3/ADC6/P1.6 XTLA1/TxD_3/ADC7/P1.7 MCLKO/RST/P5.4 Vcc P5.5 Gnd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 P2.3/A11/MOSI_2 P2.2/A10/MISO_2 P2.1/A9/SCLK_2 P2.0/A8/RSTOUT_LOW P4.4/RD P4.3/SCLK_3 P4.2/WR P4.1/MISO_3 P3.7/INT3/TxD_2/CCP2/CCP2_2 P3.6/INT2/RxD_2/CCP1_2 P3.5/T1/T0CLKO/CCP0_2 INT3/T0CLKO/P3.5 3 2 8 CCP2_3/A15/P2.7 ALE/P4.5 RxD2_2/P4.6 AD0/P0.0 P2.5/CCP0_3 AD1/P0.1 P2.4/ECI_3/SS_2 AD2/P0.2 AD3/P0.3 P2.3/MOSI_2 AD4/P0.4 P2.2/MISO_2 34 35 36 37 38 39 40 41 42 43 44 P2.1/SCLK_2 P2.0/RSTOUT_LOW P3.7/INT3/TxD_2/CCP2/CCP2_2 P3.6/INT2/RxD_2/CCP1_2 P3.5/T1/T0CLKO/CCP0_2 P3.4/T0/T1CLKO/ECI_2 P3.3/INT1 P3.2/INT0 P3.1/TxD/T2 P3.0/RxD/INT4/T2CLKO LQFP44 42个I/O Vcc STC 单片机在线编程ISP/仿真线路 AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 RxD2/CCP1/ADC0/P1.0 TxD2/CCP0/ADC1/P1.1 ECI/SS/ADC2/P1.2 MOSI/ADC3/P1.3 MISO/ADC4/P1.4 SCLK/ADC5/P1.5 XTAL2/RxD_3/ADC6/P1.6 XTAL1/TxD_3/ADC7/P1.7 SS_3/MCLKO/RST/P5.4 Vcc C2 C1 P5.5 0.1μF 47μF Gnd 1 40 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 封装形式: LQFP44(强烈推荐) PDIP40(正常生产但 不推荐) LQFP32(推荐) SOP28(强烈推荐) SKDIP28(正常生产) 33 32 31 30 29 28 27 26 25 24 23 1 PDIP40 38个I/O 8K 16K 24K 32K 40K 48K 56K 60K INT2/INT3/INT4 仅可下降沿中断 MCLKO/INT2/T0/RST/P3.4 INT0/INT1 Vcc 上升沿/下降沿中断均可 26个I/O SOP28 / SKDIP28 本身就是仿真器 超高速双串口(UART) 分时复用可当5组使用 Flash 工作 程序 电压 存储 (V) 器 (byte) 大批量现货 供应中 STC15F2K08S2 5.5-3.8 STC15F2K16S2 5.5-3.8 STC15F2K24S2 5.5-3.8 STC15F2K32S2 5.5-3.8 STC15F2K40S2 5.5-3.8 STC15F2K48S2 5.5-3.8 STC15F2K56S2 5.5-3.8 STC15F2K60S2 5.5-3.8 IAP15F2K61S2 5.5-3.8 监控程序 内置高精准时钟(5~35MHz 任意设置) 内置高可靠复位电路(8级复位门槛电压可设置) 掉电模式:C ;地址送入R0 ;C=1(读) C=0(写) ;回应ACK ;等待停止信号 ;发送IDATA数据 ;接收ACK ;等待停止信号 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 363 STC15F2K60S2系列单片机指南 ;---------------------------;等待起始信号 ;---------------------------I2C_WAITSTART: JNB SCL, JB SDA, JB SCL, RET ;---------------------------;等待结束信号 ;---------------------------I2C_WAITSTOP: JNB SCL, JNB SDA, RET ;---------------------------;发送ACK/NAK信号 ;---------------------------I2C_TXACK: MOV SDA, JNB SCL, JB SCL, SETB SDA RET 技术支持网站:www.GXWMCU.com $ $ $ ;等待时钟->高 ;等待数据线下降沿 ;等待时钟->低 $ $ ;等待时钟->高 ;等待数据线上升沿 ;---------------------------;接收一字节数据 ;---------------------------I2C_RXBYTE: MOV R7, RXNEXT: JNB SCL, MOV C, RLC A JB SCL, DJNZ R7, RET 364 U C M L ;送ACK数据 ;等待时钟->高 ;等待时钟->低 ;发送完成 $ SDA $ ;准备读数据 ;等待时钟->高 ;读取ACK信号 ;等待时钟->低 #8 ;8位计数 $ SDA $ RXNEXT 南通国芯微电子有限公司 研发顾问Tel:13922805190 d e t i im C $ $ C T S ;---------------------------;接收ACK/NAK信号 ;---------------------------I2C_RXACK: SETB SDA JNB SCL, MOV C, JB SCL, RET 临时技术支持Tel:13922829991 ;等待时钟->高 ;读取数据口 ;保存数据 ;等待时钟->低 ;收下一位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com ;---------------------------;发送一字节数据 ;---------------------------I2C_TXBYTE: MOV R7, #8 TXNEXT: RLC A MOV SDA, C JNB SCL, $ JB SCL, $ DJNZ R7, TXNEXT RET 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ;8位计数 ;移出数据位 ;数据送数据口 ;等待时钟->高 ;等待时钟->低 ;送下一位 ;--------------------------- d e t i im END C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 L 传真:0513-5501 2969 / 2956 / 2947 365 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第5章 指令系统 5.1 寻址方式 寻址方式是每一种计算机的指令集中不可缺少的部分。寻址方式规定了数据的来源和目 的地。对不同的程序指令,来源和目的地的规定也会不同。在STC单片机中的寻址方式可概括 为: • • • • • • • 立即寻址 直接寻址 间接寻址 寄存器寻址 相对寻址 变址寻址 位寻址 5.1.1 立即寻址 d e t i im L 立即寻址也称立即数,它是在指令操作数中直接给出参加运算的操作数,其指令格式如 下: 如:MOV A, #70H U C M 这条指令的功能是将立即数70H传送到累加器A中 C T S 5.1.2 直接寻址 在直接寻址方式中,指令操作数域给出的是参加运算操作数地址。直接寻址方式只能用来 表示特殊功能寄存器、内部数据寄存器和位地址空间。其中特殊功能寄存器和位地址空间只能 用直接寻址方式访问。 如:ANL 70H, #48H 表示70H单元中的数与立即数48H相“与”,结果存放在70H单元中。其中70H为直接地 址,表示内部数据存储器RAM中的一个单元。 5.1.3 间接寻址 间接寻址采用R0或R1前添加“@”符号来表示。例如,假设R1中的数据是40H,内部数据存 储器40H单元所包含的数据为55H,那么如下指令: MOV A, @R1 把数据55H传送到累加器。 366 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 5.1.4 寄存器寻址 寄存器寻址是对选定的工作寄存器R7~R0、累加器A、通用寄存器B、地址寄存器和进位C 中的数进行操作。其中寄存器R7~R0由指令码的低3位表示,ACC、B、DPTR及进位位C隐含在指 令码中。因此,寄存器寻址也包含一种隐含寻址方式。 寄存器工作区的选择由程序状态字寄存器PSW中的RS1、RS0来决定。指令操作数指定的寄 存器均指当前工作区中的寄存器。 如:INC R0 ;(R0)+1 → R0 5.1.5 相对寻址 相对寻址是将程序计数器PC中的当前值与指令第二字节给出的数相加,其结果作为转移指 令的转移地址。转移地址也称为转移目的地址,PC中的当前值称为基地址,指令第二字节给出 的数称为偏移量。由于目的地址是相对于PC中的基地址而言,所以这种寻址方式称为相对寻 址。偏移量为带符号的数,所能表示的范围为+127 ~ –128。这种寻址方式主要用于转移指令。 如:JC 80H ;C=1 跳转 d e t i im L 表示若进位位������������������������������������� C������������������������������������ 为����������������������������������� 0���������������������������������� ,则程序计数器��������������������������� PC������������������������� 中的内容不改变,即不转移。若进位位�������� C������� 为������ 1����� ,则以�� PC 中的当前值为基地址,加上偏移量����������������������� 80H�������������������� 后所得到的结果作为该转移指令的目的地址。 5.1.6 变址寻址 C T S U C M 在变址寻址方式中,指令操作数指定一个存放变址基值的变址寄存器。变址寻址时,偏 移量与变址基值相加,其结果作为操作数的地址。变址寄存器有程序计数器PC和地址寄存器 DPTR. 如:MOVC A, @A+DPTR 表示累加器A为偏移量寄存器,其内容与地址寄存器DPTR中的内容相加,其结果作为操作 数的地址,取出该单元中的数送入累加器A。 5.1.7 位寻址 位寻址是指对一些内部数据存储器RAM和特殊功能寄存器进行位操作时的寻址。在进行位 操作时,借助于进位位C作为位操作累加器,指令操作数直接给出该位的地址,然后根据操作 码的性质对该位进行位操作。位地址与字节直接寻址中的字节地址形式完全一样,主要由操作 码加以区分,使用时应注意。 如:MOV C, 南通国芯微电子有限公司 20H ;片内位单元位操作型指令 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 367 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 5.2 完整指令集对照表(与传统8051对照) ——共111条指令,每条指令的详细执行时间 ----与普通8051指令代码完全兼容,但执行的时间效率大幅提升 ----其中INC DPTR和MUL AB指令的执行速度大幅提升24倍 ----共有22条指令,一个时钟就可以执行完成,平均速度快8~12倍 如果按功能分类,STC15系列单片机指令系统可分为: 1.算术操作类指令; 2.逻辑操作类指令; 3.数据传送类指令; 4.布尔变量操作类指令; 5.控制转移类指令。 按功能分类的指令系统表如下表所示。 指令执行速度效率提升总结(������� 新15系列)� : d e t i im L 指令系统共包括111条指令,其中: 执行速度快24倍的 共2条 执行速度快12倍的 共28条 执行速度快8倍的 共19条 执行速度快6倍的 共40条 执行速度快4.8倍的 共8条 执行速度快4倍的 共14条 根据对指令的使用频率分析统计,STC15系列 1T 的8051单片机比普通的8051单片机在同样的工 作频率下运行速度提升了8~12倍。 C T S U C M 指令执行时钟数统计(供参考)(������� 新15系列)� : 指令系统共包括111条指令,其中: 1个时钟就可执行完成的指令 共22条 2个时钟就可执行完成的指令 共37条 3个时钟就可执行完成的指令 共31条 4个时钟就可执行完成的指令 共12条 5个时钟就可执行完成的指令 共8条 6个时钟就可执行完成的指令 共1条 STC15系列将111条指令全部执行完一遍所需的时钟为283个时钟,而传统8051单片机将111条指 令全部执行一遍要1944个时钟。可见与传统8051相比较,STC新15系列的指令执行速度大幅提 升,平均速度快8~12倍。 368 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 现STC15系列单片机采用STC-Y5超高速CPU内核,在相同的时钟频率下,速度又比STC早期 的1T系列单片机(如STC12系列/STC11系列/STC10系列)的速度快20%. 算术操作类指令 助记符 ADD A,Rn ADD A,direct ADD A,@Ri 字 传统8051 效率 STC15系列单片机所需时钟 节 单片机 (采用STC-Y5超高速 1T 8051 内核) 提升 数 所需时钟 功能说明 寄存器内容加到累加器 1 直接地址单元中的数据 2 加到累加器 间接RAM中的数据加到累 1 加器 12 1 12倍 12 2 6倍 12 2 6倍 ADD A,#data 立即������ 数加到��� 累加器 2 12 2 6倍 ADDC A,Rn 1 12 1 12倍 ADDC A,direct 2 12 2 6倍 ADDC A,@Ri 1 12 2 6倍 ADDC A,#data 寄存器带进位加到累加器 直接地址单元的内容带进位 加到累加器 间接RAM内容带进位加到累 加器 立即数带进位加到累加器 2 12 6倍 SUBB A,Rn 1 12 6倍 SUBB A,direct 2 12 2 6倍 SUBB A,@Ri 1 12 2 6倍 SUBB A,#data 累加器带借位减寄存器内� 容 累加器带借位减直接地址单 元的内� 容 累加器带借位减间接RAM中 的内� 容 累加器带借位减立即� 数 2 1 2 12 2 6倍 INC A 累加器加1 1 12 INC Rn 寄存器加1 1 12 INC direct 直接地址单元加1 2 12 INC @Ri 间接RAM单元加1 1 12 DEC DEC DEC DEC INC MUL DIV DA A Rn direct @Ri DPTR AB AB A 累加器减1 寄存器减1 直接地址单元减1 间接RAM单元减1 地址寄存器DPTR加1 A乘以B A��� 除�� 以B 累加器十进制调� 整 1 1 2 1 1 1 1 1 12 12 12 12 24 48 48 12 1 2 3 3 1 2 3 3 12倍 6倍 4倍 4倍 12倍 6倍 4倍 4倍 南通国芯微电子有限公司 C T S M CU 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 1 24倍 2 6 3 24倍 8倍 4倍 传真:0513-5501 2969 / 2956 / 2947 369 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 逻辑操作类指令 助记符 字 传统8051 效率 STC15系列单片机所需时钟 节 单片机 (采用STC-Y5超高速 1T 8051 内核) 提升 数 所需时钟 功能说明 ANL A,Rn 累加器与寄存器相“与” 1 12 1 12倍 ANL A,direct 累加器与直接地址单元相“与” 2 12 2 6倍 ANL A,@Ri 累加器与间接RAM单元相“与” 1 12 2 6倍 ANL A,#data 累加器与立即数相“与” 2 12 2 6倍 ANL direct, A 直接地址单元与累加器相“与” 2 12 3 4倍 ANL direct,#data 直接地址单元与立即数相“与” 3 24 3 8倍 ORL A, Rn 累加器与寄存器相“或” 1 12 1 12倍 ORL A,direct 累加器与直接地址单元相“或” 2 12 2 6倍 ORL A, @Ri 累加器与间接RAM单元相“或” 1 12 2 6倍 ORL A,# data 累加器与������� 立即数���� 相“或” 2 12 ORL direct, A 直接地址单元�������� 与累加器相“或” 2 12 ORL direct, #data 直接地址单元与立即数相“或” 3 24 XRL A, Rn 累加器与寄存器相“异或” 1 12 XRL A, direct 累加器与直接地址单元相“异或” 2 12 XRL A, @Ri 累加器与间接RAM单元相“异或” 1 12 XRL A, # data 累加器与立即数相“异或” 2 12 XRL direct, A XRL direct,#data CLR A CU M 直接地址单元与累加器相“异或” 2 d e t i im L 2 6倍 3 4倍 3 8倍 1 12倍 2 6倍 2 6倍 2 6倍 12 3 4倍 直接地址单元与立即数相“异或” 3 24 3 8倍 累加器清“ 0” 12 1 12倍 C T S 1 累加器求� 反 1 12 1 12倍 累加器循环左� 移 1 12 1 12倍 CPL A RL A RLC A 累加器带进位位循环左� 移 1 12 1 12倍 RR A 累加器循环右� 移 1 12 1 12倍 RRC A 累加器带进位位循环右� 移 1 12 1 12倍 SWAP A 累加器�������� 内高低����� 半字节交� 换 1 12 1 12倍 370 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 数据传送类指令 MOV A, Rn 寄存器内容送入累加器 字 传统8051 STC15系列单片机所需时钟 效率 (采用STC-Y5 节 单片机 提升 数 所需时钟 超高速 1T 8051 内核) 1 12 1 12倍 MOV A, direct 直接地址单元中的数据送入累加器 2 12 2 MOV A, @Ri 间接RAM中的数据送入累加器 1 12 2 MOV A, #data 立即������ 数����� 送入累加器 2 12 MOV Rn, A 累加器内容送入寄存器 1 12 MOV Rn, direct 直接地址单元中的数据送入寄存器 2 24 2 1 3 MOV Rn, #data 立即数送入寄存器 2 12 2 MOV direct, A 累加器内容送入直接地址单元 2 12 MOV direct, Rn 寄存器内容送入直接地址单元 2 24 MOV direct, direct 直接地址单元中的数据送入另一个直接地址单元 3 24 MOV direct, @Ri 间接RAM中的数据送入直接地址单元 2 24 2 2 3 3 MOV direct, #data 立即数送入直接地址单元 3 24 3 MOV @Ri, A 累加器内容送间接RAM单元 1 12 MOV @Ri, direct 直接地址单元数据送入间接RAM单元 2 24 MOV @Ri, #data 12 MOVC 立即数送入间接RAM单元 DPTR,#data16 16位立即数送入���� 3 数据指针 A, @A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 2 3 2 MOVC A, @A+PC 助记符 MOV 功能说明 24 3 24 5 1 24 4 6倍 6倍 6倍 12倍 8倍 6倍 6倍 12倍 8倍 8倍 8倍 6倍 8倍 6倍 8倍 4.8倍 6倍 1 24 3 8倍 1 24 4 8倍 1 24 2 12倍 1 24 3 8倍 1 24 5xN+2 *Note1 Li 2 U C M 以PC为基地址变址寻址单元中的数据送入累加器 d e t i m PUSH direct 将���������������������� 逻辑上在������������������ 片����������������� 外���������������� 、物理上在����������� 片内��������� 的�������� 扩展RAM��� (�� 8位 地址)�������������� 的内容����������� 送入累加器A����� 中,读操作 将�������������������� 累加器A���������������� 的内容������������� 送������������ 入����������� 逻辑上在������� 片外、物理上在 片内����������������� 的���������������� 扩展RAM(8位地址)����� 中,写操作 将���������������������� 逻辑上在������������������ 片外、物理上在����������� 片内��������� 的�������� 扩展RAM��� (�� 16 位地址)�������������� 的内容����������� 送���������� 入��������� 累加器A����� 中,读操作 将�������������������� 累加器A���������������� 的内容������������� 送������������ 入����������� 逻辑上在������� 片外、物理上在 片内������������������ 的����������������� 扩展RAM(16位地址)����� 中,写操作 将���������������������� 逻辑上在������������������ 片����������������� 外���������������� 、物理上也在���������� 片��������� 外的������� 扩展RAM�� (�8 位地址)�������������� 的内容����������� 送入累加器A����� 中,读操作 将�������������������� 累加器A���������������� 的内容������������� 送������������ 入����������� 逻辑上在������� 片外、物理上也 在������������������� 片������������������ 外的���������������� 扩展RAM(8位地址)����� 中,写操作 将����������������� 逻辑上在������������� 片外、物理上也在����� 片���� 外的�� 扩展 RAM��������������������� (�������������������� 16位地址)�������������� 的内容����������� 送���������� 入��������� 累加器A����� 中,读操作 将�������������������� 累加器A���������������� 的内容������������� 送������������ 入����������� 逻辑上在������� 片外、物理上也 在�������������������� 片������������������� 外的����������������� 扩展RAM(16位地址)����� 中,写操作 直接地址单元中的数据压入堆栈 2 24 POP direct 栈底数据弹出送入������ 直接地址单元 2 24 XCH A, Rn 寄存器与累加器交换 1 12 XCH A,direct 直接地址单元与累加器交换 2 12 XCH A, @Ri 间接RAM与累加器交换 1 12 XCHD A, @Ri 间接RAM的低��������� 半字节������ 与累加器交换 1 12 MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A C T S 当EXRTS[1:0] = [0,0]时,表中N=1; 当EXRTS[1:0] = [0,1]时,表中N=2; 当EXRTS[1:0] = [1,0]时,表中N=4; 当EXRTS[1:0] = [1,1]时,表中N=8. 南通国芯微电子有限公司 1 24 1 24 1 24 N的取值见下列说明 5×N+3 N的取值见下列说明 5×N+1 N的取值见下列说明 5×N+2 N的取值见下列说明 3 2 2 3 3 3 *Note1 *Note1 *Note1 8倍 12倍 6倍 4倍 4倍 4倍 EXRTS[1:0]为寄存器BUS_SPEED中的B1,B0位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 371 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 布尔变量操作类指令 助记符 CLR CLR SETB SETB CPL CPL C bit C bit C bit ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit MOV MOV JC JNC JB JNB C, bit bit, C rel rel bit, rel bit, rel JBC bit, rel 372 功能说明 清零进位位 清0直接地址位 置1进位位 置1直接地址位 进位位求反 直接地址位求反 进位位和直接地址位相 “与” 进位位和直接地址位的反码 相“与” 进位位和直接地址位相 “或” 进位位和直接地址位的反码 相“或” 直接地址位送入进位� 位 进位位送入直接地址位 进位位为1则转移 进位位为0则转移 直接地址位为1则转移 直接地址位为0则转移 直接地址位为1则转移,该位 清0 C T S 南通国芯微电子有限公司 字 传统8051 STC15系列单片机所需时钟 节 单片机 (采用STC-Y5超高速 1T 8051 内核) 数 所需时钟 1 12 1 2 12 3 1 12 1 2 12 3 1 12 1 2 12 3 12倍 4倍 12倍 4倍 12倍 4倍 2 24 2 12倍 2 24 2 12倍 2 24 2 12倍 2 24 2 12倍 2 2 2 2 3 3 12 24 24 24 24 24 2 3 3 3 5 5 12倍 8倍 8倍 8倍 4.8倍 4.8倍 3 24 5 4.8倍 U C M Li d e t i m 总机:0513-5501 2928 / 2929 / 2966 效率 提升 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 控制转移类指令 ACALL addr11 字 传统8051 STC15系列单片机所需时钟 效率 节 单片机 (采用STC-Y5超高速 1T 8051 内核) 提升 数 所需时钟 24 4 6倍 绝对(短)调用子程� 序 2 LCALL addr16 长调用子程� 序 3 24 4 6倍 RET 子程序返� 回 1 24 4 6倍 助记符 功能说明 中断返� 回 1 24 4 6倍 AJMP addr11 绝对(短)转� 移 2 24 3 8倍 LJMP addr16 长转移 3 24 4 6倍 SJMP re1 相对转移 2 24 3 8倍 JMP @A+DPTR 相对于DPTR的间接转� 移 1 24 5 4.8倍 JZ re1 累加器为零转� 移 2 24 JNZ re1 2 24 3 24 3 24 3 RETI CJNE CJNE CJNE CJNE DJNZ DJNZ NOP 累加器非零转� 移 累加器与直接地址单元 A,direct,re1 比较,不相等则转� 移 累加器与立即数比较, A,#data,re1 不相等则转� 移 寄存器与立即数比较, Rn,#data,re1 不相等则转� 移 间接RAM单元与立即数 @Ri,#data,re1 比较,不相等则转� 移 Rn,re1 寄存器减1,非零转� 移 直接地址单元减1,非 direct,re1 零转� 移 空操作 C T S d e t i m 4 6倍 4 6倍 5 4.8倍 4 6倍 24 4 6倍 3 24 5 4.8倍 2 24 4 6倍 3 24 5 4.8倍 1 12 1 12倍 U C M Li 本次指令系统总结更新于2011-10-17日止 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 373 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 5.3 传统8051单片机指令定义详解(中文&English) 5.3.1 传统8051单片机指令定义详解 ACALL addr 11 功能: 绝对调用 说明: ACALL指令实现无条件调用位于addr11参数所表示地址的子例程。在执行该指令时, 首先将PC的值增加2,即使得PC指向ACALL的下一条指令,然后把16位PC的低8位和 高8位依次压入栈,同时把栈指针两次加1。然后,把当前PC值的高5位� 、ACALL指 令第1字节的7~5位和第2字节组合起来,得到一个16 位目的地址,该地址即为即将调 用的子例程的入口地址。要求该子例程的起始地址必须与紧随ACALL之后的指令处 于同1个2KB的程序存储页中。ACALL指令在执行时不会改变各个标志位。 d e t i im 举例: SP的初始值为07H,标号SUBRTN位于程序存储器的0345H地址处,如 果执行位于地址0123H处的指令: ACALL SUBRTN U C M L 那么SP变为09H,内部RAM地址08H和09H单元的内容分别为25H和01H,PC值变为 0345H。 指令长度(字节): 2 执行周期: 2 C T S 二进制编码: a10 a9 a8 1 0 0 1 0 a7 a6 a5 a4 a3 a2 a1 a0 注意:a10 a9 a8是11位目标地址addr11的A10~A8位,a7 a6 a5 a4 a3 a2 a1 a0是addr11的A7~A0位。 操作: ACALL (PC)�� ←�������� ������� (PC)+ 2 (SP)��������� ←�������� (SP) + 1 ((sP)) �� ←���� ��� (PC7-0) (SP)��������� ←�������� (SP) + 1 ((SP))���� ←��� (PC15-8) (PC10-0)�� ←� 页码地址 374 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ADD A, 功能: 加法 说明: ADD指令可用于完成把src-byte所表示的源操作数和累加器A的当前值相加。并 将结果置于累加器A中。根据运算结果,若第7位有进位则置进位标志为1,否则清 零;若第3位有进位则置辅助进位标志为1,否则清零。如果是无符号整数相加则进位 置位,显示当前运算结果发生溢出。 如果第6位有进位生成而第7位没有,或第7位有进位生成而第6位没有,则置OV 为1,否则OV被清零。在进行有符号整数的相加运算的时候,OV置位表示两个正整 数之和为一负数,或是两个负整数之和为一正数。 本类指令的源操作数可接受4种寻址方式:寄存器寻址、直接寻址、寄存器间接 寻址和立即寻址。 d e t i im 举例: 假设累加器A中的数据为0C3H(000011B),R0的值为0AAH(10101010B)。执行如下指 令: ADD A, R0 L 累加器A中的结果为6DH(01101101B),辅助进位标志AC被清零,进位标志C和溢出 标志OV被置1。 ADD U C M A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: C T S 0 0 1 0 1 r r r 操作: ADD (A)����������� ←���������� (A) + (Rn) ADD A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 1 0 0 1 0 1 direct address 操作: ADD (A)��������������� ←�������������� (A) + (direct) ADD A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 0 0 1 1 i 操作: ADD (A)������������� ←������������ (A) + ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 375 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ADD A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 1 0 0 1 0 0 immediate data 操作: ADD (A)������� ←������ (A) + ����� #data ADDC A, 功能: 带进位的加法。 说明: 执行ADDC指令时,把src-byte所代表的源操作数连同进位标志一起加到累加器 A上,并将结果置于累加器A中。根据运算结果,若在第7位有进位生成,则将进位标 志置1,否则清零;若在第3位有进位生成,则置辅助进位标志为1,否则清零。如果 是无符号数整数相加,进位的置位显示当前运算结果发生溢出。 d e t i im 如果第6位有进位生成而第7位没有,或第7位有进位生成而第6位没有,则将OV 置1,否则将OV清零。在进行有符号整数相加运算的时候,OV置位,表示两个正整 数之和为一负数,或是两个负整数之和为一正数。 U C M L 本类指令的源操作数允许4种寻址方式:寄存器寻址、直接寻址、寄存器间接寻 址和立即寻址。 举例: 假设累加器A中的数据为0C3H(11000011B),R0的值为0AAH(10101010B),进位标志 为1,执行如下指令: C T S ADDC A,R0 累加器A中的结果为6EH(01101110B),辅助进位标志AC被清零,进位标志C和溢出标 志OV被置1。 ADDC A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 1 1 r r r 操作: ADDC (A)����������������� ←���������������� (A) + (C) + (Rn) ADDC A,direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 1 1 0 1 0 1 direct address 操作: ADDC (A)��������������������� ←�������������������� (A) + (C) + (direct) 376 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ADDC A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 1 0 1 1 i 操作: ADDC (A)������������������� ←������������������ (A) + (C) + ((Ri)) ADDC A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 1 1 0 1 0 0 immediate data 操作: ADDC (A)������������� ←������������ (A) + (C) + ����� #data AJMP addr 11 功能: 绝对跳转 U C M d e t i im L 说明: AJMP指令用于将程序转到相应的目的地址去执行,该地址在程序执行过程之中产 生,由PC值(两次递增之后)的高5位、操作码的7~5位和指令的第2字 节连接形成。要求跳转的目的地址和AJMP指令的后一条指令的第1字节位于同一 2KB的程序存储页内。 C T S 举例: 假设标号JMPADR位于程序存储器的0123H,指令 AJMP JMPADR 位于0345H,执行完该指令后PC值变为0123H。 指令长度(字节): 2 执行周期: 2 二进制编码: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 注意:目的地址的A10-A8=a10~a8,A7-A0=a7~a0 操作: AJMP (PC)�� ←�������� ������� (PC)+ 2 (PC10-0)�� ←� page ����� ������� address 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 377 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ANL , 功能: 对字节变量进行逻辑与运算 说明: ANL指令将由和所指定的两个字节变量逐位进行逻辑与运 算,并将运算结果存放在所指定的目的操作数中。该指令的执行不会影响 标志位。 两个操作数组合起来允许6种寻址模式。当目的操作数为累加器时,源操作数允 许寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。当目的操作数是直接地址 时,源操作数可以是累加器或立即数。 注意:当该指令用于修改输出端口时,读入的原始数据来自于输出数据的锁存 器而非输入引脚。 举例: 如果累加器的内容为0C3H(11000011B),寄存器0的内容为55H(010101011B),那 么指令: ANL A,R0 d e t i im 执行结果是累加器的内容变为41H(01000001H)。 L 当目的操作数是可直接寻址的数据时,ANL指令可用来把任何RAM单元或者 硬件寄存器中的某些位清零。屏蔽字节将决定哪些位将被清零。屏蔽字节可能是常 数,也可能是累加器在计算过程中产生。如下指令: U C M ANL Pl, #01110011B 将端口1的位7、位3和位2清零。 ANL A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: C T S 0 1 0 1 1 r r r 操作: ANL (A)����� ←���� (A) ∧ (Rn) ANL A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 1 0 1 0 1 direct address 操作: ANL (A)����� ←���� (A) ∧ (direct) ANL A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 0 1 0 1 1 i 操作: ANL (A)����� ←���� (A) ∧ ((Ri)) 378 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ANL A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 1 0 1 0 0 immediate data 操作: ANL (A)����� ←���� (A) ∧ #data ANL direct, A 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 1 0 0 1 0 direct address 操作: ANL (direct)���������� ←��������� (direct) ∧ (A) d e t i im ANL direct, #data 指令长度(字节): 3 执行周期: 2 二进制编码: 0 1 0 1 0 0 1 1 direct address U C M L immediate data 操作: ANL (direct)���������� ←��������� (direct) ∧ #data ANL C , C T S 功能: 对位变量进行逻辑与运算 说明: 如果src-bit表示的布尔变量为逻辑0,清零进位标志位;否则,保持进位标志的 当前状态不变。在汇编语言程序中,操作数前面的“/”符号表示在计算时需要先对 被寻址位取反,然后才作为源操作数,但源操作数本身不会改变。该指令在执行时不 会影响其他各个标志位。 源操作数只能采取直接寻址方式。 举例: 下面的指令序列当且仅当P1.0=1、ACC.7=1和OV=0时,将进位标志C置1: MOV C, P1.0 ;LOAD CARRY WITH INPUT PIN STATE ANL C, ACC.7 ;AND CARRY WITH ACCUM. BIT.7 ANL C, /OV ;AND WITH INVERSE OF OVERFLOW FLAG ANL C, bit 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 0 0 1 0 bit address 操作: ANL (C) �� ← ���� ���� (C) ∧ (bit) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 379 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ANL C, /bit 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 1 0 0 0 0 bit address 操作: ANL (C)����� ←���� (C) ∧ (bit) CJNE , , rel 功能: 若两个操作数不相等则转移 说明: CJNE首先比较两个操作数的大小,如果二者不等则程序转移。目标地址由位于 CJNE指令最后1个字节的有符号偏移量和PC的当前值(紧邻CJNE的下一条指令的地 址)相加而成。如果目标操作数作为一个无符号整数,其值小于源操作数对应的无符 号整数,那么将进位标志置1,否则将进位标志清零。但操作数本身不会受到影响。 d e t i im 和组合起来,允许4种寻址模式。累加器A可以与任何可直 接寻址的数据或立即数进行比较,任何间接寻址的RAM单元或当前工作寄存器都可 以和立即常数进行比较。 L 举例: 设累加器A中值为34H,R7包含的数据为56H。如下指令序列: CJNE R7,#60H, NOT-EQ ; ... NOT_EQ: JC ; ... C T S CU ...... M ; R7 = 60H. REQ_LOW ; IF R7 < 60H. ..... ; R7 > 60H. 的第1条指令将进位标志置1,程序跳转到标号NOT_EQ处。接下去,通过测试进位标 志,可以确定R7是大于60H还是小于60H。 假设端口1的数据也是34H,那么如下指令: WAIT: CJNE A,P1,WAIT 清除进位标志并继续往下执行,因为此时累加器的值也为34H,即和P1口的数据相 等。(如果Pl端口的数据是其他的值,那么程序在此不停地循环,直到P1端口的数据 变成34H为止。) CJNE A, direct, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 1 1 0 1 0 1 direct address rel. address ←��������� �������� (PC) + 3 操作: (PC) �� IF (A) < > (direct) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (direct) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 380 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 CJNE A, #data, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 1 1 0 1 0 1 immediata data rel. address ←��������� �������� (PC) + 3 操作: (PC) �� IF (A) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 d e t i im CJNE Rn, #data, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 1 1 U C M 1 r r r L immediata data rel. address ←��������� �������� (PC) + 3 操作: (PC) �� IF (Rn) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (Rn) < (data) THEN (C) ←�� �� 1� ELSE (C) ←�� �� 0� C T S CJNE @Ri,#data,rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 1 1 0 1 1 i immediate data rel. address ←��������� �������� (PC) + 3 操作: (PC) �� IF ((Ri)) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF ((Ri)) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 381 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 CLR A 功能: 清除累加器 说明: 该指令用于将累加器A的所有位清零,不影响标志位� 。 举例: 假设累加器A的内容为5CH(01011100B),那么指令: CLR A 执行后,累加器的值变为00H(00000000B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 0 0 1 0 0 操作: CLR (A)�� ←�� �0 CLR bit 功能: 清零指定的位 U C M d e t i im L 说明: 将bit所代表的位清零,没有标志位会受到影响。CLR可用于进位标志C或者所有可直 接寻址的位。 举例: 假设端口1的数据为5DH(01011101B),那么指令 C T S CLR P1.2 执行后,Pl端口被设置为59H(01011001B)。 CLR C 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 0 0 1 1 操作: CLR (C) ←�� �� �0 CLR bit 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 0 0 0 0 1 0 bit address 操作: CLR (bit) ← � �� 0� 382 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 CPL A 功能: 累加器A求反 说明: 将累加器A的每一位都取反,即原来为1的位变为0,原来为0的位变为1。该指令不影 响标志位� 。 举例: 设累加器A的内容为5CH(01011100B),那么指令 CPL A 执行后,累加器的内容变成0A3H(10100011B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 1 0 1 0 0 操作: CPL (A)�� ←� (A) d e t i im CPL bit 功能: 将bit所表示的位求反 说明: L 将bit变量所代表的位取反,即原来位为1的变为0,原来为0的变为1。没有标志 位会受到影响。CPL可用于进位标志C或者所有可直接寻址的位。 U C M 注意:如果该指令被用来修改输出端口的状态,那么bit所代表的数据是端口锁 存器中的数据,而不是从引脚上输入的当前状态。 C T S 举例: 设P1端口的数据为5BH(01011011B),那么指令 CPL P1.1 CPL P1.2 执行完后,Pl端口被设置为5DH(01011101B)。 CPL C 指令长度(字节): 1 执行周期: 1 二进制编码: 1 0 1 1 0 0 1 1 操作: CPL (C) �� ←� (C) CPL bit 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 1 1 0 0 1 0 bit address 操作: CPL (bit) ← �� (bit) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 383 STC15F2K60S2系列单片机指南 DA 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 A 功能: 在加法运算之后,对累加器A进行十进制调整 说明: DA指令对累加器A中存放的由此前的加法运算产生的8位数据进行调整(ADD或 ADDC指令可以用来实现两个压缩BCD码的加法),生成两个4位的数字。 如果累加器的低4位(位3~位0)大于9 (xxxx1010~xxxx 1111),或者加法运算 后,辅助进位标志AC为1,那么DA指令将把6加到累加器上,以在低4位生成正确的 BCD数字。若加6后,低4位向上有进位,且高4位都为1,进位则会一直向前传递,以 致最后进位标志被置1;但在其他情况下进位标志并不会被清零,进位标志会保持原 来的值。 如果进位标志为1,或者高4位的值超过9 (1010xxxx~1111xxxx),那么DA指令将 把6加到高4位,在高4位生成正确的BCD数字,但不清除标志位。若高4位有进位输 出,则置进位标志为1,否则,不改变进位标志。进位标志的状态指明了原来的两 个BCD数据之和是否大于99,因而DA指令使得CPU可以精确地进行十进制的加法运 算。注意,OV标志不会受影响。 d e t i im DA指令的以上操作在一个指令周期内完成。实际上,根据累加器A和机器状态 字PSW中的不同内容,DA把00H、06H、60H、66H加到累加器A上,从而实现十进制 转换。 U C M L 注意:如果前面没有进行加法运算,不能直接用DA指令把累加器A中的十六进 制数据转换为BCD数,此外,如果先前执行的是减法运算,DA指令也不会有所预期 的效果。 举例: C T S 如果累加器中的内容为56H(01010110B),表示十进制数56的BCD码,寄存器3 的内容为67H(01100111B),表示十进制数67的BCD码。进位标志为1,则指令 ADDC A,R3 DA A 先执行标准的补码二进制加法,累加器A的值变为0BEH,进位标志和辅助进位标志被 清零。 接着,DA执行十进制调整,将累加器A的内容变为24H(00100100B),表示十 进制数24的BCD码,也就是56、67及进位标志之和的后两位数字。DA指令会把进位 标志置位1,这表示在进行十进制加法时,发生了溢出。56、67以及1的和为124。 把BCD格式的变量加上0lH或99H,可以实现加1或者减1。假设累加器的初始值 为30H(表示十进制数30),指令序列 ADD A, DA A #99H 将把进位C置为1,累加器A的数据变为29H,因为30+99=129。加法和的低位数据可 以看作减法运算的结果,即30-1=29。 384 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 1 0 1 0 0 操作: DA -contents of Accumulator are BCD IF [[(A3-0) > 9] V [(AC) = 1]] THEN(A3-0) �� ←��� �� (A3-0) + 6 AND IF [[(A7-4) > 9] V [(C) = 1]] THEN (A7-4) �� ←��� �� (A7-4) + 6 DEC byte 功能: 把BYTE所代表的操作数减1 说明: d e t i im BYTE所代表的变量被减去l。如果原来的值为00H,那么减去1后,变成0FFH。 没有标志位会受到影响。该指令支持4种操作数寻址方式:累加器寻址、寄存器寻 址、直接寻址和寄存器间接寻址。 L 注意:当DEC指令用于修改输出端口的状态时,BYTE所代表的数据是从端口输 出数据锁存器中获取的,而不是从引脚上读取的输入状态。 U C M 举例: 假设寄存器0的内容为7FH(01111111B),内部RAM的7EH和7FH单元的内容分别为 00H和40H。则指令 C T S DEC @R0 DEC R0 DEC @R0 执行后,寄存器0的内容变成7EH,内部RAM的7EH和7FH单元的内容分别变为0FFH 和3FH。 DEC A 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 0 1 0 0 操作: DEC (A)����� ←���� (A) -1 DEC Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 1 r r r 操作: DEC (Rn)������ ←����� (Rn) ��- �1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 385 STC15F2K60S2系列单片机指南 DEC 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 0 1 0 1 0 1 direct address 操作: DEC (direct)���������� ←��������� (direct) -1 DEC @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 0 1 1 i 操作: DEC ((Ri))�������� ←������� ((Ri)) ��- �1 DIV AB 功能: 除法 说明: U C M d e t i im L DIV指令把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,并将 商置于累加器A中,余数置于寄存器B中。进位标志C和溢出标志OV被清零。 例������� 外������ :如果寄存器B的初始值为00H(即除数为0),那么执行DIV指令后,累加 器A和寄存器B中的值是不确定的,且溢出标志OV将被置位。但在任何情况下,进位 标志C都会被清零。 C T S 举例: 假设累加器的值为251 (0FBH或11111011B),寄存器B的值为18 (12H或 00010010B)。则指令 DIV AB 执行后,累加器的值变成13 (0DH或00001101B),寄存器B的值变成17 (11H或 0001000B),正好符合251=13×18+17。进位和溢出标志都被清零。 指令长度(字节): 1 执行周期: 4 二进制编码: 1 0 0 0 0 1 0 0 操作: DIV (A)15-8 (A)/(B) (B)7-0 ←�������� 386 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 DJNZ , 功能: 减1,若非0则跳转 说明: DJNZ指令首先将第1个操作数所代表的变量减1,如果结果不为0,则转移到 第2个操作数所指定的地址处去执行。如果第1个操作数的值为00H,则减1后变为 0FFH。该指令不影响标志位。跳转目标地址的计算:首先将PC值加2(即指向下一 条指令的首字节),然后将第2操作数表示的有符号的相对偏移量加到PC上去即可。 byte所代表的操作数可采用寄存器寻址或直接寻址。 注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端 口输出数据锁存器中获取的,而不是直接读取引脚。 举例: 假设内部RAM的40H、50H和60H单元分别存放着01H、70H和15H,则指令 DJNZ 40H, LABEL_1 DJNZ 50H, LABEL_2 DJNZ 60H, LABEL_3 d e t i im 执行之后,程序将跳转到标号LABEL2处执行,且相应的3个RAM单元的内容变成 00H、6FH和15H。之所以第1个跳转没被执行,是因为减1后其结果为0,不满足跳转 条件。 U C M L 使用DJNZ指令可以方便地在程序中实现指定次数的循环,此外用一条指令就可 以在程序中实现中等长度的时间延迟(2~512个机器周期)。指令序列 C T S MOV TOOOLE: R2,#8 CPL P1.7 DJNZ R2, TOOGLE 将使得P1.7的电平翻转8次,从而在P1.7产生4个脉冲,每个脉冲将持续3个机器周 期,其中2个为DJNZ指令的执行时间,1个为CPL指令的执行时间。 DJNZ Rn,rel 指令长度(字节): 2 执行周期: 2 二进制编码: 1 1 0 1 1 r r r rel. address 操作: DJNZ (PC) �� ← �������� �������� (PC) + 2 (Rn) �� ← ����� ����� (Rn) ��– �1 IF (Rn) > 0 or (Rn) < 0 THEN (PC) �� ←������� ������ (PC)+ ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 387 STC15F2K60S2系列单片机指南 DJNZ 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 direct, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 1 0 1 0 1 0 1 direct address rel. address 操作: DJNZ (PC) �� ←��������� �������� (PC) + 2 (direct) ←���������� �� ��������� (direct) ��– �1 IF (direct) > 0 or (direct) < 0 THEN (PC) �� ← ������� ������� (PC) + ��� rel INC 功能: 加1 说明: d e t i im INC指令将所代表的数据加1。如果原来的值为FFH,则加1后变为00H, 该指令步影响标志位。支持3种寻址模式:寄存器寻址、直接寻址、寄存器间接寻 址。 L 注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端 口输出数据锁存器中获取的,而不是直接读的引脚。 U C M 举例: 假设寄存器0的内容为7EH(0111110B),内部RAM的7E单元和7F单元分别存放着0FFH 和40H,则指令序列 C T S INC @R0 INC R0 INC @R0 执行完毕后,寄存器0的内容变为7FH,而内部RAM的7EH和7FH单元的内容分别变 成00H和41H。 INC A 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 0 1 0 0 操作: INC (A) �� ← (A)+1 ����� INC Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 1 r r r 操作: INC (Rn) ← (Rn)+1 �� ������ 388 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 INC 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 0 0 0 1 0 1 direct address 操作: INC (direct)���������� ←��������� (direct) + 1 INC @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 0 1 1 i 操作: INC ((Ri))����������� ←���������� ((Ri)) + 1 INC DPTR 功能: 数据指针加1 说明: U C M d e t i im L 该指令实现将DPTR加1功能。需要注意的是,这是16位的递增指令,低位字节 DPL从FFH增加1之后变为00H,同时进位到高位字节DPH。该操作不影响标志位。 该指令是唯一1条16位寄存器递增指令。 C T S 举例: 假设寄存器DPH和DPL的内容分别为12H和0FEH,则指令序列 INC DPTR INC DPTR INC DPTR 执行完毕后,DPH和DPL变成13H和01H 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 1 0 0 0 1 1 操作: INC (DPTR) �� ← (DPTR)+1 �������� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 389 STC15F2K60S2系列单片机指南 JB 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 bit, rel 功能: 若位数据为1则跳转 说明: 如果bit代表的位数据为1,则跳转到rel所指定的地址处去执行;否则,继续执行下 一条指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向下一条指 令的首字节地址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到 PC上去,新的PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数 值,而且该操作不会影响标志位。 举例: 假设端口1的输入数据为11001010B,累加器的值为56H(01010110B)。则指令 JB P1.2, LABEL1 JB ACC.2, LABEL2 将导致程序转到标号LABEL2处去执行 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 1 0 0 0 0 0 操作: JB (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel JBC bit, rel d e t i im bit address U C M rel. address L 功能: 若位数据为1则跳转并将其清零 说明: C T S 如果bit代表的位数据为1,则将其清零并跳转到rel所指定的地址处去执行。如果 bit代表的位数据为0,则继续执行下一条指令。跳转的目标地址按照如下方式计算: 先增加PC的值,使其指向下一条指令的首字节地址,然后把rel所代表的有符号的相 对偏移量(指令的第3个字节)加到PC上去,新的PC值即为目标地址,而且该操作不 会影响标志位。 注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端 口输出数据锁存器中获取的,而不是直接读取引脚。 举例: 假设累加器的内容为56H(01010110B),则指令序列 JBC ACC.3, LABEL1 JBC ACC.2, LABEL2 将导致程序转到标号LABEL2处去执行,且累加器的内容变为52H(01010010B)。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 1 0 0 0 0 bit address rel. address 操作: JBC (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 1 THEN (bit) ← 0 �� � (PC) �� ←�������� ������� (PC) + ��� rel 390 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 JC 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 rel 功能: 若进位标志为1,则跳转 说明: 如果进位标志为1,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的 指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向紧接JC指令的 下一条指令的首地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字节) 加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。 举例: 假设进位标志此时为0,则指令序列 JC LABEL1 CPL C JC LABEL2 执行完毕后,进位标志变成1,并导致程序跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 0 0 0 0 0 0 操作: JC (PC) �� ← ������� ������� (PC)+ 2 IF (C) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel U C M JMP @A+DPTR 功能: 间接跳转。 C T S d e t i im rel. address L 说明: 把累加器A中的8位无符号数据和16位的数据指针的值相加,其和作为下一条将要执 行的指令的地址,传送给程序计数器PC。执行16位的加法时,低字节DPL的进位会 传到高字节DPH。累加器A和数据指针DPTR 的内容都不会发生变化。不影响任何标 志位。 举例: 假设累加器A中的值是偶数(从0到6)。下面的指令序列将使得程序跳转到位于跳转 表JMP_TBL 的4条AJMP指令中的某一条去执行: MOV DPTR, #JMP_TBL JMP @A+DPTR JMP-TBL: AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3 如果开始执行上述指令序列时,累加器A中的值为04H,那么程序最终会跳转到标号 LABEL2处去执行。 注意:AJMP是一个2字节指令,因而在跳转表中,各个跳转指令的入口地址依次相 差2个字节。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 1 1 1 0 0 1 1 操作: JMP (PC) �� ← ������������ ������������ (A) + (DPTR) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 391 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 JNB bit, rel 功能: 如果bit所代表的位不为1则跳转。 说明: 如果bit所表示的位为0,则转移到rel所代表的地址去执行;否则,继续执行下一条 指令。跳转的目标地址如此计算:先增加PC的值,使其指向下一条指令的首字节地 址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到PC上去,新的 PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数值,而且该操 作不会影响标志位。 举例: 假设端口1的输入数据为110010108,累加器的值为56H(01010110B)。则指令序列 JNB P1.3, LABEL1 JNB ACC.3, LABEL2 执行后将导致程序转到标号LABEL2处去执行。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 1 1 0 0 0 0 操作: JNB (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel JNC C T S rel d e t i im bit address U C M rel. address L 功能: 若进位标志非1则跳转 说明: 如果进位标志为0,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的 指令。跳转的目标地址按照如下方式计算:先增加PC的值加2,使其指向紧接JNC指 令的下一条指令的地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字 节)加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。 举例: 假设进位标志此时为1,则指令序列 JNC LABEL1 CPL C JNC LABEL2 执行完毕后,进位标志变成0,并导致程序跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 0 1 0 0 0 0 rel. address 操作: JNC (PC) �� ← ������� ������� (PC)+ 2 IF (C) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 392 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 JNZ 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 rel 功能: 如果累加器的内容非0则跳转 说明: 如果累加器A的任何一位为1,那么程序跳转到rel所代表的地址处去执行,如果各个 位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增 加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新 的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。 举例: 设累加器的初始值为00H,则指令序列 JNZ INC JNZ LABEL1 A LAEEL2 执行完毕后,累加器的内容变成01H,且程序将跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 1 0 0 0 0 操作: JNZ (PC) �� ← ������� ������� (PC)+ 2 IF (A) ≠ 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel JZ C T S rel d e t i im rel. address U C M L 功能: 若累加器的内容为0则跳转 说明: 如果累加器A的任何一位为0,那么程序跳转到rel所代表的地址处去执行,如果各个 位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增 加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新 的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。 举例: 设累加器的初始值为01H,则指令序列 JZ DEC JZ LABEL1 A LAEEL2 执行完毕后,累加器的内容变成00H,且程序将跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 0 0 0 0 0 rel. address 操作: JZ (PC) �� ← ������� ������� (PC)+ 2 IF (A) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 393 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 LCALL addr16 功能: 长调用 说明: LCALL用于调用addr16所指地址处的子例程。首先将PC的值增加3,使得PC指向紧随 LCALL的下一条指令的地址,然后把16位PC的低8位和高8位依次压入栈(低位字节 在先),同时把栈指针加2。然后再把LCALL指令的第2字节和第3字节的数据分别装 入PC的高位字节DPH和低位字节DPL,程序从新的PC所对应的地址处开始执行。因 而子例程可以位于64KB程序存储空间的任何地址处。该操作不影响标志位。 举例: 栈指针的初始值为07H,标号SUBRTN被分配的程序存储器地址为1234H。则执行如 下位于地址0123H的指令后, LCALL SUBRTN 栈指针变成09H,内部RAM的08H和09H单元的内容分别为26H和01H,且PC的当前 值为1234H。 d e t i im 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 1 0 0 1 0 操作: LCALL (PC) �� ←��������� �������� (PC) + 3 (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC15-8) (PC) �� ←� ���� addr15-0 U C M C T S L addr15-addr8 addr7-addr0 LJMP addr16 功能: 长跳转 说明: LJMP使得CPU无条件跳转到addr16所指的地址处执行程序。把该指令的第2字节和第 3字节分别装入程序计数器PC的高位字节DPH和低位字节DPL。程序从新PC值对应的 地址处开始执行。该16位目标地址可位于64KB程序存储空间的任何地址处。该操作 不影响标志位。 举例: 假设标号JMPADR被分配的程序存储器地址为1234H。则位于地址1234H的指令 LJMP JMPADR 执行完毕后,PC的当前值变为1234H。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 0 0 0 1 0 addr15-addr8 addr7-addr0 操作: LJMP (PC) �� ←� ���� addr15-0 394 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV , 功能: 传送字节变量 说明: 将第2操作数代表字节变量的内容复制到第1操作数所代表的存储单元中去。该 指令不会改变源操作数,也不会影响其他寄存器和标志位。 MOV指令是迄今为止使用最灵活的指令,源操作数和目的操作数组合起来,寻 址方式可达15种。 举例: 假设内部RAM的30H单元的内容为40H,而40H单元的内容为10H。端口1 的数据为 11001010B(0CAH)。则指令序列 MOV MOV MOV MOV MOV MOV R0, #30H A, @R0 R1, A B, @Rl @Rl, Pl P2, P1 ;R0< = 30H ;A < = 40H ;R1 < = 40H ;B < = 10H ;RAM (40H) < = 0CAH ;P2 #0CAH d e t i im L 执行完毕后,寄存器0的内容为30H,累加器和寄存器1的内容都为40H,寄存器B的 内容为10H,RAM中40H单元和P2口的内容均为0CAH。 MOV A,Rn 指令长度(字节): 1 执行周期: 1 二进制编码: C T S 1 1 1 U C M 0 1 r r r 1 1 1 0 0 1 0 1 操作: MOV (A) �� ←����� ���� (Rn) *MOV A,direct 指令长度(字节): 2 执行周期: 1 二进制编码: direct address 操作: MOV (A)�� ←��������� �������� (direct) 注意:MOV A, ACC是无效指令。 MOV A,@Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 0 0 1 1 i 操作: MOV (A) �� ←������� ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 395 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 1 1 0 1 0 0 immediate data 操作: MOV ←� ����� #data (A)�� MOV Rn, A 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 1 1 r r r 操作: MOV (Rn)���� ←��� (A) d e t i im MOV Rn,direct 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 操作: MOV (Rn)��������� ←�������� (direct) MOV Rn,#data 指令长度(字节): 2 执行周期: 1 二进制编码: C T S 0 1 1 1 L 1 r r r direct addr. 1 r r r immediate data 0 1 0 1 direct address 1 r r r direct address U C M 操作: MOV (Rn) ←� �� ����� #data MOV direct, A 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 1 1 操作: MOV (direct) ←���� �� ��� (A) MOV direct, Rn 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 操作: MOV (direct) ←����� �� ���� (Rn) 396 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV direct, direct 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 0 0 0 1 0 1 dir.addr. (src) 操作: MOV (direct)�� ←��������� �������� (direct) MOV direct, @Ri 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 0 1 1 i direct addr. 操作: MOV (direct)������� ←������ ((Ri)) d e t i im MOV direct,#data 指令长度(字节): 3 执行周期: 2 二进制编码: 0 1 1 1 操作: MOV (direct) ← ����� �� ����� #data MOV @Ri, A 指令长度(字节): 1 执行周期: 1 二进制编码: U C M 0 1 0 1 C T S 1 1 1 1 direct address L 0 1 1 i 操作: MOV ((Ri)) ←���� �� (A) ��� MOV @Ri, direct 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 0 1 1 i direct addr. 0 1 1 i immediate data 操作: MOV ((Ri)) ←��������� �� (direct) �������� MOV @Ri, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 1 1 操作: MOV ((Ri)) ←� �� ����� #data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 397 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV , 功能: 传送位变量 说明: 将代表的布尔变量复制到所指定的数据单元中去,两个操作数 必须有一个是进位标志,而另外一个是可直接寻址的位。本指令不影响其他寄存器和 标志位。 举例: 假设进位标志C的初值为1,端口P2中的数据是11000101B,端口1的数据被设置为 35H(00110101B)。则指令序列 MOV MOV MOV P1.3, C C, P3.3 P1.2, C 执行后,进位标志被清零,端口1的数据变为39H(00111001B)。 MOV C,bit 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 1 0 0 0 1 0 操作: MOV (C) �� ←������ ����� (bit) U C M MOV bit,C 指令长度(字节): 2 执行周期: 2 二进制编码: C T S 1 0 0 1 0 0 1 d e t i im bit address 0 L bit address 操作: MOV (bit)�� ←���� (C) ��� MOV DPTR , #data 16 功能: 将16位的常数存放到数据指针 说明: 该指令将16位常数传递给数据指针DPTR。16位的常数包含在指令的第2字节和 第3字节中。其中DPH中存放的是#data16的高字节,而DPL中存放的是#data16的低字 节。不影响标志位。 该指令是唯一一条能一次性移动��������� 16������� 位数据的指令。 举例: 指令: MOV DPTR, #1234H 将立即数1234H装入数据指针寄存器中。DPH的值为12H,DPL的值为34H。 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 0 1 0 0 0 0 immediate data 15-8 操作: MOV (DPTR) �� ←� ����� #data15-0 DPH DPL ← #data �� �����15-8 #data7-0 398 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOVC A , @A+ 功能: 把程序存储器中的代码字节数据(常数数据)转送至累加器A 说明: MOVC指令将程序存储器中的代码字节或常数字节传送到累加器A。被传送的数据字 节的地址是由累加器中的无符号8位数据和16位基址寄存器(DPTR或PC)的数值相 加产生的。如果以PC为基址寄存器,则在累加器内容加到PC之前,PC需要先增加到 指向紧邻MOVC之后的语句的地址;如果是以DPTR为基址寄存器,则没有此问题。 在执行16位的加法时,低8位产生的进位会传递给高8位。本指令不影响标志位。 举例: 假设累加器A的值处于0~4之间,如下子例程将累加器A中的值转换为用DB伪指 令(定义字节)定义的4个值之一。 REL-PC: INC A MOVC A, @A+PC RET DB 66H DB 77H DB 88H DB 99H U C M d e t i im L 如果在调用该子例程之前累加器的值为01H,执行完该子例程后,累加器的值 变为77H。MOVC指令之前的INC A指令是为了在查表时越过RET而设置的。如果 MOVC和表格之间被多个代码字节所隔开,那么为了正确地读取表格,必须将相应 的字节数预先加到累加器A上。 C T S MOVC A,@A+DPTR 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 0 1 0 0 1 1 操作: MOVC (A) �� ←������������� ������������ ((A)+(DPTR)) MOVC A,@A+PC 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 0 0 0 0 1 1 操作: MOVC (PC) �� ← (PC)+1 ������ (A) �� ←����������� ���������� ((A)+(PC)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 399 STC15F2K60S2系列单片机指南 MOVX 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 , 功能: 外部传送 说明: MOVX指令用于在累加器和外部数据存储器之间传递数据。因此在传送指令 MOV后附加了X。MOVX又分为两种类型,它们之间的区别在于访问外部数据RAM 的间接地址是8位的还是16位的。 对于第1种类型,当前工作寄存器组的R0和R1提供8位地址到复用端口P0。对于 外部I/O扩展译码或者较小的RAM阵列,8位的地址已经够用。若要访问较大的RAM 阵列,可在端口引脚上输出高位的地址信号。此时可在MOVX指令之前添加输出指 令,对这些端口引脚施加控制。 对于第2种类型,通过数据指针DPTR产生16位的地址。当P2端口的输出缓冲器 发送DPH的内容时,P2的特殊功能寄存器保持原来的数据。在访问规模较大的数据 阵列时,这种方式更为有效和快捷,因为不需要额外指令来配置输出端口。 d e t i im 在某些情况下,可以混合使用两种类型的MOVX指令。在访问大容量的RAM 空间时,既可以用数据指针DP在P2端口上输出地址的高位字节,也可以先用某条 指令,把地址的高位字节从P2端口上输出,再使用通过R0或Rl间址寻址的MOVX指 令。 举例: U C M L 假设有一个分时复用地址/数据线的外部RAM存储器,容量为256B(如� :Inte1的 8155 RAM / I/O / TIMER),该存储器被连接到8051的端口P0上,端口P3被用于提供 外部RAM所需的控制信号。端口Pl和P2用作通用输入/输出端口。R0和Rl中的数据分 别为12H和34H,外部RAM的34H单元存储的数据为56H,则下面的指令序列: C T S MOVX MOVX A, @R1 @R0, A 将数据56H复制到累加器A以及外部RAM的12H单元中。 MOVX A,@Ri 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 0 0 0 1 i 操作: MOVX (A) �� ←������� ������ ((Ri)) MOVX A,@DPTR 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 0 0 0 0 0 操作: MOVX (A) �� ←��������� �������� ((DPTR)) 400 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 MOVX 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 @Ri, A 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 1 0 0 1 i 操作: MOVX ((Ri))�� ←���� (A) ��� MOVX @DPTR, A 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 1 0 0 0 0 d e t i im 操作: MOVX (DPTR)���� ←��� (A) MUL AB U C M 功能: 乘法 L 说明: 该指令可用于实现累加器和寄存器B中的无符号8位整数的乘法。所产生的16位乘积 的低8位存放在累加器中,而高8位存放在寄存器B中。若乘积大于255(0FFH),则置 位溢出标志;否则清零标志位。在执行该指令时,进位标志总是被清零。 C T S 举例: 假设累加器A的初始值为80(50H),寄存器B的初始值为160 (0A0H),则指令� : MUL AB 求得乘积12 800 (3200H),所以寄存器B的值变成32H (00110010B),累加器被清零, 溢出标志被置位,进位标志被清零。 指令长度(字节): 1 执行周期: 4 二进制编码: 1 0 1 0 0 1 0 0 操作: MUL (A)×(B) (A)7-0 ←�������� (B)15-8 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 401 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 NOP 功能: 空操作 说明: 执行本指令后,将继续执行随后的指令。除了PC外,其他寄存器和标志位都不会有 变化。 举例: 假设期望在端口P2的第7号引脚上输出一个长时间的低电平脉冲,该脉冲持续5个机 器周期(精确)。若是仅使用SETB和CLR指令序列,生成的脉冲只能持续1个机器周 期。因而需要设法增加4个额外的机器周期。可以按照如下方式来实现所要求的功能 (假设中断没有被启用): CLR NOP NOP NOP NOP SETB P2.7 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 d e t i im P2.7 0 0 操作: NOP (PC)+1 (PC) ←������� C T S ORL , 0 0 0 0 U C M L 功能: 两个字节变量的逻辑或运算 说明: ORL指令将由和所指定的两个字节变量进行逐位逻辑或运 算,结果存放在所代表的数据单元中。该操作不影响标志位。 两个操作数组合起来,支持6种寻址方式。当目的操作数是累加器A时,源操作 数可以采用寄存器寻址、直接寻址、寄存器间接寻址或者立即寻址。当目的操作数 采用直接寻址方式时,源操作数可以是累加器或立即数。 注意:如果该指令被用来修改输出引脚上的状态,那么所代表的数 据是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。 举例: 假设累加器A中数据为0C3H (11000011B),寄存器R0中的数据为55H(01010101) , 则指令� : ORL A, R0 执行后,累加器的内容变成0D7H(11010111B)。当目的操作数是直接寻址数据字节 时,ORL指令可用来把任何RAM单元或者硬件寄存器中的各个位设置为1。究竟哪 些位会被置1由屏蔽字节决定,屏蔽字节既可以是包含在指令中的常数,也可以是 累加器A在运行过程中实时计算出的数值。执行指令� : ORL P1, #00110010B 之后,把1口的第5、4、1位置1。 402 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ORL A,Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 0 0 1 r r r 1 0 1 操作: ORL (A) �� ←���� ��� (A)∨(Rn) ORL A,direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 0 direct address 操作: ORL (A)�� ←���� ��� (A)∨(direct) d e t i im ORL A,@Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 0 0 0 1 1 i 1 0 0 U C M 操作: ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: C T S 0 1 0 0 0 L immediate data 操作: ORL (A)�� ←���� ��� (A)∨ #data ORL direct, A 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 0 0 1 0 direct address 1 direct address 操作: ORL (direct)�� ←��������� �������� (direct)∨(A) ORL direct, #data 指令长度(字节): 3 执行周期: 2 二进制编码: 0 1 0 0 0 0 1 immediate data 操作: ORL (direct) ←��������� �� �������� (direct)∨#data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 403 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 ORL 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 C, 功能: 位变量的逻辑或运算 说明: 如果所表示的位变量为1,则置位进位标志;否则,保持进位标志的当前状 态不变。在汇编语言中,位于源操作数之前的“/”表示将源操作数取反后使用,但 源操作数本身不发生变化。在执行本指令时,不影响其他标志位。 举例: 当执行如下指令序列时,当且仅当P1.0=1或ACC.7=1或OV=0时,置位进位标志C: MOV ORL ORL C, P1.0 C, ACC.7 C, /OV ;LOAD CARRY WITH INPUT PIN P10 ;OR CARRY WITH THE ACC.BIT 7 ;OR CARRY WITH THE INVERSE OF OV ORL C, bit 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 1 0 0 1 0 ORL C, /bit 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 0 0 操作: ORL (C) �� ←���� ��� (C)∨(bit) POP direct C T S U C M 0 0 d e t i im bit address 操作: ORL (C) �� ←���� ��� (C)∨(bit) L bit address 功能: 出栈 说明: 读取栈指针所指定的内部RAM单元的内容,栈指针减1。然后,将读到的内容传送到 由direct所指示的存储单元(直接寻址方式)中去。该操作不影响标志位。 举例: 设栈指针的初值为32H,内部RAM的30H~32H单元的数据分别为20H、23H和 : 01H。则执行指令� POP DPH POP DPL 之后,栈指针的值变成30H,数据指针变为0123H。此时指令 POP SP 将把栈指针变为20H 。 注意:在这种特殊情况下,在写入出栈数据(20H)之前,栈指针先减小到 2FH,然后再随着20H的写入,变成20H。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 1 0 1 0 0 0 0 direct address 操作: POP ((SP)) (direct) ←������� (SP) �� ←������ ����� (SP) ��- �1 404 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 PUSH direct 功能: 压栈 说明: 栈指针首先加1,然后将direct所表示的变量内容复制到由栈指针指定的内部RAM存 储单元中去。该操作不影响标志位。 举例: 设在进入中断服务程序时栈指针的值为09H,数据指针DPTR的值为0123H。则执行如 下指令序列 PUSH PUSH DPL DPH 之后,栈指针变为0BH,并把数据23H和01H分别存入内部RAM的0AH和0BH存储单 元之中。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 1 0 0 0 0 0 操作: PUSH (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←��������� �������� (direct) RET 0 U C M C T S 功能: 从子例程返回 d e t i im direct address L 说明: 执行RET指令时,首先将PC值的高位字节和低位字节从栈中弹出,栈指针减2。然 后,程序从形成的PC值所对应的地址处开始执行,一般情况下,该指令和ACALL或 LCALL配合使用。改指令的执行不影响标志位。 举例: 设栈指针的初值为0BH,内部RAM的0AH和0BH存储单元中的数据分别为23H和 01H。则指令: RET 执行后,栈指针变为09H。程序将从0123H地址处继续执行。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 0 1 0 0 0 1 0 操作: RET (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 405 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RETI 功能: 中断返回 说明: 执行该指令时,首先从栈中弹出PC值的高位和低位字节,然后恢复中断启用,准备 接受同优先级的其他中断,栈指针减2。其他寄存器不受影响。但程序状态字PSW 不会自动恢复到中断前的状态。程序将继续从新产生的PC值所对应的地址处开始执 行,一般情况下是此次中断入口的下一条指令。在执行RETI指令时,如果有一个优 先级较低的或同优先级的其他中断在等待处理,那么在处理这些等待中的中断之前需 要执行1条指令。 举例: 设栈指针的初值为0BH,结束在地址0123H处的指令执行结束期间产生中断,内部 RAM的0AH和0BH单元的内容分别为23H和01H。则指令� : RETI d e t i im 执行完毕后,栈指针变成09H,中断返回后程序继续从0123H地址开始执行。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 0 1 1 0 0 1 0 U C M 操作: RETI (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 C T S L RL A 功能: 将累加器A中的数据位循环左移 说明: 将累加器中的8位数据均左移1位,其中位7移动到位0。该指令的执行不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 RL A 执行后,累加器的内容变成8BH(10001011B),且标志位不受影响。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 0 0 0 1 1 操作: RL (An+1) �� ←����������� ���������� (An) n �� = ��� 0-6 (A0) �� ←����� ���� (A7) 406 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 RLC A 功能: 带进位循环左移 说明: 累加器的8位数据和进位标志一起循环左移1位。其中位7移入进位标志,进位标志的 初始状态值移到位0。该指令不影响其他标志位。 举例: 假设累加器A的值为0C5H(11000101B),则指令 RLC A 执行后,将把累加器A的数据变为8BH(10001011B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 1 操作: RLC ←��� �� (An) (An+1) �� (A0) ←���� �� (C) ��� (C) ←��� �� (A ��7) 0 0 1 1 d e t i im n = 0-6 U C M RR A L 功能: 将累加器的数据位循环右移 C T S 说明: 将累加器的8个数据位均右移1位,位0将被移到位7,即循环右移,该指 令不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 RR A 执行后累加器的内容变成0E2H(11100010B),标志位不受影响。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 操作: RR �� (A ��n+1) (An) ←��� �� (A ��0) (A7) ←��� 南通国芯微电子有限公司 0 0 1 1 n=0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 407 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RRC A 功能: 带进位循环右移 说明: 累加器的8位数据和进位标志一起循环右移1位。其中位0移入进位标志,进位标志的 初始状态值移到位7。该指令不影响其他标志位。 举例: 假设累加器的值为0C5H(11000101B),进位标志为0,则指令 RRC A 执行后,将把累加器的数据变为62H(01100010B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 0 操作: RRC �� �� (An) (An+1) ←��� ←���� ��� (C) (A7) �� (C) �� ←��� �� (A0) SETB 0 1 1 d e t i im n = 0-6 U C M 功能: 置位 L 说明: SETB指令可将相应的位置1,其操作对象可以是进位标志或其他可直接寻址的位。 该指令不影响其他标志位。 C T S 举例: 设进位标志被清零,端口1的输出状态为34H(00110100B),则指令 SETB C SETB P1.0 执行后,进位标志变为1,端口1的输出状态变成35H(00110101B)。 SETB C 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 1 0 0 1 1 0 0 0 1 0 操作: SETB (C) �� ←�� �1 SETB bit 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 1 bit address 操作: SETB (bit) ←�� �� 1� 408 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 SJMP rel 功能: 短跳转 说明: 程序无条件跳转到rel所示的地址去执行。目标地址按如下方法计算:首先PC值加2, 然后将指令第2字节(即rel)所表示的有符号偏移量加到PC上,得到的新PC值即短 跳转的目标地址。所以,跳转的范围是当前指令(即SJMP)地址的前128字节和后 127字节。 举例: 设标号RELADR对应的指令地址位于程序存储器的0123H地址,则指令: SJMP RELADR 汇编后位于0100H。当执行完该指令后,PC值变成0123H。 注意:在上例中,紧接SJMP的下一条指令的地址是0102H,因此,跳转的偏移 量为0123H-0102H=21H。另外,如果SJMP的偏移量是0FEH,那么构成只有1条指 令的无限循环。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 0 操作: SJMP ←������� ������ (PC)+2 (PC) �� (PC) �� ←��������� �������� (PC)+rel SUBB A, C T S 功能: 带借位的减法 说明: 0 0 0 rel. address U C M d e t i im L SUBB指令从累加器中减去所代表的字节变量的数值及进位标志,减 法运算的结果置于累加器中。如果执行减法时第7位需要借位,SUBB将会置位进位 标志(表示借位);否则,清零进位标志。(如果在执行SUBB指令前,进位标志 C已经被置位,这意味着在前面进行多精度的减法运算时,产生了借位。因而在执 行本条指令时,必须把进位连同源操作数一起从累加器中减去。)如果在进行减法 运算的时候,第3位处向上有借位,那么辅助进位标志AC会被置位;如果第6位有借 位;而第7位没有,或是第7位有借位,而第6位没有, 则溢出标志OV被置位。 当进行有符号整数减法运算时,若OV置位,则表示在正数减负数的过程中产生 了负数;或者,在负数减正数的过程中产生了正数。 源操作数支持的寻址方式:寄存器寻址、直接寻址、寄存器间接寻址和立即数 寻址。 举例: 设累加器中的数据为0C9H(11001001B)。寄存器R2的值为54H(01010100B),进 位标志C被置位。则如下指令: SUBB A, R2 执行后,累加器的数据变为74H(01110100B),进位标志C和辅助进位标志AC被清 零,溢出标志C被置位。 注意:0C9H减去54H应该是75H,但在上面的计算中,由于在SUBB指令执行 前,进位标志C已经被置位,因而最终结果还需要减去进位标志,得到74H。因此, 如果在进行单精度或者多精度减法运算前,进位标志C的状态未知,那么应改采用 CLR C 指令把进位标志C清零。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 409 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 SUBB A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 1 0 0 1 1 r r r 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ���� (Rn) SUBB A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 0 1 0 1 0 1 direct address 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- �������� (direct) d e t i im SUBB A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 0 0 1 0 1 1 i 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ������ ((Ri)) U C M SUBB A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 0 C T S 1 0 1 0 0 L immediate data 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ����� #data SWAP A 功能: 交换累加器的高低半字节 说明: SWAP指令把累加器的低4位(位3~位0)和高4位(位7~位4)数据进行交换。实际上 SWAP指令也可视为4位的循环指令。该指令不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 SWAP A 执行后,累加器的内容变成5CH(01011100B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: SWAP (A3-0) 410 南通国芯微电子有限公司 0 1 0 0 (A7-4) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 XCH A, 功能: 交换累加器和字节变量的内容 说明: XCH指令将所指定的字节变量的内容装载到累加器,同时将累加器的旧内容 写入所指定的字节变量。指令中的源操作数和目的操作数允许的寻址方式:寄 存器寻址、直接寻址和寄存器间接寻址。 举例: 设R0的内容为地址20H,累加器的值为3FH (00111111B)。内部RAM的20H单元的内 容为75H (01110101B)。则指令 XCH A, @R0 执行后,内部RAM的20H单元的数据变为3FH (00111111B),累加器的内容变为 75H(01110101B)。 XCH A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: XCH (A) 1 r r r (Rn) XCH A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 0 0 C T S 操作: XCH (A) U C M 0 1 0 1 d e t i im L direct address (direct) XCH A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: XCH (A) 南通国芯微电子有限公司 0 1 1 i ((Ri)) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 411 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 XCHD A, @Ri 功能: 交换累加器和@Ri对应单元中的数据的低4位 说明: XCHD指令将累加器内容的低半字节(位0~3,一般是十六进制数或BCD码)和间接 寻址的内部RAM单元的数据进行交换,各自的高半字(位7~4)节不受影响。另外, 该指令不影响标志位。 举例: 设R0保存了地址20H,累加器的内容为36H (00110110B)。内部RAM的20H单元存储 的数据为75H (011110101B)。则指令: XCHD A, @R0 执行后,内部RAM 20H单元的内容变成76H (01110110B),累加器的内容变为 35H(00110101B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 1 操作: XCHD (A3-0) (Ri3-0) XRL , C T S 功能: 字节变量的逻辑异或 说明: d e t i im 0 1 1 i U C M L XRL指令将和所代表的字节变量逐位进行逻辑异或运算, 结果保存在所代表的字节变量里。该指令不影响标志位。 两个操作数组合起来共支持6种寻址方式:当目的操作数为累加器时,源操作数 可以采用寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址;当目的操作数是 可直接寻址的数据时,源操作数可以是累加器或者立即数。 注意:如果该指令被用来修改输出引脚上的状态,那么dest-byte所代表的数据就 是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。 举例: 如果累加器和寄存器0的内容分别为0C3H (11000011B)和0AAH(10101010B),则 指令� : XRL A, R0 执行后,累加器的内容变成69H (01101001B)。 当目的操作数是可直接寻址字节数据时,该指令可把任何RAM单元或者寄存器 中的各个位取反。具体哪些位会被取反,在运行过程当中确定。指令� : XRL P1, #00110001B 执行后,P1口的位5、4、0被取反。 412 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 XRL A, Rn 操作: XRL (A) �� ← (A)� ���� ≮ 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 1 0 1 r r r (Rn) XRL A, direct 指令长度(字节): 2 执行周期: 1 0 1 1 0 操作: XRL (A) �� ← (A)� ���� 0 1 0 1 ≮ 二进制编码: direct address (direct) d e t i im XRL A, @Ri 指令长度(字节): 1 执行周期: 1 0 1 1 操作: XRL (A) �� ← (A)� ���� 0 ≮ 二进制编码: 0 1 1 i ((Ri)) XRL A, #data 执行周期: 1 二进制编码: C T S 0 1 1 操作: XRL (A) �� ← (A)� ���� 0 ≮ 指令长度(字节): 2 U C M 0 1 0 0 L immediate data #data XRL direct, A 指令长度(字节): 2 执行周期: 1 0 1 1 0 0 0 1 0 操作: XRL (direct) ← (direct)� �� ��������� ≮ 二进制编码: direct address (A) XRL direct, #data 指令长度(字节): 3 执行周期: 2 0 1 1 0 0 0 1 1 操作: XRL (direct) ← (direct)� �� ��������� 南通国芯微电子有限公司 ≮ 二进制编码: direct address immediate data # data 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 413 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 5.3.2 Instruction Definitions of Traditional 8051 MCU ACALL addr 11 Function: Description: Example: Absolute Call ACALL unconditionally calls a subroutine located at the indicated address.The instruction increments the PC twice to obtain the address of the following instruction, then pushes the 16-bit result onto the stack (low-order byte first) and increments the Stack Pointer twice. The destination address is obtained by suceesively concatenating the five high-order bits of the incremented PC opcode bits 7-5,and the second byte of the instruction. The subroutine called must therefore start within the same 2K block of the program memory as the first byte of the instruction following ACALL. No flags are affected. Initially SP equals 07H. The label “SUBRTN” is at program memory location 0345H. After executingthe instruction, ACALL SUBRTN d e t i im at location 0123H, SP will contain 09H, internal RAM locations 08H and 09H will contain 25H and 01H, respectively, and the PC will contain 0345H. Bytes: Cycles: Encoding: Operation: 2 2 a10 a9 a8 1 U C M 0 0 1 0 a7 a6 a5 a4 L a3 a2 a1 a0 ACALL (PC)�� ←�������� ������� (PC)+ 2 (SP)��������� ←�������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP)��������� ←�������� (SP) + 1 ((SP))���� ←��� (PC15-8) (PC10-0)�� ←� page ����� ������� address C T S ADD A, Function: Description: Add ADD adds the byte variable indicated to the Accumulator, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carryout from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates an overflow occured. OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise OV is cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positive operands, or a positive sum from two negative operands. Example: Four source operand addressing modes are allowed: register,direct register-indirect, or immediate. The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B). The instruction, ADD A,R0 will leave 6DH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1. 414 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ADD A,Rn Bytes: Cycles: 1 1 Encoding: Operation: 0 0 1 0 1 r r r ADD (A)����������� ←���������� (A) + (Rn) ADD A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 0 1 0 0 1 0 1 direct address ADD (A)��������������� ←�������������� (A) + (direct) d e t i im ADD A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 1 0 0 1 1 i ADD (A)������������� ←������������ (A) + ((Ri)) ADD A,#data Bytes: Cycles: Encoding: Operation: 2 1 C T S 0 0 1 0 U C M 0 1 0 0 L immediate data ADD (A)������� ←������ (A) + ����� #data ADDC A, Function: Description: Example: Add with Carry ADDC simultaneously adds the byte variable indicated, the Carry flag and the Accumulator, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates an overflow occured. OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not out of bit 6; otherwise OV is cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positive operands or a positive sum from two negative operands. Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate. The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B) with the Carry. The instruction, ADDC A,R0 will leave 6EH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 415 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ADDC A,Rn Bytes: Cycles: 1 1 Encoding: Operation: 0 0 1 1 1 r r r ADDC (A)����������������� ←���������������� (A) + (C) + (Rn) ADDC A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 0 1 1 0 1 0 1 direct address ADDC (A)��������������������� ←�������������������� (A) + (C) + (direct) d e t i im ADDC A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 1 1 0 1 1 i U C M ADDC (A)������������������� ←������������������ (A) + (C) + ((Ri)) ADDC A,#data Bytes: 2 Cycles: 1 Encoding: Operation: C T S 0 0 1 1 0 1 0 0 L immediate data ADDC (A)������������� ←������������ (A) + (C) + ����� #data AJMP addr 11 Function: Description: Example: Bytes: Cycles: Encoding: Operation: 416 Absolute Jump AJMP transfers program execution to the indicated address, which is formed at run-time by concatenating the high-order five bits of the PC (after incrementing the PC twice), opcode bits 7-5, and the second byte of the instruction. The destination must therefore be within the same 2K block of program memory as the first byte of the instruction following AJMP. The label “JMPADR” is at program memory location 0123H. The instruction, AJMP JMPADR is at location 0345H and will load the PC with 0123H. 2 2 a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 AJMP (PC)�� ←�������� ������� (PC)+ 2 (PC10-0)�� ←� ����� page ������� address 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ANL , Function: Description: Logical-AND for byte variables ANL performs the bitwise logical-AND operation between the variables indicated and stores the results in the destination variable. No flags are affected. The two operands allow six addressing mode combinations. When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address, the source can be the Accumulator or immediate data. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch not the input pins. Example: If the Accumulator holds 0C3H(11000011B) and register 0 holds 55H (01010101B) then the instruction, ANL A,R0 d e t i im will leave 41H (01000001B) in the Accumulator. When the destination is a directly addressed byte, this instruction will clear combinations of bits in any RAM location or hardware register. The mask byte determining the pattern of bits to be cleared would either be a constant contained in the instruction or a value computed in the Accumulator at run-time. The instruction, ANL Pl, #01110011B U C M L will clear bits 7, 3, and 2 of output port 1. ANL A,Rn Bytes: Cycles: 1 1 Encoding: Operation: C T S 0 1 0 1 1 r r r ANL (A)����� ←���� (A) ∧ (Rn) ANL A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 0 1 direct address ANL (A)����� ←���� (A) ∧ (direct) ANL A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 1 i ANL (A)����� ←���� (A) ∧ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 417 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ANL A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 0 0 immediate data ANL (A)����� ←���� (A) ∧ #data ANL direct,A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 0 1 0 direct address ANL (direct)���������� ←��������� (direct) ∧ (A) d e t i im ANL direct,#data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 0 1 U C M 0 0 1 1 immediate data ANL (direct)���������� ←��������� (direct) ∧ #data C T S ANL C , Function: Description: L direct address Logical-AND for bit variables If the Boolean value of the source bit is a logical 0 then clear the carry flag; otherwise leave the carry flag in its current state. A slash (“ / ”) preceding the operand in the assembly language indicates that the logical complement of the addressed bit is used as the source value, but the source bit itself is not affceted. No other flsgs are affected. Only direct addressing is allowed for the source operand. Example: Set the carry flag if, and only if, P1.0 = 1, ACC. 7 = 1, and OV = 0: MOV C, P1.0 ;LOAD CARRY WITH INPUT PIN STATE ANL C, ACC.7 ;AND CARRY WITH ACCUM. BIT.7 ANL C, /OV ;AND WITH INVERSE OF OVERFLOW FLAG ANL C,bit Bytes: 2 Cycles: 2 Encoding: Operation: 418 1 0 0 0 0 0 1 0 bit address ANL (C) �� ← ���� ���� (C) ∧ (bit) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ANL C, /bit Bytes: 2 Cycles: 2 Encoding: 1 0 1 1 Operation: ANL (C)����� ←���� (C) ∧ (bit) 0 0 0 0 bit address CJNE , , rel Function: Description: Compare and Jump if Not Equal CJNE compares the magnitudes of the first two operands, and branches if their values are not equal. The branch destination is computed by adding the signed relative-displacement in the last instruction byte to the PC, after incrementing the PC to the start of the next instruction. The carry flag is set if the unsigned integer value of is less than the unsigned integer value of ; otherwise, the carry is cleared. Neither operand is affected. d e t i im The first two operands allow four addressing mode combinations: the Accumulator may be compared with any directly addressed byte or immediate data, and any indirect RAM location or working register can be compared with an immediate constant. Example: L The Accumulator contains 34H. Register 7 contains 56H. The first instruction in the sequence CJNE ... JC ... ; NOT_EQ: ; C T S U C M R7,#60H, NOT-EQ ...... REQ_LOW ..... ; R7 = 60H. ; IF R7 < 60H. ; R7 > 60H. sets the carry flag and branches to the instruction at label NOT-EQ. By testing the carry flag, this instruction determines whether R7 is greater or less than 60H. If the data being presented to Port 1 is also 34H, then the instruction, WAIT: CJNE A,P1,WAIT clears the carry flag and continues with the next instruction in sequence, since the Accumulator does equal the data read from P1. (If some other value was being input on Pl, the program will loop at this point until the P1 data changes to 34H.) CJNE A,direct,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 0 1 0 1 direct address rel. address (PC) �� ←��������� �������� (PC) + 3 IF (A) < > (direct) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (direct) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 419 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 CJNE A,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 0 1 0 1 immediata data rel. address (PC) �� ←��������� �������� (PC) + 3 IF (A) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 d e t i im CJNE Rn,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 1 r r r U C M (PC) �� ←��������� �������� (PC) + 3 IF (Rn) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (Rn) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 C T S L immediata data rel. address CJNE @Ri,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 420 1 0 1 1 0 1 1 i immediate data rel. address (PC) �� ←��������� �������� (PC) + 3 IF ((Ri)) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF ((Ri)) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 CLR A Function: Description: Example: Clear Accumulator The Aecunmlator is cleared (all bits set on zero). No flags are affected. The Accumulator contains 5CH (01011100B). The instruction, CLR A will leave the Accumulator set to 00H (00000000B). Bytes: Cycles: 1 1 Encoding: Operation: 1 1 1 0 0 1 0 0 CLR (A)�� ←�� �0 CLR bit Function: Description: Example: d e t i im Clear bit The indicated bit is cleared (reset to zero). No other flags are affected. CLR can operate on the carry flag or any directly addressable bit. L Port 1 has previously been written with 5DH (01011101B). The instruction, CLR P1.2 U C M will leave the port set to 59H (01011001B). CLR C Bytes: Cycles: 1 1 C T S Encoding: 1 1 Operation: CLR (C) �� ←�� �0 0 0 0 0 1 1 CLR bit Bytes: 2 Cycles: 1 Encoding: Operation: 1 1 0 0 0 0 1 0 bit address CLR (bit) ← � �� 0� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 421 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 CPL A Function: Description: Example: Complement Accumulator Each bit of the Accumulator is logically complemented (one’s complement). Bits which previously contained a one are changed to a zero and vice-versa. No flags are affected. The Accumulator contains 5CH(01011100B). The instruction, CPL A will leave the Accumulator set to 0A3H (101000011B). Bytes: Cycles: 1 1 Encoding: Operation: 1 1 1 1 0 1 0 0 CPL (A)�� ←� (A) d e t i im CPL bit Function: Description: Example: Complement bit The bit variable specified is complemented. A bit which had been a one is changed to zero and vice-versa. No other flags are affected. CLR can operate on the carry or any directly addressable bit. U C M L Note:When this instruction is used to modify an output pin, the value used as the original data will be read from the output data latch, not the input pin. Port 1 has previously been written with 5BH(01011011B). The instruction, C T S CPL P1.1 CPL P1.2 will leave the port set to 5DH(01011101B). CPL C Bytes: Cycles: 1 1 Encoding: Operation: 1 0 1 1 0 0 1 1 CPL (C) �� ←� (C) CPL bit Bytes: 2 Cycles: 1 Encoding: Operation: 1 0 1 1 0 0 1 0 bit address CPL (bit) ← �� (bit) 422 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 DA 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 A Function: Description: Decimal-adjust Accumulator for Addition DA A adjusts the eight-bit value in the Accumulator resulting from the earlier addition of two variables (each in packed-BCD format), producing two four-bit digits.Any ADD or ADDC instruction may have been used to perform the addition. If Accumulator bits 3-0 are greater than nine (xxxx1010-xxxx1111), or if the AC flag is one, six is added to the Accumulator producing the proper BCD digit in the low-order nibble. This internal addition would set the carry flag if a carry-out of the low-order four-bit field propagated through all high-order bits, but it would not clear the carry flag otherwise. If the carry flag is now set or if the four high-order bits now exceed nine(1010xxxx111xxxx), these high-order bits are incremented by six, producing the proper BCD digit in the high-order nibble. Again, this would set the carry flag if there was a carry-out of the high-order bits, but wouldn’t clear the carry. The carry flag thus indicates if the sum of the original two BCD variables is greater than 100, allowing multiple precision decimal addition. OV is not affected. d e t i im All of this occurs during the one instruction cycle. Essentially, this instruction performs the decimal conversion by adding 00H, 06H, 60H, or 66H to the Accumulator, depending on initial Accumulator and PSW conditions. U C M L Note: DA A cannot simply convert a hexadecimal number in the Accumulator to BCD notation, nor does DA A apply to decimal subtraction. Example: The Accumulator holds the value 56H(01010110B) representing the packed BCD digits of the decimal number 56. Register 3 contains the value 67H (01100111B) representing the packed BCD digits of the decimal number 67.The carry flag is set. The instruction sequence. C T S ADDC A,R3 DA A will first perform a standard twos-complement binary addition, resulting in the value 0BEH (10111110) in the Accumulator. The carry and auxiliary carry flags will be cleared. The Decimal Adjust instruction will then alter the Accumulator to the value 24H (00100100B), indicating the packed BCD digits of the decimal number 24, the low-order two digits of the decimal sum of 56,67, and the carry-in. The carry flag will be set by the Decimal Adjust instruction, indicating that a decimal overflow occurred. The true sum 56, 67, and 1 is 124. BCD variables can be incremented or decremented by adding 01H or 99H. If the Accumulator initially holds 30H (representing the digits of 30 decimal), then the instruction sequence, ADD DA A,#99H A will leave the carry set and 29H in the Accumulator, since 30+99=129. The low-order byte of the sum can be interpreted to mean 30 – 1 = 29. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 423 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 Bytes: 1 Cycles: 1 Encoding: 1 1 0 1 0 1 0 0 Operation: DA -contents of Accumulator are BCD IF [[(A3-0) > 9] V [(AC) = 1]] ←��� �� (A3-0) + 6 THEN(A3-0) �� AND IF [[(A7-4) > 9] V [(C) = 1]] THEN (A7-4) �� ←��� �� (A7-4) + 6 DEC byte Function: Description: Example: Decrement The variable indicated is decremented by 1. An original value of 00H will underflow to 0FFH. No flags are affected. Four operand addressing modes are allowed: accumulator, register, direct, or register-indirect. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. U C M d e t i im L Register 0 contains 7FH (01111111B). Internal RAM locations 7EH and 7FH contain 00H and 40H, respectively. The instruction sequence, DEC @R0 C T S DEC R0 DEC @R0 will leave register 0 set to 7EH and internal RAM locations 7EH and 7FH set to 0FFH and 3FH. DEC A Bytes: Cycles: 1 1 Encoding: Operation: DEC 424 0 0 0 1 0 1 0 0 DEC (A)����� ←���� (A) -1 Rn Bytes: 1 Cycles: 1 Encoding: 0 0 0 1 Operation: DEC (Rn)������ ←����� (Rn) ��- �1 南通国芯微电子有限公司 1 r r r 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 DEC 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 direct Bytes: Cycles: 2 1 Encoding: Operation: DEC 官方网站:www.STCMCU.com 0 0 0 1 0 1 0 1 direct address DEC (direct)���������� ←��������� (direct) -1 @Ri Bytes: 1 Cycles: 1 Encoding: 0 0 0 1 Operation: DEC ((Ri))�������� ←������� ((Ri)) ��- �1 0 1 1 i d e t i im DIV AB Function: Description: Divide DIV AB divides the unsigned eight-bit integer in the Accumulator by the unsigned eight-bit integer in register B. The Accumulator receives the integer part of the quotient; register B receives the integer remainder. The carry and OV flags will be cleared. U C M L Exception: if B had originally contained 00H, the values returned in the Accumulator and B-register will be undefined and the overflow flag will be set. The carry flag is cleared in any case. Example: C T S The Accumulator contains 251(OFBH or 11111011B) and B contains 18(12H or 00010010B). The instruction, DIV Bytes: Cycles: Encoding: Operation: AB will leave 13 in the Accumulator (0DH or 00001101B) and the value 17 (11H or 00010010B) in B, since 251 = (13×18) + 17. Carry and OV will both be cleared. 1 4 1 0 0 0 0 1 0 0 DIV (A)15-8 (A)/(B) (B)7-0 ←�������� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 425 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 DJNZ , Function: Description: Decrement and Jump if Not Zero DJNZ decrements the location indicated by 1, and branches to the address indicated by the second operand if the resulting value is not zero. An original value of 00H will underflow to 0FFH. No flags are afected. The branch destination would be computed by adding the signed relative-displacement value in the last instruction byte to the PC, after incrementing the PC to the first byte of the following instruction. The location decremented may be a register or directly addressed byte. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: Internal RAM locations 40H, 50H, and 60H contain the values 01H, 70H, and 15H, respectively. The instruction sequence, DJNZ DJNZ DJNZ 40H, LABEL_1 50H, LABEL_2 60H, LABEL_3 d e t i im will cause a jump to the instruction at label LABEL_2 with the values 00H, 6FH, and 15H in the three RAM locations. The first jump was not taken because the result was zero. L This instruction provides a simple way of executing a program loop a given number of times, or for adding a moderate time delay (from 2 to 512 machine cycles) with a single instruction The instruction sequence, TOOOLE: MOV CPL DJNZ C T S U C M R2,#8 P1.7 R2, TOOGLE will toggle P1.7 eight times, causing four output pulses to appear at bit 7 of output Port 1. Each pulse will last three machine cycles; two for DJNZ and one to alter the pin. DJNZ Rn,rel Bytes: Cycles: 2 2 Encoding: Operation: DJNZ 1 r r r rel. address DJNZ (PC) �� ← �������� �������� (PC) + 2 (Rn) �� ← ����� ����� (Rn) ��– �1 IF (Rn) > 0 or (Rn) < 0 THEN (PC) �� ←������� ������ (PC)+ ��� rel direct, rel Bytes: 3 Cycles: Encoding: 426 1 1 0 1 2 1 1 0 1 南通国芯微电子有限公司 0 1 0 1 direct address 总机:0513-5501 2928 / 2929 / 2966 rel. address 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 Operation: INC 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 DJNZ (PC) �� ←��������� �������� (PC) + 2 (direct) ←���������� �� ��������� (direct) ��– �1 IF (direct) > 0 or (direct) < 0 THEN (PC) �� ← ������� ������� (PC) + ��� rel Function: Description: Increment INC increments the indicated variable by 1. An original value of 0FFH will overflow to 00H.No flags are affected. Three addressing modes are allowed: register, direct, or registerindirect. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: d e t i im Register 0 contains 7EH (011111110B). Internal RAM locations 7EH and 7FH contain 0FFH and 40H, respectively. The instruction sequence, INC INC INC @R0 R0 @R0 U C M L will leave register 0 set to 7FH and internal RAM locations 7EH and 7FH holding (respectively) 00H and 41H. INC Bytes: Cycles: 1 1 Encoding: Operation: INC 0 0 0 0 0 1 0 0 INC (A) �� ← (A)+1 ����� Rn Bytes: 1 Cycles: 1 Encoding: Operation: INC C T S A direct Bytes: Cycles: 0 0 0 1 r r r INC (Rn) �� ← (Rn)+1 ������ 2 1 Encoding: Operation: 0 0 0 0 0 0 1 0 1 direct address INC (direct)���������� ←��������� (direct) + 1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 427 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 INC Bytes: 1 Cycles: 1 Operation: 0 0 0 0 Example: Bytes: Cycles: INC ((Ri))����������� ←���������� ((Ri)) + 1 Increment Data Pointer Increment the 16-bit data pointer by 1. A 16-bit increment (modulo 216) is performed; an overflow of the low-order byte of the data pointer (DPL) from 0FFH to 00H will increment the high-order-byte (DPH). No flags are affected. This is the only 16-bit register which can be incremented. Operation: 1 2 1 0 Example: Bytes: Cycles: Encoding: Operation: 1 0 C T S U C M L 0 0 1 1 INC (DPTR) �� ← (DPTR)+1 �������� bit, rel Function: Description: d e t i im Register DPH and DPL contains 12H and 0FEH,respectively. The instruction sequence, INC DPTR INC DPTR INC DPTR will change DPH and DPL to 13H and 01H. Encoding: 428 0 1 1 i DPTR Function: Description: JB 研发顾问Tel:13922805190 @Ri Encoding: INC 临时技术支持Tel:13922829991 Jump if Bit set If the indicated bit is a one, jump to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. The bit tested is not modified. No flags are affected. The data present at input port 1 is 11001010B. The Accumulator holds 56 (01010110B). The instruction sequence, JB P1.2, LABEL1 JB ACC.2, LABEL2 will cause program execution to branch to the instruction at label LABEL2. 3 2 0 0 1 0 0 0 0 0 bit address rel. address JB (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 JBC 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 bit, rel Function: Description: Example: Jump if Bit is set and Clear bit If the indicated bit is one,branch to the address indicated;otherwise proceed with the next instruction.The bit wili not be cleared if it is already a zero. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. No flags are affected. Note: When this instruction is used to test an output pin, the value used as the original data will be read from the output data latch, not the input pin. The Accumulator holds 56H (01010110B). The instruction sequence, JBC JBC Bytes: Cycles: Operation: 0 0 0 1 Example: C T S U C M rel. address L The carry flag is cleared. The instruction sequence, LABEL1 C LABEL2s will set the carry and cause program execution to continue at the instruction identified by the label LABEL2. 2 2 Encoding: Operation: d e t i im bit address Jump if Carry is set If the carry flag is set, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the second instruction byte to the PC, after incrementing the PC twice.No flags are affected. JC CPL JC Bytes: Cycles: 0 0 0 0 JBC (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 1 THEN (bit) ← 0 �� � (PC) �� ←�������� ������� (PC) + ��� rel rel Function: Description: ACC.3, LABEL1 ACC.2, LABEL2 will cause program execution to continue at the instruction identified by the label LABEL2, with the Accumulator modified to 52H (01010010B). 3 2 Encoding: JC 官方网站:www.STCMCU.com 0 1 0 0 0 0 0 0 rel. address JC (PC) �� ← ������� ������� (PC)+ 2 IF (C) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 429 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 JMP @A+DPTR Function: Description: Example: Jump indirect Add the eight-bit unsigned contents of the Accumulator with the sixteen-bit data pointer, and load the resulting sum to the program counter. This will be the address for subsequent instruction fetches. Sixteen-bit addition is performed (modulo 216): a carry-out from the loworder eight bits propagates through the higher-order bits. Neither the Accumulator nor the Data Pointer is altered. No flags are affected. An even number from 0 to 6 is in the Accumulator. The following sequence of instructions will branch to one of four AJMP instructions in a jump table starting at JMP_TBL: JMP-TBL: MOV JMP AJMP AJMP AJMP AJMP DPTR, #JMP_TBL @A+DPTR LABEL0 LABEL1 LABEL2 LABEL3 d e t i im If the Accumulator equals 04H when starting this sequence, execution will jump to label LABEL2. Remember that AJMP is a two-byte instruction, so the jump instructions start at every other address. Bytes: Cycles: 1 2 Encoding: Operation: 0 1 1 1 Function: Description: Example: 0 0 1 1 JMP (PC) �� ← ������������ ������������ (A) + (DPTR) C T S JNB bit, rel U C M L Jump if Bit is not set If the indicated bit is a zero, branch to the indicated address; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. The bit tested is not modified. No flags are affected. The data present at input port 1 is 11001010B. The Accumulator holds 56H (01010110B). The instruction sequence, JNB JNB P1.3, LABEL1 ACC.3, LABEL2 will cause program execution to continue at the instruction at label LABEL2 Bytes: Cycles: Encoding: Operation: 430 3 2 0 0 1 1 0 0 0 0 bit address rel. address JNB (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 JNC 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 rel Function: Description: Example: Jump if Carry not set If the carry flag is a zero, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the second instruction byte to the PC, after incrementing the PC twice to point to the next instruction. The carry flag is not modified The carry flag is set. The instruction sequence, JNC LABEL1 CPL C JNC LABEL2 will clear the carry and cause program execution to continue at the instruction identified by the label LABEL2. Bytes: Cycles: 2 2 Encoding: Operation: JNZ 0 1 0 1 Description: Example: C T S d e t i im rel. address JNC (PC) �� ← ������� ������� (PC)+ 2 IF (C) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel rel Function: 0 0 0 0 U C M L Jump if Accumulator Not Zero If any bit of the Accumulator is a one, branch to the indicated address; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The Accumulator is not modified. No flags are affected. The Accumulator originally holds 00H. The instruction sequence, JNZ INC JNZ LABEL1 A LAEEL2 will set the Accumulator to 01H and continue at label LABEL2. Bytes: Cycles: 2 2 Encoding: Operation: 0 1 1 1 0 0 0 0 rel. address JNZ (PC) �� ← ������� ������� (PC)+ 2 IF (A) ≠ 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 431 STC15F2K60S2系列单片机指南 JZ 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 rel Function: Description: Example: Bytes: Cycles: Jump if Accumulator Zero If all bits of the Accumulator are zero, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The Accumulator is not modified. No flags are affected. The Accumulator originally contains 01H. The instruction sequence, JZ LABEL1 DEC A JZ LAEEL2 will change the Accumulator to 00H and cause program execution to continue at the instruction identified by the label LABEL2. 2 2 Encoding: Operation: 0 1 1 0 0 0 0 0 JZ (PC) �� ← ������� ������� (PC)+ 2 IF (A) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel U C M LCALL addr16 Function: Description: Example: d e t i im rel. address L Long call LCALL calls a subroutine loated at the indicated address. The instruction adds three to the program counter to generate the address of the next instruction and then pushes the 16-bit result onto the stack (low byte first), incrementing the Stack Pointer by two. The high-order and low-order bytes of the PC are then loaded, respectively, with the second and third bytes of the LCALL instruction. Program execution continues with the instruction at this address. The subroutine may therefore begin anywhere in the full 64K-byte program memory address space. No flags are affected. C T S Initially the Stack Pointer equals 07H. The label “SUT2N” is assigned to program memory location 1234H. After executing the instruction, LCALL SUT2N Bytes: Cycles: Encoding: Operation: 432 at location 0123H, the Stack Pointer will contain 09H, internal RAM locations 08H and 09H will contain 26H and 01H, and the PC will contain 1234H. 3 2 0 0 0 1 0 0 1 0 addr15-addr8 addr7-addr0 LCALL (PC) �� ←��������� �������� (PC) + 3 (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC15-8) (PC) �� ←� ���� addr15-0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 LJMP addr16 Function: Description: Example: Long Jump LJMP causes an unconditional branch to the indicated address, by loading the high-order and low-order bytes of the PC (respectively) with the second and third instruction bytes. The destination may therefore be anywhere in the full 64K program memory address space. No flags are affected. The label “JMPADR” is assigned to the instruction at program memory location 1234H. The instruction, LJMP JMPADR at location 0123H will load the program counter with 1234H. Bytes: Cycles: 3 2 Encoding: 0 0 0 0 Operation: LJMP (PC) �� ←� ���� addr15-0 0 0 1 0 MOV , Function: Description: d e t i im addr15-addr8 U C M addr7-addr0 L Move byte variable The byte variable indicated by the second operand is copied into the location specified by the first operand. The source byte is not affected. No other register or flag is affected. C T S This is by far the most flexible operation. Fifteen combinations of source and destination addressing modes are allowed. Example: Internal RAM location 30H holds 40H. The value of RAM location 40H is 10H. The data present at input port 1 is 11001010B (0CAH). MOV R0, #30H ;R0< = 30H MOV A, @R0 ;A < = 40H MOV R1, A ;R1 < = 40H MOV B, @Rl ;B < = 10H MOV @Rl, Pl ;RAM (40H) < = 0CAH MOV P2, P1 ;P2 #0CAH leaves the value 30H in register 0,40H in both the Accumulator and register 1,10H in register B, and 0CAH(11001010B) both in RAM location 40H and output on port 2. MOV A,Rn Bytes: Cycles: 1 1 Encoding: Operation: 1 1 1 0 1 r r r MOV (A) �� ←����� ���� (Rn) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 433 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 *MOV A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 1 1 1 0 0 1 0 1 direct address MOV (A)�� ←��������� �������� (direct) *MOV A, ACC is not a valid instruction MOV A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 1 1 1 0 0 1 1 i MOV (A) �� ←������� ������ ((Ri)) d e t i im MOV A,#data Bytes: 2 Cycles: 1 Encoding: 0 1 1 1 Operation: MOV (A)�� ←� ����� #data MOV Rn, A Bytes: 1 Cycles: 1 Encoding: Operation: C T S 1 1 1 1 U C M 0 1 0 0 immediate data L 1 r r r MOV (Rn)���� ←��� (A) MOV Rn,direct Bytes: 2 Cycles: 2 Encoding: Operation: 1 0 1 0 1 r r r direct addr. 1 r r r immediate data MOV (Rn)��������� ←�������� (direct) MOV Rn,#data Bytes: 2 Cycles: 1 Encoding: Operation: 434 0 1 1 1 MOV (Rn) �� ←� ����� #data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV direct, A Bytes: 2 Cycles: 1 Encoding: 1 1 1 1 Operation: MOV (direct) ←���� �� ��� (A) 0 1 0 1 direct address 1 r r r direct address MOV direct, Rn Bytes: 2 Cycles: 2 Encoding: 1 0 0 0 Operation: MOV (direct) ←����� �� ���� (Rn) d e t i im MOV direct, direct Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 0 0 0 1 0 1 MOV (direct)�� ←��������� �������� (direct) MOV direct, @Ri Bytes: 2 Cycles: 2 C T S Encoding: 1 0 0 0 Operation: MOV (direct)������� ←������ ((Ri)) dir.addr. (src) U C M 0 1 1 i L direct addr. MOV direct,#data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 1 1 0 1 0 1 direct address MOV (direct) ← ����� �� ����� #data MOV @Ri, A Bytes: 1 Cycles: 1 Encoding: 1 1 1 1 Operation: MOV ((Ri)) ←���� �� (A) ��� 南通国芯微电子有限公司 0 1 1 i 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 435 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV @Ri, direct Bytes: 2 Cycles: 2 Encoding: 1 0 1 0 0 1 1 i direct addr. 0 1 1 i immediate data Operation: MOV ((Ri)) ←��������� �� (direct) �������� MOV @Ri, #data Bytes: 2 Cycles: 1 Encoding: 0 1 1 1 Operation: MOV ((Ri)) ←� �� ����� #data d e t i im MOV , Function: Description: Example: Move bit data The Boolean variable indicated by the second operand is copied into the location specified by the first operand. One of the operands must be the carry flag; the other may be any directly addressable bit. No other register or flag is affected. U C M L The carry flag is originally set. The data present at input Port 3 is 11000101B. The data previously written to output Port 1 is 35H (00110101B). C T S MOV MOV MOV P1.3, C C, P3.3 P1.2, C will leave the carry cleared and change Port 1 to 39H (00111001B). MOV C,bit Bytes: Cycles: 2 1 Encoding: Operation: 1 0 1 0 0 0 1 0 bit address 1 0 0 1 0 bit address MOV (C) �� ←������ ����� (bit) MOV bit,C Bytes: 2 Cycles: 2 Encoding: Operation: 436 1 0 0 MOV (bit)�� ←���� (C) ��� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV DPTR , #data 16 Function: Description: Example: Bytes: Cycles: Encoding: Operation: Load Data Pointer with a 16-bit constant The Data Pointer is loaded with the 16-bit constant indicated.The 16-bit constant is loaded into the second and third bytes of the instruction. The second byte (DPH) is the high-order byte, while the third byte (DPL) holds the low-order byte. No flags are affected. This is the only instruction which moves 16 bits of data at once. The instruction, MOV DPTR, #1234H will load the value 1234H into the Data Pointer: DPH will hold 12H and DPL will hold 34H. 3 2 1 0 0 1 0 0 0 0 immediate data 15-8 MOV (DPTR) �� ←� ����� #data15-0 DPH DPL ← #data �� �����15-8 #data7-0 MOVC A , @A+ Function: Description: Example: d e t i im L Move Code byte The MOVC instructions load the Accumulator with a code byte, or constant from program memory. The address of the byte fetched is the sum of the original unsigned eight-bit. Accumulator contents and the contents of a sixteen-bit base register, which may be either the Data Pointer or the PC. In the latter case, the PC is incremented to the address of the following instruction before being added with the Accumulator; otherwise the base register is not altered. Sixteen-bit addition is performed so a carry-out from the low-order eight bits may propagate through higher-order bits. No flags are affected. C T S U C M A value between 0 and 3 is in the Accumulator. The following instructions will translate the value in the Accumulator to one of four values defimed by the DB (define byte) directive. REL-PC: INC A MOVC A, @A+PC RET DB 66H DB 77H DB 88H DB 99H If the subroutine is called with the Accumulator equal to 01H, it will return with 77H in the Accumulator. The INC A before the MOVC instruction is needed to “get around” the RET instruction above the table. If several bytes of code separated the MOVC from the table, the corresponding number would be added to the Accumulator instead. MOVC A,@A+DPTR Bytes: 1 Cycles: 2 Encoding: Operation: 1 0 0 1 0 0 1 1 MOVC (A) �� ←������������� ������������ ((A)+(DPTR)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 437 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOVC A,@A+PC Bytes: 1 Cycles: 2 Encoding: Operation: MOVX 1 0 0 0 0 0 1 1 MOVC (PC) �� ← (PC)+1 ������ (A) �� ←����������� ���������� ((A)+(PC)) , Function: Description: Move External The MOVX instructions transfer data between the Accumulator and a byte of external data memory, hence the “X” appended to MOV. There are two types of instructions, differing in whether they provide an eight-bit or sixteen-bit indirect address to the external data RAM. d e t i im In the first type, the contents of R0 or R1 in the current register bank provide an eight-bit address multiplexed with data on P0. Eight bits are sufficient for external I/O expansion decoding or for a relatively small RAM array. For somewhat larger arrays, any output port pins can be used to output higher-order address bits. These pins would be controlled by an output instruction preceding the MOVX. U C M L In the second type of MOVX instruction, the Data Pointer generates a sixteen-bit address. P2 outputs the high-order eight address bits (the contents of DPH) while P0 multiplexes the low-order eight bits (DPL) with data. The P2 Special Function Register retains its previous contents while the P2 output buffers are emitting the contents of DPH. This form is faster and more efficient when accessing very large data arrays (up to 64K bytes), since no additional instructions are needed to set up the output ports. C T S It is possible in some situations to mix the two MOVX types. A large RAM array with its high-order address lines driven by P2 can be addressed via the Data Pointer, or with code to output high-order address bits to P2 followed by a MOVX instruction using R0 or R1. Example: An external 256 byte RAM using multiplexed address/data lines (e.g., an Intel 8155 RAM/ I/O/Timer) is connected to the 8051 Port 0. Port 3 provides control lines for the external RAM. Ports 1 and 2 are used for normal I/O. Registers 0 and 1 contain 12H and 34H. Location 34H of the external RAM holds the value 56H. The instruction sequence, MOVX MOVX A, @R1 @R0, A copies the value 56H into both the Accumulator and external RAM location 12H. MOVX A,@Ri Bytes: Cycles: Encoding: Operation: 438 1 2 1 1 1 0 0 0 1 i MOVX (A) �� ←������� ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOVX A,@DPTR Bytes: 1 Cycles: 2 Encoding: 1 1 1 0 Operation: MOVX (A) �� ←��������� �������� ((DPTR)) MOVX 0 0 0 0 @Ri, A Bytes: 1 Cycles: 2 Encoding: 1 1 1 1 Operation: MOVX ((Ri))�� ←���� (A) ��� MOVX 0 0 1 i d e t i im @DPTR, A Bytes: 1 Cycles: 2 Encoding: Operation: 1 1 1 1 MOVX (DPTR)���� ←��� (A) C T S MUL AB Function: Description: Example: U C M 0 0 0 0 L Multiply MUL AB multiplies the unsigned eight-bit integers in the Accumulator and register B. The low-order byte of the sixteen-bit product is left in the Accumulator, and the high-order byte in B. If the product is greater than 255 (0FFH) the overflow flag is set; otherwise it is cleared. The carry flag is always cleared Originally the Accumulator holds the value 80 (50H). Register B holds the value 160 (0A0H). The instruction, MUL AB will give the product 12,800 (3200H), so B is changed to 32H (00110010B) and the Accumulator is cleared. The overflow flag is set, carry is cleared. Bytes: Cycles: Encoding: Operation: 1 4 1 0 1 0 0 1 0 0 MUL (A)7-0 ←�������� (A)×(B) (B)15-8 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 439 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 NOP Function: Description: Example: No Operation Execution continues at the following instruction. Other than the PC, no registers or flags are affected. It is desired to produce a low-going output pulse on bit 7 of Port 2 lasting exactly 5 cycles. A simple SETB/CLR sequence would generate a one-cycle pulse, so four additional cycles must be inserted. This may be done (assuming no interrupts are enabled) with the instruction sequence. CLR NOP NOP NOP NOP SETB Bytes: Cycles: Encoding: Operation: P2.7 P2.7 0 0 0 0 NOP (PC)+1 (PC) ←������� ORL , Function: Description: d e t i im 1 1 0 0 0 0 U C M L Logical-OR for byte variables C T S ORL performs the bitwise logical-OR operation between the indicated variables, storing the results in the destination byte. No flags are affected. The two operands allow six addressing mode combinations. When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address, the source can be the Accumulator or immediate data. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: If the Accumulator holds 0C3H (11000011B) and R0 holds 55H (01010101B) then the instruction, ORL A, R0 will leave the Accumulator holding the value 0D7H (11010111B). When the destination is a directly addressed byte, the instruction can set combinations of bits in any RAM location or hardware register. The pattern of bits to be set is determined by a mask byte, which may be either a constant data value in the instruction or a variable computed in the Accumulator at run-time.The instruction, ORL P1, #00110010B will set bits 5,4, and 1of output Port 1. 440 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ORL A,Rn Bytes: Cycles: 1 1 Encoding: Operation: 0 1 0 0 1 r r r 1 0 1 ORL (A) �� ←���� ��� (A)∨(Rn) ORL A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 0 0 direct address ORL (A)�� ←���� ��� (A)∨(direct) d e t i im ORL A,@Ri Bytes: Cycles: 1 1 Encoding: Operation: 0 0 0 0 1 1 1 0 ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 1 0 C T S 1 0 0 0 i U C M 0 L immediate data ORL (A)�� ←���� ��� (A)∨ #data ORL direct, A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 0 0 0 1 0 direct address 1 direct address ORL (direct)�� ←��������� �������� (direct)∨(A) ORL direct, #data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 0 0 0 0 1 immediate data ORL (direct) ←��������� �� �������� (direct)∨#data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 441 STC15F2K60S2系列单片机指南 ORL 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 C, Function: Description: Example: ORL C, bit Bytes: Cycles: Logical-OR for bit variables Set the carry flag if the Boolean value is a logical 1; leave the carry in its current state otherwise. A slash (“ / ”) preceding the operand in the assembly language indicates that the logical complement of the addressed bit is used as the source value, but the source bit itself is not affected. No other flags are affected. Set the carry flag if and only if P1.0 = 1, ACC. 7 = 1, or OV = 0: MOV C, P1.0 ;LOAD CARRY WITH INPUT PIN P1.0 ORL C, ACC.7 ;OR CARRY WITH THE ACC.BIT 7 ORL C, /OV ;OR CARRY WITH THE INVERSE OF OV 2 2 Encoding: Operation: 0 2 Cycles: 2 Encoding: Operation: POP direct Function: Description: Example: Bytes: Cycles: Encoding: Operation: 1 1 1 0 0 1 0 1 0 1 0 0 0 ORL (C) �� ←���� ��� (C)∨(bit) C T S U C M 0 0 d e t i im bit address ORL (C) �� ←���� ��� (C)∨(bit) ORL C, /bit Bytes: 442 技术支持网站:www.GXWMCU.com L bit address Pop from stack The contents of the internal RAM location addressed by the Stack Pointer is read, and the Stack Pointer is decremented by one. The value read is then transferred to the directly addressed byte indicated. No flags are affected. The Stack Pointer originally contains the value 32H, and internal RAM locations 30H through 32H contain the values 20H, 23H, and 01H, respectively. The instruction sequence, POP DPH POP DPL will leave the Stack Pointer equal to the value 30H and the Data Pointer set to 0123H. At this point the instruction, POP SP will leave the Stack Pointer set to 20H. Note that in this special case the Stack Pointer was decremented to 2FH before being loaded with the value popped (20H). 2 2 1 1 0 1 0 0 0 0 direct address POP (direct) ←������� ((SP)) (SP) �� ←������ ����� (SP) ��- �1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 PUSH direct Function: Description: Example: Push onto stack The Stack Pointer is incremented by one. The contents of the indicated variableis then copied into the internal RAM location addressed by the Stack Pointer. Otherwise no flags are affected. On entering interrupt routine the Stack Pointer contains 09H. The Data Pointer holds the value 0123H. The instruction sequence, PUSH PUSH DPL DPH will leave the Stack Pointer set to 0BH and store 23H and 01H in internal RAM locations 0AH and 0BH, respectively. Bytes: 2 Cycles: Encoding: 2 Operation: 1 1 0 0 0 0 0 PUSH (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←��������� �������� (direct) RET Function: Return from subroutine C T S 0 d e t i im direct address U C M L Description: RET pops the high-and low-order bytes of the PC successively from the stack, decrementing the Stack Pointer by two. Program execution continues at the resulting address, generally the instruction immediately following an ACALL or LCALL. No flags are affected. Example: The Stack Pointer originally contains the value 0BH. Internal RAM locations 0AH and 0BH contain the values 23H and 01H, respectively. The instruction, RET will leave the Stack Pointer equal to the value 09H. Program execution will continue at location 0123H. Bytes: Cycles: Encoding: Operation: 1 2 0 0 1 0 0 0 1 0 RET (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 443 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RETI Function: Description: Example: Return from interrupt RETI pops the high- and low-order bytes of the PC successively from the stack, and restores the interrupt logic to accept additional interrupts at the same priority level as the one just processed. The Stack Pointer is left decremented by two. No other registers are affected; the PSW is not automatically restored to its pre-interrupt status. Program execution continues at the resulting address, which is generally the instruction immediately after the point at which the interrupt request was detected. If a lower- or same-level interrupt had been pending when the RETI instruction is executed, that one instruction will be executed before the pending interrupt is processed. The Stack Pointer originally contains the value 0BH. An interrupt was detected during the instruction ending at location 0122H. Internal RAM locations 0AH and 0BH contain the values 23H and 01H, respectively. The instruction, RETI d e t i im will leave the Stack Pointer equal to 09H and return program execution to location 0123H. Bytes: Cycles: Encoding: Operation: 1 2 0 Function: Example: 1 1 0 0 1 0 U C M RETI (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 ←������� ������ ((SP)) (PC7-0) �� (SP) �� ←�������� ������� (SP) -1 C T S RL A Description: 0 L Rotate Accumulator Left The eight bits in the Accumulator are rotated one bit to the left. Bit 7 is rotated into the bit 0 position. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, RL A leaves the Accumulator holding the value 8BH (10001011B) with the carry unaffected. Bytes: Cycles: Encoding: Operation: 444 1 1 0 0 1 0 RL (An+1) �� ←��� �� (An) �� (A ��7) (A0) ←��� 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 RLC A Function: Description: Example: Bytes: Cycles: Rotate Accumulator Left through the Carry flag The eight bits in the Accumulator and the carry flag are together rotated one bit to the left. Bit 7 moves into the carry flag; the original state of the carry flag moves into the bit 0 position. No other flags are affected. The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction, RLC A leaves the Accumulator holding the value 8BH (10001011B) with the carry set. 1 1 Encoding: Operation: 0 0 1 1 0 RLC (An+1) �� ←��� �� (An) ←���� ��� (C) (A0) �� (C) �� ←��� �� (A7) 0 1 1 n = 0-6 d e t i im RR A Function: Description: Example: Bytes: Cycles: Encoding: Operation: Rotate Accumulator Right L The eight bits in the Accumulator are rotated one bit to the right. Bit 0 is rotated into the bit 7 position. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, RR A leaves the Accumulator holding the value 0E2H (11100010B) with the carry unaffected. 1 1 0 U C M C T S 0 0 0 RR (An) �� ←��� �� (An+1) ←��� �� (A0) (A7) �� 0 0 1 1 n=0-6 RRC A Function: Description: Example: Bytes: Cycles: Rotate Accumulator Right through the Carry flag The eight bits in the Accumulator and the carry flag are together rotated one bit to the right. Bit 0 moves into the carry flag; the original value of the carry flag moves into the bit 7 position.No other flags are affected. The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction, RRC A leaves the Accumulator holding the value 62H (01100010B) with the carry set. 1 1 Encoding: Operation: 0 0 0 1 RRC (An+1) �� ←��� �� (An) (A7) �� ←���� ��� (C) (C) �� ←��� �� (A0) 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 445 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 SETB Function: Example: C Bytes: Cycles: Set bit SETB sets the indicated bit to one. SETB can operate on the carry flag or any directly addressable bit. No other flags are affected The carry flag is cleared. Output Port 1 has been written with the value 34H (00110100B). The instructions, SETB C SETB P1.0 will leave the carry flag set to 1 and change the data output on Port 1 to 35H (00110101B). 1 1 Encoding: Operation: SETB 1 2 Cycles: 1 Encoding: 0 1 0 0 1 1 0 1 0 0 SETB (bit) ←�� �� 1� C T S SJMP rel Function: 1 1 1 d e t i im SETB (C) �� ←�� �1 bit Bytes: Operation: U C M 1 0 L bit address Short Jump Description: Program control branches unconditionally to the address indicated. The branch destination is computed by adding the signed displacement in the second instruction byte to the PC, after incrementing the PC twice. Therefore, the range of destinations allowed is from 128bytes preceding this instruction to 127 bytes following it. Example: The label “RELADR” is assigned to an instruction at program memory location 0123H. The instruction, SJMP RELADR will assemble into location 0100H. After the instruction is executed, the PC will contain the value 0123H. (Note: Under the above conditions the instruction following SJMP will be at 102H.Therefore, the displacement byte of the instruction will be the relative offset (0123H - 0102H) = 21H. Put another way, an SJMP with a displacement of 0FEH would be an one-instruction infinite loop). Bytes: 2 Cycles: 2 Encoding: Operation: 446 研发顾问Tel:13922805190 Description: SETB 临时技术支持Tel:13922829991 1 0 0 0 0 0 0 0 rel. address SJMP (PC) �� ←������� ������ (PC)+2 (PC) �� ←��������� �������� (PC)+rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 SUBB A, Function: Description: Subtract with borrow SUBB subtracts the indicated variable and the carry flag together from the Accumulator, leaving the result in the Accumulator. SUBB sets the carry (borrow)flag if a borrow is needed for bit 7, and clears C otherwise.(If C was set before executing a SUBB instruction, this indicates that a borrow was needed for the previous step in a multiple precision subtraction, so the carry is subtracted from the Accumulator along with the source operand).AC is set if a borrow is needed for bit 3, and cleared otherwise. OV is set if a borrow is needed into bit 6, but not into bit 7, or into bit 7, but not bit 6. When subtracting signed integers OV indicates a negative number produced when a negative value is subtracted from a positive value, or a positive result when a positive number is subtracted from a negative number. The source operand allows four addressing modes: register, direct, register-indirect, or immediate. Example: d e t i im The Accumulator holds 0C9H (11001001B), register 2 holds 54H (01010100B), and the carry flag is set. The instruction, SUBB A, R2 L will leave the value 74H (01110100B) in the accumulator, with the carry flag and AC cleared but OV set. U C M Notice that 0C9H minus 54H is 75H. The difference between this and the above result is due to the carry (borrow) flag being set before the operation. If the state of the carry is not known before starting a single or multiple-precision subtraction, it should be explicitly cleared by a CLR C instruction. SUBB A, Rn Bytes: Cycles: Encoding: Operation: C T S 1 1 1 0 0 1 1 r r r SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ���� (Rn) SUBB A, direct Bytes: 2 Cycles: 1 Encoding: 1 0 0 1 0 1 0 1 Operation: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- �������� (direct) direct address SUBB A, @Ri Bytes: Cycles: Encoding: Operation: 1 1 1 0 0 1 0 1 1 i SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 447 STC15F2K60S2系列单片机指南 SUBB A, #data Bytes: Cycles: Encoding: Operation: 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2 1 1 0 0 1 0 1 0 0 immediate data SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ����� #data SWAP A Function: Description: Example: Swap nibbles within the Accumulator SWAP A interchanges the low- and high-order nibbles (four-bit fields) of the Accumulator (bits 3-0 and bits 7-4). The operation can also be thought of as a four-bit rotate instruction. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, SWAP Bytes: Cycles: A d e t i im leaves the Accumulator holding the value 5CH (01011100B). 1 1 Encoding: 1 Operation: SWAP (A3-0) 1 0 0 0 1 0 0 U C M (A7-4) XCH A, C T S L Function: Description: Exchange Accumulator with byte variable XCH loads the Accumulator with the contents of the indicated variable, at the same time writing the original Accumulator contents to the indicated variable. The source/destination operand can use register, direct, or register-indirect addressing. Example: R0 contains the address 20H. The Accumulator holds the value 3FH (00111111B). Internal RAM location 20H holds the value 75H (01110101B). The instruction, XCH A, @R0 will leave RAM location 20H holding the values 3FH (00111111B) and 75H (01110101B) in the accumulator. XCH A, Rn Bytes: Cycles: Encoding: Operation: XCH A, direct Bytes: Cycles: Encoding: Operation: 448 1 1 1 1 XCH (A) 0 0 1 r r r (Rn) 2 1 1 1 0 0 XCH (A) 0 1 0 1 direct address (direct) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 XCH A, @Ri Bytes: Cycles: Encoding: Operation: 1 1 1 1 0 0 XCH (A) 0 1 1 i ((Ri)) XCHD A, @Ri Function: Description: Example: Exchange Digit XCHD exchanges the low-order nibble of the Accumulator (bits 3-0), generally representing a hexadecimal or BCD digit, with that of the internal RAM location indirectly addressed by the specified register. The high-order nibbles (bits 7-4) of each register are not affected. No flags are affected. R0 contains the address 20H. The Accumulator holds the value 36H (00110110B). Internal RAM location 20H holds the value 75H (01110101B). The instruction, XCHD Bytes: Cycles: Encoding: Operation: d e t i im A, @R0 will leave RAM location 20H holding the value 76H (01110110B) and 35H (00110101B) in the accumulator. 1 1 1 1 0 1 XCHD (A3-0) 0 1 1 i C T S (Ri3-0) U C M L XRL , Function: Description: Logical Exclusive-OR for byte variables XRL performs the bitwise logical Exclusive-OR operation between the indicated variables, storing the results in the destination. No flags are affected. The two operands allow six addressing mode combinations.When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address,the source can be the Accumulator or immediate data. (Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins.) Example: If the Accumulator holds 0C3H (11000011B) and register 0 holds 0AAH (10101010B) then the instruction, XRL A, R0 will leave the Accumulator holding the vatue 69H (01101001B). When the destination is a directly addressed byte, this instruction can complement combinnation of bits in any RAM location or hardware register. The pattern of bits to be complemented is then determined by a mask byte, either a constant contained in the instruction or a variable computed in the Accumulator at run-time. The instruction, XRL P1, #00110001B will complement bits 5,4 and 0 of outpue Port 1. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 449 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 XRL A, Rn Bytes: Cycles: Encoding: Operation: 1 1 0 1 1 0 XRL (A) �� ← (A)� ���� 1 r r r (Rn) XRL A, direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 1 0 0 1 0 1 XRL (A) �� ← (A)� ���� direct address (direct) d e t i im XRL A, @Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 1 1 0 XRL (A) �� ← (A)� ���� 0 1 1 i ((Ri)) XRL A, #data Bytes: 2 Cycles: 1 Encoding: Operation: C T S 0 1 1 0 XRL (A) �� ← (A)� ���� U C M 0 1 0 0 L immediate data #data XRL direct, A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 1 0 0 0 1 0 XRL (direct) ← (direct)� �� ��������� direct address (A) XRL direct, #data Bytes: 3 Cycles: 2 Encoding: Operation: 450 0 1 1 0 0 0 1 1 XRL (direct) ← (direct)� �� ��������� 南通国芯微电子有限公司 direct address immediate data # data 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 第6章 中断系统 中断系统是为使CPU具有对外界���������������� 紧急�������������� 事件的����������� 实时��������� 处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的 工作,转而去处理这个紧急事件��������������������������� ,�������������������������� 处理完以后,再回到原来被中断的地方,继续原来的工作, 这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断 源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服 务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排 队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响 应������������ 优先���������� 级别最高的中断请求。 当CPU正在处理一个中断源请求的时候(执行相应的���������������� 中断�������������� 服务程序),发生了另外一个优 先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的������������� 服务����������� 程序,转而去处理优先级 更高的中断请求源,处理完以后,再回到原低级中断������������������ 服务���������������� 程序,这样的过程称为中断嵌套。这 样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。 d e t i im L STC15W4K60S4系列单片机提供了19个中断请求源,它们分别是:外部中断0(INT0)、定 时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中 U C M 断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时 器T2中断、外部中断4(INT4)、串口3中断、串口4中断、定时器3中断、定时器4中断以及比较 器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断、外部中断4(INT4)、串口 3中断、串口4中断、定时器3中断、定时器4中断及比较器中断固定是最低优先级中断外,其 它的中断都具有2个中断优先级,可实现2级中断服务程序嵌套。用户可以用关总中断允许位 (EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使CPU 响应相应的中断申请;每一个中断源可以用软件独立地控制为开中断或关中断状态;部分中断 的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级 的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序 来决定系统先响应哪个中断。 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 451 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.1 STC15系列单片机的中断请求源 STC15全系列的中断请求源的类型如下表所示。 单片机型号 STC15F101W STC15F408AD STC15W201S STC15W408AS STC15W408S STC15W1K16S STC15F2K60S2 STC15W4K60S4 系列 系列 系列 系列 系列 系列 系列 系列 中断源类型 外部中断0 (INT0) 定时器0中断 外部中断1 (INT1) 定时器1中断 串口1中断 A/D转换中断 低压检测(LVD)中断 CCP/PWM/PCA中断 串口2中断 SPI中断 外部中断2 (INT2) 外部中断3 (INT3) 定时器2中断 外部中断4 (INT4) 串口3中断 串口4中断 定时器3中断 定时器4中断 比较器中断 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ CU √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ d e t i im L √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ M 上表中√表示对应的系列有相应的中断源。 C T S √ √ √ √ √ √ 6.1.1 STC15F101W系列单片机的中断请求源 STC15F101W系列单片机提供了8个中断请求源,它们分别是:外部中断0(INT0)、定时器 0中断、外部中断1(INT1)、低压检测(LVD)中断、外部中断2(INT2)、外部中断3(INT3)、定时 器2中断以及外部中断4(INT4)。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断及外部 中断4(INT4)固定是最低优先级中断外,其它的中断都具有两个中断优先级。 6.1.2 STC15F408AD系列单片机的中断请求源 STC15F408AD系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、串口中断、A/D转换中断、低压检测(LVD)中断、CCP/PWM/PCA 中断、SPI中断、外部中断2(INT2)、外部中断3(INT3),定时器2中断以及外部中断4(INT4)。 除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断及外部中断4(INT4)固定是最低优先级 中断外,其它的中断都具有两个中断优先级。 6.1.3 STC15W201S系列单片机的中断请求源 STC15W201S系列单片机提供了10个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、串口中断、低压检测(LVD)中断、外部中断2(INT2)、外部中断 3(INT3)、定时器2中断、外部中断4(INT4)以及比较器中断。除外部中断2(INT2)、外部中断 3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优先级中断外,其它的中 断都具有两个中断优先级。 452 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.1.4 STC15W408AS系列单片机的中断请求源 STC15W408AS系列单片机提供了13个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、串口中断、A/D转换中断、低压检测(LVD)中断、CCP/PWM/PCA 中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比 较器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较 器中断固定是最低优先级中断外,其它的中断都具有2个中断优先级。 6.1.5 STC15W408S系列单片机的中断请求源 STC15W408S系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、定时器1中断、串口中断、低压检测(LVD)中断、SPI中断、外部 中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断。除外部中 断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优 先级中断外,其它的中断都具有两个中断优先级。 L 6.1.6 STC15W1K16S系列单片机的中断请求源 U C M d e t i im STC15W1K16S系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、定时器1中断、串口中断、低压检测(LVD)中断、SPI中断、外部 中断2(INT2)、外部中断3(INT3),定时器2中断、外部中断4(INT4)及比较器中断。除外部中 断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优 先级中断外,其它的中断都具有2个中断优先级,可实现2级中断服务程序嵌套。 C T S 6.1.7 STC15F2K60S2系列单片机的中断请求源 STC15F2K60S2系列单片机提供了14个中断请求源,它们分别是:外部中断0(INT0)、定 时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中 断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3),定时 器2中断以及外部中断4(INT4)。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断及外部 中断4(INT4)固定是最低优先级中断外,其它的中断都具有2个中断优先级,可实现2级中断服 务程序嵌套。 6.1.8 STC15W4K60S4系列单片机的中断请求源 STC15W4K60S4系列单片机提供了20个中断请求源,它们分别是:外部中断0(INT0)、定 时器0中断、外部中断1(INT1)、定时器1中断、串口1中断、A/D转换中断、低压检测(LVD)中 断、CCP/PWM/PCA中断、串口2中断、SPI中断、外部中断2(INT2)、外部中断3(INT3)、定时 器2中断、PWM中断、外部中断4(INT4)、串口3中断、串口4中断、定时器3中断、定时器4中 断及比较器中断。除外部中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4 )、串口3中断、串口4中断、定时器3中断、定时器4中断及比较器中断固定是最低优先级中断 外,其它的中断都具有2个中断优先级。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 453 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 6.2 中断结构图 中断允许控 制寄存器 上升沿和 下降沿均 可中断 IE, INT_CLKO, IE2 TCON.0/IT0=0 EX0 EA 临时技术支持Tel:13922829991 中断优先级 控制寄存器 最低优先级中断 IP, IP2 最高优先级中断 PX0 0 IE0 INT0 1 TCON.0/IT0=1 PT0 ET0 研发顾问Tel:13922805190 注意:当定时器/计数器0工作在不可屏蔽中断的16位 自动重装载模式时,其优先级是所有中断中最高的, 而且不受总中断允许位EA控制。 high 0 Timer0 / TF0 1 TCON.2/IT1=0 PX1 EX1 INT1 0 IE1 1 TCON.2/IT1=1 PT1 ET1 0 Timer1 / TF1 1 LVDF C T S PWMIF2/PWMIF3/PWMIF4/ PWMIF5/PWMIF6/PWMIF7 串口2/S2 S2RI S2TI 0 1 ADC_FLAG CF ECF CCF0 ECCF0 CCF1 ECCF1 d e t i im PS ES 串口1/S1 RI TI PADC EADC CU PLVD ELVD M EPWMnPI || EPWMnNI L PPCA PPWM 0 1 0 1 0 1 0 1 ES2 PS2 0 ESPI PSPI 0 1 SPIF 1 EX2 INT2 EX3 INT3 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 EX4 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 INT4 ES3 ES4 ET3 T3 ET4 T4 PIE||NIE 比较器 CMPIF(CMPIF_p||CMPIF_n) 无中断优先级控制位, 中断优先级固定为0级 ET2 T2 串口3/S3 S3RI S3TI 串口4/S4 S4RI S4TI 中断 查询 次序 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 low EA: Global Enable,总中断允许位 454 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 外部中断0(INT0)和外部中断1(INT1)既可上升沿触发,又可下降沿触发。请求两个外部中 断的标志位是位于寄存器TCON中的IE0/TCON.1和IE1/TCON.3。当外部中断服务程序被响应 后,中断标志位IE0和IE1会自动被清0。TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外 部中断0和1是上升沿触发还是下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探 测到上升沿或下降沿后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探 测下降沿后才可产生外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉 电模式唤醒。 定时器0和1的中断请求标志位是TF0和TF1。当定时器寄存器THx/TLx(x = 0,1)溢出时,溢 出标志位TFx(x = 0,1)会被置位,如果定时器0/1的中断被打开,则定时器中断发生。当单片机 转去执行该定时器中断时,定时器的溢出标志位TFx(x = 0,1)会被硬件清除。 外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中 断2~4的中断请求标志位被隐藏起来了,对用户不可见。当相应的中断服务程序被响应后或 d e t i im EXn=0(n=2,3,4),这些中断请求标志位会立即自动地被清0。外部中断2(INT2)、外部中断3( INT3)及外部中断4(INT4)也可以用于将单片机从掉电模式唤醒。 L 定时器2的中断请求标志位被隐藏起来了,对用户不可见。当相应的中断服务程序被响应 后或ET2=0,该中断请求标志位会立即自动地被清0。 U C M 定时器3和定时器4的中断请求标志位同样被隐藏起来了,对用户不可见。当相应的中断服 务程序被响应后或ET3=0 / ET4=0,该中断请求标志位会立即自动地被清0。 C T S 当串行口1发送或接收完成时,相应的中断请求标志位TI或RI就会被置位,如果串口1中断 被打开,向CPU请求中断,单片机转去执行该串口1中断。中断响应后,TI或RI需由软件清零。 当串行口2发送或接收完成时,相应的中断请求标志位S2TI或S2RI就会被置位,如果串口2 中断被打开,向CPU请求中断,则单片机转去执行该串口2中断。中断响应后,S2TI或S2RI需由 软件清零。 当串行口3发送或接收完成时,相应的中断请求标志位S3TI或S3RI就会被置位,如果串口3 中断被打开,向CPU请求中断,则单片机转去执行该串口3中断。中断响应后,S3TI或S3RI需由 软件清零。 当串行口4发送或接收完成时,相应的中断请求标志位S4TI或S4RI就会被置位,如果串口4 中断被打开,向CPU请求中断,则单片机转去执行该串口4中断。中断响应后,S4TI或S4RI需由 软件清零。 A/D转换的中断是由ADC_FLAG/ADC_CONTR.4请求产生的。该位需用软件清除。 低压检测(LVD)中断是由LVDF/PCON.5请求产生的。该位也需用软件清除。 当同步串行口SPI传输完成时,SPIF/SPCTL.7被置位,如果SPI中断被打开,则向CPU请求 中断,单片机转去执行该SPI中断。中断响应完成后,SPIF需通过软件向其写入“1”清零。 比较器中断标志位CMPIF=(CMPIF_p || CMPIF_n),其中CMPIF_p是内建的标志比较器上升 沿中断的寄存器,CMPIF_n是内建的标志比较器下降沿中断的寄存器;当CPU 去读取 CMPIF 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 455 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 的数值时会读到 (CMPIF_p || CMPIF_n);当CPU 对CMPIF写“0”后CMPIF_p及CMPIF_n会被 自动设置为“0”。因此,当比较器的比较结果由LOW变成HIGH时,那么内建的标志比较器 上升沿中断的寄存器CMPIF_p会被设置成1,即比较器中断标志位CMPIF也会被设置成1,如 果比较器上升沿中断已被允许,即PIE(CMPCR1.5)已被设置成1,则向CPU请求中断,单片机 转去执行该比较器上升中断;同理,当比较器的比较结果由HIGH变成LOW时,那么内建的标 志比较器下降沿中断的寄存器CMPIF_n会被设置成1,即比较器中断标志位CMPIF也会被设置 成1,如果比较器下降沿中断已被允许,即NIE(CMPCR1.4)已被设置成1,则向CPU请求中断, 单片机转去执行该比较器下降中断。中断响应完成后,比较器中断标志位CMPIF不会自动被清 零,用户需通过软件向其写入“0”清零它。 各个中断触发行为总结如下表所示: 中断触发表 中断源 INT0 (外部中断0) Timer 0 INT1 (外部中断1) Timer1 UART1 ADC LVD UART2 定时器0溢出 U C M 定时器1溢出 发送或接受完成 C T S A/D转换完成 电源电压下降到低于LVD检测电压 串口2发送或接受完成 INT2 下降沿 INT3 INT4 (外部中断4) UART3 UART4 Timer3 Timer4 Comparator (比较器) L (IT1 = 1): 下降沿; (IT1 = 0): 上升沿和下降沿均可 SPI数据传输完成 (外部中断3) Timer2 456 (IT0 = 1): 下降沿; (IT0 = 0): 上升沿和下降沿均可 SPI (外部中断2) d e t i im 触发行为 下降沿 定时器2溢出 下降沿 串口3发送或接受完成 串口4发送或接受完成 定时器3溢出 定时器4溢出 比较器比较结果由LOW变成HIHG或由HIGH变成LOW 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.3 中断向量入口地址/查询次序/优先级/请求标志/允许位表 中断向量入口地址/查询次序/优先级/请求标志位/允许位 中断源 中断向 相同优先级内 中断优先级 优先级0 优先级1 中断请求标志位 设置 (最低) (最高) 量地址 的查询次序 INT0 (外部中断 0) 0003H Timer 0 000BH INT1 (外部中断1) 0 (highest) 中断允许 控制位 PX0 0 1 IE0 EX0/EA 1 PT0 0 1 TF0 ET0/EA 0013H 2 PX1 0 1 IE1 EX1/EA Timer1 S1(UART1) 001BH 0023B 3 4 PT1 PS 0 0 1 1 TF1 RI+TI ET1/EA ES/EA ADC 002BH 5 PADC 0 1 ADC_FLAG EADC/EA LVD 0033H 6 PLVD 0 1 LVDF CF+CCF0+CCF1 +CCF2 (ECF+ECCF0+ECCF1 +ECCF2)/EA CCP/PCA/PWM 003BH 7 PPCA 0 1 S2(UART2) 0043H 8 PS2 0 1 SPI 004BH 9 PSPI 0 1 INT2 (外部中断2) 0053H 10 INT3 (外部中断3) 005BH 11 Timer 2 0063H PWM 006BH System Reserved 0073H System Reserved 007BH C T S 12 13 U C M 0 0 0 0 0 0 PPWM 0 d e t i im L ELVD/EA S2RI+S2TI ES2/EA SPIF ESPI/EA EX2/EA EX3/EA ET2/EA 1 EPWMnPI||EPWMnNI/ PWMIF2/3/4/5/6/7 EA 14 15 INT4 (外部中断4) 0083H 16 0 0 S3(UART3) 008BH 17 0 0 S3RI+S3TI ES3/EA S4(UART4) 0093H 18 0 0 S4RI+S4TI ES4/EA Timer 3 009BH 19 0 0 ET3/EA Timer 4 00A3H 20 0 0 ET4/EA EX4/EA PIE/EA Comparator (比较器) 00ABH 南通国芯微电子有限公司 21(lowest) 0 0 总机:0513-5501 2928 / 2929 / 2966 CMPIF_p (比较器上升沿 中断允许位) CMPIF_n (比较器下降沿 中断允许位) CMPIF NIE/EA 传真:0513-5501 2969 / 2956 / 2947 457 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.4 在Keil C中如何声明中断函数 如果使用C语言编程,中断查询次序号就是中断号,例如: 458 void void void void void void void void void void void void void void void void void void void void Int0_Routine(void) Timer0_Rountine(void) Int1_Routine(void) Timer1_Rountine(void) UART1_Routine(void) ADC_Routine(void) LVD_Routine(void) PCA_Routine(void) UART2_Routine(void) SPI_Routine(void) Int2_Routine(void) Int3_Routine(void) Timer2_Routine(void) PWM_Routine(void) Int4_Routine(void) S3_Routine(void) S4_Routine(void) Timer3_Routine(void) Timer4_Routine(void) Comparator_Routine(void) C T S 南通国芯微电子有限公司 interrupt 0; interrupt 1; interrupt 2; interrupt 3; interrupt 4; interrupt 5; interrupt 6; interrupt 7; interrupt 8; interrupt 9; interrupt 10; interrupt 11; interrupt 12; interrupt 12; interrupt 16; interrupt 17; interrupt 18; interrupt 19; interrupt 20; interrupt 21; U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.5 中断寄存器 符号 描述 位地址及符号 地址 MSB IE Interrupt Enable A8H IE2 Interrupt Enable 2 AFH INT_CLKO 外部中断允许和时钟输 8FH AUXR2 出寄存器 IP Interrupt Priority Low B8H EA LSB ELVD EADC - ET4 - EX4 PPCA ET3 EX3 PLVD 复位值 ES ET1 EX1 ET0 EX0 0000 0000B ES4 ES3 ET2 ESPI ES2 x000 0000B T2CLKO T1CLKO T0CLKO x000 x000B EX2 - PADC PS PT1 - PT0 PX0 0000 0000B PPWM PSPI PS2 xxxx xx00B PX1 TCON SCON S2CON 2rd Interrupt Priority Low register Timer Control register Serial Control Serial 2/ UART2 Control S3CON 串口3控制寄存器 ACH S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 0000,0000 S4CON 串口4控制寄存器 T4和T3的控制 寄存器 Power Control register 84H S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 0000,0000 0000 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000B PD IDL 0011 0000B 87H SMOD SMOD0 LVDF POF GF1 GF0 BCH CDH D8H D9H DAH - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000 0000B DBH - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000 0000B DCH - ECOM2 CAPP2 CAPN2 MAT2 TOG2 PWM2 ECCF2 x000 0000B AUXR ADC control register SPI Status register PCA Control Register PCA Mode Register PCA Module 0 Mode Register PCA Module 1 Mode Register PCA Module 2 Mode Register 辅助寄存器 CMPCR1 比较器控制寄存器1 E6H PWMIF PWM中断标志寄存器 DFH IP2 T4T3M PCON ADC_CONTR SPSTAT CCON CMOD CCAPM0 CCAPM1 CCAPM2 C T S 南通国芯微电子有限公司 B5H - - - - 88H 98H 9AH TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0000 0000B SM0/FE SM1 SM2 REN TB8 RB8 TI RI 0000 0000B S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI U C M 8EH d e t i im L ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 SPIF WCOL S2RI 0000 0000B - - - CF CR - - - CIDL - - - CPS2 T0x12 T1x12 UART_M0x6 T2R T2_C/T CMPEN CMPIF PIE - - - 0000 0000B 00xx xxxxB CCF2 CCF1 CCF0 00xx x000B CPS1 CPS0 ECF T2x12 EXTRAM S1ST2 NIE PIS NIS CMPOE 0xxx 0000B 0000 0001B CMPRES 0000 0000B PWMIF7 PWMIF6 PWMIF5 PWMIF4 PWMIF3 PWMIF2 总机:0513-5501 2928 / 2929 / 2966 CHIS0 0000 0000B 传真:0513-5501 2969 / 2956 / 2947 459 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 上表中列出了与STC15F2K60S2系列单片机中断相关的所有寄存器,下面逐一地对这些寄 存器进行介绍。 1. 中断允许寄存器IE、IE2和INT_CLKO STC15F2K60S2系列单片机CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断, 是由内部的中断允许寄存器IE(IE为特殊功能寄存器,它的字节地址为A8H)控制的,其格式 如下: IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 ELVD B5 EADC B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 d e t i im ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。 L EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。 ES : 串行口1中断允许位,ES=1,允许串行口1中断,ES=0,禁止串行口1中断。 U C M ET1 : 定时/计数器T1的溢出中断允许位,ET1=1,允许T1中断,ET1=0,禁止T1中断。 EX1 : 外部中断1中断允许位,EX1=1,允许外部中断1中断,EX1=0,禁止外部中断1中断。 C T S ET0 : T0的溢出中断允许位,ET0=1允许T0中断,ET0=0禁止T0中断。 EX0 : 外部中断0中断允许位,EX0=1允许中断,EX0=0禁止中断。 IE2 : 中断允许寄存器 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 ET4=1,允许定时器4产生中断; ET4=0,禁止定时器4产生中断 ET3:定时器3的中断允许位。 ET3=1,允许定时器3产生中断; ET3=0,禁止定时器3产生中断 ES4 : 串行口4中断允许位。 ES4=1,允许串行口4中断; ES4=0,禁止串行口4中断 ES3 : 串行口3中断允许位。 ES3=1,允许串行口3中断; ES3=0,禁止串行口3中断。。 460 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ET2:定时器2的中断允许位。 ET2=1,允许定时器2产生中断; ET2=0,禁止定时器2产生中断 ESPI:SPI中断允许位。 ESPI=1,允许SPI中断; ESPI=0,禁止SPI中断。 ES2 : 串行口2中断允许位。 ES2=1,允许串行口2中断; ES2=0,禁止串行口2中断。 d e t i im INT_CLKO (AUXR2)是STC15系列单片机新增寄存器,地址是8FH,INT_CLKO (AUXR2) 格式如下: L INT_CLKO (AUXR2) : 外部中断允许和时钟输出寄存器 SFR name Address bit INT_CLKO 8FH name (AUXR2) B7 - C T S B6 B5 M CU B4 EX4 EX3 EX2 B3 - B2 B1 B0 T2CLKO T1CLKO T0CLKO EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只 能下降沿触发。 EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也 只能下降沿触发。 EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同 样只能下降沿触发。 T2CLKO, T1CLKO,T0CLKO与中断无关,在此不作介绍。 STC15系列单片机复位以后,IE、IE2和INT_CLKO(AUXR2)被清0,由用户程序置“1”或清 “0”IE、IE2和INT_CLKO (AUXR2)的相应位,实现允许或禁止各中断源的中断申请,若使某 一个中断源允许中断必须同时使CPU开放中断。更新IE的内容可由位操作指令来实现(SETB BIT;CLR BIT),也可用字节操作指令实现(即MOV IE,#DATA,ANL IE,#DATA;ORL IE,#DATA;MOV IE,A等)。更新IE2和INT_CLKO(不可位寻址)的内容只可用字节操作指 令(即MOV IE2, #DATA或MOV INT_CLKO, #DATA)来解决。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 461 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 中断优先级控制寄存器IP、IP2 传统8051单片机具有两个中断优先级,即高优先级和低优先级,可以实现两级中断嵌套。 STC15系列单片机通过设置特殊功能寄存器(IP和IP2)中的相应位,可将部分中断设有2个中断 优先级,除外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)外,所有中断请求源可编 程为2个优先级中断。一个正在执行的低优先级中断能被高优先级中断所中断,但不能被另一 个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指 令才能响应新的中断申请。以上所述可归纳为下面两条基本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断 STC15系列单片机的片内各优先级控制寄存器的格式如下: IP : 中断优先级控制寄存器 (可位寻址) SFR name Address bit B7 IP B8H name PPCA B6 PLVD B5 PADC B4 PS B3 PT1 B2 PX1 d e t i im PPCA: PLVD: PADC: PS: PCA中断优先级控制位。 当PPCA=0时,PCA中断为最低优先级中断(优先级0) 当PPCA=1时,PCA中断为最高优先级中断(优先级1) 低压检测中断优先级控制位。 当PLVD=0时,低压检测中断为最低优先级中断(优先级0) 当PLVD=1时,低压检测中断为最高优先级中断(优先级1) A/D转换中断优先级控制位。 当PADC=0时,A/D转换中断为最低优先级中断(优先级0) 当PADC=1时,A/D转换中断为最高优先级中断(优先级1) 串口1中断优先级控制位。 当PS=0时,串口1中断为最低优先级中断(优先级0) 当PS=1时,串口1中断为最高优先级中断(优先级1) PT1: PX1: 定时器1中断优先级控制位。 当PT1=0时,定时器1中断为最低优先级中断(优先级0) 当PT1=1时,定时器1中断为最高优先级中断(优先级1) 外部中断1优先级控制位。 当PX1=0时,外部中断1为最低优先级中断(优先级0) 当PX1=1时,外部中断1为最高优先级中断(优先级1) PT0: 定时器0中断优先级控制位。 当PT0=0时,定时器0中断为最低优先级中断(优先级0) 当PT0=1时,定时器0中断为最高优先级中断(优先级1) PX0: 外部中断0优先级控制位。 当PX0=0时,外部中断0为最低优先级中断(优先级0) 当PX0=1时,外部中断0为最高优先级中断(优先级1) 462 C T S 南通国芯微电子有限公司 U C M B1 PT0 B0 PX0 L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 IP2 : 中断优先级控制寄存器 (不可位寻址) SFR name IP2 Address B5H bit name B7 - B6 - B5 - B4 - B3 - B2 - B1 PSPI B0 PS2 PSPI: SPI中断优先级控制位。 当PSPI=0时,SPI中断为最低优先级中断(优先级0) 当PSPI=1时,SPI中断为最高优先级中断(优先级1) PS2: 串口2中断优先级控制位。 当PS2=0时,串口2中断为最低优先级中断(优先级0) 当PS2=1时,串口2中断为最高优先级中断(优先级1) 中断优先级控制寄存器IP和IP2的各位都由可用户程序置“1”和清“0”。但IP寄存器可 位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IP2寄存器的内容只能用字节 操作指令来更新。STC15系列单片机复位后IP和IP2均为00H,各个中断源均为低优先级中断。 3. 定时器/计数器控制寄存器TCON U C M d e t i im L TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求 中断源等,TCON格式如下: TCON : 定时器/计数器中断控制寄存器 (可位寻址) SFR name TCON C T S Address 88H bit name B7 TF1 B6 TR1 B5 TF0 B4 TR0 B3 IE1 B2 IT1 B1 IE0 B0 IT0 TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置 “1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由 查询软件清“0”)。 TR1: 定时器1的运行控制位。 TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置 “1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询 软件清0)。 TR0: 定时器0的运行控制位。 IE1:外部中断1(INT1/P3.3)中断请求标志。IE1=1,外部中断向CPU请求中断,当CPU响应 该中断时由硬件清“0”IE1。 IT1:外部中断1中断源类型选择位。IT1=0,INT1/P3.3引脚上的上升沿或下降沿信号均可触发 外部中断1。IT1=1,外部中断1为下降沿触发方式。 IE0:外部中断0(INT0/P3.2)中断请求标志。IE0=1,外部中断0向CPU请求中断,当CPU响 应外部中断时,由硬件清“0”IE0。 IT0:外部中断0中断源类型选择位。IT0=0,INT0/P3.2引脚上的上升沿或下降沿均可触发外部 中断0。IT0=1,外部中断0为下降沿触发方式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 463 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 4. 串行口1控制寄存器SCON SCON为串行口控制寄存器,SCON格式如下: SCON : 串行口控制寄存器 (可位寻址) SFR name SCON RI: Address 98H bit name B7 SM0/FE B6 SM1 B5 SM2 B4 REN B3 TB8 B2 RB8 B1 TI B0 RI 串行口1接收中断标志。若串行口1允许接收且以方式0工作,则每当接收到第8位数据时 置1;若以方式1、2、3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口以 方式2或方式3工作且SM2=1时,则仅当接收到的第9位数据RB8为1后,同时还要接收到停 止位的中间时置1。RI为1表示串行口1正向CPU申请中断(接收中断),RI必须由用户的中 断服务程序清零。 TI: 串行口1发送中断标志。串行口1以方式0发送时,每当发送完8位数据,由硬件置1;若以 方式1、方式2或方式3发送时,在发送停止位的开始时置1。TI=1表示串行口1正在向CPU 申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务程序 时并不将TI清零,TI必须由用户在中断服务程序中清零。 SCON寄存器的其他位与中断无关,在此不作介绍。 U C M d e t i im L 5. 串行口2控制寄存器S2CON S2CON为串行口2控制寄存器,S2CON格式如下: C T S S2CON : 串行口2控制寄存器 (不可位寻址) SFR name Address bit B7 S2CON 9AH name S2SM0 B6 - B5 B4 B3 B2 B1 B0 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI S2RI: 串行口2接收中断标志。若串行口2允许接收且以方式0工作,则每当接收到第8位数据时 置1;若以方式1、2、3工作且S2SM2=0时,则每当接收到停止位的中间时置1;当串行口 2以方式2或方式3工作且S2SM2=1时,则仅当接收到的第9位数据S2RB8为1后,同时还要 接收到停止位的中间时置1。S2RI为1表示串行口2正向CPU申请中断(接收中断),S2RI必 须由用户的中断服务程序清零。 S2TI:串行口2发送中断标志。串行口2以方式0发送时,每当发送完8位数据,由硬件置1;若 以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S2TI=1表示串行口2正在 向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务 程序时并不将S2TI清零,S2TI必须由用户在中断服务程序中清零。 S2CON寄存器的其他位与中断无关,在此不作介绍。 464 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6. 串行口3控制寄存器S3CON S3CON为串行口3控制寄存器,S3CON格式如下: S3CON : 串行口3控制寄存器 (不可位寻址) SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0 S3CON ACH name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI S3RI: 串行口3接收中断标志。若串行口3允许接收且以方式0工作,则每当接收到第8位数据时 置1;若以方式1、2、3工作且S3SM2=0时,则每当接收到停止位的中间时置1;当串行口 3以方式2或方式3工作且S3SM2=1时,则仅当接收到的第9位数据S3RB8为1后,同时还要 接收到停止位的中间时置1。S3RI为1表示串行口3正向CPU申请中断(接收中断),S3RI必 须由用户的中断服务程序清零。 S3TI:串行口3发送中断标志。串行口3以方式0发送时,每当发送完8位数据,由硬件置1;若 以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S3TI=1表示串行口3正在 向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务 程序时并不将S3TI清零,S3TI必须由用户在中断服务程序中清零。 S3CON寄存器的其他位与中断无关,在此不作介绍。 7. 串行口4控制寄存器S4CON U C M d e t i im L S4CON为串行口4控制寄存器,S4CON格式如下: C T S S4CON : 串行口4控制寄存器 (不可位寻址) SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0 S4CON 84H name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI S4RI: 串行口4接收中断标志。若串行口4允许接收且以方式0工作,则每当接收到第8位数据时 置1;若以方式1、2、3工作且S4SM2=0时,则每当接收到停止位的中间时置1;当串行口 4以方式2或方式3工作且S4SM2=1时,则仅当接收到的第9位数据S4RB8为1后,同时还要 接收到停止位的中间时置1。S4RI为1表示串行口4正向CPU申请中断(接收中断),S4RI必 须由用户的中断服务程序清零。 S4TI:串行口4发送中断标志。串行口4以方式0发送时,每当发送完8位数据,由硬件置1;若 以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S4TI=1表示串行口4正在 向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务 程序时并不将S4TI清零,S4TI必须由用户在中断服务程序中清零。 S4CON寄存器的其他位与中断无关,在此不作介绍。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 465 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8. 低压检测中断相关寄存器:电源控制寄存器PCON PCON为电源控制寄存器,PCON格式如下: PCON : 电源控制寄存器 SFR name Address PCON 87H bit B7 B6 B5 B4 B3 B2 B1 B0 name SMOD SMOD0 LVDF POF GF1 GF0 PD IDL LVDF : 低压检测标志位,同时也是低压检测中断请求标志位。 在正常工作和空闲工作状态时,如果内部工作电压Vcc低于低压检测门槛电压,该位自 动置1,与低压检测中断是否被允许无关。即在内部工作电压Vcc低于低压检测门槛电 压时,不管有没有允许低压检测中断,该位都自动为1。该位要用软件清0,清0后,如 内部工作电压Vcc继续低于低压检测门槛电压,该位又被自动设置为1。 在进入掉电工作状态前,如果低压检测电路未被允许可产生中断,则在进入掉电模式 后,该低压检测电路不工作以降低功耗。如果被允许可产生低压检测中断,则在进入 掉电模式后,该低压检测电路继续工作,在内部工作电压Vcc低于低压检测门槛电压 后,产生低压检测中断,可将MCU从掉电状态唤醒。 d e t i im 电源控制寄存器PCON中的其他位与低压检测中断无关,在此不作介绍。 L 在中断允许寄存器IE中,低压检测中断相应的允许位是ELVD/IE.6 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name C T S B7 EA U C M B6 ELVD B5 EADC B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。 9. A/D转换控制寄存器ADC_CONTR ADC_CONTR为A/D转换控制寄存器,ADC_CONTR格式如下: ADC_CONTR : A/D转换控制寄存器 SFR name ADC_CONTR Address bit BCH name B7 B6 B5 B4 B3 B2 B1 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 B0 CHS0 ADC_POWER : ADC电源控制位。当ADC_POWER=0时,关闭ADC电源; 当ADC_PWOER=1时,打开ADC电源。 ADC_FLAG: ADC转换结束标志位,可用于请求A/D转换的中断。当A/D转换完成后, ADC_FLAG=1, 要用软件清0。不管是A/D转换完成后由该位申请产生中 断,还是由软件查询该标志位A/D转换是否结束,当A/D转换完成后, ADC_FLAG=1,一定要软件清0。 ADC_START: ADC转换启动控制位,设置为“1”时,开始转换,转换结束后为0。 A/D转换控制寄存器ADC_CONTR中的其他位与中断无关,在此不作介绍。 466 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 在中断允许寄存器IE中,A/D转换器的中断允许位是EADC/IE.5 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 ELVD B5 EADC B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。 10. 比较器控制寄存器1:CMPCR1 比较器控制寄存器1的格式如下: CMPCR1 : 比较器控制寄存器1 SFR name CMPCR1 Address E6H bit name B7 B6 CMPEN CMPIF B5 B4 PIE NIE Li PIS CMPEN:比较器模块使能位 CMPEN=1,使能比较器模块; CMPEN=0,禁用比较器模块, 比较器的电源关闭。 U C M d e t i m B3 B2 B1 B0 NIS CMPOE CMPRES CMPIF:�������� 比较器中断标志位(Interrupt Flag) 在 CMPEN为1的情况下: 当比较器的比较结果由LOW变成HIGH时, 若是PIE被设置成1, 那么内建的某一个 叫做CMPIF_p的寄存器会被设置成1; 当比较器的比较结果由HIGH变成LOW时, 若是NIE被设置成1, 那么内建的某一个 叫做CMPIF_n的寄存器会被设置成1; 当CPU 去读取 CMPIF 的数值时, 会读到 (CMPIF_p || CMPIF_n); 当CPU对CMPIF写0后, CMPIF_p 以及 CMPIF_n 都会被清除为0 . 而中断产生的条件是 [ (EA==1) && (((PIE==1)&&(CMPIF_p==1)) || ((NIE==1)&&(CM PIF_n==1))) ] CPU接受中断后, 并不会自动清除此CMPIF标志, 用户必须用软件写”0”去清除它。 C T S PIE: 比较器上升沿中断使能位( Pos-edge Interrupt Enabling) PIE = 1,������ 使能比较器由LOW变HIGH的事件 设定CMPIF_p产生中断� ; PIE = 0,������ 禁用比较器由LOW变HIGH的事件 设定CMPIF_p产生中断� 。 NIE: 比较器下降沿中断使能位 ( Neg-edge Interrupt Enabling) NIE = 1,������ 使能比较器由HIGH变LOW的事件 设定CMPIF_n产生中断� ; NIE = 0,������ 禁用比较器由HIGH变LOW的事件 设定CMPIF_n产生中断� 。 比较器控制寄存器1—CMPCR1 的其他位与中断无关,在此不作介绍。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 467 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.6 中断优先级 除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断、外部中断4(INT4)、串口3中 断、串口4中断、定时器T3中断、定时器T4中断及比较器中断外,STC15W4K60S4系列单片 机的所有的中断都具有2个中断优先级。����������������������� 一个正在执行的低优先级中断能被高优先级中断所中 断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程 序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不能被它的同级中断所中断。 当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次 序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC15W4K60S4系列单片 机各中断优先查询次序如下: 中断源 0. INT0 1. Timer 0 2. INT1 3. Timer 1 4. UART1 5. ADC interrupt 6. LVD 7. PCA 8. UART2 9. SPI 10. INT2 11. INT3 12. Timer 2 13. 14. 15. 16. INT4 17. UART3 18. UART4 19. Timer 3 20. Timer 4 21. Comparator C T S 查询次序 d e t i im (highest) U C M L (lowest) 注意:当定时器/计数器0工作在不可屏蔽中断的16位自动重装载模式时,如果此时定时器/计 数器0中断被允许了(只需置位ET0即可,不需置位EA,工作在不可屏蔽中断的16位自动重装载模 式下的定时器/计数器0中断与EA无关),则该中断优先级是所有中断中最高的,任何一个中断 都不能打断它,而且该中断被打开后它不仅不受EA控制也不再受ET0控制了。 468 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 如果使用C 语言编程,中断查询次序号就是中断号,例如: void void void void void void void void void void void void void void void void void void void Int0_Routine(void) Timer0_Rountine(void) Int1_Routine(void) Timer1_Rountine(void) UART1_Routine(void) ADC_Routine(void) LVD_Routine(void) PCA_Routine(void) UART2_Routine(void) SPI_Routine(void) Int2_Routine(void) Int3_Routine(void) Timer2_Routine(void) Int4_Routine(void) S3_Routine(void) S4_Routine(void) Timer3_Routine(void) Timer4_Routine(void) Comparator_Routine(void) C T S 南通国芯微电子有限公司 interrupt 0; interrupt 1; interrupt 2; interrupt 3; interrupt 4; interrupt 5; interrupt 6; interrupt 7; interrupt 8; interrupt 9; interrupt 10; interrupt 11; interrupt 12; interrupt 16; interrupt 17; interrupt 18; interrupt 19; interrupt 20; interrupt 21; U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 469 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.7 中断处理 当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作: 1. 当前正被执行的指令全部执行完毕; 2. PC值被压入栈; 3. 现场保护; 4. 阻止同级别其他中断; 5. 将中断向量地址装载到程序计数器PC; 6. 执行相应的中断服务程序。 中断服务程序ISR完成和该中断相应的一些操作。中断服务程序ISR以RETI(中断返回)指令 结束,将PC值从栈中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。 当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是该中断源相对应的 中断服务程序的起始地址。各中断源服务程序的入口地址(即中断向量)为: C T S 470 南通国芯微电子有限公司 d e t i im 中断源 中断向量 External Interrupt 0 Timer 0 External Interrupt 1 Timer 1 S1(UART1) ADC interrupt LVD PCA S2(UART2) SPI External Interrupt 2 External Interrupt 3 Timer 2 / / / External Interrupt 4 S3(UART3) S4(UART4) Timer 3 Timer 4 Comparator 0003H 000BH 0013H 001BH 0023H 002BH 0033H 003BH 0043H 004BH 0053H 005BH 0063H 006BH 0073H 007BH 0083H 008BH 0093H 009BH 00A3H 00ABH U C M L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 当“转去执行中断”时,引起外部中断INT0/INT1/INT2/INT3/INT4请求标志位和定时器/计数 器0、定时器/计数器1的中断请求标志位将被硬件自动清零,其它中断的中断请求标志位需软 件清"0"。由于中断向量入口地址位于程序存储器的开始部分,所以主程序的第1条指令通常为 跳转指令,越过中断向量区(LJMP MAIN)。 注意:不能用RET指令代替RETI指令 RET指令虽然也能控制PC返回到原来中断的地方,但RET指令没有清零中断优先级状态触 发器的功能,中断控制系统会认为中断仍在进行,其后果是与此同级或低级的中断请求将不被 响应。 若用户在中断服务程序中进行了入栈操作,则在RETI指令执行前应进行相应的出栈操 作,即在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点。 6.8 中断嵌套 d e t i im L U C M C T S 中断优先级高的中断请求可以中断CPU正在处理的优先级更低的中断服务程序,待完成了 中断优先权高的中断服务程序后,再继续被打断的更低的中断服务程序。这就是中断嵌套。下 图描述了主程序和中断服务程序运行示意图。 主 程 序 断点 继 续 执 行 主 程 序 南通国芯微电子有限公司 求 低级 中断 程序 求 请 断 中 级 低 应 响 返 回 主 程 序 断点 继 续 执 行 请 断 中 高 级 中 断 服 务 程 序 级 高 应 响 返 回 低 级 中 断 程 序 RETI 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 471 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.9 外部中断 外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,上升沿或下降沿均可触发方式 和仅下降沿触发方式。 TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是上升沿和下降沿均可触 发还是仅下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探测到上升沿或下降沿 后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探测下降沿后才可产生 外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉电模式唤醒。 外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中断 2~4的中断请求标志位被隐藏起来了,对用户不可见,故也无需用户清"0"。当相应的中断服 务程序被响应后或中断允许位EXn (n=2,3,4)被清零后,这些中断请求标志位会立即自动地被清 0。这些中断请求标志位也可以通过软件禁止相应的中断允许控制位将其清“0”(特殊应用)。 d e t i im 外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)也可以用于将单片机从掉电模式唤 醒。 L 由于系统每个时钟对外部中断引脚采样1次,所以为了确保被检测到,输入信号应该至少 维持2个时钟。如果外部中断是仅下降沿触发,要求必须在相应的引脚维持高电平至少1个时 钟,而且低电平也要持续至少一个时钟,才能确保该下降沿被CPU检测到。同样,如果外部中 断是上升沿、下降沿均可触发,则要求必须在相应的引脚维持低电平或高电平至少1个时钟, 而且高电平或低电平也要持续至少一个时钟,这样才能确保CPU能够检测到该上升沿或下降 沿。 C T S U C M STC15系列单片机的3路CCP/PCA/PWM还再可实现3个外部中断(支持上升沿/下降沿中断) 472 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10 中断的测试程序(C和汇编) 6.10.1 外部中断0(INT0)的测试程序 6.10.1.1 外部中断INT0(上升沿+下降沿)的测试程序(C和汇编) 1.C程序: /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz U C M #include "reg51.h" #include "intrins.h" C T S //----------------------------------------------bit sbit FLAG; P10 = P1^0; L //1:上升沿中断 0:下降沿中断 //----------------------------------------//外部中断服务程序 void exint0() interrupt 0 { P10 = !P10; FLAG = INT0; } //----------------------------------------------void main() { INT0 = 1; IT0 = 0; EX0 = 1; EA = 1; d e t i im //INT0中断入口 //将测试口取反 //保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿) //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT0中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 473 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751----------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz FLAG BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN ORG 0003H LJMP EXINT0 //---------------------------------------- MAIN: C T S d e t i im //1:上升沿中断 0:下降沿中断 //复位入口 U C M L //INT0中断入口 ORG 0100H MOV SP, CLR SETB SETB SJMP IT0 EX0 EA $ #3FH //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT0中断 //----------------------------------------//外部中断服务程序 EXINT0: CPL P1.0 PUSH PSW MOV C, INT0 MOV FLAG, C POP PSW RETI ;---------------------------------------- 474 //将测试口取反 //读取INT0口的状态 //保存, INT0=0(下降沿); INT0=1(上升沿) END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.1.2 外部中断INT0(下降沿)的测试程序(C和汇编) 1.C程序: /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" U C M //----------------------------------------------sbit P10 = P1^0; C T S //----------------------------------------//外部中断服务程序 void exint0() interrupt 0 { P10 = !P10; } L //INT0中断入口 //将测试口取反 //----------------------------------------------void main() { INT0 IT0 EX0 EA = = = = 1; 1; 1; 1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT0中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 475 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT0中断举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz ORG 0000H LJMP MAIN ORG 0003H LJMP EXINT0 //---------------------------------------- MAIN: C T S ORG 0100H MOV SP, SETB SETB SETB SJMP d e t i im //复位入口 //INT0中断入口 U C M L #3FH IT0 EX0 EA $ //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT0中断 //----------------------------------------//外部中断服务程序 EXINT0: CPL RETI P1.0 //将测试口取反 ;---------------------------------------- 476 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.2 外部中断1(INT1)的测试程序 6.10.2.1 外部中断INT1(上升沿+下降沿)的测试程序(C和汇编) 1.C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------bit sbit FLAG; P10 = C T S P1^0; //----------------------------------------//外部中断服务程序 void exint1() interrupt 2 { P10 = !P10; FLAG = INT1; } //----------------------------------------------void main() { INT1 = 1; IT1 = 0; EX1 = 1; EA = 1; U C M d e t i im L //1:上升沿中断 0:下降沿中断 //INT1中断入口 //将测试口取反 //保存INT1口的状态, INT1=0(下降沿); INT1=1(上升沿) //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT1中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 477 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz FLAG BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN ORG 0013H LJMP EXINT1 C T S CLR SETB SETB SJMP IT1 EX1 EA $ //复位入口 U C M L //INT1中断入口 //---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH d e t i im //1:上升沿中断 0:下降沿中断 //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT1中断 //----------------------------------------//外部中断服务程序 EXINT1: CPL P1.0 PUSH PSW MOV C, INT1 MOV FLAG, C POP PSW RETI ;---------------------------------------- END 478 南通国芯微电子有限公司 //将测试口取反 //读取INT1口的状态 //保存, INT1=0(下降沿); INT0=1(上升沿) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.2.2 外部中断INT1(下降沿)的测试程序(C和汇编) 1.C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" U C M //----------------------------------------------sbit P10 = P1^0; C T S //----------------------------------------//外部中断服务程序 void exint1() interrupt 2 { P10 = !P10; } L //INT1中断入口 //将测试口取反 //----------------------------------------------void main() { INT1 IT1 EX1 EA = = = = 1; 1; 1; 1; //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT1中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 479 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 INT1中断举例--------------------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz ORG 0000H LJMP MAIN ORG 0013H LJMP EXINT1 //---------------------------------------- MAIN: C T S ORG 0100H MOV SP, SETB SETB SETB SJMP d e t i im //复位入口 //INT1中断入口 U C M L #3FH IT1 EX1 EA $ //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿) //使能INT1中断 //----------------------------------------//外部中断服务程序 EXINT1: CPL RETI P1.0 //将测试口取反 ;---------------------------------------- 480 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.3 外部中断2(INT2)(下降沿中断)的测试程序(C和汇编) 1.C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- -------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit INT_CLKO P10 = = P1^0; 0x8f; C T S U C M //----------------------------------------------//外部中断服务程序 void exint2() interrupt 10 { P10 = !P10; // INT_CLKO &= 0xEF; // INT_CLKO |= 0x10; } void main() { INT_CLKO EA = |= 1; 0x10; L //外部中断与时钟输出控制寄存器 //INT2中断入口 //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 //(EX2 = 1)使能INT2中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 481 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- -------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz d e t i im INT_CLKO DATA 08FH //外部中断与时钟输出控制寄存器 //---------------------------------------- ORG 0000H LJMP MAIN U C M ORG 0053H LJMP EXINT2 //---------------------------------------- MAIN: C T S ORG 0100H MOV SP, ORL SETB EA L //复位入口 //INT2中断入口 #3FH INT_CLKO, #10H //(EX2 = 1)使能INT2中断 SJMP $ //----------------------------------------//外部中断服务程序 EXINT2: CPL P1.0 // ANL INT_CLKO, #0EFH // ORL INT_CLKO, #10H //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 RETI ;---------------------------------------- END 482 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.4 外部中断3(INT3)(下降沿中断)的测试程序(C和汇编) 1.C程序: /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- ---------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) -------------------------------*/ /* --- 研发顾问QQ:800003751----------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit INT_CLKO P10 = = P1^0; C T S 0x8f; U C M //外部中断与时钟输出控制寄存器 //----------------------------------------------//外部中断服务程序 void exint3() interrupt 11 { P10 = !P10; //INT3中断入口 //将测试口取反 // INT_CLKO &= 0xDF; // INT_CLKO |= 0x20; } void main() { INT_CLKO EA = |= 1; 0x20; L //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 //(EX3 = 1)使能INT3中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 483 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*-------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- ----------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) --------------------------------*/ /* --- 研发顾问QQ:800003751-----------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ------------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz INT_CLKO DATA 08FH //---------------------------------------- ORG 0000H LJMP MAIN C T S ORG 0100H MOV SP, ORL SETB EA SJMP $ L //复位入口 U C M ORG 005BH LJMP EXINT3 //---------------------------------------- MAIN: d e t i im //外部中断与时钟输出控制寄存器 //INT3中断入口 #3FH INT_CLKO, #20H //(EX3 = 1)使能INT3中断 //----------------------------------------//外部中断服务程序 EXINT3: CPL P1.0 // ANL INT_CLKO, #0DFH // ORL INT_CLKO, #20H //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 RETI ;---------------------------------------- 484 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.5 外部中断4(INT4)(下降沿中断)的测试程序(C和汇编) 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- --------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) ------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit INT_CLKO P10 = = P1^0; C T S 0x8f; U C M //----------------------------------------------//外部中断服务程序 void exint4() interrupt 16 { P10 = !P10; // INT_CLKO &= 0xBF; // INT_CLKO |= 0x40; } void main() { INT_CLKO EA = |= 1; 0x40; L //外部中断与时钟输出控制寄存器 //INT4中断入口 //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 //(EX4 = 1)使能INT4中断 while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 485 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2.汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- --------------------------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) ------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz INT_CLKO DATA 08FH //---------------------------------------- ORG 0000H LJMP MAIN C T S L //复位入口 U C M ORG 0083H LJMP EXINT4 //---------------------------------------- MAIN: d e t i im //外部中断与时钟输出控制寄存器 //INT4中断入口 ORG 0100H MOV SP, ORL SETB EA #3FH INT_CLKO, #40H //(EX4 = 1)使能INT4中断 SJMP $ //----------------------------------------//外部中断服务程序 EXINT4: CPL P1.0 // ANL INT_CLKO, #0BFH // ORL INT_CLKO, #40H //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 RETI ;---------------------------------------- 486 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.6 T0扩展为外部下降沿中断的测试程序(C和汇编) ——利用T0的外部计数方式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit AUXR = P10 = C T S 0x8e; P1^0; U C M //----------------------------------------------//定时器0中断服务程序 void t0int() interrupt 1 { P10 = !P10; } void main() { AUXR TMOD TH0 = TR0 ET0 EA while (1); = 0x80; = 0x04; TL0 = 0xff; = 1; = 1; = d e t i im L //辅助寄存器 //中断入口 //将测试口取反 //定时器0为1T模式 //设置定时器0为16位自动重装载外部记数模式 //设置定时器0初始值 //定时器0开始工作 //开定时器0中断 1; } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 487 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN L //复位入口 ORG 000BH LJMP T0INT //----------------------------------------- //中断入口 MAIN: ORG 0100H C T S U C M MOV SP, #3FH MOV MOV MOV MOV MOV SETB SETB #80H #04H #0FFH A A SETB EA SJMP $ AUXR, TMOD, A, TL0, TH0, TR0 ET0 d e t i im //辅助寄存器 //定时器0为1T模式 //设置定时器0为16位自动重装载外部记数模式 //设置定时器0初始值 //定时器0开始工作 //开定时器0中断 //----------------------------------------//定时器0中断服务程序 T0INT: CPL P1.0 RETI ;---------------------------------------- 488 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.7 T1扩展为外部下降沿中断的测试程序(C和汇编) ——利用T1的外部计数方式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz U C M #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit AUXR = P10 = C T S 0x8e; P1^0; //----------------------------------------------//定时器1中断服务程序 void t1int() interrupt 3 { P10 = !P10; } void main() { AUXR = TMOD = TH1 = TL1 = TR1 = ET1 = EA while (1); = 0x40; 0x40; 0xff; 1; 1; d e t i im L //辅助寄存器 //中断入口 //将测试口取反 //定时器1为1T模式 //设置定时器1为16位自动重装载外部记数模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 1; } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 489 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN ORG 001BH LJMP T1INT //---------------------------------------- MAIN: C T S ORG 0100H MOV SP, #3FH MOV MOV MOV MOV MOV SETB SETB #40H #40H #0FFH A A SETB EA SJMP $ AUXR, TMOD, A, TL1, TH1, TR1 ET1 d e t i im //辅助寄存器 //复位入口 U C M L //中断入口 //定时器1为1T模式 //设置定时器1为16位自动重装载外部记数模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 //----------------------------------------//定时器1中断服务程序 T1INT: CPL P1.0 RETI ;---------------------------------------- 490 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 6.10.8 T2扩展为外部下降沿中断的测试程序(C和汇编) ——利用T2的外部计数方式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" U C M //----------------------------------------------sfr IE2 = 0xaf; sfr AUXR = 0x8e; sfr T2H = 0xD6; sfr T2L = 0xD7; C T S d e t i im L //中断使能寄存器2 //辅助寄存器 //定时器2高8位 //定时器2低8位 sbit P10 = P1^0; //----------------------------------------------//定时器2中断服务程序 void t2int() interrupt 12 { P10 = !P10; // IE2 &= ~0x04; // IE2 |= 0x04; } void main() { AUXR |= 南通国芯微电子有限公司 0x04; //中断入口 //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 //定时器2为1T模式 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 491 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com AUXR |= 0x08; T2H = T2L = 0xff; AUXR |= 0x10; IE2 |= 0x04; EA = 1; 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //T2_C/T=1, T2(P3.1)引脚为时钟源 //初始化计时值 //定时器2开始计时 //开定时器2中断 while (1); } d e t i im 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ U C M C T S L //假定测试芯片的工作频率为18.432MHz IE2 DATA AUXR DATA T2H DATA T2L DATA 0AFH 08EH 0D6H 0D7H //中断使能寄存器2 //辅助寄存器 //定时器2高8位 //定时器2低8位 //---------------------------------------- ORG 0000H LJMP MAIN //复位入口 ORG 0063H LJMP T2INT //----------------------------------------- //中断入口 492 ORG 0100H 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 MAIN: MOV SP, 官方网站:www.STCMCU.com 研发顾问QQ:800003751 #3FH ORL ORL MOV A, MOV T2L, MOV T2H, ORL AUXR, #10H //定时器2开始计时 ORL IE2, //开定时器2中断 SETB EA AUXR, #04H AUXR, #08H #0FFH A A #04H //定时器2为1T模式 //T2_C/T=1, T2(P3.1)引脚为时钟源 //初始化计时值 SJMP $ //----------------------------------------//定时器2中断服务程序 T2INT: CPL P1.0 U C M // ANL IE2, #0FBH // ORL IE2, #04H RETI STC — 全球最大的8051单片机设计公司 C T S d e t i im L //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 493 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.10.9 用CCP/PCA功能扩展外部中断的测试程序(C和汇编) 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- --------------------------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 ----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int typedef unsigned long BYTE; WORD; DWORD; U C M sfr 0xA2; #define FOSC 18432000L P_SW1 = C T S #define CCP_S0 0x10 #define CCP_S1 0x20 sfr sbit sbit sbit sbit sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr 494 CCON = CCF0 = CCF1 = CR = CF = CMOD = CL = CH = CCAPM0 CCAP0L CCAP0H CCAPM1 CCAP1L CCAP1H CCAPM2 CCAP2L //外设功能切换寄存器1 //P_SW1.4 //P_SW1.5 0xD8; CCON^0; CCON^1; CCON^6; CCON^7; 0xD9; 0xE9; 0xF9; = 0xDA; = 0xEA; = 0xFA; = 0xDB; = 0xEB; = 0xFB; = 0xDC; = 0xEC; 南通国芯微电子有限公司 L //PCA控制寄存器 //PCA模块0中断标志 //PCA模块1中断标志 //PCA定时器运行控制位 //PCA定时器溢出标志 //PCA模式寄存器 //PCA定时器低字节 //PCA定时器高字节 //PCA模块0模式寄存器 //PCA模块0捕获寄存器 LOW //PCA模块0捕获寄存器 HIGH //PCA模块1模式寄存器 //PCA模块1捕获寄存器 LOW //PCA模块1捕获寄存器 HIGH //PCA模块2模式寄存器 //PCA模块2捕获寄存器 LOW 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com sfr CCAP2H = sfr sfr sfr PCAPWM0 = PCAPWM1 = PCA_ PWM2 = 0xf2; 0xf3; 0xf4; sbit PCA_LED P1^0; = 0xFC; // // // // // // // // // ACC ACC ACC P_SW1 = &= |= = ACC ACC ACC P_SW1 = &= |= = STC — 全球最大的8051单片机设计公司 //PCA模块2捕获寄存器 HIGH //PCA模块0的PWM寄存器 //PCA模块1的PWM寄存器 //PCA模块2的PWM寄存器 void PCA_isr() interrupt 7 using 1 { CCF0 = 0; PCA_LED = !PCA_LED; } void main() { ACC = ACC &= P_SW1 = 研发顾问QQ:800003751 //PCA测试LED //清中断标志 //测试LED取反 d e t i im P_SW1; ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0 ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2) L P_SW1; ~(CCP_S0 | CCP_S1); //CCP_S0=1 CCP_S1=0 CCP_S0; //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2) ACC; C T S U C M P_SW1; ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=1 CCP_S1; //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3) ACC; CCON = 0; CL = 0; CH = 0; CMOD = 0x00; CCAPM0 = 0x11; CCAPM0 = 0x21; CCAPM0 = 0x31; //初始化PCA控制寄存器 //PCA定时器停止 //清除CF标志 //清除模块中断标志 //复位PCA寄存器 CR EA //PCA定时器开始工作 while (1); // // = = 1; 1; //设置PCA时钟源 //禁止PCA定时器溢出中断 //PCA模块0为下降沿触发 //PCA模块0为上升沿沿触发 //PCA模块0为上升沿/下降沿触发 } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 495 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- --------------------------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 ----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz d e t i im //本测试程序以PCA模块0为例进行说明,PCA的模块1和模块2与模块0的实用方法相同 P_SW1 EQU 0A2H CCP_S0 EQU CCP_S1 EQU 10H 20H CCON EQU CCF0 BIT CCF1 BIT CR BIT CF BIT CMOD EQU CL EQU CH EQU CCAPM0 CCAP0L CCAP0H CCAPM1 CCAP1L CCAP1H CCAPM2 CCAP2L CCAP2H PCA_PWM0 PCA_PWM1 PCA_PWM2 0D8H CCON.0 CCON.1 CCON.6 CCON.7 0D9H 0E9H 0F9H EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU PCA_LED 0DAH 0EAH 0FAH 0DBH 0EBH 0FBH 0DCH 0ECH 0FCH 0F2H 0F3H 0F4H C T S BIT P1.0 //外设功能切换寄存器1 //P_SW1.4 //P_SW1.5 U C M L ;PCA控制寄存器 ;PCA模块0中断标志 ;PCA模块1中断标志 ;PCA定时器运行控制位 ;PCA定时器溢出标志 ;PCA模式寄存器 ;PCA定时器低字节 ;PCA定时器高字节 ;PCA模块0模式寄存器 ;PCA模块0捕获寄存器 LOW ;PCA模块0捕获寄存器 HIGH ;PCA模块1模式寄存器 ;PCA模块1捕获寄存器 LOW ;PCA模块1捕获寄存器 HIGH //PCA模块2模式寄存器 //PCA模块2捕获寄存器 LOW //PCA模块2捕获寄存器 HIGH //PCA模块0的PWM寄存器 //PCA模块1的PWM寄存器 //PCA模块2的PWM寄存器 ;PCA测试LED ;---------------------------------------- ORG 0000H LJMP MAIN 496 ORG 003BH 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 PCA_ISR: PUSH PSW PUSH ACC CKECK_CCF0: JNB CCF0, PCA_ISR_EXIT ;判断是否为捕获中断 CLR CCF0 ;清中断标志 CPL PCA_LED ;测试LED取反 PCA_ISR_EXIT: POP ACC POP PSW RETI ;---------------------------------------- ORG 0100H MAIN: MOV SP, #5FH // // // // // // // // // MOV A, P_SW1 ANL A, #0CFH MOV P_SW1, A MOV ANL ORL MOV A, A, A, P_SW1, MOV ANL ORL MOV A, A, A, P_SW1, P_SW1 #0CFH #CCP_S0 A C T S P_SW1 #0CFH #CCP_S1 A U C M MOV CCON, #0 CLR A MOV CL, A MOV CH, A MOV CMOD, #00H MOV CCAPM0, #11H ; MOV CCAPM0, #21H ; MOV CCAPM0, #31H ;------------------------------ SETB CR SETB EA d e t i im //CCP_S0=0 CCP_S1=0 //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2) L //CCP_S0=1 CCP_S1=0 //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2) //CCP_S0=0 CCP_S1=1 //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3) ;初始化PCA控制寄存器 ;PCA定时器停止 ;清除CF标志 ;清除模块中断标志 ; ;复位PCA寄存器 ; ;设置PCA时钟源 ;禁止PCA定时器溢出中断 ;PCA模块0捕获CCP0(P1.3)的下降沿 ;PCA模块0捕获CCP0(P1.3)的上升沿 ;PCA模块0捕获CCP0(P1.3)的上升沿/下降沿 ;PCA定时器开始工作 SJMP $ ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 497 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第7章 定时器/计数器 STC15W4K60S4系列��������������������������������� 单片机内部设置了5个16位定时器/计数器:16位定时器/计数器T0 和T1、T2、T3以及T4。5个16位定时器T0、T1、T2、T3和T4都具有计数方式和定时方式两种工 作方式。对定时器/计数器T0和T1,用它们在特殊功能寄存器TMOD中相对应的控制位— C/T来 选择T0或T1为定时器还是计数器。对定时器/计数器T2,用特殊功能寄存器AUXR中的控制位— T2_C/T来选择T2为定时器还是计数器。对定时器/计数器T3,用特殊功能寄存器T4T3M中的控 制位— T3_C/T来选择T3为定时器还是计数器。对定时器/计数器T4,用特殊功能寄存器T4T3M 中的控制位— T4_C/T来选择T4为定时器还是计数器。定时器/计数器的核心部件是一个加法计 数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为 定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1;如 果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5,T2为P3.1,T3为P0.7,T4为P0.5),则 为计数方式,每来一个脉冲加1。 d e t i im 当定时器/计数器T0、T1及T2工作在定时模式时,特殊功能寄存器AUXR中的T0x12、T1x12 和T2x12分别决定是系统时钟/12还是系统时钟/1(不分频)后让T0、T1和T2进行计数。当定时器 /计数器T3和T4工作在定时模式时,特殊功能寄存器T4T3M中的T3x12和T4x12分别决定是系统时 钟/12还是系统时钟/1(不分频)后让T3和T4进行计数。当定时器/计数器工作在计数模式时,对 外部脉冲计数不分频。 U C M L 定时器/计数器0有4种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模 式),模式2(8位自动重装模式),模式3(不可屏蔽中断的16位自动重装载模式)。定时器/计数器 1除模式3外,其他工作模式与定时器/计数器0相同,T1在模式3时无效,停止计数。定时器T2 的工作模式固定为16位自动重装载模式。T2可以当定时器使用,也可以当串口的波特率发生器 和可编程时钟输出。定时器3、定时器4与定时器T2一样,它们的工作模式固定为16位自动重装 载模式。T3/T4可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。 C T S STC15全系列的定时器/计数器的类型如下表所示。 定时器 计数器 定时器/计数器0 定时器/计数器1 定时器/计数器2 定时器/计数器3 定时器/计数器4 单片机型号 STC15F101W系列 √ √ STC15F408AD系列 √ √ STC15W201S系列 √ √ STC15W408AS系列 √ √ STC15W408S系列 √ √ √ STC15W1K16S系列 √ √ √ STC15F2K60S2系列 √ √ √ STC15W4K60S4系列 √ √ √ √ √ 上表中√表示对应的系列有相应的定时器/计数器。 498 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.1 定时器/计数器的相关寄存器 位地址及其符号 符号 描述 地址 TCON Timer Control 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0000 0000B TMOD TL0 TL1 TH0 TH1 IE Timer Mode Timer Low 0 Timer Low 1 Timer High 0 Timer High 1 中断允许寄存器 89H 8AH 8BH 8CH 8DH GATE C/T M1 M0 GATE C/T M1 M0 ES ET1 EX1 ET0 EX0 0000 0000B 0000 0000B 0000 0000B 0000 0000B 0000 0000B 0000 0000B IP 中断优先级寄存器 PT1 PX1 PT0 PX0 0000 0000B T2H T2L AUXR INT_CLKO AUXR2 T4T3M T4H T4L T3H T3L IE2 定时器2高8位 寄存器 定时器2低8位 寄存器 辅助寄存器 外部中断允许和时 钟输出寄存器 T4和T3的控制 寄存器 定时器4高8位 寄存器 定时器4低8位 寄存器 定时器3高8位 寄存器 定时器3低8位 寄存器 Interrupt Enable register 南通国芯微电子有限公司 A8H B8H MSB EA LSB ELVD EADC PPCA PLVD PADC PS D6H d e t i im D7H 8EH 8FH EX4 EX3 EX2 U C M - L 0000 0000B 0000 0000B T2x12 EXTRAM S1ST2 0000 0001B T2CLKO T1CLKO T0CLKO x000 x000B T0x12 T1x12 UART_M0x6 T2R T2_C/T - 复位值 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B D2H C T S 0000 0000B D3H 0000 0000B D4H 0000 0000B D5H 0000 0000B AFH - ET4 ET3 总机:0513-5501 2928 / 2929 / 2966 ES4 ES3 ET2 ESPI ES2 x000 0000B 传真:0513-5501 2969 / 2956 / 2947 499 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 1. 定时器/计数器0/1控制寄存器TCON TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求 中断源等,TCON格式如下: TCON : 定时器/计数器中断控制寄存器 (可位寻址) SFR name TCON Address 88H bit name B7 TF1 B6 TR1 B5 TF0 B4 TR0 B3 IE1 B2 IT1 B1 IE0 B0 IT0 TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置 “1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由 查询软件清“0”)。 TR1: 定时器T1的运行控制位。该位由软件置位和清零。当GATE(TMOD.7)=0,TR1=1时就 允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD.7)=1,TR1=1且INT1输入 高电平时,才允许T1计数。 d e t i im TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置 “1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询 软件清0)。 U C M L TR0: 定时器T0的运行控制位。该位由软件置位和清零。当GATE(TMOD.3)=0,TR0=1时就 允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMOD.3)=1,TR1=0且INT0输入 高电平时,才允许T0计数。 C T S IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该 中断时由硬件清“0”IE1。 IT1:外部中断源1触发控制位。IT1=0,上升沿或下降沿均可触发外部中断1。IT1=1,外部中 断1程控为下降沿触发方式。 IE0:外部中断0请求源(INT0/P3.2)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外 部中断时,由硬件清“0”IE0(边沿触发方式)。 IT0:外部中断源0触发控制位。IT0=0,上升沿或下降沿均可触发外部中断0。IT0=1,外部中 断0程控为下降沿触发方式。 500 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 定时器����������� /���������� 计数器工作模式寄存器TMOD 定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,TMOD寄存器的各位信 息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2个 定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能如下所述。 寄存器TMOD各位的功能描述 复位值:00H 地址:89H TMOD 不可位寻址 7 6 5 C/T GATE M1 4 3 2 1 M0 GATE C/T M1 GATE TMOD.7/ GATE TMOD.3/ C/T C T S TMOD.2/ d e t i im 功能 TMOD.7控制定时器1,置1时只有在INT1脚为高及TR1控制位置1 时才可打开定时器/计数器1。 U C M L TMOD.3控制定时器0,置1时只有在INT0脚为高及TR0控制位置1 时才可打开定时器/计数器0。 TMOD.6/ M0 定时器0 定时器1 位 符号 0 TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器 (对内部系统时钟进行计数),置1用作计数器(对引脚T1/P3.5 外部脉冲进行计数) C/T TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器 (对内部系统时钟进行计数),置1用作计数器(对引脚T0/P3.4 的外部脉冲进行计数) TMOD.5/TMOD.4 M1、M0 定时器定时器/计数器1模式选择 16位自动重装定时器,当溢出时将RL_TH1和RL_TL1存放的值自 动重装入TH1和TL1中。 16位不可重装载模式,TL1、TH1全用 8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1 定时器/计数器1此时无效(停止计数)。 0 0 0 1 1 0 1 1 TMOD.1/TMOD.0 M1、M0 0 0 0 1 1 0 1 1 南通国芯微电子有限公司 定时器/计数器0模式选择 16位自动重装定时器,当溢出时将RL_TH0和RL_TL0存放的值自 动重装入TH0和TL0中。 16位不可重装载模式,TL0、TH0全用 8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0 不可屏蔽中断的16位自动重装定时器 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 501 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 3. 辅助寄存器AUXR STC15系列���� 单片机� 是 1T 的8051单片机,为兼容传统8051,定时器0����������� 、定时器1,����� 和定时器2 复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设 置新增加的特殊功能寄存器AUXR,将T0,T1��������� ,T2������ 设置为1T。普通111条机器指令������� 执行速度��� 是固定 的,快4到24倍,无法改变。 AUXR格式如下: AUXR : 辅助寄存器 SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 T2R T2_C/T T0x12: 定时器0速度控制位 0, 定时器0是传统8051速度,12分频; 1, 定时器0的速度是传统8051的12倍,不分频 B2 B1 B0 T2x12 EXTRAM S1ST2 d e t i im T1x12: 定时器1速度控制位 0, 定时器1是传统8051速度,12分频; 1, 定时器1的速度是传统8051的12倍,不分频 如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口1是12T还是1T U C M L UART_M0x6: 串口1模式0的通信速度设置位。 0, 串口1模式0的速度是传统8051单片机串口的速度,12分频; 1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频 T2R: 定时器2允许控制位 0, 不允许定时器2运行; 1, 允许定时器2运行 C T S T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. EXTRAM: 内部/外部RAM存取控制位 0, 允许使用逻辑上在片外、物理上在片内的扩展RAM; 1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位 0, 选择定时器1作为串口1(UART1)的波特率发生器; 1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为 独立定时器使用 502 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 4. T0, T1和T2的时钟输出寄存器和外部中断允许INT_CLKO (AUXR2) T0CLKO/P3.5、T1CLKO/P3.4和T2CLKO/P3.0的时钟输出控制由INT_CLKO(AUXR2)寄 存器的T0CLKO位� 、 T1CLKO位和T2CLKO位控制� 。 T0CLKO的输出时钟频率由定时器0控 制,T1CLKO的输出时钟频率由定时器1控制,相应的定时器需要工作在定时器的�������� 模式������ 0(16�� 位自 动重装载模式�������������������������������� )������������������������������� 或������������������������������ 模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中 断� 。T2CLKO的输出时钟频率由定时器2控制,����������������� 同样��������������� 不要允许相应的定时器中断,免得CPU反复 进中断������������������������������������������ 。����������������������������������������� 定时器2的������������������������������������ 工作模式固定为模式��������������������������� 0(16����������������������� 位自动重装载模式��������������� ),������������� 在此模式下定时器2可用作可 编程时钟输出。 INT_CLKO (AUXR2)格式如下: INT_CLKO (AUXR2): 外部中断允许和时钟输出寄存器 SFR name Address bit INT_CLKO 8FH name AUXR2 B7 - B6 B5 B4 B3 EX4 EX3 EX2 - B2 B1 d e t i im B0 T2CLKO T1CLKO T0CLKO L T0CLKO : 是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO 1,���������������������� 将��������������������� P3.5����������������� /T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: U C M T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2 C T S 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 若定时器/计数器T0工作在定时器模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 0,不允许P3.5/T1管脚被配置为定时器0的时钟输出 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 503 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO 1,� 将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出� 率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装载模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 若定时器/计数器T1工作在模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: d e t i im 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 0,不允许P3.4/T0管脚被配置为定时器1的时钟输出 L T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO 1:允许将P3.0脚��� 配置为定时器2的时钟输出T2CLKO,������� 输出时钟频率=T2溢出率/2 如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则: U C M T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2 T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2 如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则: C T S 输出���� 时钟�� 频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2 0: 不允许� 将P3.0脚��� 配置为定时器2(T2)的时钟输出T2CLKO EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只 能下降沿触发。 EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也 只能下降沿触发。 EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同 样只能下降沿触发。 504 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 5、定时器T0和T1的中断控制寄存器:IE和IP IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 ELVD B5 EADC B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 ET1 : 定时/计数器T1的溢出中断允许位,ET1=1,允许T1中断,ET1=0,禁止T1中断。 ET0 : T0的溢出中断允许位,ET0=1允许T0中断,ET0=0禁止T0中断。 IP : 中断优先级控制寄存器 (可位寻址) SFR name Address bit B7 IP B8H name PPCA B6 PLVD B5 PADC B4 PS d e t i m B3 PT1 Li PT1: 定时器1中断优先级控制位。 当PT1=0时,定时器1中断为最低优先级中断(优先级0) 当PT1=1时,定时器1中断为最高优先级中断(优先级1) PT0: 定时器0中断优先级控制位。 当PT0=0时,定时器0中断为最低优先级中断(优先级0) 当PT0=1时,定时器0中断为最高优先级中断(优先级1) C T S U C M B2 PX1 B1 PT0 B0 PX0 注意:当定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装载模式)时,不需要允许 EA/IE.7(总中断使能位)只需允许ET0/IE.1(定时器/计数器0中断允许位)就能打开定时 器/计数器0的中断,此模式下的定时器/计数器0中断与总中断使能位EA无关。一旦此 模式下的定时器/计数器0中断被打开后,该定时器/计数器0中断优先级就是最高的, 它不能被其它任何中断所打断(不管是比定时器/计数器0中断优先级低的中断还是比其 优先级高的中断,都不能打断此时的定时器/计数器0中断),而且该中断打开后既不受 EA/IE.7控制也不再受ET0控制了,清零EA或ET0都不能关闭此中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 505 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6、定时器T4和T3的控制寄存器: T4T3M(地址:0xD1) T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 name T4R B6 B5 B4 B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B7 - T4R:定时器4运行控制位� 。 0����������� :不允许定时器4运行; 1:允许定时器4运行。 B6 - T4_C/T: 控制定时器4用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.4脚��� 配置为定时器4的时钟输出T4CLKO,������� 输出时钟频率=T4溢出率/2 如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则: U C M d e t i im L T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2 如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 C T S 0: 不允许� 将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.6脚��� 配置为定时器3的时钟输出T3CLKO,������� 输出时钟频率=T3溢出率/2 如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则: T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2 如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO 506 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7、定时器T2、T3和T4的中断控制寄存器:IE2 IE2 : 中断允许寄存器 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 1,允许定时器4产生中断; 0,禁止定时器4产生中断。 ET3:定时器3的中断允许位。 1,允许定时器3产生中断; 0,禁止定时器3产生中断。 ES4 : 串行口4中断允许位。 1,允许串行口4中断; 0,禁止串行口4中断 ES3 : 串行口3中断允许位。 1,允许串行口3中断; 0,禁止串行口3中断。 ET2:定时器2的中断允许位。 1,允许定时器2产生中断; 0,禁止定时器2产生中断。 C T S U C M d e t i im L ESPI:SPI中断允许位。 1,允许SPI中断; 0,禁止SPI中断。 ES2 : 串行口2中断允许位。 1,允许串行口2中断; 0,禁止串行口2中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 507 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.2 定时器/计数器0工作模式 通过对寄存器TMOD中的M1(TMOD.1)、M0(TMOD.0)的设置,定时器/计数器0有4种不同的 工作模式 7.2.1 模式0(16位自动重装载模式)及测试程序,建议只学习此模式足矣 ——STC创新设计,请不要抄袭 此模式下定时器��������������������������� /�������������������������� 计数器����������������������� 0���������������������� 作为可自动重装载的������������� 16����������� 位计数器,如下图所示。 AUXR.7/T0x12=0 ÷12 TF0 Interrupt SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 bits) C/T=1 T0 Pin TR0 d e t i m control GATE RL_TL0 (8 bits) INT0 TH0 (8 bits) Li RL_TH0 (8 bits) T0CLKO P3.5 T0CLKO 定时器/计数器0的模式 0: 16位自动重装 U C M STC创新设计,请不要抄袭,再抄袭就很无耻了 当������� GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定 时器0,这样可实现脉宽测量。TR0为TCON 寄存器内的控制位,TCON寄存器各位的具体功能描 述�������������� 见上节����������� TCON寄存器���� 的介绍� 。 C T S 当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。 STC15�������������������������������������� 系列单片机的定时器有两种计数速率:一种是������������������ 12T��������������� 模式,每����������� 12��������� 个时钟加����� 1���� ,与传统 8051�������������������������������������������� 单片机相同;另外一种是��������������������������������� 1T������������������������������� 模式,每个时钟加����������������������� 1���������������������� ,速度是传统���������������� 8051������������ 单片机的�������� 12������ 倍。���� T0�� 的速 率由特殊功能寄存器���������������������������������������������� AUXR������������������������������������������ 中的���������������������������������������� T0x12����������������������������������� 决定,如果������������������������������ T0x12=0����������������������� ,���������������������� T0�������������������� 则工作在���������������� 12T������������� 模式;如果�������� T0x12=1� , T0��������� 则工作在����� 1T��� 模式。 定时器0有�������� 2������� 个隐藏的寄存器RL_TH0和RL_TL0。RL_TH0与����������� TH0�������� 共有同一个地址,RL_TL0 与TL0共有同一个地址。当TR0=0即定时器/计数器0被禁止工作时,对TL0写入的内容会同时写 入RL_TL0,对TH0写入的内容也会同时写入RL_TH0。当TR0=1即定时器/计数器0被允许工作时, 对TL0写入内容,实际上不是写入当前寄存器TL0中,而是写入隐藏的寄存器RL_TL0中;对TH0写 入内容,实际上也不是写入当前寄存器TH0中,而是写入隐藏的寄存器RL_TH0。这样可以巧妙 地实现16位重装载定时器。当读TH0和TL0的内容时,所读的内容就是TH0和TL0的内容,而不是 RL_TH0和RL_TL0的内容。 当定时器������ 0����� 工作在模式0(TMOD[1:0]/[M1,M0]=00B)时,���������������� [TL0,TH0]������� 的溢出不仅置位TF0,而 且会自动将[RL_TL0,RL_TH0]的内容重新装入[TL0,TH0]。 508 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。 输出时钟频率 = T0 溢出率/2 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 7.2.1.1 定时器0的16位自动重装载模式的测试程序(C和汇编) d e t i im 1. C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- -------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器0的16位自动重装载模式 -----------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/ ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*---- 在 Keil /*-----------------------------------------------------------------------------------------------------*/ C T S U C M L //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char typedef unsigned int BYTE; WORD; //----------------------------------------------#define FOSC 18432000L #define T1MS (65536-FOSC/1000) //#define T1MS (65536-FOSC/12/1000) //1T模式,18.432MHz //12T模式,18.432MHz sfr sbit //Auxiliary register AUXR = P10 = 0x8e; P1^0; //----------------------------------------------- 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 509 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com /* Timer0 interrupt routine */ void tm0_isr() interrupt 1 using 1 { P10 = ! P10; } 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //将测试口取反 //----------------------------------------------/* main program */ void main() { AUXR |= // AUXR &= TMOD TL0 TH0 TR0 ET0 EA while (1); = = = = = = 0x80; 0x7f; 0x00; T1MS; T1MS >> 8; 1; 1; 1; //设置定时器为模式0(16位自动重装载) //初始化计时值 C T S d e t i im //定时器0开始计时 //使能定时器0中断 U C M } 2. 汇编程序: //定时器0为1T模式 //定时器0为12T模式 L /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- -------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器0的16位自动重装载模式 -----------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //辅助特殊功能寄存器 ;----------------------------------------------T1MS EQU //T1MS EQU 0B800H 0FA00H //1T模式的1ms定时值(65536-18432000/1000) //12T模式的1ms定时值(65536-18432000/1000/12) ;----------------------------------------------- 510 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT 官方网站:www.STCMCU.com 研发顾问QQ:800003751 //复位入口 //中断入口 STC — 全球最大的8051单片机设计公司 ;---------------------------------------------- MAIN: ORG 0100H // ORL AUXR, #80H ANL AUXR, #7FH MOV TMOD, #00H MOV MOV SETB SETB SETB EA SJMP $ MOV SP, #3FH TL0, TH0, TR0 ET0 #LOW T1MS #HIGH T1MS d e t i im //设置定时器为模式0(16位自动重装载) //初始化计时值 U C M C T S //定时器0为1T模式 //定时器0为12T模式 L //使能定时器0中断 //程序终止 //----------------------------------------//中断服务程序 T0INT: CPL RETI P1.0 //将测试口取反 ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 511 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.2.1.2 定时器0对系统时钟或外部引脚T0的时钟输入进行可编程分频输出的测试程序 ——定时器0工作在16位自动重装载模式 下面是定时器0工作在16位重装模式时对内部系统时钟或外部引脚T0/P3.4的时钟输入 进行可编程时钟分频输出的程序举例(C和汇编): 1. C程序: /*--------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/ /* --- 研发顾问QQ:800003751------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -----------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*---------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" C T S typedef unsigned char BYTE; typedef unsigned int WORD; U C M d e t i im L #define FOSC 18432000L //----------------------------------------------sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 sbit //定时器0的时钟输出脚 T0CLKO #define F38_4KHz //#define F38_4KHz = P3^5; (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) //1T模式 //12T模式 //----------------------------------------------void main() { AUXR |= // AUXR &= 512 0x80; ~0x80; 南通国芯微电子有限公司 //定时器0为1T模式 //定时器0为12T模式 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 TMOD = 0x00; //设置定时器为模式0(16位自动重装载) TMOD &= TMOD |= ~0x04; 0x04; //C/T0=0, 对内部时钟进行时钟输出 //C/T0=1, 对T0引脚的外部时钟进行时钟输出 TL0 = TH0 = TR0 = INT_CLKO F38_4KHz; F38_4KHz >> 8; 1; = 0x01; while (1); // //初始化计时值 //使能定时器0的时钟输出功能 //程序终止 } d e t i im 2. 汇编程序: /*--------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/ /* --- 研发顾问QQ:800003751------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -----------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*---------------------------------------------------------------------------------------------*/ U C M C T S L //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO DATA 08EH DATA 08FH T0CLKO BIT F38_4KHz //F38_4KHz EQU EQU P3.5 0FF10H 0FFECH //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器0的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下,(65536-18432000/2/12/38400) //---------------------------------------------- ORG 0000H LJMP MAIN 南通国芯微电子有限公司 //复位入口 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 513 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH // ORL AUXR, #80H ANL AUXR, #7FH MOV TMOD, #00H //设置定时器为模式0(16位自动重装载) ANL TMOD, #0FBH ORL TMOD, #04H //C/T0=0, 对内部时钟进行时钟输出 //C/T0=1, 对T0引脚的外部时钟进行时钟输出 // MOV MOV SETB MOV TL0, #LOW F38_4KHz TH0, #HIGH F38_4KHz TR0 INT_CLKO, #01H SJMP $ ;---------------------------------------------- 514 END C T S 南通国芯微电子有限公司 //定时器0为1T模式 //定时器0为12T模式 //初始化计时值 d e t i im //使能定时器0的时钟输出功能 L //程序终止 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.2.1.3 T0的16位自动重装模式(软硬结合)模拟10位或16位PWM输出的程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器软件模拟PWM举例--------------------------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz d e t i im #include "reg51.h" //6-bit PWM 周期数 //8-bit PWM 周期数 //10-bit PWM 周期数 //16-bit PWM 周期数 64 256 1024 65536 #define HIGHDUTY #define LOWDUTY 64 //高电平周期数(占空比64/256=25%) (PWM8BIT-HIGHDUTY) //低电平周期数 sfr sfr sbit AUXR INT_CLKO T0CLKO bit flag; C T S = = = L //#define PWM6BIT #define PWM8BIT //#define PWM10BIT //#define PWM16BIT U C M 0x8e; 0x8f; P3^5; //定时器0中断服务程序 void tm0() interrupt 1 { flag = !flag; if (flag) { TL0 = (65536-HIGHDUTY); TH0 = (65536-HIGHDUTY) >> 8; } else { TL0 = (65536-LOWDUTY); TH0 = (65536-LOWDUTY) >> 8; } } 南通国芯微电子有限公司 //辅助寄存器 //时钟输出控制寄存器 //定时器0的时钟输出口 //反转PWM的输出标志 //准备高电平的重载值 //准备低电平的重载值 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 515 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com void main() { AUXR = INT_CLKO TMOD &= TL0 = TH0 = T0CLKO = flag = TR0 = ET0 = EA = while (1); } 0x80; = 0x01; 0xf0; (65536-LOWDUTY); (65536-LOWDUTY) >> 8; 1; 0; 1; 1; 1; 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //定时器0为1T模式 //使能定时器0的时钟输出功能 //设置定时器0为模式0(16位自动重装载) //初始化定时器初值和重装值 //初始化时钟输出脚(软PWM口) //初始化标志位 //定时器0开始计时 //使能定时器0中断 d e t i im 2. 汇编程序: L /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器软件模拟PWM举例--------------------------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ U C M C T S //假定测试芯片的工作频率为18.432MHz ;PWM6BIT PWM8BIT ;PWM10BIT ;PWM16BIT EQU EQU EQU EQU 64 256 1024 65536 HIGHDUTY LOWDUTY EQU EQU AUXR INT_CLKO T0CLKO DATA 08EH DATA 08FH BIT P3.5 FLAG BIT 64 (PWM8BIT-HIGHDUTY) ;6-bit PWM周期数 ;8-bit PWM周期数 ;10-bit PWM周期数 ;16-bit PWM周期数 ;高电平周期数(占空比64/256=25%) ;低电平周期数 ;辅助寄存器 ;时钟输出控制寄存器 ;定时器0的时钟输出口 20H.0 ;----------------------------------------------- 516 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ORG 0000H LJMP MAIN ORG LJMP 000BH TM0_ISR ;----------------------------------------------MAIN: MOV AUXR, #80H MOV INT_CLKO, #01H ANL TMOD, #0F0H MOV TL0, #LOW (65536-LOWDUTY) MOV TH0, #HIGH (65536-LOWDUTY) SETB T0CLKO CLR FLAG SETB TR0 SETB ET0 SETB EA SJMP $ U C M ;----------------------------------------------;定时器0中断服务程序 TM0_ISR: CPL FLAG JNB FLAG, READYLOW READYHIGH: MOV TL0, #LOW (65536-HIGHDUTY) MOV TH0, #HIGH (65536-HIGHDUTY) JMP TM0ISR_EXIT READYLOW: MOV TL0, #LOW (65536-LOWDUTY) MOV TH0, #HIGH (65536-LOWDUTY) TM0ISR_EXIT: RETI C T S ;定时器0为1T模式 ;使能定时器0的时钟输出功能 ;设置定时器0为模式0(16位自动重装载) ;初始化定时器初值和重装值 ;初始化时钟输出脚(软PWM口) ;初始化标志位 ;定时器0开始计时 ;使能定时器0中断 d e t i im L ;反转PWM的输出标志 ;准备高电平的重载值 ;准备低电平的重载值 ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 517 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.2.1.4 T0的16位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编) ——利用T0的外部计数方式 ;定时器0中断(下降沿中断)的测试程序,定时器/计数器0工作在计数模式中的16位自动重装载模式,定 时器/计数器0工作载外部计数模式。 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" C T S //----------------------------------------------sfr AUXR = 0x8e; sbit P10 = P1^0; U C M //----------------------------------------------//外部中断服务程序 void t0int() interrupt 1 { P10 = !P10; } void main() { AUXR TMOD TH0 TL0 TR0 ET0 EA d e t i im L //辅助寄存器 //中断入口 //将测试口取反 = = = = = = 0x80; //定时器0为1T模式 0x04; //设置定时器0工作在16位自动重装载模式,同时为外部记数模式 0xff; 0xff; //设置定时器0初始值 1; //定时器0开始工作 1; //开定时器0中断 = 1; while (1); } 518 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN MAIN: C T S ORG 0100H MOV SP, SETB EA SJMP $ //中断入口 #3FH MOV AUXR, #80H MOV TMOD, #04H MOV A, #0FFH MOV TL0, A MOV TH0, A SETB TR0 SETB ET0 L //复位入口 U C M ORG 000BH LJMP T0INT //----------------------------------------- d e t i im //辅助寄存器 //定时器0为1T模式 //设置定时器0工作在16位自动重装载模式, //同时为为外部记数模式 //设置定时器0初始值 //定时器0开始工作 //开定时器0中断 //----------------------------------------//外部中断服务程序 T0INT: CPL P1.0 RETI ;---------------------------------------- //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 519 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.2.2 模式1(16位不可重装载模式),不建议学习 此模式下定时器������������������������� /������������������������ 计数器��������������������� 0�������������������� 工作在����������������� 16��������������� 位不可重装载模式,如下图所示。 ÷12 AUXR.7/T0x12=0 SYSclk ÷1 AUXR.7/T0x12=1 C/T=0 C/T=1 T0 Pin TR0 TL0 TH0 (8 Bits) (8 bits) TF0 Interrupt control GATE INT0 定时器/计数器0的模式 1: 16位不可重装载模式 d e t i im 此模式下,定时器/计数器0配置为16位不可重装载模式,由����������������� TL0�������������� 的������������� 8������������ 位和���������� TH0������� 的������ 8����� 位所构成。 TL0������������������������������������ 的8位溢出向������������������������������ TH0��������������������������� 进位,������������������������ TH0��������������������� 计数溢出置位��������������� TCON����������� 中的溢出标志位���� TF0� 。 L 当������� GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定 时器0,这样可实现脉宽测量。TR0为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述 见上节����������� TCON寄存器���� 的介绍� 。 U C M 当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。 C T S STC15系列单片机的定时器有两种计数速率:一种是������������������ 12T��������������� 模式,每����������� 12��������� 个时钟加����� 1���� ,与传统 8051�������������������������������������������� 单片机相同;另外一种是��������������������������������� 1T������������������������������� 模式,每个时钟加����������������������� 1���������������������� ,速度是传统���������������� 8051������������ 单片机的�������� 12������ 倍。���� T0�� 的速 率由特殊功能寄存器���������������������������������������������� AUXR������������������������������������������ 中的���������������������������������������� T0x12����������������������������������� 决定,如果������������������������������ T0x12=0����������������������� ,���������������������� T0�������������������� 则工作在���������������� 12T������������� 模式;如果�������� T0x12=1� , T0��������� 则工作在����� 1T��� 模式。 520 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.2.3 模式2(8位自动重装载模式),不建议学习 此模式下定时器�������������������������� /������������������������� 计数器���������������������� 0��������������������� 作为可自动重装载的������������ 8����������� 位计数器,如下图所示。 AUXR.7/T0x12=0 ÷12 TF0 Interrupt SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 Bits) C/T=1 T0 Pin TR0 T0CLKO control GATE P3.5 T0CLKO TH0 (8 Bits) INT0 定时器/计数器0的模式 2: 8位自动重装 d e t i im TL0��������������������������������������������� 的溢出不仅置位�������������������������������������� TF0����������������������������������� ,而且将������������������������������� TH0���������������������������� 内容重新装入���������������������� TL0������������������� ,������������������ TH0��������������� 内容由软件预置,重装时���� TH0� 内 容不变。 U C M L 当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。 输出时钟频率 = T0 溢出率/2 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出���� 时钟�� 频率=(SYSclk) / (256-TH0)/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(256-TH0)/2 C T S 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 521 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;定时器0中断(下降沿中断)的测试程序,定时器/计数器0工作在计数模式中的8位自 动重装模式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit AUXR = P10 = C T S 0x8e; P1^0; U C M //----------------------------------------------//外部中断服务程序 void t0int() interrupt 1 { P10 = !P10; } void main() { AUXR TMOD TH0 = TR0 ET0 EA while (1); = 0x80; = 0x06; TL0 = 0xff; = 1; = 1; = d e t i im L //辅助寄存器 //中断入口 //将测试口取反 //定时器0为1T模式 //设置定时器0为外部记数模式 //设置定时器0初始值 //定时器0开始工作 //开定时器0中断 1; } 522 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T0扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN L //复位入口 ORG 000BH LJMP T0INT //----------------------------------------- //中断入口 MAIN: C T S ORG 0100H MOV SP, MOV MOV MOV MOV MOV SETB SETB AUXR, TMOD, A, TL0, TH0, TR0 ET0 SETB EA SJMP $ d e t i im //辅助寄存器 U C M #3FH #80H #06H #0FFH A A //定时器0为1T模式 //设置定时器0为外部记数模式 //设置定时器0初始值 //定时器0开始工作 //开定时器0中断 //----------------------------------------//外部中断服务程序 T0INT: CPL P1.0 RETI ;---------------------------------------- //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 523 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.2.4 模式3(不可屏蔽中断16位自动重装载,实时操作系统用节拍定时器) 对定时器/计数器1,在模式3时,定时器1停止计数,效果与将TR1设置为0相同。 对定时器/计数器0,其工作模式3与工作模式0是一样的(下图是定时器模式3的原理图,与 模式0是一样的)。唯一不同的是:当定时器/计数器0工作在模式3时,只需允许ET0/IE.1(定时 器/计数器0中断允许位)不需要允许EA/IE.7(总中断使能位)就能打开定时器/计数器0的中断, 此模式下的定时器/计数器0中断与总中断使能位EA无关;一旦工作在模式3下的定时器/计数器 0中断被打开(ET0=1),那么该中断是不可屏蔽的,该中断的优先级是最高的,即该中断不能被 任何中断所打断,而且该中断打开后既不受EA/IE.7控制也不再受ET0控制,当EA=0或ET0=0时 都不能屏蔽此中断。故将此模式称为不可屏蔽中断的16位自动重装载模式。 AUXR.7/T0x12=0 ÷12 TF0 Interrupt SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 bits) C/T=1 T0 Pin d e t i im TH0 (8 bits) control TR0 GATE RL_TL0 (8 bits) INT0 U C M L RL_TH0 (8 bits) T0CLKO P3.5 T0CLKO 定时器/计数器0的模式3: 不可屏蔽中断的16位自动重装载模式 定时器/计数器0工作在模式3(不可屏蔽中断的16位自动 重装载模式),实时操作系统用系统节拍定时器。 C T S STC创新设计,请不要抄袭,再抄袭就很无耻了 那么当定时器/计数器0工作在模式3时,如何打开定时器/计数器0的中断呢? 下面的语句可以令定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装在模式)并 打开定时器/计数器0的中断(此时该中断是最高优先级,任何中断都不能屏蔽它)。 C语言设置: TMOD = 0x11; TR0 = 1; //EA = 1; ET0 = 1; //设置定时器为模式3(不可屏蔽中断的16位自动重装载) //定时器0开始计时 //定时器0工作在模式3(不可屏蔽中断的16位自动重装载 //模式)时,不需要使能总中断允许位EA //使能定时器0工作在模式3(不可屏蔽中断的16位自动重装 //载模式)时的中断 汇编语言设置: MOV TMOD, #00H //设置定时器为模式0(16位自动重装载) SETB TR0 //定时器0开始计时 //SETB EA //定时器0工作在模式3(不可屏蔽中断的16位自动重装载 //模式)时,不需要使能总中断允许位EA SETB ET0 //使能定时器0工作在模式3(不可屏蔽中断的16位自动重装 //载模式)时的中断 注意:当定时器/计数器0工作在模式3(不可屏蔽中断的16位自动重装载模式)时,不需要允许EA/IE.7(总 中断使能位)只需允许ET0/IE.1(定时器/计数器0中断允许位)就能打开定时器/计数器0的中断,此 模式下的定时器/计数器0中断与总中断使能位EA无关。一旦此模式下的定时器/计数器0中断被打开 后,该定时器/计数器0中断优先级就是最高的,它不能被其它任何中断所打断(不管是比定时器/计 数器0中断优先级低的中断还是比其优先级高的中断,都不能打断此时的定时器/计数器0中断), 而且该中断打开后既不受EA/IE.7控制也不再受ET0控制了,清零EA或ET0都不能关闭此中断。 524 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.3 定时器/计数器1工作模式 通过对寄存器TMOD中的M1(TMOD.5)、M0(TMOD.4)的设置,定时器/计数器1有3种不同的 工作模式。 7.3.1 模式0(16位自动重装载模式)及测试程序,建议只学习此模式足矣 ——STC创新设计,请不要抄袭 此模式下定时器��������������������������� /�������������������������� 计数器����������������������� 1���������������������� 作为可自动重装载的������������� 16����������� 位计数器,如下图所示。 AUXR.6/T1x12=0 ÷12 TF1 Interrupt SYSclk ÷1 AUXR.6/T1x12=1 Toggle C/T=0 TL1 (8 bits) C/T=1 T1 Pin TR1 d e t i m control T1CLKO P3.4 GATE RL_TL1 (8 bits) INT1 TH1 (8 bits) U C M Li RL_TH1 (8 bits) T1CLKO 定时器/计数器1的模式 0: 16位自动重装 STC创新设计,请不要抄袭,再抄袭就很无耻了 C T S 当������� GATE=0(TMOD.7)时,如TR1=1,则定时器计数。GATE=1时,允许由外部输入INT1控制定 时器1,这样可实现脉宽测量。TR1为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述 见上节����������� TCON寄存器���� 的介绍� 。 当C/T=0时,多路开关连接到系统时钟的分频输出,T1对内部系统时钟计数,T1工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.5/T1,即T1工作在计数方式。 STC15系列单片机的定时器有两种计数速率:一种是������������������ 12T��������������� 模式,每����������� 12��������� 个时钟加����� 1���� ,与传统 8051�������������������������������������������� 单片机相同;另外一种是��������������������������������� 1T������������������������������� 模式,每个时钟加����������������������� 1���������������������� ,速度是传统���������������� 8051������������ 单片机的�������� 12������ 倍。���� T1�� 的速 率由特殊功能寄存器���������������������������������������������� AUXR������������������������������������������ 中的���������������������������������������� T1x12����������������������������������� 决定,如果������������������������������ T1x12=0����������������������� ,���������������������� T1�������������������� 则工作在���������������� 12T������������� 模式;如果�������� T1x12=1� , T1��������� 则工作在����� 1T��� 模式。 定时器1有�������� 2������� 个隐藏的寄存器RL_TH1和RL_TL1。RL_TH1与����������� TH1�������� 共有同一个地址,RL_TL1 与TL1共有同一个地址。当TR1=0即定时器/计数器1被禁止工作时,对TL1写入的内容会同时写 入RL_TL1,对TH1写入的内容也会同时写入RL_TH1。当TR1=1即定时器/计数器1被允许工作时, 对TL1写入内容,实际上不是写入当前寄存器TL1中,而是写入隐藏的寄存器RL_TL1中;对TH1写 入内容,实际上也不是写入当前寄存器TH1中,而是写入隐藏的寄存器RL_TH1中。这样可以巧 妙地实现16位重装载定时器。当读TH1和TL1的内容时,所读的内容就是TH1和TL1的内容,而不 是RL_TH0和RL_TL1的内容。 当定时器������ 1����� 工作在模式0(TMOD[5:4]/[M1,M0]=00B)时,���������������� [TL1,TH1]������� 的溢出不仅置位TF1,而 且会自动将[RL_TL1,RL_TH1]的内容重新装入[TL1,TH1]。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 525 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。 输出时钟频率 = T1 溢出率/2 如果C/T=0,定时器/计数器T1对内部系统时钟计数,则 T1工作在1T模式(AUXR.6/T1x12=1)时的输出���� 时钟�� 频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 7.3.1.1 定时器1的16位自动重装载模式的测试程序(C和汇编) 1. C程序: d e t i im /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- --------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的16位自动重装载模式 -------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*------------------------------------------------------------------------------------------------------*/ U C M C T S L //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; //----------------------------------------------#define FOSC 18432000L #define T1MS (65536-FOSC/1000) //#define T1MS (65536-FOSC/12/1000) //1T模式,18.432MHz //12T模式,18.432MHz sfr sbit //Auxiliary register AUXR = P10 = 0x8e; P1^0; //----------------------------------------------- 526 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com /* Timer1 interrupt routine */ void tm1_isr() interrupt 3 using 1 { P10 = ! P10; } 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //将测试口取反 //----------------------------------------------/* main program */ void main() { AUXR |= // AUXR &= TMOD TL1 TH1 TR1 ET1 EA while (1); 0x40; 0xdf; = = = = = = 0x00; T1MS; T1MS >> 8; 1; 1; 1; //设置定时器为模式0(16位自动重装载) //初始化计时值 C T S d e t i im //定时器1开始计时 //使能定时器1中断 U C M } 2. 汇编程序: //定时器1为1T模式 //定时器1为12T模式 L /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- ---------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的16位自动重装载模式 -------------------------*/ /* --- 研发顾问QQ:800003751----------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*------------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //辅助特殊功能寄存器 ;----------------------------------------------T1MS EQU 0B800H //T1MS EQU 0FA00H 南通国芯微电子有限公司 //1T模式的1ms定时值(65536-18432000/1000) //12T模式的1ms定时值(65536-18432000/1000/12) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 527 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;---------------------------------------------- ORG 0000H LJMP MAIN ORG 001BH LJMP T1INT //复位入口 //中断入口 ;---------------------------------------------- MAIN: ORG 0100H // ORL AUXR, #40H ANL AUXR, #0DFH MOV SP, #3FH MOV TMOD, #00H MOV MOV SETB SETB SJMP $ TL1, TH1, TR1 ET1 #LOW T1MS #HIGH T1MS SETB EA C T S //定时器1为1T模式 //定时器1为12T模式 d e t i im //设置定时器为模式0(16位自动重装载) //初始化计时值 U C M L //使能定时器1中断 //程序终止 //----------------------------------------//中断服务程序 T1INT: CPL RETI P1.0 //将测试口取反 ;---------------------------------------- 528 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.3.1.2 定时器1对系统时钟或外部引脚T1的时钟输入进行可编程分频输出的测试程序 ——定时器1工作在16位自动重装载模式 下面是定时器1工作在16位重装模式时对内部系统时钟或外部引脚T1/P3.5的时钟输入 进行可编程时钟分频输出的程序举例(C和汇编): 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*------------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" C T S typedef unsigned char typedef unsigned int BYTE; WORD; U C M d e t i im L #define FOSC 18432000L //----------------------------------------------sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 sbit //定时器1的时钟输出脚 T1CLKO #define F38_4KHz //#define F38_4KHz = P3^4; (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) //1T模式 //12T模式 //---------------------------------------------void main() { AUXR |= // AUXR &= TMOD = 南通国芯微电子有限公司 0x40; ~0x40; 0x00; 总机:0513-5501 2928 / 2929 / 2966 //定时器1为1T模式 //定时器1为12T模式 //设置定时器为模式1(16位自动重装载) 传真:0513-5501 2969 / 2956 / 2947 529 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com // TMOD &= TMOD |= ~0x40; 0x40; //C/T1=0, 对内部时钟进行时钟输出 //C/T1=1, 对T1引脚的外部时钟进行时钟输出 TL1 = TH1 = TR1 = INT_CLKO F38_4KHz; F38_4KHz >> 8; 1; = 0x02; //初始化计时值 while (1); 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //使能定时器1的时钟输出功能 //程序终止 } d e t i im 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. -----------------------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ----------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*------------------------------------------------------------------------------------------------------*/ U C M C T S L //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO DATA 08EH DATA 08FH T1CLKO BIT F38_4KHz //F38_4KHz EQU EQU P3.4 //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 0FF10H 0FFECH ORG 0000H LJMP MAIN //定时器1的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下, (65536-18432000/2/12/38400) //复位入口 //----------------------------------------------- 530 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com MAIN: ORG 0100H // ORL AUXR, #40H ANL AUXR, #0BFH // MOV SP, ANL TMOD, #0BFH ORL TMOD, #40H MOV MOV SETB MOV SJMP $ TL1, #LOW F38_4KHz TH1, #HIGH F38_4KHz TR1 INT_CLKO, #02H ;---------------------------------------------- END 南通国芯微电子有限公司 STC — 全球最大的8051单片机设计公司 #3FH MOV TMOD, #00H 研发顾问QQ:800003751 C T S //定时器1为1T模式 //定时器1为12T模式 //设置定时器为模式0(16位自动重装载) //C/T1=0, 对内部时钟进行时钟输出 //C/T1=1, 对T1引脚的外部时钟进行时钟输出 //初始化计时值 d e t i im //使能定时器1的时钟输出功能 L //程序终止 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 531 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.3.1.3 定时器1模式0(16位自动重载模式)作串口1波特率发生器的测试程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序----*/ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序----*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int #define FOSC 18432000L #define BAUD 115200 #define #define #define #define #define C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY U C M BYTE; WORD; 0 1 2 3 4 L //系统频率 //串口波特率 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr AUXR = 0x8e; //辅助寄存器 sbit P22 P2^2; bit busy; = void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9位可变波特率,校验位初始为0 #endif 532 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 = = = = = = = 官方网站:www.STCMCU.com 研发顾问QQ:800003751 AUXR TMOD TL1 TH1 TR1 ES EA 0x40; 0x00; (65536 - (FOSC/32/BAUD)); (65536 - (FOSC/32/BAUD))>>8; 1; 1; 1; SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); STC — 全球最大的8051单片机设计公司 //定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值 //定时器1开始启动 //使能串口中断 } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; P22 = RB8; } if (TI) { TI = 0; busy = 0; } } //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 C T S U C M /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) TB8 = 0; #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; #endif } else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; 南通国芯微电子有限公司 d e t i im 总机:0513-5501 2928 / 2929 / 2966 L //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 //设置校验位为1 传真:0513-5501 2969 / 2956 / 2947 533 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 2. 汇编程序: //设置校验位为0 //写数据到UART数据寄存器 //检测字符串结束标志 //发送当前字符 U C M d e t i im L /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ C T S //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY 0 ODD_PARITY 1 EVEN_PARITY 2 MARK_PARITY 3 SPACE_PARITY 4 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 //----------------------------------------AUXR EQU BUSY BIT 08EH 20H.0 //辅助寄存器 //忙标志位 //----------------------------------------- 534 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ORG 0000H LJMP MAIN ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV SCON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV AUXR, MOV TMOD, MOV TL1, MOV TH1, SETB TR1 SETB ES SETB EA #40H #00H #0FBH #0FFH C T S MOV DPTR, #TESTSTR LCALL SENDSTRING U C M d e t i im L //定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值(65536-18432000/32/115200) //定时器1开始运行 //使能串口中断 //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, MOV P2.2, 南通国芯微电子有限公司 CHECKTI SBUF RB8 C //检测RI位 //清除RI位 //P0显示串口数据 //P2.2显示校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 535 STC15F2K60S2系列单片机指南 CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI TI, TI BUSY 技术支持网站:www.GXWMCU.com ISR_EXIT 研发顾问Tel:13922805190 //检测TI位 //清除TI位 //清忙标志 PSW ACC ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET C T S 南通国芯微电子有限公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 d e t i im //设置校验位为0 L //设置校验位为1 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 536 临时技术支持Tel:13922829991 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.3.1.4 T1的16位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编) ——利用T1的外部计数方式 ;定时器1中断(下降沿中断)的测试程序,定时器/计数器1工作在计数模式中的16位自动重装载模式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------- C T S sfr AUXR = 0x8e; sbit P10 = P1^0; //----------------------------------------------//外部中断服务程序 void t1int() interrupt 3 { P10 = !P10; } void main() { AUXR TMOD TH1 TR1 ET1 EA while (1); = 0x40; = 0x40; = TL1 = 0xff; = 1; = 1; = U C M d e t i im L //辅助寄存器 //中断入口 //将测试口取反 //定时器1为1T模式 //设置定时器1为外部记数模式,工作在16位自动重装载模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 1; } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 537 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN ORG 001BH LJMP T1INT //---------------------------------------- MAIN: C T S ORG 0100H MOV SP, #3FH MOV MOV MOV MOV MOV SETB SETB #40H #40H #0FFH A A SETB EA SJMP $ AUXR, TMOD, A, TL1, TH1, TR1 ET1 d e t i im //辅助寄存器 //复位入口 U C M //中断入口 L //定时器1为1T模式 //设置定时器1为外部记数模式,工作在16位重装载模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 //----------------------------------------//外部中断服务程序 T1INT: CPL P1.0 RETI ;---------------------------------------- 538 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.3.2 模式1(16位不可重装载模式),不建议学习 此模式下定时器�������������������� /������������������� 计数器���������������� 1��������������� 作为������������� 16����������� 位定时器,如下图所示。 ÷12 AUXR.6/T1x12=0 SYSclk ÷1 AUXR.6/T1x12=1 C/T=0 TL1 TH1 (8 Bits) (8 bits) C/T=1 T1 Pin TR1 TF1 Interrupt control GATE INT1 定时器/计数器1的模式 1: 16位不可重装载 d e t i im 此模式下,定时器1配置为���������������������������������� 16�������������������������������� 位不可重装在模式,由���������������������� TL1������������������� 的������������������ 8����������������� 位和��������������� TH1������������ 的����������� 8���������� 位所构成。����� TL1�� 的8 位溢出向������������������������������ TH1��������������������������� 进位,������������������������ TH1��������������������� 计数溢出置位��������������� TCON����������� 中的溢出标志位���� TF1� 。 L 当������� GATE=0(TMOD.7)时,如TR1=1,则定时器计数。GATE=1时,允许由外部输入INT1控制定 时器1,这样可实现脉宽测量。TR1为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述 见上节����������� TCON寄存器���� 的介绍� 。 U C M 当C/T=0时,多路开关连接到系统时钟的分频输出,T1对内部系统时钟计数,T1工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.5/T1,即T1工作在计数方式。 C T S STC15系列单片机的定时器有两种计数速率:一种是������������������ 12T��������������� 模式,每����������� 12��������� 个时钟加����� 1���� ,与传统 8051�������������������������������������������� 单片机相同;另外一种是��������������������������������� 1T������������������������������� 模式,每个时钟加����������������������� 1���������������������� ,速度是传统���������������� 8051������������ 单片机的�������� 12������ 倍。���� T1�� 的速 率由特殊功能寄存器���������������������������������������������� AUXR������������������������������������������ 中的���������������������������������������� T1x12����������������������������������� 决定,如果������������������������������ T1x12=0����������������������� ,���������������������� T1�������������������� 则工作在���������������� 12T������������� 模式;如果�������� T1x12=1� , T1��������� 则工作在����� 1T��� 模式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 539 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.3.3 模式2(8位自动重装载模式),不建议学习 此模式下定时器�������������������������� /������������������������� 计数器���������������������� 1��������������������� 作为可自动重装载的������������ 8����������� 位计数器,如下图所示。 AUXR.6/T1x12=0 ÷12 Interrupt TF1 SYSclk ÷1 Toggle AUXR.6/T1x12=1 C/T=0 TL1 (8 Bits) C/T=1 T1 Pin TR1 T1CLKO control GATE P3.4 T1CLKO TH1 (8 Bits) INT1 定时器/计数器1的模式 2: 8位自动重装载 d e t i im TL1��������������������������������������������� 的溢出不仅置位�������������������������������������� TF1����������������������������������� ,而且将������������������������������� TH1���������������������������� 内容重新装入���������������������� TL1������������������� ,������������������ TH1��������������� 内容由软件预置,重装时���� TH1� 内 容不变。 L 当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。 输出时钟频率 ������ = T1 溢出率/2 如果C/T=0,定时器/计数器T1对内部系统时钟计数,则 T1工作在1T模式(AUXR.6/T1x12=1)时的输出���� 时钟�� 频率=(SYSclk) / (256-TH1)/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 C T S 540 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.3.3.1 定时器1模式2(8位自动重载模式)作串口1波特率发生器的测试程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序--------------- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序--------------- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz#include "reg51.h" d e t i im #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L #define BAUD 115200 #define #define #define #define #define C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 U C M //系统频率 //串口波特率 L //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr AUXR = 0x8e; sbit P22 P2^2; bit busy; = //辅助寄存器 void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 541 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; #endif = = = = = = = 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //9位可变波特率,校验位初始为0 AUXR TMOD TL1 TH1 TR1 ES EA 0x40; //定时器1为1T模式 0x20; //定时器1为模式2(8位自动重载) (256 - (FOSC/32/BAUD)); //设置波特率重装值 (256 - (FOSC/32/BAUD)); 1; //定时器1开始工作 1; //使能串口中断 1; SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = P0 = P22 = } if (TI) { TI = busy = } } C T S U C M 0; SBUF; RB8; 0; 0; 南通国芯微电子有限公司 /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) TB8 = 0; #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; #endif } 542 d e t i im L //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 2. 汇编程序: C T S //设置校验位为1 //设置校验位为0 //写数据到UART数据寄存器 d e t i im //检测字符串结束标志 L //发送当前字符 U C M /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序--------------- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序--------------- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 #define PARITYBIT EVEN_PARITY //无校验 //奇校验 //偶校验 //标记校验 //空白校验 //定义校验位 //----------------------------------------南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 543 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com AUXR EQU 08EH BUSY BIT 20H.0 //辅助寄存器 //忙标志位 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //---------------------------------------- ORG 0000H LJMP MAIN ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH d e t i im #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV SCON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV AUXR, MOV TMOD, MOV TL1, MOV TH1, SETB TR1 SETB ES SETB EA #40H #20H #0FBH #0FBH C T S U C M L //定时器1为1T模式 //定时器1为模式2(8位自动重载) //设置波特率重装值(256-18432000/32/115200) //定时器1开始运行 //使能串口中断 MOV DPTR, #TESTSTR LCALL SENDSTRING //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, 544 CHECKTI SBUF RB8 南通国芯微电子有限公司 //检测RI位 //清除RI位 //P0显示串口数据 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 MOV CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI 官方网站:www.STCMCU.com P2.2, C TI, TI BUSY ISR_EXIT 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //P2.2显示校验位 //检测TI位 //清除TI位 //清忙标志 PSW ACC ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET C T S d e t i im //设置校验位为0 L //设置校验位为1 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 南通国芯微电子有限公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 545 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.3.3.2 T1的8位自动重装载模式扩展为外部下降沿中断的测试程序(C和汇编) ;定时器1中断(下降沿中断)的测试程序,定时器/计数器1工作在计数模式中的8位自动重装载模式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sbit AUXR = P10 = C T S 0x8e; P1^0; U C M //----------------------------------------------//外部中断服务程序 void t1int() interrupt 3 { P10 = !P10; } void main() { AUXR TMOD TH1 = TR1 ET1 EA while (1); = = TL1 = = = 0x40; 0x60; 0xff; 1; 1; = 1; L //辅助寄存器 //中断入口 //将测试口取反 //定时器1为1T模式 //设置定时器1为外部记数模式,工作在8位自动重装载模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 } 546 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T1扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //---------------------------------------- ORG 0000H LJMP MAIN //复位入口 U C M ORG 001BH LJMP T1INT //---------------------------------------- MAIN: //中断入口 ORG 0100H MOV SP, MOV MOV MOV MOV MOV SETB SETB SETB EA SJMP $ C T S AUXR, TMOD, A, TL1, TH1, TR1 ET1 d e t i im //辅助寄存器 L #3FH #40H #60H #0FFH A A //定时器1为1T模式 //设置定时器1为外部记数模式 //设置定时器1初始值 //定时器1开始工作 //开定时器1中断 //----------------------------------------//外部中断服务程序 T1INT: CPL P1.0 RETI ;---------------------------------------- //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 547 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.4 古老的Intel 8051单片机定时器0/1应用举例 【例1】 定时/计数器应用编程,设某应用系统,选择定时/计数器1定时模式,定时时间 Tc = 10ms,主频频率为12MHz,每10ms向主机请求处理。选定工作方式1。计算得计数初值: 低8位初值为F0H,高8位初值为D8H。 (1)初始化程序 … 所谓初始化,一般在主程序中根据应用要求对定时/计数器进行功能选择及参数设定等预 置程序,本例初始化程序如下: START: ;���� 主程序段 MOV SP, #60H ;设置堆栈区域 MOV TMOD, #10H ;选择T1、定时模式,工作方式1 MOV TH1, #0D8H ;设置高字节计数初值 MOV TL1, #0F0H ;设置低字节计数初值 L } U SETB EA ; SETB ET1 ; … C T S 开中断 ; �其他初始化程序 TR1 ;启动T1开始计时 … SETB MC d e t i im ;����� 继续主程序 (2)中断服务程序 INTT1: PUSH A ; } PUSH DPL ; 现场保护 … PUSH DPH ; MOV TL1, #0F0H ; MOV TH1, #0D8H ; … } 重新置初值 POP ;中断处理主体程序 DPH ; POP DPL ; POP A ; 548 } 现场恢复 RETI ;返回 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 这里展示了中断服务子程序的基本格式。STC15系列单片机的中断属于矢量中断,每一个 矢量中断源只留有8个字节单元,一般是不够用的,常需用转移指令转到真正的中断服务子程 序区去执行。 【例2】 利用定时/计数器0或定时/计数器1的Tx端口改造成外部中断源输入端口的应用设计。 在某些应用系统中常会出现原有的两个外部中断源INT0和INT1不够用,而定时/计数器有 多余,则可将Tx用于增加的外部中断源。现选择定时/计数器1为对外部事件计数模式工作方式 2(自动再装入),设置计数初值为FFH,则T1端口输入一个负跳变脉冲,计数器即回0溢出, 置位对应的中断请求标志位TF1为1,向主机请求中断处理,从而达到了增加一个外部中断源的 目的。应用定时/计数器1(T1)的中断矢量转入中断服务程序处理。其程序示例如下: (1)主程序段: ORG 0000H AJMP MAIN ;转主程序 ORG 001BH ORG U C M L ;转T1中断服务程序 … LJMP INTER d e t i im C T S 0100 ;主程序入口 … MAIN: … MOV SP, MOV TMOD, #60H ;设置定时/计数器1,计数方式2 MOV TL1, #0FFH ;设置计数常数 MOV TH1, #0FFH #60H ;设置堆栈区 EA ;开中断 SETB ET1 ;开定时/计数器1中断 SETB TR1 ;启动定时/计数器1计数 … SETB 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 549 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 (2)中断服务程序(具体处理程序略) ORG 1000H INTER: PUSH A ; PUSH DPL ; PUSH DPH ; … … … } 现场入栈保护 ; 中断处理主体程序 �� ;� POP DPH ; } }ited POP DPL ; POP A ; 现场出栈复原 Lim RETI ;返回 这是中断服务程序的基本格式。 U C M 【例5】 某应用系统需通过P1.0和P1.1分别输出周期为200μ s和400μ s的方波。为此,系统 C T S 选用定时器/计数器0(T0),定时方式3,主频为6M H z,T P=2μ s,经计算得定时常数为9C H和 38H。 本例程序段编制如下: (1)初始化程序段 … PLT0: MOV TMOD,#03H ;设置T0定时方式3 MOV TL0,#9CH ;设置TL0初值 MOV TH0,#38H ;设置TH0初值 EA ; SETB ET0 ; SETB ET1 ; SETB TR0 ;启动 SETB TR1 ;启动 550 … SETB 南通国芯微电子有限公司 } 开中断 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com (2)中断服务程序段 1) INT0P: STC — 全球最大的8051单片机设计公司 … … 研发顾问QQ:800003751 MOV TL0, #9CH ;重新设置初值 CPL P1.0 ;对P1.0输出信号取反 RETI ;返回 … INT1P … … 2) MOV CPL P1.1 ;对P1.1输出信号取反 RETI ;返回 … TH0, #38H d e t i im C T S U C M ;重新设置初值 L 在实际应用中应注意的问题如下。 (1)定时/计数器的实时性 定时/计数器启动计数后,当计满回0溢出向主机请求中断处理,由内部硬件自动进行。但 从回0溢出请求中断到主机响应中断并作出处理存在时间延迟,且这种延时随中断请求时的现 场环境的不同而不同,一般需延时3个机器周期以上,这就给实时处理带来误差。大多数应用 场合可忽略不计,但对某些要求实时性苛刻的场合,应采用补偿措施。 这种由中断响应引起的时间延时,对定时/计数器工作于方式0或1而言有两种含义:一是 由于中断响应延时而引起的实时处理的误差;二是如需多次且连续不间断地定时/计数,由于 中断响应延时,则在中断服务程序中再置计数初值时已延误了若干个计数值而引起误差,特别 是用于定时就更明显。 例如选用定时方式1设置系统时钟,由于上述原因就会产生实时误差。这种场合应采用动 态补偿办法以减少系统始终误差。所谓动态补偿,即在中断服务程序中对THx、TLx重新置计数 初值时,应将THx、TLx从回0溢出又重新从0开始继续计数的值读出,并补偿到原计数初值中去 进行重新设置。可考虑如下补偿方法: 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 551 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 … CLR EA ;禁止中断 MOV A, TLx ;读TLx中已计数值 ADD A, #LOW ;LOW为原低字节计数初值 MOV TLx, A ;设置低字节计数初值 MOV A, #HIGH ;原高字节计数初值送A ADDC A, THx ;高字节计数初值补偿 MOV THx, A ;置高字节计数初值 EA ;开中断 d e t i im … SETB (2)动态读取运行中的计数值 L 在动态读取运行中的定时/计数器的计数值时,如果不加注意,就可能出错。这是因为不 可能在同一时刻同时读取THx和TLx中的计数值。比如,先读TLx后读THx,因为定时/计数器处 于运行状态,在读TLx时尚未产生向THx进位,而在读THx前已产生进位,这时读得的THx就不对 了;同样,先读THx后读TLx也可能出错。 C T S U C M 一种可避免读错的方法是:先读THx,后读TLx,将两次读得的THx进行比较;若两次读得 的值相等,则可确定读的值是正确的,否则重复上述过程,重复读得的值一般不会再错。此法 的软件编程如下: RDTM: MOV A, THx ;读取THx存A中 MOV R0, TLx ;读取TLx存R0中 CJNE A, THx,RDTM ;比较两次THx值,若相等,则读得的 ;值正确,程序往下执行,否则重读 MOV R1, A ;将THx存于R1中 … 552 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 7.5 定时器/计数器2及其应用(STC创新设计,请不要抄袭) T2的工作模式固定为16位自动重装载模式���������������������� ,��������������������� T2可以当定时器/������������ 计数器��������� 用,也可以当��� 可编程 时钟输出����������� 和串口的波特率发生器� 。 下面首先介绍与定时器/计数器2相关的寄存器: 7.5.1 定时器/计数器2的相关特殊功能寄存器 与定时器/计数器2有关的特殊功能寄存器: 符号 T2H T2L AUXR INT_CLKO AUXR2 IE2 描述 地址 定时器2高8位 寄存器 定时器2低8位 寄存器 辅助寄存器 外部中断允许和 时钟输出寄存器 Interrupt Enable register 位地址及其符号 MSB LSB D6H 8EH 8FH AFH C T S Li EX4 EX3 EX2 - ET4 ET3 U C M - ES4 0000 0000B T2x12 EXTRAM S1ST2 0000 0001B T2CLKO T1CLKO T0CLKO x000 x000B T0x12 T1x12 UART_M0x6 T2R T2_C/T - 0000 0000B d e t i m D7H 复位值 ES3 ET2 ESPI x000 0000B ES2 1. 定时器2的控制寄存器:辅助寄存器AUXR STC15系列���� 单片机� 是 1T 的8051单片机,为兼容传统8051,定时器0����������� 、定时器1,����� 和定时器2 复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设 置新增加的特殊功能寄存器AUXR,将T0,T1��������� ,T2������ 设置为1T。普通111条机器指令������� 执行速度��� 是固定 的,快3到24倍,无法改变。 AUXR格式如下: AUXR : 辅助寄存器 SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 T2R T2_C/T B2 B1 B0 T2x12 EXTRAM S1ST2 T2R: 定时器2允许控制位 0, 不允许定时器2运行; 1, 允许定时器2运行 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 553 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 T0x12: 定时器0速度控制位 0, 定时器0是传统8051速度,12分频; 1, 定时器0的速度是传统8051的12倍,不分频 T1x12: 定时器1速度控制位 0, 定时器1是传统8051速度,12分频; 1, 定时器1的速度是传统8051的12倍,不分频 如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口是12T还是1T UART_M0x6: 串口模式0的通信速度设置位。 0, 串口1模式0的速度是传统8051单片机串口的速度,12分频; 1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频 EXTRAM: 内部/外部RAM存取控制位 0, 允许使用逻辑上在片外、物理上在片内的扩展RAM; 1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM d e t i im S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位 0, 选择定时器1作为串口1(UART1)的波特率发生器; 1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为 独立定时器使用 L U C M 2. T2的时钟输出允许控制位T2CLKO C T S T2CLKO/P3.0的时钟输出控制由INT_CLKO(AUXR2)寄存器�� 中� 的 T2CLKO位控制� 。 T2CLKO的输出时钟频率由定时器2控制,不要允许相应的定时器中断,免得CPU反复进中断� 。 定时器2的���������������������������������������� 工作模式固定为模式������������������������������� 0(16��������������������������� 位自动重装载模式������������������� ),����������������� 在此模式下定时器2可用作时钟输出。 INT_CLKO (AUXR2)格式如下: INT_CLKO (AUXR2): 外部中断允许和时钟输出寄存器 SFR name Address bit INT_CLKO 8FH name AUXR2 B7 B6 B5 B4 B3 - EX4 EX3 EX2 - B2 B1 B0 T2CLKO T1CLKO T0CLKO T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO 1:允许将P3.0脚��� 配置为定时器2的时钟输出T2CLKO,������� 输出时钟频率=T2溢出率/2 如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则: T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2 T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2 如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则: 输出���� 时钟�� 频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2 0: 不允许� 将P3.0脚��� 配置为定时器2(T2)的时钟输出T2CLKO 554 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 T0CLKO : 是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO 1,���������������������� 将��������������������� P3.5����������������� /T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 若定时器/计数器T0工作在定时器模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 d e t i im 0,不允许P3.5/T1管脚被配置为定时器0的时钟输出 L T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO 1,� 将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出� 率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装载模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: U C M T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 C T S 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 若定时器/计数器T1工作在模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 0,不允许P3.4/T0管脚被配置为定时器1的时钟输出 EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只 能下降沿触发。 EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也 只能下降沿触发。 EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同 样只能下降沿触发。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 555 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 3. T2的中断允许控制位ET2 IE2 : 中断允许寄存器 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 1,允许定时器4产生中断; 0,禁止定时器4产生中断。 ET3:定时器3的中断允许位。 1,允许定时器3产生中断; 0,禁止定时器3产生中断。 ES4 : 串行口4中断允许位。 1,允许串行口4中断; 0,禁止串行口4中断 ES3 : 串行口3中断允许位。 1,允许串行口3中断; 0,禁止串行口3中断。 ET2:定时器2的中断允许位。 1,允许定时器2产生中断; 0,禁止定时器2产生中断。 C T S U C M d e t i im L ESPI:SPI中断允许位。 1,允许SPI中断; 0,禁止SPI中断。 ES2 : 串行口2中断允许位。 1,允许串行口2中断; 0,禁止串行口2中断。 556 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.5.2 定时器/计数器2作定时器及测试程序(C和汇编) 定时器/������������ 计数器��������� 2的原理框图如下: AUXR.2/T2x12=0 ÷12 T2 Interrupt SYSclk ÷1 Toggle AUXR.2/T2x12=1 T2_C/T=0 T2L (8 bits) T2_C/T=1 T2 Pin / P3.1 T2H (8 bits) T2CLKO control P3.0 T2R RL_TL2 (8 bits) RL_TH2 (8 bits) T2CLKO 定时器/计数器2的工作模式: 16位自动重装 d e t i im STC创新设计,请不要抄袭,再抄袭就很无耻了 T2R/AUXR.4为AUXR寄存器内的控制位,AUXR寄存器各位的具体功能描述���������� 见上节������� AUXR寄存器 的介绍� 。 L 当T2_C/T=0时,多路开关连接到系统时钟输出,T2对内部系统时钟计数,T2工作在定时方 式。当T2_C/T=1时,多路开关连接到外部脉冲输入P3.1/T2,即T2工作在计数方式。 U C M STC15��������������������������������������� 系列单片机的定时器2有两种计数速率:一种是������������������ 12T��������������� 模式,每����������� 12��������� 个时钟加����� 1���� ,与传统 8051�������������������������������������������� 单片机相同;另外一种是��������������������������������� 1T������������������������������� 模式,每个时钟加����������������������� 1���������������������� ,速度是传统���������������� 8051������������ 单片机的�������� 12������ 倍。���� T2�� 的速 率由特殊功能寄存器���������������������������������������������� AUXR������������������������������������������ 中的���������������������������������������� T2x12����������������������������������� 决定,如果������������������������������ T2x12=0����������������������� ,���������������������� T2�������������������� 则工作在���������������� 12T������������� 模式;如果�������� T2x12=1� , T2��������� 则工作在����� 1T��� 模式。 C T S 定时器2有�������� 2������� 个隐藏的寄存器RL_TH2和RL_TL2。RL_TH2与����������� T2H�������� 共有同一个地址,RL_TL2 与T2L共有同一个地址。当T2R=0即定时器/计数器2被禁止工作时,对T2L写入的内容会同时写 入RL_TL2,对T2H写入的内容也会同时写入RL_TH2。当T2R=1即定时器/计数器2被允许工作时, 对T2L写入内容,实际上不是写入当前寄存器T2L中,而是写入隐藏的寄存器RL_TL2中;对T2H写 入内容,实际上也不是写入当前寄存器T2H中,而是写入隐藏的寄存器RL_TH2。当读T2H和T2L 的内容时,所读的内容就是T2H和T2L的内容,而不是RL_TH2和RL_TL2的内容。 这样可以巧妙地实现16位重装载定时器。�������������������� [T2L,T2H]����������� 的溢出不仅置位被隐藏的中断请求标 志位(定时器2的中断请求标志位对用户不可见),使CPU转去执行定时器2的中断程序,而且会 自动将[RL_TL2,RL_TH2]的内容重新装入[T2L,T2H]。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 557 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.5.2.1 定时器2的16位自动重载模式的测试程序(C和汇编) 1. C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2的16位自动重装载模式举例----------------------*/ /* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" U C M typedef unsigned char BYTE; typedef unsigned int WORD; C T S //----------------------------------------------- L /* define constants */ #define FOSC 18432000L #define T38_4KHz (256-18432000/12/38400/2) //38.4KHz 0xAF; 0x8E; 0xD6; 0xD7; //(IE2.2)timer2 interrupt control bit /* define SFR */ sfr sfr sfr sfr IE2 AUXR T2H T2H = = = = sbit TEST_PIN = P0^0; //test pin //----------------------------------------------/* Timer2 interrupt routine */ void t2_isr() interrupt 12 using 1 { TEST_PIN = !TEST_PIN; } 558 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com //----------------------------------------------/* main program */ void main() { T2L = T38_4KHz; T2H = T38_4KH >> 8; AUXR |= 0x10; IE2 |= 0x04; EA = 1; while (1); STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 //set timer2 reload value //timer2 start run //enable timer2 interrupt //open global interrupt switch //loop } d e t i im 2. 汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2的16位自动重装载模式举例----------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ C T S U C M L //假定测试芯片的工作频率为18.432MHz IE2 DATA 0AFH AUXR DATA 08EH T2H DATA 0D6H T2L DATA 0D7H //中断使能寄存器2 //辅助寄存器 //定时器2高8位 //定时器2低8位 F38_4KHz //38.4KHz(1T模式下, 65536-18432000/2/38400) EQU 0FF10H //---------------------------------------- ORG 0000H LJMP MAIN ORG 0063H LJMP T2INT 南通国芯微电子有限公司 //复位入口 //中断入口 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 559 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH ORL AUXR, #04H MOV T2L, MOV T2H, ORL AUXR, #10H //定时器2开始计时 ORL IE2, //开定时器2中断 SETB EA SJMP $ #LOW F38_4KHz #HIGH F38_4KHz #04H //定时器2为1T模式 //初始化计时值 //----------------------------------------//外部中断服务程序 T2INT: CPL P1.0 CU M // ANL IE2, #0FBH // ORL IE2, #04H RETI C T S d e t i im L //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 ;---------------------------------------- 560 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.5.2.2 定时器2扩展为外部下降沿中断的的测试程序(C和汇编) ;定时器2中断(下降沿中断)的测试程序,定时器/计数器2工作在计数模式中的16位自动重装载模式 1. C程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" U C M //----------------------------------------------sfr IE2 = 0xaf; sfr AUXR = 0x8e; sfr T2H = 0xD6; sfr T2L = 0xD7; C T S sbit P10 = P1^0; //----------------------------------------------//中断服务程序 void t2int() interrupt 12 { P10 = !P10; // IE2 &= ~0x04; // IE2 |= 0x04; } void main() { AUXR AUXR T2H = AUXR |= |= T2L = |= 0x04; 0x08; 0xff; 0x10; IE2 |= 0x04; EA = 1; while (1); L //中断使能寄存器2 //辅助寄存器 //定时器2高8位 //定时器2低8位 //中断入口 //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 //定时器2为1T模式 //T2_C/T=1, T2(P3.1)引脚为时钟源 //初始化计时值 //定时器2开始计时 //开定时器2中断 } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 561 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 T2扩展为外部下降沿中断举例-----------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz IE2 DATA AUXR DATA T2H DATA T2L DATA 0AFH 08EH 0D6H 0D7H //---------------------------------------- ORG 0000H LJMP MAIN U C M L //复位入口 ORG 0063H LJMP T2INT //----------------------------------------- //中断入口 MAIN: C T S d e t i im //中断使能寄存器2 //辅助寄存器 //定时器2高8位 //定时器2低8位 ORG 0100H MOV SP, #3FH ORL ORL AUXR, #04H AUXR, #08H MOV A, MOV T2L, MOV T2H, ORL AUXR, #10H //定时器2开始计时 ORL IE2, //开定时器2中断 SETB EA #0FFH A A #04H //定时器2为1T模式 //T2_C/T=1, T2(P3.1)引脚为时钟源 //初始化计时值 SJMP $ //----------------------------------------- 562 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //外部中断服务程序 T2INT: CPL P1.0 // ANL IE2, #0FBH // ORL IE2, #04H //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 RETI ;---------------------------------------- END C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 563 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.5.3 定时器2对系统时钟或外部引脚T2的时钟输入进行可编程分频输出 定时器/������������ 计数器��������� 2的原理框图如下: ÷12 AUXR.2/T2x12=0 T2 Interrupt SYSclk ÷1 Toggle AUXR.2/T2x12=1 T2_C/T=0 T2L (8 bits) T2_C/T=1 T2 Pin / P3.1 T2H (8 bits) T2CLKO control P3.0 T2R RL_TL2 (8 bits) RL_TH2 (8 bits) T2CLKO 定时器/计数器2的工作模式: 16位自动重装 d e t i im STC创新设计,请不要抄袭,再抄袭就很无耻了 L 定时器/计数器2除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器2用 作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。 U C M 当T2CLKO/INT_CLKO.2=1时,P3.0管脚配置为定时器2的时钟输出T2CLKO。 输出时钟频率 = T2 溢出率/2 如果T2_C/T=0,定时器/计数器T2对内部系统时钟计数,则: C T S T2工作在1T模式(AUXR.2/T2x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH2, RL_TL2])/2 T2工作在12T模式(AUXR.2/T2x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH2, RL_TL2])/2 如果T2_C/T=1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则: 输出���� 时钟�� 频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2]) / 2 上面所有的式子中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 564 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 下面是定时器2对内部系统时钟或外部引脚T2/P3.1的时钟输入进行可编程时钟分频输 出的程序举例(C和汇编): 1. C程序: /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ---------------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2的可编程时钟分频输出举例------------------------*/ /* --- 研发顾问QQ:800003751------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-------------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" U C M typedef unsigned char BYTE; typedef unsigned int WORD; C T S d e t i im L #define FOSC 18432000L //----------------------------------------------sfr sfr sfr sfr AUXR INT_CLKO T2H T2L = = = = 0x8e; 0x8f; 0xD6; 0xD7; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器2高8位 //定时器2低8位 sbit T2CLKO = P3^0; //定时器2的时钟输出脚 #define F38_4KHz //#define F38_4KHz (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) //1T模式 //12T模式 //----------------------------------------------void main() { AUXR |= // AUXR &= 南通国芯微电子有限公司 0x04; ~0x04; 总机:0513-5501 2928 / 2929 / 2966 //定时器2为1T模式 //定时器2为12T模式 传真:0513-5501 2969 / 2956 / 2947 565 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com // AUXR &= AUXR |= ~0x08; 0x08; T2L T2H F38_4KHz; F38_4KHz >> 8; /初始化计时值 AUXR |= INT_CLKO = 0x10; 0x04; //定时器2开始计时 //使能定时器2的时钟输出功能 while (1); = = 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 //程序终止 } 2. 汇编程序: d e t i im L /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ---------------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2可编程时钟分频输出举例---------------------------*/ /* --- 研发顾问QQ:800003751------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-------------------------------------------------------------------------------------------------------*/ U C M C T S //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO T2H T2L DATA DATA DATA DATA T2CLKO BIT F38_4KHz //F38_4KHz EQU EQU 08EH 08FH 0D6H 0D7H P3.0 0FF10H 0FFECH //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器2高8位 //定时器2低8位 //定时器2的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下, (65536-18432000/2/12/38400) //----------------------------------------------- 566 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 ORG 0000H LJMP MAIN 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //复位入口 //定时器2为1T模式 //定时器2为12T模式 //---------------------------------------- MAIN: ORG 0100H // ORL AUXR, #04H ANL AUXR, #0FBH // ANL AUXR, #0F7H ORL AUXR, #08H MOV SP, MOV MOV ORL MOV SJMP $ #3FH //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 T2L, #LOW F38_4KHz T2H, #HIGH F38_4KHz AUXR, #10H INT_CLKO, #04H END 南通国芯微电子有限公司 CU ;---------------------------------------------- C T S M 总机:0513-5501 2928 / 2929 / 2966 d e t i im //初始化计时值 L //定时器2开始计时 //使能定时器2的时钟输出功能 //程序终止 传真:0513-5501 2969 / 2956 / 2947 567 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.5.4 定时器/计数器2作串行口波特率发生器及测试程序(C和汇编) 定时器/计数器2除可当定时器/计数器和可编程时钟输出使用外,还可作串行口波特率发 生器。串行口1优先选择定时器2作为其波特率发生器,串行口2只能选择定时器2作为其波特率 发生器,串行口3/串口4默认选择定时器2作为其波特率发生器。 串行口1如果工作在模式1(8位UART,波特率可变)和模式3(9位UART,波特率可变) 时,其可变的波特率可以由定时器T2产生。此时: 串行口1的波特率=�(定时器T��������� 2的溢出率)��� /4, 注意:此时波特率也与SMOD无关。 当T2工作在1T模式(AUXR.2/T2x12=1)时� ,定时器T����� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口1的波特率=SYSclk / ( 65536 - [[RL_TH2, RL_TL2]) / 4 ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 当T2工作在12T模式(AUXR.2/T2x12=0)时� 即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 d e t i im 串行口2的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特 率可变)。串行口2只能选择定时器T2作其波特率发生器。串行口2的波特率按如下公式计算: 串行口2的波特率=(定时器T�������� 2的溢出率)�� /4 L 当T2工作在1T模式(AUXR.2/T2x12=1)时� ,定时器����� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); U C M 即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 当T2工作在12T模式(AUXR.2/T2x12=0)时� 即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 C T S 串行口3的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特 率可变)。串行口3可以选择定时器T3作为其波特率发生器,也可以选择定时器T2作其波特率 发生器。当选择定时器2作为其波特率发生器时,串行口3的波特率按如下公式计算: 串行口3的波特率=(定时器T�������� 2的溢出率)�� /4 当T2工作在1T模式(AUXR.2/T2x12=1)时� ,定时器����� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]]) / 4 ,定时器����� 2的溢出率=SYSclk /12/(65536 - [[RL_TH2, RL_TL2]); 当T2工作在12T模式(AUXR.2/T2x12=0)时� 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [[RL_TH2, RL_TL2]) / 4 串行口4的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特 率可变)。串行口4可以选择定时器T4作为其波特率发生器,也可以选择定时器T2作其波特率 发生器。当选择定时器2作为其波特率发生器时,串行口4的波特率按如下公式计算: 串行口4的波特率=(定时器T�������� 2的溢出率)�� /4 当T2工作在1T模式(AUXR.2/T2x12=1)时� ,定时器����� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 当T2工作在12T模式(AUXR.2/T2x12=0)时� 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上面所有的式子中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 568 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.5.4.1 定时器/计数器2作串行口1波特率发生器的测试程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L #define BAUD 115200 #define #define #define #define #define U C M //系统频率 //串口波特率 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 L #define PARITYBIT EVEN_PARITY //定义校验位 sfr sfr sfr sbit //辅助寄存器 //定时器2高8位 //定时器2低8位 AUXR = T2H = T2L = 0x8e; 0xd6; 0xd7; P22 P2^2; = bit busy; void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 569 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9位可变波特率,校验位初始为0 #endif T2L T2H AUXR AUXR ES EA = = = |= = = (65536 - (FOSC/4/BAUD)); (65536 - (FOSC/4/BAUD))>>8; 0x14; 0x01; 1; 1; SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); //设置波特率重装值 //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 //使能串口1中断 d e t i im } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; P22 = RB8; } if (TI) { TI = 0; busy = 0; } } C T S U C M //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) 570 南通国芯微电子有限公司 L //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com TB8 = 0; #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; #endif } else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; 研发顾问QQ:800003751 //设置校验位为0 //设置校验位为1 //设置校验位为1 //设置校验位为0 //写数据到UART数据寄存器 d e t i im } /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } C T S 南通国芯微电子有限公司 STC — 全球最大的8051单片机设计公司 U C M L //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 571 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751----------------------------------------------------------------------- /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ */ //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY #define PARITYBIT 0 1 2 3 4 C T S AUXR EQU 08EH T2H DATA 0D6H T2L DATA 0D7H U C M EVEN_PARITY //----------------------------------------- //无校验 //奇校验 //偶校验 //标记校验 //空白校验 //----------------------------------------BUSY BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN d e t i im L //定义校验位 //辅助寄存器 //定时器2高8位 //定时器2低8位 //忙标志位 ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) 572 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com MOV SCON, #0DAH #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H #endif //------------------------------ MOV T2L, MOV T2H, MOV AUXR, ORL AUXR, SETB ES SETB EA 研发顾问QQ:800003751 //9位可变波特率,校验位初始为1 //9位可变波特率,校验位初始为0 #0D8H #0FFH #14H #01H MOV DPTR, #TESTSTR LCALL SENDSTRING //设置波特率重装值(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 //使能串口中断 //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, MOV P2.2, CHECKTI: JNB TI, CLR TI CLR BUSY ISR_EXIT: POP PSW POP ACC RETI C T S U C M d e t i im L CHECKTI SBUF RB8 C //检测RI位 //清除RI位 //P0显示串口数据 ISR_EXIT //检测TI位 //清除TI位 //清忙标志 ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC 南通国芯微电子有限公司 STC — 全球最大的8051单片机设计公司 //P2.2显示校验位 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 573 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END C T S 574 南通国芯微电子有限公司 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //设置校验位为0 //设置校验位为1 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 U C M d e t i im L //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.5.4.2 定时器/计数器2作串行口2波特率发生器的测试程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; U C M d e t i im L #define FOSC 18432000L //系统频率 #define BAUD 115200 //串口波特率 #define TM (65536 - (FOSC/4/BAUD)) #define #define #define #define #define C T S NONE_PARITY 0 ODD_PARITY 1 EVEN_PARITY 2 MARK_PARITY 3 SPACE_PARITY 4 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY sfr sfr sfr sfr sfr sfr AUXR S2CON S2BUF T2H T2L IE2 #define S2RI #define S2TI = = = = = = 0x01 0x02 南通国芯微电子有限公司 0x8e; 0x9a; 0x9b; 0xd6; 0xd7; 0xaf; //定义校验位 //辅助寄存器 //UART2 控制寄存器 //UART2 数据寄存器 //定时器2高8位 //定时器2低8位 //中断控制寄存器2 //S2CON.0 //S2CON.1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 575 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com #define S2RB8 0x04 #define S2TB8 0x08 bit 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //S2CON.2 //S2CON.3 busy; void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) S2CON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) S2CON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) S2CON = 0xd2; //9位可变波特率,校验位初始为0 #endif T2L = TM; T2H = TM>>8; AUXR = 0x14; IE2 = 0x01; EA = 1; SendString("STC15F2K60S2\r\nUart2 Test !\r\n"); while(1); } C T S /*---------------------------UART2 中断服务程序 -----------------------------*/ void Uart2() interrupt 8 using 1 { if (S2CON & S2RI) { S2CON &= ~S2RI; P0 = S2BUF; P2 = (S2CON & S2RB8); } if (S2CON & S2TI) { S2CON &= ~S2TI; busy = 0; } } L //设置波特率重装值 //T2为1T模式, 并启动定时器2 //使能串口2中断 U C M d e t i im //清除S2RI位 //P0显示串口数据 //P2.2显示校验位 //清除S2TI位 //清忙标志 /*---------------------------- 576 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) S2CON &= ~S2TB8; #elif (PARITYBIT == EVEN_PARITY) S2CON |= S2TB8; #endif } else { #if (PARITYBIT == ODD_PARITY) S2CON |= S2TB8; #elif (PARITYBIT == EVEN_PARITY) S2CON &= ~S2TB8; #endif } busy = 1; S2BUF = ACC; } C T S STC — 全球最大的8051单片机设计公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 d e t i im //设置校验位为1 L //设置校验位为0 U C M /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 南通国芯微电子有限公司 研发顾问QQ:800003751 //写数据到UART2数据寄存器 //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 577 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751----------------------------------------------------------------------- /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ */ //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 CU #define PARITYBIT EVEN_PARITY //----------------------------------------AUXR S2CON S2BUF T2H T2L IE2 EQU EQU EQU DATA DATA EQU C T S 08EH 09AH 09BH 0D6H 0D7H 0AFH S2RI EQU 01H S2TI EQU 02H S2RB8 EQU 04H S2TB8 EQU 08H //----------------------------------------BUSY BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN //无校验 //奇校验 //偶校验 //标记校验 //空白校验 M d e t i im L //定义校验位 //辅助寄存器 //UART2 控制寄存器 //UART2 数据寄存器 //定时器2高8位 //定时器2低8位 //中断控制寄存器2 //S2CON.0 //S2CON.1 //S2CON.2 //S2CON.3 //忙标志位 ORG 0043H LJMP UART2_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY 578 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV S2CON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV S2CON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV S2CON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV T2L, MOV T2H, MOV AUXR, ORL IE2, SETB EA #0D8H #0FFH #14H #01H MOV DPTR, #TESTSTR LCALL SENDSTRING //设置波特率重装值(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //使能串口2中断 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart2 Test !",0DH,0AH,0 C T S U C M ;/*---------------------------;UART2 中断服务程序 ;----------------------------*/ UART2_ISR: PUSH ACC PUSH PSW MOV A, S2CON JNB ACC.0, CHECKTI ANL S2CON, #NOT S2RI MOV P0, S2BUF ANL A, #S2RB8 MOV P2, A CHECKTI: ; MOV A, S2CON JNB ACC.1, ISR_EXIT ANL S2CON, #NOT S2TI CLR BUSY ISR_EXIT: POP PSW POP ACC RETI 南通国芯微电子有限公司 d e t i im //发送测试字符串 L ;读取UART2控制寄存器 ;检测S2RI位 ;清除S2RI位 ;P0显示串口数据 ; ;P2.2显示校验位 ;读取UART2控制寄存器 ;检测S2TI位 ;清除S2TI位 ;清忙标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 579 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) ANL S2CON, #NOT S2TB8 #elif (PARITYBIT == EVEN_PARITY) ORL S2CON, #S2TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) ORL S2CON, #S2TB8 #elif (PARITYBIT == EVEN_PARITY) ANL S2CON, #NOT S2TB8 #endif PARITYBITOK: SETB BUSY MOV S2BUF, A RET C T S 南通国芯微电子有限公司 研发顾问Tel:13922805190 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 d e t i im //设置校验位为1 //设置校验位为0 L //校验位设置完成 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 580 临时技术支持Tel:13922829991 //写数据到UART2数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 7.6 定时器/计数器3及定时器/计数器4 STC15W4K60S4��������������������������������������� 还新增了����������������������������������� 两个16位定时/计数器������������������������ :����������������������� T3��������������������� 和T4������������������ 。T3��������������� 、T4和T2一样,它们���� 的工作模 式固定为16位自动重装载模式。T3��������������������������� 和T4既����������������������� 可以当定时器/���������������� 计数器������������� 用,也可以当������� 可编程时钟输出 和串口的波特率发生器。 下面首先介绍与定时器/计数器T3和T4相关的寄存器: 7.6.1 定时器/计数器3和定时器/计数器4的相关特殊功能寄存器 与定时器/计数器3和定时器/计数器4有关的特殊功能寄存器: 位地址及其符号 符号 描述 T4T3M T4和T3的控制寄存器 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B T4H T4L 定时器4高8位寄存器 定时器4低8位寄存器 定时器3高8位 寄存器 定时器3低8位 寄存器 Interrupt Enable register D2H D3H T3H T3L IE2 地址 D4H D5H C T S AFH d e t i im MSB LSB U C M - ET4 ET3 复位值 0000 0000B 0000 0000B L 0000 0000B 0000 0000B ES4 ES3 ET2 ESPI x000 0000B ES2 1、定时器T4和T3的控制寄存器: T4T3M(地址:0xD1) T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 name T4R B6 B5 B4 B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B7 - T4R:定时器4运行控制位� 。 0����������� :不允许定时器4运行; 1:允许定时器4运行。 B6 - T4_C/T: 控制定时器4用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 581 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.4脚��� 配置为定时器4的时钟输出T4CLKO,������� 输出时钟频率=T4溢出率/2 如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则: T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2 如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 0: 不允许� 将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数) d e t i im B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 U C M L B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.6脚��� 配置为定时器3的时钟输出T3CLKO,������� 输出时钟频率=T3溢出率/2 如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则: C T S T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2 如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO 2、定时器T3和T4的中断控制寄存器:IE2 IE2 : 中断允许寄存器 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 1,允许定时器4产生中断; 0,禁止定时器4产生中断。 ET3:定时器3的中断允许位。 1,允许定时器3产生中断; 0,禁止定时器3产生中断。 582 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.6.2 定时器/计数器3的应用(STC创新设计,请不要抄袭) 定时器/计数器��������������������������������� 3�������������������������������� 既������������������������������� 可以当定时器������������������������� /计数器��������������������� 用,也可以当��������������� 可编程时钟输出�������� 和串口的波特率发 生器。 7.6.2.1 定时器/计数器3作定时器 定时器/������������ 计数器��������� 3的原理框图如下: ÷12 T4T3M.1/T3x12=0 T3 Interrupt SYSclk ÷1 Toggle T4T3M.1/T3x12=1 T3_C/T=0 T3L (8 bits) T3_C/T=1 T3 Pin / P0.7 T3H (8 bits) d e t i m control T3CLKO P0.6 T3R RL_TL3 (8 bits) Li RL_TH3 (8 bits) T3CLKO 定时器/计数器3的工作模式: 16位自动重装载 U C M STC创新设计,请不要抄袭,再抄袭就很无耻了 T3R/T4T3M.3为T4T3M寄存器内的控制位,T4T3M寄存器各位的具体功能描述��������� 见上节������ T4T3M寄 存器���� 的介绍� 。 C T S 当T3_C/T=0时,多路开关连接到系统时钟输出,T3对内部系统时钟计数,T3工作在定时方 式。当T3_C/T=1时,多路开关连接到外部脉冲输入P0.7/T3,即T3工作在计数方式。 STC15W4K60S4������������������������������������ 系列单片机的定时器3有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T3�������������������������������������������������� 的速率由特殊功能寄存器��������������������������������������� T4T3M���������������������������������� 中的�������������������������������� T3x12��������������������������� 决定,如果���������������������� T3x12=0��������������� ,�������������� T3������������ 则工作在�������� 12T����� 模式;如果 T3x12=1������������ ,����������� T3��������� 则工作在����� 1T��� 模式。 定时器3有�������� 2������� 个隐藏的寄存器RL_TH3和RL_TL3。RL_TH3与����������� T3H�������� 共有同一个地址,RL_TL3 与T3L共有同一个地址。当T3R=0即定时器/计数器3被禁止工作时,对T3L写入的内容会同时写 入RL_TL3,对T3H写入的内容也会同时写入RL_TH3。当T3R=1即定时器/计数器3被允许工作时, 对T3L写入内容,实际上不是写入当前寄存器T3L中,而是写入隐藏的寄存器RL_TL3中;对T3H写 入内容,实际上也不是写入当前寄存器T3H中,而是写入隐藏的寄存器RL_TH3。当读T3H和T3L 的内容时,所读的内容就是T3H和T3L的内容,而不是RL_TH3和RL_TL3的内容。 这样可以巧妙地实现16位重装载定时器。�������������������� [T3L,T3H]����������� 的溢出不仅置位被隐藏的中断请求标 志位(定时器3的中断请求标志位对用户不可见),使CPU转去执行定时器3中断的程序,而且会 自动将[RL_TL3,RL_TH3]的内容重新装入[T3L,T3H]。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 583 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.6.2.2 定时器/计数器3对系统时钟或外部引脚T3的时钟输入进行可编程时钟分频输出 定时器/������������ 计数器��������� 3的原理框图如下: ÷12 T4T3M.1/T3x12=0 T3 Interrupt SYSclk ÷1 Toggle T4T3M.1/T3x12=1 T3_C/T=0 T3L (8 bits) T3_C/T=1 T3 Pin / P0.7 T3H (8 bits) T3CLKO control P0.6 T3R RL_TL3 (8 bits) RL_TH3 (8 bits) T3CLKO 定时器/计数器3的工作模式: 16位自动重装载 d e t i im STC创新设计,请不要抄袭,再抄袭就很无耻了 L 定时器/计数器3除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器3用 作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。 U C M 当T3CLKO/T4T3M.0=1时,P0.6管脚配置为定时器3的时钟输出T3CLKO。 输出时钟频率 = T3 溢出率/2 如果T3_C/T=0,定时器/计数器T3对内部系统时钟计数,则: C T S T3工作在1T模式(T4T3M.1/T3x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH3, RL_TL3])/2 如果T3_C/T=1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 上面所有的式子中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 584 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.6.2.3 定时器/计数器3作串行口3的波特率发生器 定时器/计数器3除可当定时器/计数器和可编程时钟输出使用外,还可作串行口3波特率发 生器。串行口3默认选择定时器2作为其波特率发生器,但通过设置S3ST3/S3CON.6,串行口3也 可以选择定时器3作为其波特率发生器。 S3CON : 串行口3控制寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 B1 S3CON ACH name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI B0 S3RI S3ST3: 串口3(UART3)选择定时器3作波特率发生器的控制位 0, 选择定时器2作为串口3(UART3)的波特率发生器; 1, 选择定时器3作为串口3(UART3)的波特率发生器 d e t i im 串行口3的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特 率可变)。当串行口3被设置为选择定时器3作为其波特率发生器时,串行口3的波特率按如下 公式计算: 串行口3的波特率=(定时器T�������� 3的溢出率)�� /4 U C M L 当T3工作在1T模式(T4T3M.1/T3x12=1)时� ,定时器����� 3的溢出率 = SYSclk / ( 65536 - [RL_TH3,RL_TL3] ); 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4 当T3工作在12T模式(T4T3M.1/T3x12=0)时� ,定时器����� 3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]); C T S 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4 上面所有的式子中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 585 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.6.3 定时器/计数器4的应用(STC创新设计,请不要抄袭) 定时器/计数器��������������������������������� 4�������������������������������� 既������������������������������� 可以当定时器������������������������� /计数器��������������������� 用,也可以当��������������� 可编程时钟输出�������� 和串口的波特率发 生器。 7.6.3.1 定时器/计数器4作定时器 定时器/������������ 计数器��������� 4的原理框图如下: ÷12 T4T3M.5/T4x12=0 T4 Interrupt SYSclk ÷1 Toggle T4T3M.5/T4x12=1 T4_C/T=0 T4L (8 bits) T4_C/T=1 T4 Pin / P0.5 T4H (8 bits) T4R RL_TL4 (8 bits) T4CLKO d e t i im control RL_TH4 (8 bits) P0.4 T4CLKO L 定时器/计数器4的工作模式: 16位自动重装载 CU M STC创新设计,请不要抄袭,再抄袭就很无耻了 T4R/T4T3M.7为T4T3M寄存器内的控制位,T4T3M寄存器各位的具体功能描述��������� 见上节������ T4T3M寄 存器���� 的介绍� 。 C T S 当T4_C/T=0时,多路开关连接到系统时钟输出,T4对内部系统时钟计数,T4工作在定时方 式。当T4_C/T=1时,多路开关连接到外部脉冲输入P0.5/T4,即T4工作在计数方式。 STC15W4K60S4������������������������������������ 系列单片机的定时器4有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T4�������������������������������������������������� 的速率由特殊功能寄存器��������������������������������������� T4T3M���������������������������������� 中的�������������������������������� T4x12��������������������������� 决定,如果���������������������� T4x12=0��������������� ,�������������� T4������������ 则工作在�������� 12T����� 模式;如果 T4x12=1������������ ,����������� T4��������� 则工作在����� 1T��� 模式。 定时器4有�������� 2������� 个隐藏的寄存器RL_TH4和RL_TL4。RL_TH4与����������� T4H�������� 共有同一个地址,RL_TL4 与T4L共有同一个地址。当T4R=0即定时器/计数器4被禁止工作时,对T4L写入的内容会同时写 入RL_TL4,对T4H写入的内容也会同时写入RL_TH4。当T4R=1即定时器/计数器4被允许工作时, 对T4L写入内容,实际上不是写入当前寄存器T4L中,而是写入隐藏的寄存器RL_TL4中;对T4H写 入内容,实际上也不是写入当前寄存器T4H中,而是写入隐藏的寄存器RL_TH4。当读T4H和T4L 的内容时,所读的内容就是T4H和T4L的内容,而不是RL_TH4和RL_TL4的内容。 这样可以巧妙地实现16位重装载定时器。�������������������� [T4L,T4H]����������� 的溢出不仅置位被隐藏的中断请求标 志位(定时器4的中断请求标志位对用户不可见),使CPU转去执行定时器4中断的程序,而且会 自动将[RL_TL4,RL_TH4]的内容重新装入[T4L,T4H]。 586 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.6.3.2 定时器/计数器4对系统时钟或外部引脚T4的时钟输入进行可编程时钟分频输出 定时器/������������ 计数器��������� 4的原理框图如下: T4T3M.5/T4x12=0 ÷12 T4 Interrupt SYSclk ÷1 Toggle T4T3M.5/T4x12=1 T4_C/T=0 T4L (8 bits) T4_C/T=1 T4 Pin / P0.5 T4H (8 bits) T4CLKO control P0.4 T4R RL_TL4 (8 bits) RL_TH4 (8 bits) T4CLKO 定时器/计数器4的工作模式: 16位自动重装载 d e t i im STC创新设计,请不要抄袭,再抄袭就很无耻了 L 定时器/计数器4除可当定时器/计数器使用外,还可作可编程时钟输出。当定时器/计数器4用 作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复进中断。 U C M 当T4CLKO/T4T3M.4=1时,P0.4管脚配置为定时器4的时钟输出T4CLKO。 输出时钟频率 = T4 溢出率/2 如果T4_C/T=0,定时器/计数器T4对内部系统时钟计数,则: C T S T4工作在1T模式(T4T3M.5/T4x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH4, RL_TL4])/2 如果T4_C/T=1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 上面所有的式子中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 587 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.6.3.3 定时器/计数器4作串行口4的波特率发生器 定时器/计数器4除可当定时器/计数器和可编程时钟输出使用外,还可作串行口4波特率发 生器。串行口4默认选择定时器2作为其波特率发生器,但通过设置S4ST4/S4CON.6,串行口4也 可以选择定时器4作为其波特率发生器。 S4CON : 串行口4控制寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 B1 S4CON 84H name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI B0 S4RI S4ST4: 串口4(UART4)选择定时器4作波特率发生器的控制位 0, 选择定时器2作为串口4(UART4)的波特率发生器; 1, 选择定时器4作为串口4(UART4)的波特率发生器 串行口4的工作模式只有两种:模式0(8位UART,波特率可变)和模式1(9位UART,波特 率可变)。当串行口4被设置为选择定时器4作为其波特率发生器时,串行口4的波特率按如下 公式计算: 串行口4的波特率=(定时器T�������� 4的溢出率)�� /4 d e t i im L 当T4工作在1T模式(T4T3M.5/T4x12=1)时� ,定时器����� 4的溢出率 = SYSclk / ( 65536 - [RL_TH4,RL_TL4] ); U C M 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4 当T4工作在12T模式(T4T3M.5/T4x12=0)时� ,定时器����� 4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]); C T S 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4 上面所有的式子中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 588 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.7 如何将定时器T0/T1/T2/T3/T4的速度提高12倍 1、定时器T0/T1/T2的��������� 速度控制寄存器位:T0x12/T1x12/T2x12 SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 T2R T2_C/T B2 B1 B0 T2x12 EXTRAM S1ST2 定时器0����������� 、���������� 定时器1和定时器2: STC15W4K60S4系列是1T的8051单片机,为了兼容传统8051,定时器0����������� 、���������� 和定时器1和定时器2 复位后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,实现真 正的1T。 T0x12: 定时器0速度控制位 0, 定时器0是传统8051速度,12分频; 1, 定时器0的速度是传统8051的12倍,不分频 T1x12: 定时器1速度控制位 0, 定时器1是传统8051速度,12分频; 1, 定时器1的速度是传统8051的12倍,不分频 如果��������������������������������������������� 串口1������������������������������������������ 用定时器1做波特率发生器,T1x12位就可以控制UART�������������� 异步串口���������� 是12T还是1T了。 T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T 串口������ 1����� 的模式0�: 为了兼容传统��������������������� 8051,���������������� 串口�������������� 1������������� 复位后是兼容传统����� 8051� 的 STC15W4K60S4系列是1T的8051单片机,��������������������������� UART_M0x6: 串口1模式0的通信速度设置位。 0, 串口1模式0的速度是传统8051单片机串口的速度,12分频; 1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频 如果用定时器�������������������������� T1������������������������ 做波特率发生器时���������������� ,��������������� 串口������������� 1������������ 的速度由T������� 1������ 的溢出率决定 T2R: 定时器2允许控制位 0, 不允许定时器2运行; 1, 允许定时器2运行 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) EXTRAM: 内部/外部RAM存取控制位 0, 允许使用逻辑上在片外、物理上在片内的扩展RAM; 1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位 0, 选择定时器1作为串口1(UART1)的波特率发生器; 1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为 独立定时器使用 注意:有串口2的单片机,串口2永远是使用����������������������� 定时器�������������������� 2作为波特率发生器,串口2不能够选择定时 器1做波特率发生器,串口1可以选择定时器1做波特率发生器,也可以选择������ 定时器��� 2作为 波特率发生器. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 589 C T S U C M L d e t i im STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2、定时器T4和T3的速度控制寄存器位: T4x12/T3x12 T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 name T4R B6 B5 B4 B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 B7 - T4R:定时器4运行控制位� 。 0����������� :不允许定时器4运行; 1:允许定时器4运行。 B6 - T4_C/T: 控制定时器4用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数) B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.4脚��� 配置为定时器4的时钟输出T4CLKO,������� 输出时钟频率=T4溢出率/2 如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则: U C M d e t i im L T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2 C T S 如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 0: 不允许� 将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数) B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.6脚��� 配置为定时器3的时钟输出T3CLKO,������� 输出时钟频率=T3溢出率/2 如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则: T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2 如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO 590 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.8 可编程时钟输出(也可作分频器使用) STC15系列单片机最多有六路可编程时钟输出(如STC15W4K60S4系列),这六路可编程时钟输 出分别是: MCLKO/P5.4或MCLKO_2/XTAL2/P1.6, T0CLKO/P3.5, T1CLKO/P3.4, T2CLKO/P3.0, T3CLKO/P0.6, T4CLKO/P0.4. 由于单片机I/O口的对外输出速度最快不超过13.5MHz,所以可编 程时钟对外输出速度最快也不超过13.5MHz。 STC15全系列的可编程时钟输出的类型如下表所示。 可编程时钟 主时钟输出 定时器/计数器0 定时器/计数器1 定时器/计数器2 定时器/计数器3 定时器/计数器4 时钟输出 时钟输出 时钟输出 时钟输出 时钟输出 输出 (MCLKO/P5.4) 单片机型号 (T0CLKO/P3.5) (T1CLKO/P3.4) (T2CLKO/P3.0) (T3CLKO/P.0.6) (T4CLKO/P0.4) STC15F101W系列 该系列主时 钟输出在 MCLKO/P3.4 √ √ STC15F408AD系列 √ √ √ √ √ d e t i im √ STC15W201S系列 √ STC15W408AS系列 (该系列 主时钟输 出还可在 MCLKO_2/ XTAL2/P1.6) C T S √ √ STC15W408S系列 (该系列 主时钟输 出还可在 MCLKO_2/ P1.6) U C M L √ √ √ √ √ √ √ √ √ √ √ √ √ √ (该系列 主时钟输 STC15W1K16S系列 出还可在 MCLKO_2/ XTAL2/P1.6) STC15F2K60S2系列 √ √ (该系列 主时钟输 STC15W4K60S4系列 出还可在 MCLKO_2/ XTAL2/P1.6) √ √ 上表中√表示对应的系列有相应的可编程时钟输出。 特别注意:对于STC15W1K16S系列和STC15W408S单片机,若要使用T0CLKO时钟输出功能,必须将P3.5口 设置为强推挽输出模式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 591 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8.1 与可编程时钟输出有关的特殊功能寄存器 位地址及其符号 复位值 符号 描述 地址 AUXR 辅助寄存器 External Interrupt enable and Clock output register 8EH CLK_DIV (PCON2) 时钟分配器 97H MCKO_S1 MCKO_S1 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 T4T3M T4和T3的控制 寄存器 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B INT_CLKO AUXR2 8FH MSB LSB T0x12 T1x12 UART_M0x6 T2R T2_C/T - EX4 EX3 EX2 - T2x12 EXTRAM S1ST2 0000 0001B T2CLKO T1CLKO T0CLKO x000 x000B 0000 0000B 特殊功能寄存器INT_CLKO/AUXR/CLK_DIV/T4T3M的C语言声明: sfr sfr sfr sfr INT_CLKO AUXR CLK_DIV T4T3M = 0x8F; = 0x8E; = 0x97; = 0xD1; //����������� 新增加的特殊功能寄存器INT_CLKO的地址声明 //������� 特殊功能寄存器AUXR的地址声明 //������� 特殊功能寄存器CLK_DIV的地址声明 //����������� 新增加的特殊功能寄存器T4T3M的地址声明 d e t i im L 特殊功能寄存器INT_CLKO/AUXR/CLK_DIV/T4T3M的汇编语言声明: INT_CLKO AUXR CLK_DIV T4T3M EQU EQU EQU EQU 8FH 8EH 97H D1H C T S U C M ;新增加的特殊功能寄存器INT_CLKO的地址声明 ;特殊功能寄存器AUXR的地址声明 ;特殊功能寄存器CLK_DIV的地址声明 ;新增加的特殊功能寄存器T4T3M的地址声明 1. CLK_DIV (PCON2) : 时钟分频寄存器(不可位寻址) SFR Name SFR Address bit B7 B6 B5 B4 B3 B2 B1 B0 CLK_DIV 97H name MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 (PCON2) MCKO_S1 MCKO_S0 0 主时钟对外分频输出控制位 (主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟) 0 主时钟不对外输出时钟 0 1 主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1 1 0 主时钟对外输出时钟,但时钟频率被2分频��������� , 输出时钟频率 = MCLK / 2 1 1 主时钟对外输出时钟,但时钟频率被4分频��������� , 输出时钟频率 = MCLK / 4 主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟,MCLK是指主 时钟频率。 STC15W4K60S4系列单片机在MCLKO/P5.4口或MCLKO_2/XTAL2/P1.6口对外输出主时钟。 STC15系列8-pin单片机(如STC15F101W系列)在MCLKO/P3.4口对外输出主时钟,STC15系列 16-pin及其以上单片机均在MCLKO/P5.4口对外输出主时钟,且STC15W系列20-pin及其以上单片 机除可在MCLKO/P5.4口对外输出主时钟外,还可在MCLKO_2/XTAL2/P1.6口对外输出主时钟。 592 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 STC15W系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在MCLKO/P5.4口对外输出主时 钟,还是在MCLKO_2/XTAL2/P1.6口对外输出主时钟。 MCLKO_2:主时钟对外输出位置的选择位 0:在MCLKO/P5.4口对外输出主时钟; 1:在MCLKO_2/XTAL2/P1.6口对外输出主时钟; 主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。 ADRJ:ADC转换结果调整 0:ADC_RES[7:0]存放高8位ADC结果,ADC_RESL[1:0]存放低2位ADC结果 1:ADC_RES[1:0]存放高2位ADC结果,ADC_RESL[7:0]存放低8位ADC结果 Tx_Rx:串口1的中继广播方式设置 0:串口1为正常工作方式 1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD 外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时 反映RxD端口输入的电平状态。 CLKS2 0 0 0 0 1 1 1 1 U C M d e t i im L 系统时钟选择控制位 CLKS1 CLKS0 (系统时钟是指对主时钟进行分频后供给CPU、串行口、SPI、定时器、 CCP/PWM/PCA、A/D转换的实际工作时钟) 0 0 主时钟频率/1,不分频 0 1 主时钟频率/2 主时钟频率/4 1 0 1 1 主时钟频率/8 0 0 主时钟频率/16 0 1 主时钟频率/32 1 0 主时钟频率/64 主时钟频率/128 1 1 C T S 主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 593 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. INT_CLKO (AUXR2) : External Interrupt Enable and Clock Output register SFR Name SFR Address bit B7 B6 B5 B4 B3 INT_CLKO AUXR2 8FH name - EX4 EX3 EX2 - B2 B1 B0 T2CLKO T1CLKO T0CLKO B0 - T0CLKO : ����� 是否允许将P3.5/T1脚配置为定时器0(T0)的时钟输出T0CLKO 1,���������������������� 将��������������������� P3.5����������������� /T1管脚配置为定时器0的时钟输出T0CLKO,输出时钟频率=T0溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 若定时器/计数器T0工作在定时器模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: d e t i im T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 U C M 0,不允许P3.5/T1管脚被配置为定时器0的时钟输出 L B1 - T1CLKO:是否允许将P3.4/T0脚配置为定时器1(T1)的时钟输出T1CLKO 1,� 将P3.4/T0管脚配置为定时器1的时钟输出T1CLKO,输出时钟频率= T1溢出� 率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装载模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: C T S T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 若定时器/计数器T1工作在模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 0,不允许P3.4/T0管脚被配置为定时器1的时钟输出 B2 - T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO 1:允许将P3.0脚��� 配置为定时器2的时钟输出T2CLKO,������� 输出时钟频率=T2溢出率/2 如果T2_C/T =0,定时器/计数器T2是对内部系统时钟计数,则: T2工作在1T模式(AUXR.2/T2x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH2, RL_TL2])/2 T2工作在12T模式(AUXR.2/T2x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH2, RL_TL2])/2 如果T2_C/T =1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则: 输出���� 时钟�� 频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2 0: 不允许� 将P3.0脚��� 配置为定时器2(T2)的时钟输出T2CLKO 594 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 允许外部中断2(INT2) B4 - EX2 : �������� 允许外部中断3(INT3) B5 - EX3 : �������� 允许外部中断4(INT4) B6 - EX4 : �������� 3������������ 、辅助��������� 特殊功能寄存器: AUXR(地址:0x8E) AUXR : Auxiliary register(不可位寻址) SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 T2R T2_C/T B2 B1 B0 T2x12 EXTRAM S1ST2 B7 - T0x12:定时器0速度控制位� 。 0������������������������������ :定时器0速度是传统8051单片机定时器的速度,即12分频; 1:定时器0速度是传统8051单片机定时器速度的12倍,即不分频。 d e t i im B6 - T1x12:定时器1速度控制位� 。 0������������������������������ :定时器1速度是传统8051单片机定时器的速度,即12分频; 1:定时器1速度是传统8051单片机定时器速度的12倍,即不分频。 如果串口1用T1作为波特率发生器,则由T1x12位决定串口1是12T还是1T。 U C M L B5 - UART_M0x6:串口1模式0的通信速度设置位� 。 0�������������������������������� :串口1模式0的速度是传统8051单片机串口的速度,即12分频; 1:串口1模式0的速度是传统8051单片机串口速度的6倍,即2分频。 C T S B4 - T2R:定时器2运行控制位� 。 0����������� :不允许定时器2运行; 1:允许定时器2运行。 B3 - T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) B2 - T2x12: 定时器2速度控制位 0, 定时器2是传统8051单片机的速度,12分频; 1, 定时器2的速度是传统8051单片机速度的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. B1 - EXTRAM:内部/外部RAM存取控制位� 。 0������������������������� :允许使用逻辑上在片外、物理上在片内的扩展RAM; 1:禁止使用逻辑上在片外、物理上在片内的扩展RAM。 B0 - S1ST2:串口1(UART1)选择定时器2作波特率发生器的控制位� 。 0������������� :选择定时器1作为串口1(UART1)的波特率发生器; 1:选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作 为独立定时器使用。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 595 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 4����������������� 、定时器T4和T3的控制����� 寄存器: T4T3M(地址:0xD1) T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 name T4R B6 B5 B4 B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B7 - T4R:定时器4运行控制位� 。 0����������� :不允许定时器4运行; 1:允许定时器4运行。 B6 - T4_C/T: 控制定时器4用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 B4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.4脚��� 配置为定时器4的时钟输出T4CLKO,������� 输出时钟频率=T4溢出率/2 如果T4_C/T =0,定时器/计数器T4是对内部系统时钟计数,则: U C M d e t i im L T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH4, RL_TL4])/2 如果T4_C/T =1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 C T S 0: 不允许� 将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 B0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.6脚��� 配置为定时器3的时钟输出T3CLKO,������� 输出时钟频率=T3溢出率/2 如果T3_C/T =0,定时器/计数器T3是对内部系统时钟计数,则: T3工作在1T模式(T4T3M.1/T3x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH3, RL_TL3])/2 如果T3_C/T =1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO 596 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.8.2 主时钟输出及其测试程序(C和汇编) 主时钟可以是内部高精度R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。由 于单片机I/O口的对外输出速度最快不超过13.5MHz,所以可编程时钟对外输出速度最快也不 超过13.5MHz,如果频率过高,需进行分频输出。 CLK_DIV (PCON2) : 时钟分频寄存器(不可位寻址) SFR Name SFR Address bit B7 B6 B5 B4 B3 B2 B1 B0 CLK_DIV 97H name MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 (PCON2) 如何利用MCLKO/P5.4或MCLKO_2/XTAL2/P1.6管脚输出时钟 MCLKO/P5.4或MCLKO_2/XTAL2/P1.6的时钟输出控制由CLK_DIV寄存器的MCKO_S1和 MCKO_S0位控制。通过设置MCKO_S1(CLK_DIV.7)和MCKO_S0(CLK_DIV.6)可将MCLKO/ P5.4管脚配置为主时钟输出同时还可以设置该主时钟的输出频率。 d e t i im 特殊功能寄存器: CLK_DIV (地址:97H) MCKO_S1 MCKO_S0 主时钟对外分频输出控制位 (主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟) U C M L 0 0 主时钟不对外输出时钟 0 1 主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1 1 0 主时钟对外输出时钟,但时钟频率被2分频��������� , 输出时钟频率 = MCLK / 2 1 1 C T S 主时钟对外输出时钟,但时钟频率被4分频��������� , 输出时钟频率 = MCLK / 4 主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟,MCLK是指主 时钟频率。 STC15W4K60S4系列单片机在MCLKO/P5.4口或MCLKO_2/XTAL2/P1.6口对外输出主时钟。 STC15系列8-pin单片机(如STC15F101W系列)在MCLKO/P3.4口对外输出主时钟,STC15系列 16-pin及其以上单片机均在MCLKO/P5.4口对外输出主时钟,且STC15W系列20-pin及其以上单片 机除可在MCLKO/P5.4口对外输出主时钟外,还可在MCLKO_2/XTAL2/P1.6口对外输出主时钟。 STC15W系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在MCLKO/P5.4口对外输出主时 钟,还是在MCLKO_2/XTAL2/P1.6口对外输出主时钟。 MCLKO_2:主时钟对外输出位置的选择位 0:在MCLKO/P5.4口对外输出主时钟; 1:在MCLKO_2/XTAL2/P1.6口对外输出主时钟; 主时钟可以是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。 由于STC15系列5V单片机I/O口的对外输出速度最快不超过13.5MHz,所以5V单片机的对外可 编程时钟输出速度最快也不超过13.5MHz,如果频率过高,需进行分频输出。 而3.3V单片机I/O口的对外输出速度最快不超过8MHz,故3.3V单片机的对外可编程时钟输出速 度最快也不超过8MHz,如果频率过高,需进行分频输出。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 597 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 下面是主时钟输出的示例程序: 1. C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机的主时钟输出 -----------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L //----------------------------------------sfr CLK_DIV = C T S U C M 0x97; L //时钟分频寄存器 //----------------------------------------void main() { CLK_DIV // CLK_DIV // CLK_DIV while (1); = = = 0x40; 0x80; 0xC0; //0100,0000 P5.4输出频率为SYSclk //1000,0000 P5.4输出频率为SYSclk/2 //1100,0000 P5.4输出频率为SYSclk/4 //程序终止 } 598 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机的主时钟输出 -----------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz CLK_DIV DATA 097H ;----------------------------------------;interrupt vector table U C M ORG 0000H LJMP MAIN ;---------------------------------------- MAIN: // // C T S ORG 0100H MOV MOV MOV MOV SJMP SP, CLK_DIV, CLK_DIV, CLK_DIV, $ #3FH #40H #80H #C0H d e t i im //IRC时钟输出控制寄存器 L //复位入口 //initial SP //0100,0000 P5.4输出频率为SYSclk //1000,0000 P5.4输出频率为SYSclk/2 //1100,0000 P5.4输出频率为SYSclk/4 //---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 599 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8.3 定时器0对系统时钟或外部引脚T0的时钟输入进行可编程分频输出 ——及测试程序(C和汇编) 如何利用T0CLKO/P3.5管脚输出时钟 T0CLKO/P3.5管脚是否����� 输出时钟由INT_CLKO (AUXR2)寄存器的T0CLKO位控制 AUXR2.0 - T0CLKO : 1,������ 允许时钟输出 0,������ 禁止时钟输出 T0CLKO的输出时钟频率由定时器0控制,相应的定时器0需要工作在定时器的��������� 模式0(16位自动 重装载模式)或��������������������������������������� 模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中断� , 当然在特殊情况下也可允许相应的定时器中断。 新增加的特殊功能寄存器: INT_CLKO (AUXR2)(地址:0x8F) d e t i im 当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出T0CLKO。 输出时钟频率 = T0 溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装载模式)时,(如下图所示) 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: L T0工作在1T模式(AUXR.7/T0x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 U C M T0工作在12T模式(AUXR.7/T0x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 C T S RL_TH0为TH0的重装载寄存器,RL_TL0为TL0的重装载寄存器。 AUXR.7/T0x12=0 ÷12 TF0 Interrupt SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 bits) C/T=1 T0 Pin TR0 TH0 (8 bits) P3.5 GATE RL_TL0 (8 bits) INT0 T0CLKO control RL_TH0 (8 bits) 定时器/计数器0的模式 0: 16位自动重装 T0CLKO STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 当T0CLKO/INT_CLKO.0=1且定时器/计数器T0工作在定时器模式2(8位自动重装模式)时,(如下图所示) 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出���� 时钟�� 频率=(SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出���� 时钟�� 频率=(SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 600 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 AUXR.7/T0x12=0 ÷12 TF0 Interrupt SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 Bits) C/T=1 T0 Pin TR0 T0CLKO control GATE P3.5 T0CLKO TH0 (8 Bits) INT0 定时器/计数器0的模式 2: 8位自动重装 特别注意:对于STC15W1K16S系列和STC15W408S单片机,若要使用T0CLKO时钟输出功能,必须将P3.5口 设置为强推挽输出模式。 下面是定时器0对内部系统时钟或外部引脚T0/P3.4的时钟输入进行可编程时钟分频输 出的程序举例(C和汇编): 1. C程序: d e t i im L /*--------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/ /* --- 研发顾问QQ:800003751------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -----------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*---------------------------------------------------------------------------------------------*/ U C M C T S //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; #define FOSC 18432000L //----------------------------------------------sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 sbit //定时器0的时钟输出脚 T0CLKO #define F38_4KHz //#define F38_4KHz 南通国芯微电子有限公司 = P3^5; (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) 总机:0513-5501 2928 / 2929 / 2966 //1T模式 //12T模式 传真:0513-5501 2969 / 2956 / 2947 601 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com //----------------------------------------------void main() { AUXR |= 0x80; // AUXR &= ~0x80; TMOD = 0x00; TMOD &= TMOD |= ~0x04; 0x04; TL0 = TH0 = TR0 = INT_CLKO F38_4KHz; F38_4KHz >> 8; 1; = 0x01; while (1); // //设置定时器为模式0(16位自动重装载) //C/T0=0, 对内部时钟进行时钟输出 //C/T0=1, 对T0引脚的外部时钟进行时钟输出 //初始化计时值 d e t i im //使能定时器0的时钟输出功能 //程序终止 } U C M 2. 汇编程序: 研发顾问Tel:13922805190 //定时器0为1T模式 //定时器0为12T模式 临时技术支持Tel:13922829991 L /*--------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------------------------------------------------------*/ /* --- 演示STC15F2K60S2 系列单片机定时器0的可编程时钟分频输出-----*/ /* --- 研发顾问QQ:800003751------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -----------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*---------------------------------------------------------------------------------------------*/ C T S //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO DATA 08EH DATA 08FH T0CLKO BIT P3.5 F38_4KHz EQU 0FF10H //F38_4KHz EQU 0FFECH //----------------------------------------------- 602 南通国芯微电子有限公司 //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器0的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下,(65536-18432000/2/12/38400) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 ORG 0000H LJMP MAIN 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //复位入口 //定时器0为1T模式 //定时器0为12T模式 //---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH // ORL AUXR, #80H ANL AUXR, #7FH MOV TMOD, #00H //设置定时器为模式0(16位自动重装载) ANL TMOD, #0FBH ORL TMOD, #04H //C/T0=0, 对内部时钟进行时钟输出 //C/T0=1, 对T0引脚的外部时钟进行时钟输出 // MOV MOV SETB MOV TL0, #LOW F38_4KHz TH0, #HIGH F38_4KHz TR0 INT_CLKO, #01H SJMP $ C T S ;---------------------------------------------- END 南通国芯微电子有限公司 U C M d e t i im //初始化计时值 L //使能定时器0的时钟输出功能 //程序终止 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 603 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8.4 定时器1对系统时钟或外部引脚T1的时钟输入进行可编程分频输出 ——及测试程序(C和汇编) 如何利用T1CLKO/P3.4管脚输出时钟 T1CLKO/P3.4管脚是否����� 输出时钟由INT_CLKO (AUXR2)寄存器的T1CLKO位控制 AUXR2.1 - T1CLKO : 1,������ 允许时钟输出 0,������ 禁止时钟输出 T1CLKO的输出时钟频率由定时器1控制,相应的定时器1需要工作在定时器的��������� 模式0(16位自动 重装载模式)或��������������������������������������� 模式2(8位自动重装载模式),不要允许相应的定时器中断,免得CPU反复进中断� , 当然在特殊情况下也可允许相应的定时器中断。 新增加的特殊功能寄存器: INT_CLKO (AUXR2)(地址:0x8F) d e t i im 当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出T1CLKO。 输出时钟频率 = T1 溢出率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装载模式)时,(如下图所示) 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: L T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 U C M T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 RL_TH0为TH1的重装载寄存器,RL_TL1为TL0的重装载寄存器。 C T S AUXR.6/T1x12=0 ÷12 Interrupt TF1 SYSclk ÷1 AUXR.6/T1x12=1 Toggle C/T=0 TL1 (8 bits) C/T=1 T1 Pin TR1 TH1 (8 bits) T1CLKO control P3.4 GATE RL_TL1 (8 bits) INT1 RL_TH1 (8 bits) 定时器/计数器1的模式 0: 16位自动重装 T1CLKO STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 当T1CLKO/INT_CLKO.1=1且定时器/计数器T1工作在定时器模式2(8位自动重装模式)时,(如下图所示) 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 604 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 AUXR.6/T1x12=0 ÷12 TF1 Interrupt SYSclk ÷1 AUXR.6/T1x12=1 Toggle C/T=0 TL1 (8 Bits) C/T=1 T1 Pin TR1 T1CLKO control GATE P3.4 T1CLKO TH1 (8 Bits) INT1 定时器/计数器1的模式 2: 8位自动重装 下面是定时器1对内部系统时钟或外部引脚T1/P3.5的时钟输入进行可编程时钟分频输 出的程序举例(C和汇编): d e t i im 1. C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出-----------------------*/ /* --- 研发顾问QQ:800003751-------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ C T S U C M L //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L //----------------------------------------------sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 sbit T1CLKO = P3^4; //定时器1的时钟输出脚 #define F38_4KHz //#define F38_4KHz (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 //1T模式 //12T模式 传真:0513-5501 2969 / 2956 / 2947 605 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com //---------------------------------------------void main() { AUXR |= 0x40; // AUXR &= ~0x40; TMOD = 0x00; TMOD &= TMOD |= ~0x40; 0x40; TL1 = TH1 = TR1 = INT_CLKO F38_4KHz; F38_4KHz >> 8; 1; = 0x02; while (1); // //设置定时器为模式1(16位自动重装载) //C/T1=0, 对内部时钟进行时钟输出 //C/T1=1, 对T1引脚的外部时钟进行时钟输出 //初始化计时值 //程序终止 U C M C T S d e t i im //使能定时器1的时钟输出功能 } 2. 汇编程序: 研发顾问Tel:13922805190 //定时器1为1T模式 //定时器1为12T模式 临时技术支持Tel:13922829991 L /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的可编程时钟分频输出-----------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, ---------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 ----------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO DATA 08EH DATA 08FH T1CLKO BIT F38_4KHz EQU //F38_4KHz EQU 606 P3.4 0FF10H 0FFECH 南通国芯微电子有限公司 //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器1的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下, (65536-18432000/2/12/38400) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 ORG 0000H LJMP MAIN 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //复位入口 //---------------------------------------------- ORG 0100H MAIN: MOV SP, #3FH // // ORL AUXR, #40H ANL AUXR, #0BFH MOV TMOD, #00H ANL TMOD, #0BFH ORL TMOD, #40H MOV MOV SETB MOV SJMP $ //设置定时器为模式0(16位自动重装载) //C/T1=0, 对内部时钟进行时钟输出 //C/T1=1, 对T1引脚的外部时钟进行时钟输出 TL1, #LOW F38_4KHz TH1, #HIGH F38_4KHz TR1 INT_CLKO, #02H d e t i im //初始化计时值 U C M C T S //定时器1为1T模式 //定时器1为12T模式 L //使能定时器1的时钟输出功能 //程序终止 ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 607 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8.5 定时器2对系统时钟或外部引脚T2的时钟输入进行可编程分频输出 ——及测试程序(C和汇编) T2可以当定时器用,也可以当串口的波特率发生器和可编程时钟输出。 定时器2的原理框图如下: ÷12 AUXR.2/T2x12=0 T2 Interrupt SYSclk ÷1 Toggle AUXR.2/T2x12=1 T2_C/T=0 T2L (8 bits) T2_C/T=1 T2 Pin / P3.1 T2H (8 bits) T2CLKO control P3.0 T2R RL_TL2 (8 bits) RL_TH2 (8 bits) T2CLKO d e t i im 定时器/计数器2的工作模式: 16位自动重装载 L STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 如何利用T2CLKO/P3.0管脚输出时钟 AUXR2.2 - T2CLKO:是否允许将P3.0脚配置为定时器2(T2)的时钟输出T2CLKO 1: 允许将P3.0脚��� 配置为定时器2(T2)的时钟输出T2CLKO, 0: 不允许� 将P3.0脚��� 配置为定时器2(T2)的时钟输出T2CLKO C T S U C M 当T2CLKO/INT_CLKO.2=1时,P3.0管脚配置为定时器2的时钟输出T2CLKO。 输出时钟频率 = T2 溢出率/2 如果T2_C/T=0,定时器/计数器T2对内部系统时钟计数,则: T2工作在1T模式(AUXR.2/T2x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH2, RL_TL2])/2 T2工作在12T模式(AUXR.2/T2x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH2, RL_TL2])/2 如果T2_C/T=1,定时器/计数器T2是对外部脉冲输入(P3.1/T2)计数,则: 输出���� 时钟�� 频率 = (T2_Pin_CLK) / (65536-[RL_TH2, RL_TL2])/2 RL_TH2为T2H的重装载寄存器,RL_TL2为T2L的重装载寄存器。 用户在程序中如何具体设置T2CLKO/P3.0管脚输出时钟 1.对��� 定时器2寄存器T2H/T2L送16位重装载值, [T2H,T2L] = #reload_data 2.对AUXR寄存器中的T2R位置1,让������ 定时器��� 2运行 3.对AUXR2/INT_CLKO寄存器中的T2CLKO位置1,让�������� 定时器����� 2的溢出在P3.0口输出时钟� 。 注意:当定时器/计数器2用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复 进中断,在特殊情况下也可允许定时器/计数器2中断。 608 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 下面是定时器2对内部系统时钟或外部引脚T2/P3.1的时钟输入进行可编程时钟分频输 出的程序举例(C和汇编): 1. C程序: /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ---------------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2的可编程时钟分频输出举例------------------------*/ /* --- 研发顾问QQ:800003751------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可---------*/ /*-------------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #include "reg51.h" typedef unsigned char typedef unsigned int U C M BYTE; WORD; C T S d e t i im L #define FOSC 18432000L //----------------------------------------------sfr sfr sfr sfr AUXR INT_CLKO T2H T2L = = = = 0x8e; 0x8f; 0xD6; 0xD7; //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器2高8位 //定时器2低8位 sbit T2CLKO = P3^0; //定时器2的时钟输出脚 #define F38_4KHz //#define F38_4KHz (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) //1T模式 //12T模式 //----------------------------------------------void main() { AUXR |= // AUXR &= 南通国芯微电子有限公司 0x04; ~0x04; 总机:0513-5501 2928 / 2929 / 2966 //定时器2为1T模式 //定时器2为12T模式 传真:0513-5501 2969 / 2956 / 2947 609 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com // AUXR &= AUXR |= ~0x08; 0x08; T2L T2H F38_4KHz; F38_4KHz >> 8; AUXR |= INT_CLKO 0x10; = while (1); = = 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 0x04; //初始化计时值 //定时器2开始计时 //使能定时器2的时钟输出功能 //程序终止 } d e t i im 2. 汇编程序: L /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ---------------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 定时器2可编程时钟分频输出举例---------------------------*/ /* --- 研发顾问QQ:800003751------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -----------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可---------*/ /*-------------------------------------------------------------------------------------------------------*/ U C M C T S //假定测试芯片的工作频率为18.432MHz AUXR INT_CLKO T2H T2L DATA DATA DATA DATA T2CLKO BIT F38_4KHz //F38_4KHz EQU EQU 08EH 08FH 0D6H 0D7H P3.0 0FF10H 0FFECH //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器2高8位 //定时器2低8位 //定时器2的时钟输出脚 //38.4KHz(1T模式下, 65536-18432000/2/38400) //38.4KHz(12T模式下, (65536-18432000/2/12/38400) //----------------------------------------------- 610 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 ORG 0000H LJMP MAIN 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //复位入口 //定时器2为1T模式 //定时器2为12T模式 //---------------------------------------- MAIN: ORG 0100H // ORL AUXR, #04H ANL AUXR, #0FBH // ANL AUXR, #0F7H ORL AUXR, #08H MOV SP, MOV MOV ORL MOV SJMP #3FH //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 T2L, #LOW F38_4KHz T2H, #HIGH F38_4KHz AUXR, #10H INT_CLKO, #04H $ END 南通国芯微电子有限公司 CU ;---------------------------------------------- C T S M 总机:0513-5501 2928 / 2929 / 2966 d e t i im //初始化计时值 L //定时器2开始计时 //使能定时器2的时钟输出功能 //程序终止 传真:0513-5501 2969 / 2956 / 2947 611 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8.6 定时器3对系统时钟或外部引脚T3的时钟输入进行可编程分频输出 ——及测试程序(C和汇编) T3可以当定时器用,也可以当串口3的波特率发生器和可编程时钟输出。 定时器3的原理框图如下: ÷12 T4T3M.1/T3x12=0 T3 Interrupt SYSclk ÷1 Toggle T4T3M.1/T3x12=1 T3_C/T=0 T3L (8 bits) T3_C/T=1 T3 Pin / P0.7 T3H (8 bits) T3CLKO control P0.6 T3R RL_TL3 (8 bits) RL_TH3 (8 bits) T3CLKO d e t i im 定时器/计数器3的工作模式: 16位自动重装载 L STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 如何利用T3CLKO/P0.6管脚输出时钟 T4T3M.0 - T3CLKO:是否允许将P0.6脚配置为定时器3(T3)的时钟输出T3CLKO 1: 允许将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO, 0: 不允许� 将P0.6脚��� 配置为定时器3(T3)的时钟输出T3CLKO C T S U C M 当T3CLKO/T4T3M.0=1时,P0.6管脚配置为定时器3的时钟输出T3CLKO。 输出时钟频率 = T3 溢出率/2 如果T3_C/T=0,定时器/计数器T3对内部系统时钟计数,则: T3工作在1T模式(T4T3M.1/T3x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH3, RL_TL3])/2 T3工作在12T模式(T4T3M.1/T3x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH3, RL_TL3])/2 如果T3_C/T=1,定时器/计数器T3是对外部脉冲输入(P0.7/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 RL_TH3为T3H的重装载寄存器,RL_TL3为T3L的重装载寄存器。 用户在程序中如何具体设置T3CLKO/P0.6管脚输出时钟 1.对��� 定时器3寄存器T3H/T3L送16位重装载值, [T3H,T3L] = #reload_data 2.对T4T3M寄存器中的T3R位置1,让������ 定时器��� 3运行 3.对T4T3M寄存器中的T3CLKO位置1,让�������� 定时器����� 3的溢出在P0.6口输出时钟� 。 注意:当定时器/计数器3用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复 进中断,在特殊情况下也可允许定时器/计数器3中断。 612 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 7.8.7 定时器4对系统时钟或外部引脚T4的时钟输入进行可编程分频输出 ——及测试程序(C和汇编) T4可以当定时器用,也可以当串口4的波特率发生器和可编程时钟输出。 定时器4的原理框图如下: ÷12 T4T3M.5/T4x12=0 T4 Interrupt SYSclk ÷1 Toggle T4T3M.5/T4x12=1 T4_C/T=0 T4L (8 bits) T4_C/T=1 T4 Pin / P0.5 T4H (8 bits) T4CLKO control P0.4 T4R RL_TL4 (8 bits) RL_TH4 (8 bits) T4CLKO d e t i im 定时器/计数器4的工作模式: 16位自动重装载 L STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 如何利用T4CLKO/P0.4管脚输出时钟 T4T3M.4 - T4CLKO:是否允许将P0.4脚配置为定时器4(T4)的时钟输出T4CLKO 1: 允许将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO, 0: 不允许� 将P0.4脚��� 配置为定时器4(T4)的时钟输出T4CLKO C T S U C M 当T4CLKO/T4T3M.4=1时,P0.4管脚配置为定时器4的时钟输出T4CLKO。 输出时钟频率 = T4 溢出率/2 如果T4_C/T=0,定时器/计数器T4对内部系统时钟计数,则: T4工作在1T模式(T4T3M.5/T4x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH4, RL_TL4])/2 T4工作在12T模式(T4T3M.5/T4x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH4, RL_TL4])/2 如果T4_C/T=1,定时器/计数器T4是对外部脉冲输入(P0.5/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 RL_TH4为T4H的重装载寄存器,RL_TL4为T4L的重装载寄存器。 用户在程序中如何具体设置T4CLKO/P0.4管脚输出时钟 1.对��� 定时器4寄存器T4H/T4L送16位重装载值, [T4H,T4L] = #reload_data 2.对T4T3M寄存器中的T4R位置1,让������ 定时器��� 4运行 3.对T4T3M寄存器中的T4CLKO位置1,让�������� 定时器����� 4的溢出在P0.4口输出时钟� 。 注意:当定时器/计数器4用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复 进中断,在特殊情况下也可允许定时器/计数器4中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 613 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.8 掉电唤醒专用定时器及测试程序(C和汇编) ——进入掉电模式后可将单片机唤醒 ——以15L开头的单片机进入掉电模式前必须启动掉电唤醒定时器 特别声明:以15L开头的芯片如需进入"掉电模式",进入"掉电模式"前必须启动掉电唤醒定时器 ,不超过3秒要唤醒一次,以15F和15W开头的芯片则不需要 STC15系列����������������������������������� 部分��������������������������������� 单片机������������������������������ 新增了内部掉电唤醒定时器,����������������� 在进入�������������� 停机模式/��������� 掉电模式后,除了可 以通过外部中断源进行唤醒外,还可以在无外部中断源的情况下通过使能内部掉电唤醒定时器 定期唤醒CPU,使其恢复到正常工作状态。 掉电唤醒专用定时器的功耗:3V器件典型值低于3uA;5器件典型值低于5uA。 d e t i im STC15����������������������������������������� 系列单片机的内部低功耗掉电唤醒专用定时器由特殊功能寄存器WKTCH和WKTCL进行 管理和控制。 WKTCL(不可位寻址) SFR name Address WKTCL AAH bit B7 WKTCH ABH C T S B5 B4 L B3 B2 B1 B0 M name WKTCH(不可位寻址) SFR name Address CU B6 bit B7 name WKTEN B6 B5 Reset Value 1111 11110B B4 B3 B2 B1 B0 Reset Value 0111 1111B 内部掉电唤醒定时器是一个15位定时器,{WKTCH[6:0],WKTCL[7:0]}构成最长15位计数值 (32768个),定时从0开始计数。 WKTEN:内部停机唤醒定时器的使能控制位。 WKTEN=1,允许内部停机唤醒定时器; WKTEN=0,禁止内部停机唤醒定时器; STC15系列有内部低功耗掉电唤醒专用定时器的单片机除增加了特殊功能寄存器WKTCL和 WKTCH,还设计了了2个隐藏的特殊功能寄存器WKTCL_CNT和WKTCH_CNT来控制内部掉电唤醒专用 定时器。WKTCL_CNT与WKTCL共用同一个地址,WKTCH_CNT与WKTCH共用同一个地址,WKTCL_CNT 和WKTCH_CNT是隐藏的,对用户不可见。WKTCL_CNT和WKTCH_CNT实际上是作计数器使用,而 WKTCL和WKTCH实际上作比较器使用。当用户对WKTCL和WKTCH写入内容时,该内容只写入寄存器 WKTCL和WKTCH中,而不会写入WKTCL_CNT和WKTCH_CNT中。当用户读寄存器WKTCL和WKTCH中的内 容时,实际上读的是寄存器WKTCL_CNT和WKTCH_CNT中的内容,而不是WKTCL和WKTCH中的内容。 614 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 特殊功能寄存器WKTCL_CNT和WKTCH_CNT的格式如下所示: WKTCL_CNT SFR name Address bit WKTCL_CNT AAH name B7 B6 B5 B4 B3 B2 B1 B0 Reset Value 1111 1111B WKTCH_CNT SFR name Address bit B7 WKTCH_CNT ABH name - B6 B5 B4 B3 B2 B1 B0 Reset Value x111 1111B 通过软件将WKTCH寄存器中的WKTEN(Power Down Wakeup Timer Enable)位置‘1’,使 能内部掉电唤醒专用定时器����������������������������������� 。���������������������������������� 一旦MCU进入Power Down Mode,内部掉电唤醒专用定时器 [WKTCH_CNT,WKTCL_CNT]��������������������������������������������� 就从7FFFH�������������������������������������� 开始计数,直到计数到与{WKTCH[6:0],WKTCL[7:0]}寄存器所 设定的计数值相等后就��������������������������������� 让系统时钟开始振荡。如果主时钟使用的是内部系统时钟�������� (由用户在ISP 烧录程序时自行设置)���������������������������������� ,��������������������������������� MCU������������������������������ 在����������������������������� 等待64个时钟后��������������������� ,就������������������� 认为此时系统时钟从开始起振的不稳定状态 已经过渡到稳定状态,��������������������������������� 就�������������������������������� 将时钟供给CPU工作���������������������� 。如果主时钟使用的是外部晶体或时钟����� (由用户在 ISP烧录程序时自行设置)��������������������������������� ,�������������������������������� MCU����������������������������� 在���������������������������� 等待1024个时钟后������������������ ,就���������������� 认为此时系统时钟从开始起振的不稳 定状态已经过渡到稳定状态,才将时钟供给CPU工作�������������������� 。������������������� CPU获得时钟后,程序从上次����� 设置单片机 进入掉电模式语句的下一条语句开始往��������������������������������� 下执行。����������������������������� 掉电唤醒之后,���������������������� WKTCH_CNT������������� 和������������ WKTCL_CNT��� 的内容 保持不变,因此可以通过读[�������������������������������������������� WKTCH,WKTCL]�������������������������������� 的内容(实际上是读[���������������������� WKTCH_CNT,WKTCL_CNT]�� 的内 容)读出单片机在停机模式/掉电模式所等待的时间。 C T S U C M d e t i im L 这里请注意:用户在设置寄存器������������������������������������ {WKTCH[6:0],WKTCL[7:0]}的计数值��������� 时,要按照所需要的 计数次数,在计数次数的基础上减1所得的数值才是������������������������ {WKTCH,WKTCL������������ }的计数值。如用户需计数 10次,则将9写入寄存器�������������������������������������������� {WKTCH[6:0],WKTCL[7:0]}��������������������� 中。同样,如果用户需计数32768次,则应 对��������������������������������������� {WKTCH[6:0],WKTCL[7:0]}���������������� 写入7FFFH(即32767)。 内部掉电唤醒定时器有自己的内部时钟,其中掉电唤醒定时器计数一次的时间就是由该时 钟决定的。内部掉电唤醒定时器的时钟频率约为32768Hz,当然误差较大。对于16-pin及其以 上的单片机,用户可以通过读RAM区F8单元和F9单元的内容来获取内部掉电唤醒专用定时器常 温下的时钟频率。对于8-pin单片机即STC15F101W系列,用户可以通过读RAM区78单元和79单元 的内容来获取内部掉电唤醒专用定时器常温下的时钟频率。下面以16-pin及其以上的单片机为 例,介绍如何计算内部掉电唤醒专用定时器的计数时间。 假设我们用[WIRC_H,WIRC_L]来表示从RAM区F8单元和F9单元获取到的内部掉电唤醒专用 定时器常温下的时钟频率,则��������������������� 内部掉电唤醒专用定时器计数时间������ 按下式计算: 内部掉电唤醒专用定时器计数时间 = 南通国芯微电子有限公司 106 uS 数 x 16 x 计数次� [WIRC_H, WIRC_L] 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 615 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 例如:�������������������������������������������� 假设读到RAM区F8单元的内容为80H,F9单元的内容为00H,即内部掉电唤醒定时器的时 钟频率[WIRC_H,WIRC_L]为32768Hz,则�������������������� 内部掉电唤醒专用定时器最短计数时间(�� 即� 计 6 数一次的时间)为��� : 10 uS x 16 x ��1 ≈ 488.28 uS �� ������� �� 32768 内部掉电唤醒专用定时器最长计数时间约为 488.28us x 32768 = 16S 设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������ (即计数10次)且内部掉电唤醒定时器 的时钟频率[WIRC_H,WIRC_L]为32768Hz, 则从系统掉电到启动系统振荡器,所需要 等待的时间为 488.28uS x 10 ≈ 4882.8uS 设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于32767(������ 即����� 最大��� 计数� 值 = 32768 = 215)� 且 内部掉电唤醒定时器的时钟频率[WIRC_H,WIRC_L]为32768Hz, 则从系统掉电到启动 系统振荡器,所需要等待的时间为 488������������������� .28���������������� uS x 32768 = 16S d e t i im 下面给出了在读到RAM区F8单元的内容为80H,F9单元的内容为00H,即内部掉电唤醒定 时器的时钟频率[WIRC_H,WIRC_L]为32768Hz情况下,�������������� 内部掉电唤醒专用定时器��� 的�� 计数 时间� : 488.28uS x 1 = 488.28uS {WKTCH[6:0],WKTCL[7:0]} = 0, {WKTCH[6:0],WKTCL[7:0]} = 9, 488.28uS x 10 = 4.8828mS {WKTCH[6:0],WKTCL[7:0]} = 99, 488.28uS x 100 = 48.828mS {WKTCH[6:0],WKTCL[7:0]} = 999, 488.28uS x 1000 = 488.28mS {WKTCH[6:0],WKTCL[7:0]} = 4095, 488.28uS x 4096 = 2.0S {WKTCH[6:0],WKTCL[7:0]} = 32767, 488.28uS x 32768=16S C T S U C M L 再假设读到RAM区F8单元的内容为79H,F9单元的内容为18H,即内部掉电唤醒定时器的时钟频 率[WIRC_H,WIRC_L]为31000Hz,则���������������������� 内部掉电唤醒专用定时器最短计数时间(���� 即��� 计数一 6 10 uS 次的时间)为��� : x 16 x ��1 ≈ 516.13 uS �� ������� �� 31000 内部掉电唤醒专用定时器最长计数时间约为 516.13us x 32768 ≈ 16.9S 设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������ (即计数10次)且内部掉电唤醒定时器 的时钟频率[WIRC_H,WIRC_L]为31000Hz, 则从系统掉电到启动系统振荡器,所需要 等待的时间为 516.13uS x 10 ≈ 5161.3uS 下面给出了在读到RAM区F8单元的内容为79H,F9单元的内容为18H,即内部掉电唤醒定 时器的时钟频率[WIRC_H,WIRC_L]为31000Hz情况下,�������������� 内部掉电唤醒专用定时器��� 的�� 计数 时间� : 516.13uS x 1 ≈ 516.13uS {WKTCH[6:0],WKTCL[7:0]} = 0, {WKTCH[6:0],WKTCL[7:0]} = 9, 516.13uS x 10 ≈ 5.1613mS {WKTCH[6:0],WKTCL[7:0]} = 99, 516.13uS x 100 ≈ 51.613mS 616 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com {WKTCH[6:0],WKTCL[7:0]} = 999, {WKTCH[6:0],WKTCL[7:0]} = 4095, {WKTCH[6:0],WKTCL[7:0]} = 32767, 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 516.13uS x 1000 ≈ 516.13mS 516.13uS x 4096 ≈ 2.1S 516.13uS x 32768≈16.9S 又假设读到RAM区F8单元的内容为80H,F9单元的内容为E8H,即内部掉电唤醒定时器的时钟频 率[WIRC_H,WIRC_L]为33000Hz,则���������������������� 内部掉电唤醒专用定时器最短计数时间(���� 即��� 计数一 次的时间)为��� : 106 uS x 16 x ��1 ≈ 484. �� ��������� 85uS 33000 内部掉电唤醒专用定时器最长计数时间约为 484. 85us x 32768 ≈ 15.89S 设定{WKTCH[6:0],WKTCL[7:0]}寄存器的值等于9������������������ (即计数10次)且内部掉电唤醒定时器 的时钟频率[WIRC_H,WIRC_L]为33000Hz, 则从系统掉电到启动系统振荡器,所需要 等待的时间为 484. 85uS x 10 ≈ 4848.5uS d e t i im 下面给出了在读到RAM区F8单元的内容为80H,F9单元的内容为E8H,即内部掉电唤醒定 时器的时钟频率[WIRC_H,WIRC_L]为33000Hz情况下,�������������� 内部掉电唤醒专用定时器��� 的�� 计数 时间� : 484. 85uS x 1 ≈ 484. 85uS {WKTCH[6:0],WKTCL[7:0]} = 0, {WKTCH[6:0],WKTCL[7:0]} = 9, 484. 85uS x 10 ≈ 4.8485mS {WKTCH[6:0],WKTCL[7:0]} = 99, 484. 85uS x 100 ≈ 48.485mS {WKTCH[6:0],WKTCL[7:0]} = 999, 484. 85uS x 1000 ≈ 484. 85mS {WKTCH[6:0],WKTCL[7:0]} = 4095, 484. 85uS x 4096 ≈ 1.986S {WKTCH[6:0],WKTCL[7:0]} = 32767, 484. 85uS x 32768≈15.89S C T S U C M L 如果掉电唤醒定时器被允许(WKTEN=1),同时用户也将外部中断打开了。进入掉地模 式后,当外部中断提前将单片机从停机模式唤醒时,可以通过读WKTCL和WKTCH的内容(实 际是读WKTCL_CNT和WKTCH_CNT中的内容),可以读出单片机在停机模式/掉电模式等待的 时间。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 617 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 /*利用内部专用掉电唤醒定时器来唤醒掉电模式的示例程序(C程序) 1. C程序: /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------------*/ /-/* --- 演示STC15F2K60S2 系列 掉电唤醒定时器举例----------------------------------------*/ /* --- 研发顾问QQ:800003751---------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz d e t i im #include "reg51.h" #include "intrins.h" //----------------------------------------------sfr sfr WKTCL = WKTCH = 0xaa; 0xab; sbit P10 P1^0; = U C M L //掉电唤醒定时器计时低字节 //掉电唤醒定时器计时高字节 C T S //----------------------------------------------void main() { WKTCL = WKTCH = while (1) { } 49; 0x80; //设置唤醒周期为488us*(49+1) = 24.4ms //使能掉电唤醒定时器 PCON = 0x02; _nop_(); _nop_(); P10 = !P10; //进入掉电模式 //掉电唤醒后,取反测试口 } 618 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: /*---------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. ----------------------------------------------------------------------------*/ /-/* --- 演示STC15F2K60S2 系列 掉电唤醒定时器举例----------------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz WKTCL WKTCH DATA 0AAH DATA 0ABH //---------------------------------------- ORG 0000H LJMP MAIN U C M //复位入口 //----------------------------------------- C T S MAIN: ORG 0100H LOOP: MOV WKTCL, #49 MOV WKTCH, #80H MOV SP, d e t i im //掉电唤醒定时器计时低字节 //掉电唤醒定时器计时高字节 L #3FH MOV PCON, #02H NOP NOP CPL P1.0 JMP LOOP //设置唤醒周期为488us*(49+1) = 24.4ms //使能掉电唤醒定时器 //进入掉电模式 //掉电唤醒后,取反测试口 SJMP $ ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 619 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7.9 外部管脚T0/T1/T2/T3/T4如何唤醒掉电模式/停机模式 如果定时器(T0/T1/T2/T3/T4)的中断在进入掉电模式/停机模式前已经被允许,即ET0/ ET1/ET2/ET3/ET4及EA在进入掉电模式/停机模式前已经被置为1,则进入掉电模式/停机模 式后定时器仍继续工作,且定时器T0/T1/T2/T3/T4的外部管脚(T0/P3.4,T1/P3.5,T2/P3.1,T3/ P0.7,T4/P0.5)如发生由高到低的变化可以将MCU从掉电模式/停机模式唤醒。当MCU由定时器T0/ T1/T2/T3/T4的外部管脚由高到低的变化唤醒时,如果主时钟使用的是内部系统时钟����� (由用户在 ISP烧录程序时自行设置)�������������������������������� ,������������������������������� MCU���������������������������� 在��������������������������� 等待64个时钟后������������������� ,就����������������� 认为此时系统时钟从开始起振的不稳定 状态已经过渡到稳定状态,������������������������������� 就������������������������������ 将时钟供给CPU工作�������������������� ;如果主时钟使用的是外部晶体或时钟��� (由用 户在ISP烧录程序时自行设置)������������������������������� ,������������������������������ MCU��������������������������� 在�������������������������� 等待1024个时钟后���������������� ,就�������������� 认为此时系统时钟从开始起振的 不稳定状态已经过渡到稳定状态,����������������������������� 就���������������������������� 将时钟供给CPU工作������������������ ;����������������� CPU获得时钟后,程序从上次��� 设置单 片机进入掉电模式语句的下一条语句开始往������������������ 下执行��������������� ,不进入相应定时器的中断程序。 C T S 620 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 第8章 串行口通信 除STC15F101W系列无串行口功能外,其他STC15系列单片机都有串行口功能,其中STC15W4K60S4系列单片机有4个高速异步串行通信端口、STC15F2K60S2系列单片机有2个高速异 步串行通信端口、STC15W1K16S/STC15W408S/STC15W408AS/STC15W201S/STC15F408AD 系列单片机有1个高速异步串行通信端口,如下表所示: 下表总结了STC15系列单片机内置了高速异步串行通信端口的单片机型号: 高速异步串行 通信端口 串行口1 串行口2 串行口3 串行口4 STC15W4K60S4系列 √ √ √ √ STC15F2K60S2系列 √ √ STC15W1K16S系列 √ STC15W408S系列 √ STC15W408AS系列 √ STC15W201S系列 √ STC15F408AD系列 √ 单片机型号 STC15F101W系列 C T S U C M d e t i im L 上表中√表示对应的系列有相应的串行口。 现以STC15W4K60S4系列单片机为例,介绍STC15系列单片机的串行通信端口。 STC15W4K60S4系列单片机具有4个采用UART(Universal Asychronous Receiver/Transmitter) 工作方式的全双工异步串行通信接口(串口1、串口2、串口3和串口4)。每个串行口由2个数据 缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器等组成。每个串行口的数 据缓冲器由������������������������������������ 2����������������������������������� 个互相独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只 能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。 串行口1的两个缓冲器共用的地址码是���������������������������� 99H������������������������� ;串行口2的两个缓冲器共用的地址码是������� 9BH���� ;串行口 3的两个缓冲器共用的地址码是������������������������������� ADH���������������������������� ;串行口4的两个缓冲器共用的地址码是���������� 85H������� 。串行口1的两 个缓冲器统称串行通信特殊功能寄存器�������������������������� SBUF���������������������� ;串行口2的两个缓冲器统称串行通信特殊功能寄 存器��������������������������������������������� S2BUF���������������������������������������� ;串行口3的两个缓冲器统称串行通信特殊功能寄存器���������������� S3BUF����������� ;串行口4的两个缓冲器 统称串行通信特殊功能寄存器������ S4BUF� 。 STC15W4K60S4系列单片机的串行口1有4种工作方式,其中两种方式的波特率是可变的,另 两种是固定的,以供不同应用场合选用。串行口2/串行口3/串行口4都只有两种工作方式,这 两种方式的波特率都是可变的。用户可用软件设置不同的波特率和选择不同的工作方式。主机 可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。 STC15W4K60S4系列单片机串行口1对应的硬件部分是TxD和RxD。串行口1可以在3组管 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 621 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 脚之间进行切换。通过设置特殊功能寄存器AUXR1/P_SW1中的位S1_S1/AUXR1.7和S1_S0/ P_SW1.6,可以将串行口1从[RxD/P3.0,TxD/P3.1]切换到[RxD_2/P3.6,TxD_2/P3.7],还可以切换 到[RxD_3/P1.6/XTAL2,TxD_3/P1.7/XTAL1]。注意,当串行口1在[RxD_2/P1.6, TxD_2/P1.7]时, 系统要使用内部时钟。串口1建议放在[P3.6/RxD_2,P3.7/TxD_2]或[P1.6/RxD_3/XTAL2,P1.7/ TxD_3/XTAL1]上。 STC15W4K60S4系列单片机串行口2对应的硬件部分是TxD2和RxD2。串行口2可以在2组 管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S2_S/P_SW2.0,可以将串行口2从 [RxD2/P1.0,TxD2/P1.1]切换到[RxD2_2/P4.6,TxD2_2/P4.7]。 STC15W4K60S4系列单片机串行口3对应的硬件部分是TxD3和RxD3。串行口3可以在2组 管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S3_S/P_SW2.1,可以将串行口3从 [RxD3/P0.0,TxD3/P0.1]切换到[RxD3_2/P5.0,TxD3_2/P5.1]。 d e t i im STC15W4K60S4系列单片机串行口4对应的硬件部分是TxD4和RxD4。串行口4可以在2组 管脚之间进行切换。通过设置特殊功能寄存器P_SW2中的位S4_S/P_SW2.2,可以将串行口4从 [RxD4/P0.2,TxD4/P0.3]切换到[RxD4_2/P5.2,TxD4_2/P5.3]。 L STC15W4K60S4系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多 个并行I/O口,或作串���������������� —��������������� 并转换,或用于扩展串行外设等。 C T S 622 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.1 串行口1的相关寄存器 符号 描述 AUXR 定时器2高8位 寄存器 定时器2低8位 寄存器 辅助寄存器 SCON Serial Control T2H T2L 位地址及符号 地址 LSB 复位值 D6H 0000 0000B D7H 0000 0000B 8EH T0x12 T1x12 UART_M0x6 T2R T2_C/T 98H SM0/FE SBUF Serial Buffer 99H PCON Power Control 87H IE Interrupt Enable A8H IP Interrupt Priority Low SM1 SM2 REN TB8 POF GF1 ES ET1 T2x12 EXTRAM S1ST2 RB8 TI RI GF0 PD IDL EX1 ET0 0000 0001B 0000 0000B xxxx xxxxB SMOD SMOD0 LVDF EA ELVD EADC d e t i im B8H PPCA PLVD PADC PS SADEN Slave Address Mask B9H SADDR Slave Address A9H AUXR1 P_SW1 CLK_DIV PCON2 辅助寄存器1 A2H 时钟分频寄存器 MSB PT1 PX1 L S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 U C M PT0 0 0011 0000B EX0 0000 0000B PX0 0000 0000B 0000 0000B 0000 0000B DPS 0000 0000B 97H MCKO_S1 MCKO_S1 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000 0000B C T S 1. 串行口1的控制寄存器SCON和PCON STC15系列单片机的串行口1设有两个控制寄存器:串行控制寄存器SCON和波特率选择特 殊功能寄存器PCON。 串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下: SCON : 串行控制寄存器 (可位寻址) SFR name SCON Address 98H bit name B7 SM0/FE B6 SM1 B5 SM2 B4 REN B3 TB8 B2 RB8 B1 TI B0 RI SM0/FE:当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个 无效停止位时,通过UART接收器设置该位。它必须由软件清零。 当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作 方式,如下表所示。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 623 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 其中SM0、SM1按下列组合确定串行口1的工作方式: SM0 SM1 工作方式 0 0 0 1 方式0 方式1 功能说明 波特率 同步移位串行方 式:移位寄存器 当UART_M0x6 = 0时,波特率是SYSclk/12, 当UART_M0x6 = 1时,波特率是SYSclk / 2 8位UART, 波特率可变 串行口1用定时器1作为其波特率发生器且定时器1工作于模式 0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器 时,波特率=�(定时器1的溢出率或定时器T�������� 2的溢出率)�� /4. 注意:此时波特率与SMOD无关。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�) 1 1 0 1 方式2 方式3 9位UART 9位UART, 波特率可变 (2 SMOD / 64) x SYSclk系统工作时钟频率 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器 时,波特率=�(定时器1的溢出率或定时器T�������� 2的溢出率)�� /4. 注意:此时波特率与SMOD无关。 d e t i im L 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�) U C M 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且AUXR.6/T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ; 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且AUXR.6/T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1]) C T S 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk/12/( 256 - TH1); 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 定时器T2的溢出率 = SYSclk / 12/ ( 65536 - [RL_TH2,RL_TL2] ); 当AUXR.2/T2x12 = 0时,��� 当AUXR.2/T2x12 = 1时,��� 定时器T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ); SM2:允许方式2或方式3多机通信控制位。 在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时 可以利用接收到的第9位(即RB8)来筛选地址帧:若RB8=1,说明该帧是地址帧,地址信 息可以进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较;若RB8=0, 说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位 为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的 信息进入SBUF,并使RI=1,此时RB8通常为校验位. 方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2 应为0。 REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动 串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。 624 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数 据的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0和方式1中,该位不用. RB8: 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用RB8(置SM2=0). 方式1中也不用RB8(置SM2=0, RB8是接收到的停止位)。 TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位, 即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中, 则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。 RI: 接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1, 向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收 到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须 由软件清零。 d e t i im SCON的所有位可通过整机复位信号复位为全� “ 0”� 。 SCON的字节地址为98H,可位寻 址,各位地址为98H~~9FH,可用软件实现位设置。 L 串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理; 当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以��� “�� 或逻 辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在 中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬 件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。 C T S U C M 电源控制寄存器PCON中的SMOD/PCON.7用于设置方式1、方式2、方式3的波特率是否加 倍。 电源控制寄存器PCON格式如下: PCON : 电源控制寄存器 (不可位寻址) SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0 PCON 87H name SMOD SMOD0 LVDF POF GF1 GF0 PD IDL SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波 特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。 SMOD0:帧错误检测有效控制位。当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误 检测)功能;当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指 定串行口的工作方式。复位时SMOD0=0 PCON中的其他位都与串行口1无关,在此不作介绍。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 625 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 串行口数据缓冲寄存器SBUF STC15系列单片机的串行口1缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF 的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个 不同的寄存器,1个是只写寄存器,1个是只读寄存器。 串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号(MOV SBUF,A) 的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的 输出位。根据不同的工作方式会自动将� “1”� 或TB8的值装入移位寄存器的第9位,并进行发送. 串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为 9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入 SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变. 由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中 将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。 3. 辅助寄存器AUXR U C M 辅助寄存器AUXR的格式及各位含义如下: AUXR : 辅助寄存器 (不可位寻址) SFR name Address AUXR 8EH bit C T S B7 B6 B5 name T0x12 T1x12 UART_M0x6 d e t i im L B4 B3 B2 T2R T2_C/T T2x12 B1 B0 EXTRAM S1ST2 T0x12: 定时器0速度控制位 0, 定时器0是传统8051速度,12分频; 1, 定时器0的速度是传统8051的12倍,不分频 T1x12: 定时器1速度控制位 0, 定时器1是传统8051速度,12分频; 1, 定时器1的速度是传统8051的12倍,不分频 如果UART1/串口1用T1作为波特率发生器,则由T1x12决定UART1/串口是12T还是1T UART_M0x6: 串口模式0的通信速度设置位。 0, 串口1模式0的速度是传统8051单片机串口的速度,12分频; 1, 串口1模式0的速度是传统8051单片机串口速度的6倍,2分频 T2R: 定时器2允许控制位 0, 不允许定时器2运行; 1, 允许定时器2运行 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) 626 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. EXTRAM: 内部/外部RAM存取控制位 0, 允许使用逻辑上在片外、物理上在片内的扩展RAM; 1, 禁止使用逻辑上在片外、物理上在片内的扩展RAM S1ST2: 串口1(UART1)选择定时器2作波特率发生器的控制位 0, 选择定时器1作为串口1(UART1)的波特率发生器; 1, 选择定时器2作为串口1(UART1)的波特率发生器,此时定时器1得到释放,可以作为 独立定时器使用 串口1可以选择定时器1做波特率发生器,也可以选择������������� 定时器���������� 2作为波特率发生器� 。当设置 AUXR寄存器中的S1ST2位(串������������������������������ 行����������������������������� 口波特率选择位)为1时,串���������������� 行��������������� 口1选择����������� 定时器�������� 2作为波特率发生 器,此时定时器1可以释放出来作为定时器/计数器/时钟输出使用. d e t i im L 对于���������������������������������������� STC15����������������������������������� 系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定时 器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1 作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为 其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波 特率发生器。 C T S U C M 4. 定时器2的寄存器T2H, T2L 定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用 于保存重装时间常数。 注意:对于��������������������������������������� STC15���������������������������������� 系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定 时器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器 1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为 其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波 特率发生器。 5. 从机地址控制寄存器SADEN和SADDR 为了方便多机通信,STC15系列单片机设置了从机地址控制寄存器SADEN和SADDR。其中 SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为 A9H,复位值为00H)。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 627 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6. 与串行口1中断相关的寄存器位ES和PS 串行口中断允许位ES位于中断允许寄存器IE中,中断允许寄存器的格式如下: IE : 中断允许寄存器 (可位寻址) SFR name Address bit B7 IE A8H name EA B6 B5 ELVD EADC B4 B3 B2 B1 B0 ES ET1 EX1 ET0 EX0 EA : CPU的总中断允许控制位 EA=1,CPU开放中断, EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的 中断允许控制位控制。 ES : 串行口中断允许位 ES=1,允许串行口中断, ES=0,禁止串行口中断。 IP : 中断优先级控制寄存器低 (可位寻址) SFR name IP Address B8H bit name B7 PPCA B6 PLVD B5 PADC U C M d e t i im L B4 PS B3 PT1 B2 PX1 B1 PT0 B0 PX0 PS: 串行口1中断优先级控制位。 当PS=0时,串行口1中断为最低优先级中断(优先级0) 当PS=1时,串行口1中断为最高优先级中断(优先级1) C T S 7. 将串口1进行切换的寄存器AUXR1(P_SW1) Mnemonic Add Name AUXR1 Auxiliary A2H P_SW1 register 1 B7 B6 S1_S1 S1_S0 B5 B4 B3 B2 CCP_S1 CCP_S0 SPI_S1 SPI_S0 B1 B0 Reset Value 0 DPS 0000,0000 串口1/������������� S1����������� 可在3个地方切换,由 �������� S1_S0 及 ������������ S1_S1 控制位来选择 S1_S1 S1_S0 串口1/S1可在P1/P3之间来回切换 0 0 串口1/S1在[P3.0/RxD,P3.1/TxD] 0 1 串口1/S1在[P3.6/RxD_2,P3.7/TxD_2] 串口1/S1在[P1.6/RxD_3/XTAL2,P1.7/TxD_3/XTAL1] 1 0 串口1在P1口时要使用内部时钟 1 1 无效 串口1建议放在[P3.6/RxD_2,P3.7/TxD_2]或[P1.6/RxD_3/XTAL2,P1.7/TxD_3/XTAL1]上。 628 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 CCP����������������������������������� 可在3个地方切换,由 CCP_S1 / CCP_S0 两个控制位来选择 CCP_S1 CCP_S0 CCP可在P1/P2/P3之间来回切换 0 0 CCP在[P1.2/ECI,P1.1/CCP0,P1.0/CCP1,P3.7/CCP2] 0 1 CCP在[P3.4/ECI_2,P3.5/CCP0_2,P3.6/CCP1_2,P3.7/CCP2_2] 1 0 CCP在[P2.4/ECI_3,P2.5/CCP0_3,P2.6/CCP1_3,P2.7/CCP2_3] 1 1 无效 SPI����������� 可在3个地方切换,由 ��������� SPI_S1 / ��������������� SPI_S0 两个控制位来选择 SPI_S1 SPI_S0 SPI可在P1/P2/P4之间来回切换 0 0 SPI在[P1.2/SS,P1.3/MOSI,P1.4/MISO,P1.5/SCLK] 0 1 SPI在[P2.4/SS_2,P2.3/MOSI_2,P2.2/MISO_2,P2.1/SCLK_2] 1 0 SPI在[P5.4/SS_3,P4.0/MOSI_3,P4.1/MISO_3,P4.3/SCLK_3] 1 1 无效 d e t i im 8. 串口1的中继广播方式设置位——Tx_Rx/CLK_DIV.4 Mnemonic Add Name B7 B6 B5 B4 B3 B2 B1 B0 Reset Value CLK_DIV 时钟分频 97H MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000,0000 (PCON2) 寄存器 U C M L Tx_Rx:串口1的中继广播方式设置 0:串口1为正常工作方式 1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD 外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时 反映RxD端口输入的电平状态。 串口1的RxD管脚和TxD管脚可以在3组不同管脚之间进行切换:[RxD/P3.0, TxD/P3.1]; [RxD_2/P3.6, TxD_2/P3.7]; [RxD_3/P1.6, TxD_3/P1.7]. C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 629 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.2 串行口1工作模式 STC15系列单片机的串行通信接口有4种工作模式,可通过软件编程对SCON中的SM0、 SM1的设置进行选择。其中模式1、模式2和模式3为异步通信,每个发送和接收的字符都带有1 个启动位和1个停止位。在模式0中,串行口被作为1个简单的移位寄存器使用。 8.2.1 串行口1工作模式0:同步移位寄存器(建议初学者不学) 在模式0状态,串行通信接口工作在同步移位寄存器模式,当������������� 串行口模式0的通信速度设置 位UART_M0x6/AUXR.5 = 0时,其波特率固定为SYSclk/12。当�������������� 串行口模式0的通信速度设置� 位 UART_M0x6/AUXR.5 = 1时,其波特率固定为SYSclk/2。串行口数据由RxD/P3.0端输入,同步 移位脉冲(SHIFTCLOCK)由TxD/P3.1输出,发送、接收的是8位数据,低位在先。 d e t i im 模式0的发送过程:当主机执行将数据写入发送缓冲器SBUF指令时启动发送,串行口即将 8位数据以SYSclk/12或SYSclk/2(由UART_M0x6/AUXR.5确定是12分频还是2分频)的波特率从 RxD管脚输出(从低位到高位),发送完中断标志TI置"1",TxD管脚输出同步移位脉冲(SHIFTCLOCK)。波形如图8-1中“发送”所示。 U C M L 当写信号有效后,相隔一个时钟,发送控制端SEND有效(高电平),允许RxD发送数据, 同时允许TxD输出同步移位脉冲。一帧(8位)数据发送完毕时,各控制端均恢复原状态,只有 TI保持高电平,呈中断申请状态。在再次发送数据前,必须用软件将TI清0。 C T S 模式0接收过程:模式0接收时,复位接收中断请求标志RI,即RI=0,置位允许接收控制 位REN=1时启动串行模式0接收过程。启动接收过程后,RxD为串行输入端,TxD为同步脉冲 输出端。串行接收的波特率为SYSclk/12或SYSclk/2(由UART_M0x6/AUXR.5确定是12分频还是 2分频)。其时序图如图8-1中“接收”所示。 当接收完成一帧数据(8位)后,控制信号复位,中断标志RI被置"1",呈中断申请状态。当 再次接收时,必须通过软件将RI清0 工作于模式0时,必须清0多机通信控制位SM2,使不影响TB8位和RB8位。由于波特率固 定为SYSclk/12或SYSclk/2,无需定时器提供,直接由单片机的时钟作为同步移位脉冲。 串行口工作模式0的示意图如图8-1所示 由示意图中可见,由TX和RX控制单元分别产生中断请求信号并置位TI=1或RI =1,经�� “� 或 门������������������������� ”������������������������ 送主机请求中断,所以主机响应中断后必须软件判别是TI还是RI请求中断,必须软件清0 中断请求标志位TI或RI。 630 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 INTERNAL BUS WRITE TO SBUF DS Q CL RxD OUTPUT FUNCTION SBUF SHIFT ZERO DETECTOR START SYSclk/12 0 SYSclk/2 1 SHIFT TX CONTROL TX CLOCK TI RX CLOCK RI SEND SERIAL PORT INTERRUPT AUXR.5(UART_M0x6) REN RI START RECEIVE d e t i im RX CONTROL SHIFT 1 1 1 1 1 1 1 0 INPUT SHIFT REG. LOAD SBUF TxD OUTPUT FUNCTION SHIFT CLOCK SHIFT U C M L RxD INPUT FUNCTION SBUF C T S READ SBUF INTERNAL BUS WRITE TO SBUF SEND SHIFT RXD(DATA OUT) TRANSMIT D0 D1 D2 D3 D4 D5 D6 D7 TXD(SHIFT CLOCK) TI WRITE TO SCON(CLEAR RI) RI RECEIVE RECEIVE SHIFT RXD(DATA IN) D0 D1 D2 D3 D4 D5 D6 D7 TXD(SHIFT CLOCK) 图8-1 串行口1模式0功能结构及时序示意图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 631 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.2.2 串行口1工作模式1:8位UART,波特率可变 当软件设置SCON的SM0、SM1为� “01”���������� 时,串行口1则以模式1工作。此模式为8位UART 格式,一帧信息为10位:1位起始位,8位数据位(低位在先)和1位停止位。波特率可变,即可 根据需要进行设置。TxD/P3.1为发送信息,RxD/P3.0为接收端接收信息,串行口为全双工接受 /发送串行口。 图8-2为串行模式1的功能结构示意图及接收/发送时序图 模式1的发送过程:串行通信模式发送时,数据由串行发送端TxD输出。当主机执行一条 写� “SBUF“���������������� 的指令就启动串行通信的发送,写� “SBUF”����� 信号还把� “1”��������� 装入发送移位寄存器 的第9位,并通知TX控制单元开始发送。发送各位的定时是由16分频计数器同步。 移位寄存器将数据不断右移送TxD端口发送,在数据的左边不断移入� “ 0”����� 作补充。当 数据的最高位移到移位寄存器的输出位置,紧跟其后的是第9位� “1”���������� ,在它的左边各位全为 “0”��������� ,这个状态条件,使TX控制单元作最后一次移位输出,然后使允许发送信号� “SEND” 失效,完成一帧信息的发送,并置位中断请求位TI,即TI=1,向主机请求中断处理。 d e t i im 模式1的接收过程:当软件置位接收允许标志位REN,即REN=1时,接收器便以选定波特 率的16分频的速率采样串行接收端口RxD,当检测到RxD端口从� “1”�� →� “0”������� 的负跳变时就启 动接收器准备接收数据,并立即复位16分频计数器,将1FFH植装入移位寄存器。复位16分频 计数器是使它与输入位时间同步。 U C M L 16分频计数器的16个状态是将1波特率(每位接收时间)均为16等份,在每位时间的7、 8、9状态由检测器对RxD端口进行采样,所接收的值是这次采样直经���������� “��������� 三中取二����� ”���� 的值,即3 次采样至少2次相同的值,以此消除干扰影响,提高可靠性。在起始位,如果接收到的值不为 “0”�������������������������� (低电平),则起始位无效,复位接收电路,并重新检测�"1"�� →�"0"��������� 的跳变。如果接收到 的起始位有效,则将它输入移位寄存器,并接收本帧的其余信息。 C T S 接收的数据从接收移位寄存器的右边移入,已装入的1FFH向左边移出,当起始位�"0"�� 移到 移位寄存器的最左边时,使RX控制器作最后一次移位,完成一帧的接收。若同时满足以下两 个条件: ·RI=0; ·SM2=0或接收到的停止位为1。 则接收到的数据有效,实现装载入SBUF,停止位进入RB8,置位RI,即RI=1,向主机请 求中断,若上述两条件不能同时满足,则接收到的数据作废并丢失,无论条件满足与否,接收 器重又检测RxD端口上的�"1"�� →� "0"�������������������������� 的跳变,继续下一帧的接收。接收有效,在响应中断后,必 须由软件清0,即RI=0。通常情况下,串行通信工作于模式1时,SM2设置为�"0"� 。 632 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 INTERNAL BUS Timer 1 Overflow TB8 WRITE TO SBUF T 1 工作在 8 位重装模式 T1工作在16 位重装模式 研发顾问QQ:800003751 DS Q CL ÷2 TxD ZERO DETECTOR SMOD =1 SMOD =0 SBUF SHIFT START DATA TX CONTROL ÷4 ÷4 TX CLOCK TI SEND RI LOAD SBUF SERIAL PORT INTERRUPT Timer 2 Overflow ÷4 SAMPLE RX CLOCK START 1-TO-0 TRANSITION DETECTOR d e t i im RX CONTROL SHIFT 1FFH L BIT DETECTOR U C M RxD INPUT SHIFT REG. (9 BITS) SHIFT LOAD SBUF C T S SBUF READ SBUF INTERNAL BUS TX CLOCK WRITE TO SBUF SEND TRANSMIT DATA SHIFT D0 TXD START BIT TI D1 D2 D3 D4 D5 D6 D7 START BIT D0 D1 D2 D3 D4 D5 STOP BIT RX CLOCK RXD D6 D7 RECEIVE BIT DETECTOR SAMPLE TIMES SHIFT STOP BIT RI 图8-2 串行口模式1功能结构示意图及接收/发送时序图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 633 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 串行通信模式1的波特率是可变的,可变的波特率由定时器/计数器1或定时器2产生,优先 选择定时器2产生波特率。 STC创新设计,请不要抄 袭,再抄袭就很无耻了 当串行口1用定时器2作为其波特率发生器时, 串行口1的波特率=�(定时器T��������� 2的溢出率)��� /4. (注意:此时波特率也与SMOD无关。) ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ); 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2,RL_TL2]); 即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - RL_TH2,RL_TL2]) / 4 RL_TH2是T2H的自动重装载寄存器,RL_TL2是T2L的自动重装载寄存器。 d e t i im 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时, 串行口1的波特率=�(定时器1的溢出率���� )��� /4. (注意:此时波特率与SMOD无关。) L 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ; U C M 即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) / 4 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1]) C T S 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1,RL_TL1]) / 4 RL_TH1是TH1的自动重装载寄存器,RL_TL1是TL1的自动重装载寄存器。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时, 串行口1的波特率=��� ( 2SMOD/32 )×(定时器1的溢出率�� )�. 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk / 12 / ( 256 - TH1); 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1) 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1) 634 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.2.3 串行口1工作模式2:9位UART,波特率固定(建议不学习) 当SM0、SM1两位为10时,串行口1工作在模式2。串行口1工作模式2为9位数据异步通信 UART模式,其一帧的信息由11位组成:1位起始位,8位数据位(低位在先),1位可编程位(第 9位数据)和1位停止位。发送时可编程位(第9位数据)由SCON中的TB8提供,可软件设置为1或 0,或者可将PSW中的奇/偶校验位P值装入TB8(TB8既可作为多机通信中的地址数据标志位, 又可作为数据的奇偶校验位)。接收时第9位数据装入SCON的RB8。TxD/P3.1为发送端口, RxD/P3.0为接收端口,以全双工模式进行接收/发送。 模式2的波特率为: 串行通信模式2波特率=2SMOD/64×(SYSclk系统工作时钟频率) 上述波特率可通过软件对PCON中的SMOD位进行设置,当SMOD=1时,选择SYSclk/32; 当SMOD=0时,选择SYSclk/64,故而称SMOD为波特率加倍位。可见,模式2的波特率基本上 d e t i im 是固定的。 图8-3为串行通信模式2的功能结构示意图及其接收/发送时序图。 L 由图8-3可知,模式2和模式1相比,除波特率发生源略有不同,发送时由TB8提供给移位寄 存器第9数据位不同外,其余功能结构均基本相同,其接收/发送操作过程及时序也基本相同。 U C M 当接收器接收完一帧信息后必须同时满足下列条件: ·RI=0 ·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。 C T S 当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位 RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无 效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变 信息,接收下一帧的输入信息。 在模式2中,接收到的停止位与SBUF、RB8和RI无关。 通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 635 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 INTERNAL BUS TB8 WRITE TO SBUF DS Q CL SBUF TxD ZERO DETECTOR SYSclk/2 STOP BIT START GEN. SHIFT DATA TX CONTROL MODE 2 ÷16 TX CLOCK SEND TI SERIAL PORT INTERRUPT SMOD=1 ÷2 SMOD=0 ÷16 SAMPLE (SMOD IS PCON.7) 1-TO-0 TRANSITION DETECTOR START d e t i im RX RI CLOCK LOAD SBUF RX CONTROL SHIFT L BIT DETECTOR RxD C T S CU 1FFH INPUT SHIFT REG. (9 BITS) M SHIFT LOAD SBUF SBUF READ SBUF INTERNAL BUS TX CLOCK WRITE TO SBUF SEND TRANSMIT DATA SHIFT D0 TXD START BIT TI D1 D2 D3 D4 D5 D6 D7 TB8 STOP BIT START BIT D0 D1 D2 D3 D4 D5 D6 D7 STOP BIT GEN RX CLOCK RXD RECEIVE RB8 STOP BIT BIT DETECTOR SAMPLE TIMES SHIFT RI 图8-3 串行口模式2功能结构示意图及接收/发送时序图 636 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.2.4 串行口1工作模式3:9位UART,波特率可变 当SM0、SM1两位为11时,串行口1工作在模式3。������ 串行通信�� 模式3为9位数据异步通信 UART模式�������� ,������� 其一帧的信息由11位组成:1位起始位,8位数据位(低位在先),1位可编程位(第 9位数据)和1位停止位。发送时可编程位(第9位数据)由SCON中的TB8提供,可软件设置为1或 0,或者可将PSW中的奇/偶校验位P值装入TB8(TB8既可作为多机通信中的地址数据标志位, 又可作为数据的奇偶校验位)。接收时第9位数据装入SCON的RB8。TxD/P3.1为发送端口, RxD/P3.0为接收端口,以全双工模式进行接收/发送。 图8-4为串行口工作模式3的功能结构示意图及其接收/发送时序图。 由图8-4可知,模式3和模式1相比,除发送时由TB8提供给移位寄存器第9数据位不同外, 其余功能结构均基本相同,其接收���������������� ‘��������������� 发送操作过程及时序也基本相同。 当接收器接收完一帧信息后必须同时满足下列条件: d e t i im ·RI=0 ·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。 L 当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位 RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无 效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变 信息,接收下一帧的输入信息。 U C M 在模式3中,接收到的停止位与SBUF、RB8和RI无关。 C T S 通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。 串行通信模式3的波特率也是可变的,可变的波特由定时器/计数器1或定时器2产生。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 637 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 研发顾问Tel:13922805190 INTERNAL BUS Timer 1 Overflow TB8 WRITE TO SBUF T 1 工作在 8 位重装模式 T1工作在16 位重装模式 临时技术支持Tel:13922829991 DS Q CL ÷2 TxD ZERO DETECTOR SMOD =1 SMOD =0 SBUF SHIFT START DATA TX CONTROL ÷4 ÷4 TX CLOCK TI SEND RI LOAD SBUF SERIAL PORT INTERRUPT Timer 2 Overflow ÷4 SAMPLE 1-TO-0 TRANSITION DETECTOR RX CLOCK START d e t i im RX CONTROL SHIFT 1FFH L BIT DETECTOR CU M RxD C T S INPUT SHIFT REG. (9 BITS) SHIFT LOAD SBUF SBUF READ SBUF INTERNAL BUS TX CLOCK WRITE TO SBUF SEND TRANSMIT DATA SHIFT D1 D0 TXD START BIT TI D2 D3 D4 D5 D6 D7 TB8 STOP BIT D1 D2 D3 D4 D5 D6 D7 STOP BIT GEN RECEIVE RX CLOCK ÷16 RESET RXD START BIT D0 RB8 STOP BIT BIT DETECTOR SAMPLE TIMES SHIFT RI 图8-4 串行口模式3功能结构示意图及接收/发送时序图 638 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 模式3的波特率(优先选择定时器2产生波特率)为: 当串行口1用定时器2作为其波特率发生器时, 串行口1的波特率=�(定时器T��������� 2的溢出率)��� /4. (注意:此时波特率也与SMOD无关。) STC创新设计,请不要抄 袭,再抄袭就很无耻了 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ); 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [[RL_TH2,RL_TL2]); 即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2]) / 4 RL_TH2是T2H的自动重装载寄存器,RL_TL2是T2L的自动重装载寄存器。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时, 串行口1的波特率=�(定时器1的溢出率���� )��� /4. (注意:此时波特率与SMOD无关。) d e t i im 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ; L 即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1, RL_TL1]) / 4 U C M 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1]) 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1, RL_TL1]) / 4 C T S RL_TH1是TH1的自动重装载寄存器,RL_TL1是TL1的自动重装载寄存器。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时, 串行口1的波特率=��� ( 2SMOD/32 )×(定时器1的溢出率�� )�. 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk / 12 / ( 256 - TH1); 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1) 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1) 可见,模式3和模式1一样,其波特率可通过软件对定时器/计数器1或定时器2的设置进行 波特率的选择,是可变的。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 639 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.3 串行口1的波特率设置 STC15W4K60S4系列单片机串行口1的波特率随所选工作模式的不同而异,对于工作模式0 和模式2,其波特率与系统时钟频率SYSclk和PCON中的波特率选择位SMOD有关,而模式1和 模式3的波特率除与SYSclk和PCON位有关外,还与定时器/计数器1或定时器2设置有关。通过 对定时器/计数器1或定时器2的设置,可选择不同的波特率,所以这种波特率是可变的。建议 用户优先选择定时器2作为串行口1的波特率发生器。 串行通信模式0,其波特率与系统时钟频率SYSclk有关 。 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12。 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2。 一旦SYSclk选定且UART_M0x6/AUXR.5设置好,则串行通信工作模式0的波特率固定不 变。 d e t i im 串行通信工作模式2,其波特率除与SYSclk有关外,还与SMOD位有关。 其基本表达式为:串行通信模式2波特率=2SMOD/64×(SYSclk系统工作时钟频率) 当SMOD=1时,波特率=2/64(SYSclk)=1/32(SYSclk); 当SMOD=0时,波特率=1/64(SYSclk)。 U C M L 当SYSclk选定后,通过软件设置PCON中的SMOD位,可选择两种波特率。所以,这种模 式的波特率基本固定。 串行通信模式1和3,其波特率是可变的(建议用户优先选择定时器T2作为串口1的波特率发 生器): STC创新设计,请不要抄 C T S 当串行口1用定时器2作为其波特率发生器时, 串行口1的波特率=�(定时器T��������� 2的溢出率)��� /4. (注意:此时波特率也与SMOD无关。) 袭,再抄袭就很无耻了 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ); 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH2,RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2,RL_TL2]); 即此时,串行口1的波特率=SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2]) / 4 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式0(16位自动重装载模式)时, 串行口1的波特率=�(定时器1的溢出率���� )��� /4. (注意:此时波特率与SMOD无关。) 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) ; 即此时,串行口1的波特率=SYSclk/12/( 65536 - [RL_TH1,RL_TL1]) / 4 当����������������������� 定时器1工作于模式0(16位自动重装载模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1]) 即此时,串行口1的波特率=SYSclk / ( 65536 - [RL_TH1,RL_TL1]) / 4 640 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时, 串行口1的波特率=��� ( 2SMOD/32 )×(定时器1的溢出率�� )�. 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk / 12 / ( 256 - TH1); 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1) 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1) 通过对定时器/计数器1和T2定时器2的设置,可灵活地选择不同的波特率。在实际应用中 多半选用串行模式1或串行模式3。显然,为选择波特率,关键在于定时器/计数器1和T2定时器 2的溢出率的计算。SMOD的选择,只需根据需要执行下列指令就可实现SMOD=0或1; MOV MOV PCON,#00H PCON,#80H ;使SMOD=0 ;使SMOD=1 d e t i im SMOD只占用电源控制寄存器PCON的最高一位,其他各位的具体设置应根据实际情况而定。 L 当用户选择定时器/计数器������������������������ 1����������������������� 作波特率发生器时,为选择波特率,关键在于定时器/计数器1 的溢出率。下面介绍如何计算定时器/计数器1的溢出率。 U C M 定时器/计数器1的溢出率定义为:单位时间(秒)内定时器/计数器1回0溢出的次数,即定 时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒。 C T S STC15W4K60S4系列单片机设有3个定时器/计数器,定时器/计数器1具有4种工作方式,而 常选用定时器/计数器1的工作方式0(16位自动重装载模式)及工作方式2(8位自动重装)作 为波特率的溢出率。 以定时器/计数器1工作于定时模式的工作方式2(8位自动重装)为例:设置定时器/计数 器1工作于定时模式的工作方式2(8位自动重装),TL1的计数输入来自于SYSclk经12分频或 不分频(由T1x12/AUXR.6确定是12分频还是不分频)的脉冲。当T1x12/AUXR.6=0时,单片机工 作在12T模式,TL1的计数输入来自于SYSclk经12分频的脉冲;当T1x12/AUXR.6=1时,单片机 工作在1T模式,TL1的计数输入来自于SYSclk不经过分频的脉冲。可见,定时器/计数器1的溢 出率与SYSclk和自动重装值N有关,SYSclk越大,特别是N越大,溢出率也就越高。例如: 当N=FFN,则每隔一个时钟即溢出一次(极限情况);若N=00H,则需每隔256个时钟才溢 出一次;当SYSclk=6MHz且T1x12/AUXR.6=0时,一个时钟为2µs, 当SYSclk=6MHz且T1x12/ AUXR.6=1时,一个时钟约为0.167µs(快12倍)。SYSclk=12MHz且T1x12/AUXR.6=0时,则一个 时钟为1µs, 当SYSclk=6MHz且T1x12/AUXR.6=1时,一个时钟约为0.083µs(快12倍)。对于一般 情况下, 当T1x12/AUXR.6=0时,定时器/计数器1溢出一次所需的时间为:(28—N)×12时钟=(28—N)×12× 当T1x12/AUXR.6=1时,定时器/计数器1溢出一次所需的时间为:(28—N)×1时钟=(28—N)× 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 1 SYSclk 1 SYSclk 传真:0513-5501 2969 / 2956 / 2947 641 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 于是得定时器/计数器每秒溢出的次数,即 当T1x12/AUXR.6=0时,定时器/计数器1的溢出率=SYSclk/12×(28-N) (次/秒) 当T1x12/AUXR.6=1时,定时器/计数器1的溢出率=SYSclk×(28-N) (次/秒) 式中SYSclk为系统时钟频率,N为再装入时间常数。 显然,选用定时器/计数器2作波特率的溢出率也一样。选用不同工作方式所获得波特率的 范围不同。因为不同方式的计数位数不同,N取值范围不同,且计数方式较复杂。 现以定时器/计数器1工作于方式2(8位自动重装模式)为例, 设: T1x12/AUXR.6=0,SYSclk=6MHz, N=FFH, 定时器/计数器1工作于方式2的溢出率为6×106/{12×(256-255)} = 0.5×106(次/秒); 设: T1x12/AUXR.6=0,SYSclk=12MHz, N=FFH, 定时器/计数器1工作于方式2的溢出率 = 1×106(次/秒); d e t i im 设: T1x12/AUXR.6=0,SYSclk=12MHz, N=00H, 定时器/计数器1工作于方式2的溢出率 = 12×106/12×256≈3906(次/秒) 设: T1x12/AUXR.6=1,SYSclk=6MHz, N=FFH, U C M L 定时器/计数器1工作于方式2的溢出率为6×106/(256-255) = 6×106(次/秒); 设: T1x12/AUXR.6=1,SYSclk=12MHz, N=00H, 定时器/计数器1工作于方式2的溢出率 = 12×106/256 = 46875(次/秒) C T S 下表给出各种常用波特率与定时器/计数器1各参数之间的关系。 常用波特率与定时器/计数器1各参数关系(T1x12/AUXR.6=0) 系统时钟频率 (MHz) SMOD 方式0 MAX:1M 12 × 方式2 MAX:375K 62.5K 方式1和3 19.2K 9.6K 4.8K 2.4K 1.2K 137.5 110 110 12 12 11.059 11.059 11.059 11.059 11.059 11.986 6 12 常用波特率 642 南通国芯微电子有限公司 定时器1 × 方式 × 重新装入值 × 1 1 1 0 0 0 0 0 0 × 0 0 0 0 0 0 0 0 × 2 2 2 2 2 2 2 2 × FFH FDH FDH FAH F4H F8H 1DH 72H 0 0 1 FFFBH C/T 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV MOV MOV SETB MOV MOV TMOD, TH1, TL1, TR1 PCON, SCON, #20H #xxH #xxH #80H #50H ;设置定时器/计数器1定时、工作方式2 ; 设置定时常数N ; ;启动定时器/计数器1 ;设置SMOD=1 ;设置串行通信方式1 … … 设置波特率的初始化程序段如下: 执行上述程序段后,即可完成对定时器/计数器1的操作方式及串行通信的工作方式和波特 率的设置。 由于用其他工作方式设置波特率计算方法较复杂,一般应用较少,故不一一论述。 d e t i im 当用户选择T2定时器2作波特率发生器时,为选择波特率,关键在于定时器2的溢出率。当 用户选择T2定时器2作波特率发生器时,������������������������� 定时器/��������������������� 计数器������������������ 1可以释放出来作为定时器/计数器/时 钟输出使用.� 。 U C M L 用户在程序中如何具体使用串口1和����� 定时器�� T2 1.设置串口1 的工作模式,SCON 寄存器中的SM0 和SM1 两位决定了串口1 的4 种工作模式。 2.设置串口1 的波特率,使用��������������� 定时器������������ 2寄存器 T2H���� 及T2L 3.设置寄存器AUXR中的位T2x12/AUXR.2,确定定时器2速度是1T还是12T 4.启动������������������������������������ 定时器��������������������������������� 2,让T2R位为1,T2H�������������������� /T2L���������������� 定时器������������ ��������������� 2寄存器就立即开始计数。 5.设置串口1的中断优先级,及打开中断相应的控制位是: PS,ES,EA 6.如要串口1接收,将REN置1即可 如要串口1发送,将数据送入SBUF即可, 接收完成标志RI,发送完成标志TI,要由软件清0。 C T S 当串口工作在模式1和模式3时�������������������������������� ,������������������������������� 计算相应的波特率需要设置的重装载数,结果送入T2H/T2L寄存 器� : 计算自动重装数 RELOAD: 1. 计算 RELOAD 计算公式: RELOAD = 65536 - INT(SYSclk/Baud0/4 + 0.5) 计算出的RELOAD 数直接送T2H/T2L寄存器 式中: INT() 表示取整运算即舍去小数, 在式中加 0.5 可以达到四舍五入的目的 SYSclk = 晶振频率 Baud0 = 标准波特率 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 643 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式 ���������������������������� 3. 计算用 RELOAD 产生的波特率: Baud = SYSclk/(65536 - RELOAD)/4 4. 计算误差 error = (Baud - Baud0)/Baud0 * 100% 5. 如果误差绝对值 > 3% 要更换波特率或者更换晶体频率, 重复步骤 1-4 例: SYSclk = 22.1184MHz, Baud0 = 57600 1. RELOAD = 65536 - INT( 22118400/57600/4 + 0.5) = 65536 - INT( 96.5 ) = 65536 - 96 = 65440 = 0FFA0H 2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式 ���������������������������� 3. Baud = 22118400/(65536-65440)/4 = 57600 4. 误差等于零 C T S U C M d e t i im L 例: SYSclk = 12MHz, Baud0 = 57600 1. RELOAD = 65536 - INT( 12000000/57600/4 + 0.5) = 65536 - INT( 52.0833 + 0.5 ) = 65536 - INT( 52.5833 ) = 65536 - 52 = 65484 = 0FFCCH 2. 设置AUXR.2/T2x12=1,定时器2工作在1T模式 ���������������������������� 3. Baud = 12000000/(66536-65484)/4 = 57692 4. error = (57692 - 57600)/57600 * 100% = 0.16% 644 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.4 串行口1的测试程序(C和汇编) 8.4.1 定时器2作串口1波特率发生器的测试程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" U C M L typedef unsigned char BYTE; typedef unsigned int WORD; #define FOSC 18432000L #define BAUD 115200 //系统频率 //串口波特率 #define #define #define #define #define //无校验 //奇校验 //偶校验 //标记校验 //空白校验 C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 #define PARITYBIT EVEN_PARITY sfr sfr sfr sbit AUXR = T2H = T2L = 0x8e; 0xd6; 0xd7; P22 P2^2; bit busy; = //定义校验位 //辅助寄存器 //定时器2高8位 //定时器2低8位 void SendData(BYTE dat); void SendString(char *s); void main() 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 645 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9位可变波特率,校验位初始为0 #endif T2L = (65536 - (FOSC/4/BAUD)); T2H = (65536 - (FOSC/4/BAUD))>>8; AUXR = 0x14; AUXR |= 0x01; ES = 1; EA = 1; SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); //设置波特率重装值 //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 //使能串口1中断 } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; P22 = RB8; } if (TI) { TI = 0; busy = 0; } } C T S U C M d e t i im L //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); //等待前面的数据发送完成 ACC = dat; //获取校验位P (PSW.0) if (P) //根据P来设置校验位 { #if (PARITYBIT == ODD_PARITY) TB8 = 0; //设置校验位为0 646 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; //设置校验位为1 #endif } else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; //设置校验位为1 #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; //设置校验位为0 #endif } busy = 1; SBUF = ACC; //写数据到UART数据寄存器 } /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } C T S 南通国芯微电子有限公司 U C M d e t i im L //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 647 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //本示例在Keil开发环境下请选择Intel的8052芯片型号进行编译 //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY #define PARITYBIT 0 1 2 3 4 C T S AUXR EQU 08EH T2H DATA 0D6H T2L DATA 0D7H U C M EVEN_PARITY //----------------------------------------- //无校验 //奇校验 //偶校验 //标记校验 //空白校验 //----------------------------------------BUSY BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN d e t i im L //定义校验位 //辅助寄存器 //定时器2高8位 //定时器2低8位 //忙标志位 ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) 648 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com MOV SCON, #0DAH #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H #endif //------------------------------ MOV T2L, MOV T2H, MOV AUXR, ORL AUXR, SETB ES SETB EA 研发顾问QQ:800003751 //9位可变波特率,校验位初始为1 //9位可变波特率,校验位初始为0 #0D8H #0FFH #14H #01H MOV DPTR, #TESTSTR LCALL SENDSTRING //设置波特率重装值(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 //使能串口中断 //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, MOV P2.2, CHECKTI: JNB TI, CLR TI CLR BUSY ISR_EXIT: POP PSW POP ACC RETI C T S U C M d e t i im L CHECKTI SBUF RB8 C //检测RI位 //清除RI位 //P0显示串口数据 ISR_EXIT //检测TI位 //清除TI位 //清忙标志 ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC 南通国芯微电子有限公司 STC — 全球最大的8051单片机设计公司 //P2.2显示校验位 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 649 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END C T S 650 南通国芯微电子有限公司 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //设置校验位为0 //设置校验位为1 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 U C M d e t i im L //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.4.2 定时器1模式0(16位自动重装载)作串口1波特率发生器程序(C和汇编) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ d e t i im //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L #define BAUD 115200 #define #define #define #define #define C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY U C M 0 1 2 3 4 L //系统频率 //串口波特率 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr AUXR = 0x8e; //辅助寄存器 sbit P22 P2^2; bit busy; = void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9位可变波特率,校验位初始为0 #endif 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 651 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com AUXR = 0x40; TMOD = 0x00; TL1 = (65536 - (FOSC/4/BAUD)); TH1 = (65536 - (FOSC/4/BAUD))>>8; TR1 = 1; ES = 1; EA = 1; SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值 //定时器1开始启动 //使能串口中断 } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; P22 = RB8; } if (TI) { TI = 0; busy = 0; } } C T S 南通国芯微电子有限公司 L //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 U C M /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) TB8 = 0; #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; #endif } else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; 652 d e t i im //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 //设置校验位为1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 2. 汇编程序: //设置校验位为0 //写数据到UART数据寄存器 //检测字符串结束标志 //发送当前字符 U C M d e t i im L /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ C T S //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY 0 ODD_PARITY 1 EVEN_PARITY 2 MARK_PARITY 3 SPACE_PARITY 4 #define PARITYBIT EVEN_PARITY //无校验 //奇校验 //偶校验 //标记校验 //空白校验 //定义校验位 //----------------------------------------AUXR EQU BUSY BIT 08EH 20H.0 //辅助寄存器 //忙标志位 //----------------------------------------南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 653 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ORG 0000H LJMP MAIN ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV SCON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV AUXR, MOV TMOD, MOV TL1, MOV TH1, SETB TR1 SETB ES SETB EA U C M #40H #00H #0D8H #0FFH C T S MOV DPTR, #TESTSTR LCALL SENDSTRING d e t i im L //定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值(65536-18432000/4/115200) //定时器1开始运行 //使能串口中断 //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, MOV P2.2, 654 CHECKTI //检测RI位 //清除RI位 SBUF //P0显示串口数据 RB8 C //P2.2显示校验位 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI TI, TI BUSY 官方网站:www.STCMCU.com ISR_EXIT 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 //检测TI位 //清除TI位 //清忙标志 PSW ACC ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET C T S d e t i im //设置校验位为0 L //设置校验位为1 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 南通国芯微电子有限公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 655 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.4.3 定时器1模式2(8位自动重装载)作串口1波特率发生器程序(建议不学) 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ d e t i im //假定测试芯片的工作频率为18.432MHz#include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; #define FOSC 18432000L #define BAUD 115200 #define #define #define #define #define U C M C T S NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY L //系统频率 //串口波特率 0 1 2 3 4 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr AUXR = 0x8e; sbit P22 P2^2; = //辅助寄存器 bit busy; void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 656 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 #elif (PARITYBIT == SCON = #endif = = = = = = = 官方网站:www.STCMCU.com 研发顾问QQ:800003751 SPACE_PARITY) 0xd2; AUXR TMOD TL1 TH1 TR1 ES EA SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); STC — 全球最大的8051单片机设计公司 //9位可变波特率,校验位初始为0 0x40; //定时器1为1T模式 0x20; //定时器1为模式2(8位自动重载) (256 - (FOSC/32/BAUD)); //设置波特率重装值 (256 - (FOSC/32/BAUD)); 1; //定时器1开始工作 1; //使能串口中断 1; } /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; P22 = RB8; } if (TI) { TI = 0; busy = 0; } } U C M d e t i im L //清除RI位 //P0显示串口数据 //P2.2显示校验位 //清除TI位 //清忙标志 C T S /*---------------------------发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); //等待前面的数据发送完成 ACC = dat; //获取校验位P (PSW.0) if (P) //根据P来设置校验位 { #if (PARITYBIT == ODD_PARITY) TB8 = 0; //设置校验位为0 #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; //设置校验位为1 #endif } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 657 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 2. 汇编程序: //设置校验位为1 //设置校验位为0 //写数据到UART数据寄存器 L //发送当前字符 U C M C T S d e t i im //检测字符串结束标志 /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器1用作串口1的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 //----------------------------------------- 658 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 AUXR EQU 08EH BUSY BIT 20H.0 官方网站:www.STCMCU.com 研发顾问QQ:800003751 //辅助寄存器 //忙标志位 STC — 全球最大的8051单片机设计公司 //---------------------------------------- ORG 0000H LJMP MAIN ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH d e t i im #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV SCON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV AUXR, MOV TMOD, MOV TL1, MOV TH1, SETB TR1 SETB ES SETB EA #40H #20H #0FBH #0FBH C T S U C M L //定时器1为1T模式 //定时器1为模式2(8位自动重载) //设置波特率重装值(256-18432000/32/115200) //定时器1开始运行 //使能串口中断 MOV DPTR, #TESTSTR LCALL SENDSTRING //发送测试字符串 SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart1 Test !",0DH,0AH,0 ;/*---------------------------;UART 中断服务程序 ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CLR RI MOV P0, MOV C, 南通国芯微电子有限公司 CHECKTI SBUF RB8 //检测RI位 //清除RI位 //P0显示串口数据 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 659 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com MOV CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI P2.2, C TI, TI BUSY ISR_EXIT 研发顾问Tel:13922805190 //P2.2显示校验位 //检测TI位 //清除TI位 //清忙标志 PSW ACC ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) CLR TB8 #elif (PARITYBIT == EVEN_PARITY) SETB TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) SETB TB8 #elif (PARITYBIT == EVEN_PARITY) CLR TB8 #endif PARITYBITOK: SETB BUSY MOV SBUF, A RET C T S 南通国芯微电子有限公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 d e t i im //设置校验位为0 L //设置校验位为1 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 660 临时技术支持Tel:13922829991 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.5 串行口2的相关寄存器 位地址及符号 复位值 符号 描述 地址 S2CON Serial 2 Control register 9AH S2BUF Serial 2 Buffer 9BH xxxx xxxxB T2H 定时器2高8位,装入重装数 D6H 0000 0000B T2L 定时器2低8位,装入重装数 D7H 0000 0000B MSB LSB S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI AUXR 辅助寄存器 IE Interrupt Enable IE2 Interrupt Enable 2 AFH - IP2 Interrupt Priority 2 Low B5H - - - 外围设备功能切换控制 BAH 寄存器 - - - P_SW2 8EH T0x12 T1x12 UART_M0x6 T2R T2_C/T A8H EA ELVD EADC - - 1. 串行口2的控制寄存器S2CON S2RI T2x12 EXTRAM S1ST2 0000 0000B 0000 0001B ES ET1 EX1 ET0 EX0 0000 0000B - - - ESPI ES2 xxxx xx00B - - - PSPI PS2 x000 0000B - - S4_S S3_S S2_S d e t i m xxxx x000B Li 串行口2控制寄存器S2CON用于确定串行口2的工作方式和某些控制功能。其格式如下: S2CON : 串行口2控制寄存器 SFR name Address bit B7 S2CON 9AH name S2SM0 C T S U C M B6 - B5 B4 B3 B2 B1 S2SM2 S2REN S2TB8 S2RB8 S2TI B0 S2RI S2SM0:指定串行口2的工作方式,如下表所示。 S2SM0 工作方式 功能说明 0 方式0 8位UART,波 (定时器T2的溢出率)/4 特率可变 1 方式1 9位UART,波 (定时器T2的溢出率)/4 特率可变 波特率 当AUXR.2/T2x12=1时,定时器������ T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ) 当AUXR.2/T2x12=0时,定时器������ T2的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2] ) 式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 B6:保留,该位复位后为0. S2SM2:允许方式1多机通信控制位。 在方式1时,如果S2SM2位为1且S2REN位为1,则接收机处于地址帧筛选状态。此时 可以利用接收到的第9位(即S2RB8)来筛选地址帧:若S2RB8=1,说明该帧是地址帧, 地址信息可以进入S2BUF,并使S2RI为1,进而在中断服务程序中再进行地址号比较; 若S2RB8=0,说明该帧不是地址帧,应丢掉且保持S2RI=0。在方式1中,如果S2SM2位 为0且S2REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S2RB8为0或1, 均可使接收到的信息进入S2BUF,并使S2RI=1,此时S2RB8通常为校验位. 方式0是非多机通信方式,在这种方式时,要设置S2SM2 应为0。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 661 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 S2REN:允许/禁止串行口2接收控制位。由软件置位S2REN,即S2REN=1为允许串行接收状 态,可启动串行接收器RxD2,开始接收信息。软件复位S2REN,即S2REN=0,则禁 止接收。 S2TB8:在方式1,S2TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据 的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用. S2RB8:在方式1,S2RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用S2RB8(置S2SM2=0, S2RB8是接收到的停止位)。 S2TI:发送中断请求标志位。在停止位开始发送时由S2TI内部硬件置位,即S2TI=1,响应中断 后S2TI必须用软件清零。 S2RI:接收中断请求标志位。在串行接收到停止位的中间时刻S2RI由内部硬件置位,即 S2RI=1,向CPU发中断申请,响应中断后S2RI必须由软件清零。 d e t i im S2CON的所有位可通过整机复位信号复位为全� “ 0”� 。 S2CON的字节地址为9AH,不可 位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S2TI,即S2TI=1,请求 中断处理;当接收完一帧信息时,内部硬件自动置位S2RI,即S2RI=1,请求中断处理。由于 S2TI和S2RI以������������������������������� “������������������������������ 或逻辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是S2TI还是 S2RI请求的中断,必须在中断服务程序中查询S2TI和S2RI进行判别,然后分别处理。因此, 两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响 应的错误。 C T S U C M L 2. 串行口2的数据缓冲寄存器S2BUF STC15系列单片机的串行口2数据缓冲寄存器(S2BUF)的地址是9BH,实际是2个缓冲器,写 S2BUF的操作完成待发送数据的加载,读S2BUF的操作可获得已接收到的数据。两个操作分别对 应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。 串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S2BUF信号(MOV S2BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为 移位寄存器的输出位。根据不同的工作方式会自动将� “1”� 或S2TB8的值装入移位寄存器的第9 位,并进行发送. 串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收 完毕,移位寄存器中的数据字节装入串行数据缓冲器S2BUF中,其第9位则装入S2CON寄存器 中的S2RB8位。如果由于S2SM2使得已接收到的数据无效时,S2RB8和S2BUF中内容不变. 由于接收通道内设有输入移位寄存器和S2BUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入S2BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S2BUF缓冲器 中将数据取走,否则前一帧数据将丢失。S2BUF以并行方式送往内部数据总线。 662 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 3. 串行口2只能选择定时器2作为其波特率发生器——定时器2的寄存器T2H, T2L 定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用 于保存重装时间常数。 注意:对于STC15系列单片机,串口2�������������������������� 永远是使用��������������������� 定时器������������������ 2作为波特率发生器,串口2不能够选择 其他������������ 定时器��������� 作其������� 波特率发生器� ;串口1默认选择定时器2作为其波特率发生器,也可以选择定时 器1作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作 为其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其 波特率发生器。 4. 定时器2的控制位——TR2、T2_C/T、T2x12 d e t i im AUXR : 辅助寄存器 (不可位寻址) SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 T2R:定时器2运行控制位 0,���������� 不允许������� 定时器���� 2运行; 1��������� ,�������� 允许������ 定时器��� 2运行 U C M B4 T2R B3 B2 T2_C/T T2x12 L B1 B0 EXTRAM S1ST2 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) C T S T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. 对于���������������������������������������� STC15����������������������������������� 系列单片机,串口2只能使用定时器2作为波特率发生器,不能够选择其他定时 器作为其波特率发生器;而串口1默认选择定时器2作为其波特率发生器,也可以选择定时器1 作为其波特率发生器;串口3默认选择定时器2作为其波特率发生器,也可以选择定时器3作为 其波特率发生器;串口4默认选择定时器2作为其波特率发生器,也可以选择定时器4作为其波 特率发生器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 663 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 5. 与串行口2中断相关的寄存器 串行口2中断允许位ES2位于中断允许寄存器IE2中,中断允许寄存器的格式如下: IE2 : 中断允许寄存器2 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 - B5 B4 - - B3 - B2 - B1 ESPI B0 ES2 ES2 : 串行口2中断允许位,ES2=1,允许串行口2中断,ES2=0,禁止串行口2中断。 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 B5 ELVD EADC B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 d e t i im 串行口2中断优先级控制位PS2位位于中断优先级控制寄存器IP中,中断优先级控制寄存器 的格式如下: IP2 : 中断优先级控制寄存器 (不可位寻址) SFR name IP2 Address B5H bit name B7 - B6 - B5 - U C M B4 - L B3 - B2 - B1 PSPI B0 PS2 PS2: 串行口2中断优先级控制位。 当PS2=0时,串行口2中断为最低优先级中断(优先级0) 当PS2=1时,串行口2中断为最高优先级中断(优先级1) C T S 6. 串行口2在2组管脚之间切换的控制位——S2_S/P_SW2.0 通过设置寄存器P_SW2中的S2_S位,可以将串口2在2组管脚之间任意切换,P_SW2寄存器的 格式如下: P_SW2: 外围设备功能切换控制寄存器2 (不可位寻址) Mnemonic Add P_SW2 Name B7 B6 B5 B4 B3 外围设备功能切换 BAH 控制寄存器2 B2 B1 B0 Reset Value S4_S S3_S S2_S xxxx,x000 串口2/������������� S2����������� 可在2个地方切换,由 ����������� S2_S 控制位来选择 S2_S S2可在P1/P4之间来回切换 0 串口2/S2在[P1.0/RxD2,P1.1/TxD2] 1 串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2] 串口3/������������� S3����������� 可在2个地方切换,由 ����������� S3_S 控制位来选择 S3_S S3可在P0/P5之间来回切换 0 串口3/S3在[P0.0/RxD3,P0.1/TxD3] 1 串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2] 串口4/������������� S4����������� 可在2个地方切换,由 ����������� S4_S 控制位来选择 S4_S S4可在P0/P5之间来回切换 0 串口4/S4在[P0.2/RxD4,P0.3/TxD4] 1 串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2] 664 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.6 串行口2工作模式 STC15W4K60S4系列单片机的串行口2有两种工作模式,可通过软件编程对S2CON中的 S2SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个 启动位和1个停止位。 8.6.1 串行口2的工作模式0----8位UART,波特率可变 10����� 位数据通过RxD2/P1.0(RxD2_2/P4.6)接收,通过TxD2/P1.1(TxD2_2/P4.7)发送。一帧 数据包含一个起始位����������������������������������� (0),8������������������������������ 个数据位和一个停止位�������������������� (1)����������������� 。接收时,停止位进入特殊功能寄存器 S2CON的S2RB8位。波特率由定时器T2的溢出率决定。 串口2在模式0的��� 波特率 = 定时器�������� T2的溢出率/4 d e t i im ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 L 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 U C M 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 C T S 8.6.2 串行口2的工作模式1----9位UART,波特率可变 11位数据通过RxD2/P1.0(RxD2_2/P4.6)发送,通过TxD2/P1.1(TxD2_2/P4.7)接收。一�� 帧� 数 据包含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位 数据位来自特殊功能寄存器S2CON的S2TB8位.接收时,第9位进入特殊功能寄存器S2CON的 S2RB8位。 串口2在模式1的��� 波特率= T2 定时器������� 2的溢出率/4 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口2的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 可见,模式1和模式0一样,其波特率可通过软件对定时器2的设置进行波特率的选择,是 可变的。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 665 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 用户在程序中如何具体使用串口2 1.设置串口2的工作模式,S2CON寄存器中的S2SM0决定了串口2的2种工作模式 2.设置串口2的波特率相应的寄存器: ������� 定时器���� 2寄存器T2H / T2L 3.启动������ 定时器��� 2,让T2R位为1,������������ 定时器��������� 2就立即开始计数。 4.������������������������ 设置AUXR.2/T2x12,确定定时器2的速度 5.设置串口2的中断优先级,及打开中断相应的控制位是: PS2, PS2H, ES2, EA 6.如要串口2接收,将S2REN置1 即可 如要串口2发送,将数据送入S2BUF即可, 接收完成标志S2RI,发送完成标志S2TI,要由软件清0。 C T S 666 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.7 串行口2的测试程序(C和汇编) ——使用定时器2作串口2的波特率发生器 1. C程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751-------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz U C M #include "reg51.h" #include "intrins.h" typedef unsigned char BYTE; typedef unsigned int WORD; #define FOSC 18432000L #define BAUD 115200 #define TM (65536 - (FOSC/4/BAUD)) C T S #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 d e t i im L //系统频率 //串口波特率 //无校验 //奇校验 //偶校验 //标记校验 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr sfr sfr sfr sfr sfr //辅助寄存器 //UART2 控制寄存器 //UART2 数据寄存器 //定时器2高8位 //定时器2低8位 //中断控制寄存器2 AUXR S2CON S2BUF T2H T2L IE2 #define S2RI #define S2TI = = = = = = 0x01 0x02 南通国芯微电子有限公司 0x8e; 0x9a; 0x9b; 0xd6; 0xd7; 0xaf; //S2CON.0 //S2CON.1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 667 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com #define S2RB8 0x04 #define S2TB8 0x08 bit 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //S2CON.2 //S2CON.3 busy; void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) S2CON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) S2CON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) S2CON = 0xd2; //9位可变波特率,校验位初始为0 #endif T2L = TM; T2H = TM>>8; AUXR = 0x14; IE2 = 0x01; EA = 1; SendString("STC15F2K60S2\r\nUart2 Test !\r\n"); while(1); } C T S /*---------------------------UART2 中断服务程序 -----------------------------*/ void Uart2() interrupt 8 using 1 { if (S2CON & S2RI) { S2CON &= ~S2RI; P0 = S2BUF; P2 = (S2CON & S2RB8); } if (S2CON & S2TI) { S2CON &= ~S2TI; busy = 0; } } L //设置波特率重装值 //T2为1T模式, 并启动定时器2 //使能串口2中断 U C M d e t i im //清除S2RI位 //P0显示串口数据 //P2.2显示校验位 //清除S2TI位 //清忙标志 /*---------------------------- 668 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 发送串口数据 ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) S2CON &= ~S2TB8; #elif (PARITYBIT == EVEN_PARITY) S2CON |= S2TB8; #endif } else { #if (PARITYBIT == ODD_PARITY) S2CON |= S2TB8; #elif (PARITYBIT == EVEN_PARITY) S2CON &= ~S2TB8; #endif } busy = 1; S2BUF = ACC; } C T S STC — 全球最大的8051单片机设计公司 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 d e t i im //设置校验位为1 L //设置校验位为0 U C M /*---------------------------发送字符串 ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } 南通国芯微电子有限公司 研发顾问QQ:800003751 //写数据到UART2数据寄存器 //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 669 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*--------------------------------------------------------------------------------------------------------- */ /* --- STC MCU Limited. --------------------------------------------------------------------------- */ /* --- STC15F2K60S2 系列 定时器2用作串口2的波特率发生器举例---------------------- */ /* --- 研发顾问QQ:800003751--------------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------------ */ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------------------------------- */ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序---- */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序---- */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可------------*/ /*--------------------------------------------------------------------------------------------------------- */ //假定测试芯片的工作频率为18.432MHz #define #define #define #define #define NONE_PARITY ODD_PARITY EVEN_PARITY MARK_PARITY SPACE_PARITY 0 1 2 3 4 U C M #define PARITYBIT EVEN_PARITY C T S //----------------------------------------AUXR S2CON S2BUF T2H T2L IE2 EQU EQU EQU DATA DATA EQU 08EH 09AH 09BH 0D6H 0D7H 0AFH S2RI EQU 01H S2TI EQU 02H S2RB8 EQU 04H S2TB8 EQU 08H //----------------------------------------BUSY BIT 20H.0 //---------------------------------------- ORG 0000H LJMP MAIN //无校验 //奇校验 //偶校验 //标记校验 //空白校验 d e t i im L //定义校验位 //辅助寄存器 //UART2 控制寄存器 //UART2 数据寄存器 //定时器2高8位 //定时器2低8位 //中断控制寄存器2 //S2CON.0 //S2CON.1 //S2CON.2 //S2CON.3 //忙标志位 ORG 0043H LJMP UART2_ISR //---------------------------------------- ORG 0100H 670 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV S2CON, #50H //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV S2CON, #0DAH //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) MOV S2CON, #0D2H //9位可变波特率,校验位初始为0 #endif //------------------------------ MOV T2L, MOV T2H, MOV AUXR, ORL IE2, SETB EA #0D8H #0FFH #14H #01H MOV DPTR, #TESTSTR LCALL SENDSTRING //设置波特率重装值(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //使能串口2中断 d e t i im L //发送测试字符串 U C M SJMP $ ;----------------------------------------TESTSTR: DB "STC15F2K60S2 Uart2 Test !",0DH,0AH,0 C T S ;/*---------------------------;UART2 中断服务程序 ;----------------------------*/ UART2_ISR: PUSH ACC PUSH PSW MOV A, S2CON JNB ACC.0, CHECKTI ANL S2CON, #NOT S2RI MOV P0, S2BUF ANL A, #S2RB8 MOV P2, A CHECKTI: ; MOV A, S2CON JNB ACC.1, ISR_EXIT ANL S2CON, #NOT S2TI CLR BUSY ISR_EXIT: POP PSW POP ACC RETI 南通国芯微电子有限公司 ;读取UART2控制寄存器 ;检测S2RI位 ;清除S2RI位 ;P0显示串口数据 ; ;P2.2显示校验位 ;读取UART2控制寄存器 ;检测S2TI位 ;清除S2TI位 ;清忙标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 671 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com ;/*---------------------------;发送串口数据 ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC ODD1INACC: #if (PARITYBIT == ODD_PARITY) ANL S2CON, #NOT S2TB8 #elif (PARITYBIT == EVEN_PARITY) ORL S2CON, #S2TB8 #endif SJMP PARITYBITOK EVEN1INACC: #if (PARITYBIT == ODD_PARITY) ORL S2CON, #S2TB8 #elif (PARITYBIT == EVEN_PARITY) ANL S2CON, #NOT S2TB8 #endif PARITYBITOK: SETB BUSY MOV S2BUF, A RET C T S 南通国芯微电子有限公司 研发顾问Tel:13922805190 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 d e t i im //设置校验位为1 //设置校验位为0 L //校验位设置完成 U C M ;/*---------------------------;发送字符串 //----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET //---------------------------------------- END 672 临时技术支持Tel:13922829991 //写数据到UART2数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 8.8 串行口3的相关寄存器 地址 位地址及符号 复位值 符号 描述 S3CON S3BUF 串口3控制寄存器 ACH S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 0000,0000 串口3数据缓冲器 ADH MSB LSB xxxx,xxxx T2H 定时器2高8位,装入重装数 D6H 0000 0000B T2L 定时器2低8位,装入重装数 D7H 0000 0000B AUXR 辅助寄存器 8EH T3H T3L 定时器3高8位寄存器 D4H 0000 0000B 定时器3低8位寄存器 D5H 0000 0000B T4T3M T4和T3的控制寄存器 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B IE2 中断允许寄存器 P_SW2 T0x12 T1x12 UART_M0x6 T2R T2_C/T AFH ET4 外围设备功能切换控制 BAH 寄存器 - ET3 - - U C M ES4 d e t i m ES3 Li - - T2x12 EXTRAM S1ST2 0000 0001B ET2 ESPI ES2 x000 0000B S4_S S3_S S2_S xxxx x000B 1. 串行口3的控制寄存器S3CON 串行口3控制寄存器S3CON用于确定串行口3的工作方式和某些控制功能。其格式如下: C T S S3CON : 串行口3控制寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 B1 S3CON ACH name S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI B0 S3RI S3SM0:指定串行口3的工作方式,如下表所示。 S3SM0 工作方式 功能说明 波特率 0 方式0 或 (定时器T3的溢出率)/4 8位UART,波特率可变 (定时器T2的溢出率)/4 �� 1 方式1 9位UART,波特率可变 (定时器T2的溢出率)/4 �� 或 (定时器T3的溢出率)/4 当AUXR.2/T2x12=1时,定时器������ T2的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2] ) 当AUXR.2/T2x12=0时,定时器������ T2的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH2,RL_TL2] ) 式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 当T4T3M.1/T3x12=1时,定时器������ T3的溢出率 = SYSclk / ( 65536 - [RL_TH3, RL_TL3] ) 当T4T3M.1/T3x12=0时,定时器T����� 3的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3] ) 式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 S3ST3:串口3(UART3)选择定时器3作波特率发生器的控制位。 0,�������������������� 串������������������� 行������������������ 口3选择定时器2���������� 作为其������� 波特率发生器; 1�������������������� ,������������������� 串������������������ 行����������������� 口3��������������� 选择定时器3作为其������ 波特率发生器 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 673 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 S3SM2:允许方式1多机通信控制位。 在方式1时,如果S3SM2位为1且S3REN位为1,则接收机处于地址帧筛选状态。此时 可以利用接收到的第9位(即S3RB8)来筛选地址帧:若S3RB8=1,说明该帧是地址帧, 地址信息可以进入S3BUF,并使S3RI为1,进而在中断服务程序中再进行地址号比较; 若S3RB8=0,说明该帧不是地址帧,应丢掉且保持S3RI=0。在方式1中,如果S3SM2位 为0且S3REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S3RB8为0或1, 均可使接收到的信息进入S3BUF,并使S3RI=1,此时S3RB8通常为校验位. 方式0是非多机通信方式,在这种方式时,要设置S3SM2 应为0。 S3REN:允许/禁止串行口3接收控制位。由软件置位S3REN,即S3REN=1为允许串行接收状 态,可启动串行接收器RxD3,开始接收信息。软件复位S3REN,即S3REN=0,则禁 止接收。 S3TB8:在方式1,S3TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据 的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用. d e t i im S3RB8:在方式1,S3RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用S3RB8(置S3SM2=0, S3RB8是接收到的停止位)。 L S3TI:发送中断请求标志位。在停止位开始发送时由S3TI内部硬件置位,即S3TI=1,响应中断 后S3TI必须用软件清零。 U C M S3RI:接收中断请求标志位。在串行接收到停止位的中间时刻S3RI由内部硬件置位,即 S3RI=1,向CPU发中断申请,响应中断后S3RI必须由软件清零。 C T S S3CON的所有位可通过整机复位信号复位为全� “0”� 。S3CON的字节地址为ACH,不可 位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S3TI,即S3TI=1,请求 中断处理;当接收完一帧信息时,内部硬件自动置位S3RI,即S3RI=1,请求中断处理。由于 S3TI和S3RI以������������������������������� “������������������������������ 或逻辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是S3TI还是 S3RI请求的中断,必须在中断服务程序中查询S3TI和S3RI进行判别,然后分别处理。因此, 两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响 应的错误。 674 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 串行口3的数据缓冲寄存器S3BUF STC15W4K60S4系列单片机的串行口3数据缓冲寄存器(S3BUF)的地址是ADH,实际是2个缓 冲器,写S3BUF的操作完成待发送数据的加载,读S3BUF的操作可获得已接收到的数据。两个操 作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。 串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S3BUF信号(MOV S3BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为 移位寄存器的输出位。根据不同的工作方式会自动将� “1”� 或S3TB8的值装入移位寄存器的第9 位,并进行发送. 串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收 完毕,移位寄存器中的数据字节装入串行数据缓冲器S3BUF中,其第9位则装入S3CON寄存器 中的S3RB8位。如果由于S3SM2使得已接收到的数据无效时,S3RB8和S3BUF中内容不变. 由于接收通道内设有输入移位寄存器和S3BUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入S3BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S3BUF缓冲器 中将数据取走,否则前一帧数据将丢失。S3BUF以并行方式送往内部数据总线。 U C M d e t i im L 3. 串行口3既能选择定时器2作为其波特率发生器,也能选择定时器3作为其波特率 发生器——定时器2的寄存器T2H, T2L和定时器3的寄存器T3H, T3L 定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用 于保存重装时间常数。 C T S 定时器3寄存器T3H(地址为D4H,复位值为00H)及寄存器T3L(地址为D5H,复位值为00H)用 于保存重装时间常数。 注意:有串口2的单片机,串口2永远是使用����������������������� 定时器�������������������� 2作为波特率发生器,串口2不能够选择定时 器1 做波特率发生器,串口1可以选择定时器1做波特率发生器,也可以选择�������� 定时器����� 2作为波特 率发生器������������������������������������� 。而����������������������������������� 串口3可以选择定时器2做波特率发生器,也可以选择����������� 定时器�������� 3作为波特率发生 器���������������������������������������� 。同样������������������������������������� 串口4可以选择定时器2做波特率发生器,也可以选择������������� 定时器���������� 4作为波特率发生器� 。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 675 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 4. 定时器2的控制位——TR2、T2_C/T、T2x12 AUXR : 辅助寄存器 (不可位寻址) SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 B2 T2R T2_C/T T2x12 B1 B0 EXTRAM S1ST2 T2R:定时器2运行控制位 0,���������� 不允许������� 定时器���� 2运行; 1��������� ,�������� 允许������ 定时器��� 2运行 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. U C M 5. 定时器3的控制位——TR3、T3_C/T、T3x12 T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 C T S name T4R B6 B5 B4 d e t i im L B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B3 - T3R:定时器3运行控制位� 。 0, 不允许定时器3运行; 1, 允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.7的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0, 定时器3速度是8051单片机定时器的速度,即12分频; 1, 定时器3速度是8051单片机定时器速度的12倍,即不分频。 676 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 6. 与串行口3中断相关的寄存器IE2 串行口3中断允许位ES3位于中断允许寄存器IE2中,中断允许寄存器的格式如下: IE2 : 中断允许寄存器2 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 1,允许定时器4产生中断; 0,禁止定时器4产生中断。 ET3:定时器3的中断允许位。 1,允许定时器3产生中断; 0,禁止定时器3产生中断。 d e t i im ES4 : 串行口4中断允许位。 1,允许串行口4中断; 0,禁止串行口4中断 ES3 : 串行口3中断允许位。 1,允许串行口3中断; 0,禁止串行口3中断。 ET2:定时器2的中断允许位。 1,允许定时器2产生中断; 0,禁止定时器2产生中断。 C T S L U C M ESPI:SPI中断允许位。 1,允许SPI中断; 0,禁止SPI中断。 ES2 : 串行口2中断允许位。 1,允许串行口2中断; 0,禁止串行口2中断。 IE : 中断允许寄存器 (可位寻址) SFR name Address bit B7 IE A8H name EA B6 B5 ELVD EADC B4 B3 B2 B1 B0 ES ET1 EX1 ET0 EX0 EA : CPU的总中断允许控制位 1,CPU开放中断, 0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的 中断允许控制位控制。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 677 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7. 串行口3在2组管脚之间切换的控制位——S3_S/P_SW2.1 通过设置寄存器P_SW2中的S3_S位,可以将串口3在2组管脚之间任意切换,P_SW2寄存器的 格式如下: P_SW2 : 外围设备切换控制寄存器2 (不可位寻址) Mnemonic Add P_SW2 Name 7 6 5 4 3 外围设备功能切换 BAH 控制寄存器2 2 1 0 Reset Value S4_S S3_S S2_S xxxx,x000 串口2/������������� S2����������� 可在2个地方切换,由 ����������� S2_S 控制位来选择 S2_S S2可在P1/P4之间来回切换 0 串口2/S2在[P1.0/RxD2,P1.1/TxD2] 1 串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2] 串口3/������������� S3����������� 可在2个地方切换,由 ����������� S3_S 控制位来选择 S3_S S3可在P0/P5之间来回切换 0 串口3/S3在[P0.0/RxD3,P0.1/TxD3] 1 串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2] 串口4/������������� S4����������� 可在2个地方切换,由 ����������� S4_S 控制位来选择 S4_S S4可在P0/P5之间来回切换 0 串口4/S4在[P0.2/RxD4,P0.3/TxD4] 1 串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2] C T S 678 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.9 串行口3工作模式 STC15W4K60S4系列单片机的串行口3有两种工作模式,可通过软件编程对S3CON中的 S3SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个 启动位和1个停止位。 8.9.1 串行口3的工作模式0----8位UART,波特率可变 10����� 位数据通过RxD3/P0.0(RxD3/P5.0)接收,通过TxD3/P0.1(TxD3/P5.1)发送。一帧数据包含 一个起始位����������������������������������� (0),8������������������������������ 个数据位和一个停止位�������������������� (1)����������������� 。接收时,停止位进入特殊功能寄存器S3CON的 S3RB8位。串行口3既可以选择定时器2作其波特率发生器,也可以选择定时器3作其波特率发 生器。所以串行口3的波特率由定时器T2的溢出率或定时器T3的溢出率决定。 d e t i im 当串行口3选择定时器T2作为其波特率发生器(即S3ST3/S3SCON.1=0)时: 串口3在模式0的��� 波特率 = 定时器�������� T2的溢出率/4 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); L 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 U C M 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 C T S 当串行口3选择定时器T3作为其波特率发生器(即S3ST3/S3SCON.1=1)时: 串口3波特率在模式0 = 定时器�������� T3的溢出率/4 ,定时器����� 当T3工作在1T模式(T4T3M.1/T3x12=1)时� 3的溢出率=SYSclk / ( 65536 - [RL_TH3, RL_TL3] ); 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4 当T3工作在12T模式(T4T3M.1/T3x12=0)时� ,定时器����� 3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]); 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4 上式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 679 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.9.2 串行口3的工作模式1----9位UART,波特率可变 11位数据通过TxD3/P0.1(TxD3/P5.1)发送,通过RxD3/P0.0(RxD3/P5.0)接收。一���� 帧��� 数据包 含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位数据 位来自特殊功能寄存器S3CON的S3TB8位.接收时,第9位进入特殊功能寄存器S3CON的S3RB8 位。串行口3既可以选择定时器2作其波特率发生器,也可以选择定时器3作其波特率发生器。 所以串行口3的波特率由定时器T2的溢出率或定时器T3的溢出率决定。 当串行口3选择定时器T2作为其波特率发生器(即S3ST3/S3SCON.1=0)时: 串口3在模式1的��� 波特率 = 定时器�������� T2的溢出率/4 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); d e t i im 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 L 当串行口3选择定时器T3作为其波特率发生器(即S3ST3/S3SCON.1=1)时: U C M 串口3波特率在模式1= 定时器T3的溢出率/4 ,定时器����� 当T3工作在1T模式(T4T3M.1/T3x12=1)时� 3的溢出率=SYSclk / ( 65536 - [RL_TH3, RL_TL3] ); 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH3, RL_TL3]) / 4 C T S 当T3工作在12T模式(T4T3M.1/T3x12=0)时� ,定时器����� 3的溢出率=SYSclk /12/(65536 - [RL_TH3, RL_TL3]); 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH3, RL_TL3]) / 4 上式中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 可见,模式1和模式0一样,其波特率可通过软件对定时器2或定时器3的设置进行波特率的 选择,是可变的。 用户在程序中如何具体使用串口3 1.设置串口3的工作模式,S3CON寄存器中的S3SM0决定了串口3的2种工作模式 2.设置串口3的波特率相应的寄存器: ������� 定时器���� 3寄存器T3H / T3L 3.启动������ 定时器��� 3,让T3R位为1,������������ 定时器��������� 3就立即开始计数。 4.�� 设置T4T3M.1/T3x12,确定定时器3的速度 5.打开串口3中断����������� ,设置�������� 相应的控制位是: ES3, EA 6.如要串口3接收,将S3REN置1 即可 如要串口3发送,将数据送入S3BUF即可, 接收完成标志S3RI,发送完成标志S3TI,要由软件清0。 680 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 8.10 串行口4的相关寄存器 符号 描述 地址 S4CON S4BUF 串口4控制寄存器 84H 85H 串口4数据缓冲器 位地址及符号 MSB 复位值 LSB S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 0000,0000 xxxx,xxxx T2H 定时器2高8位,装入重装数 D6H 0000 0000B T2L 定时器2低8位,装入重装数 D7H 0000 0000B AUXR 辅助寄存器 8EH T4H T4L 定时器4高8位寄存器 D2H 0000 0000B 定时器4低8位寄存器 D3H 0000 0000B T4T3M T4和T3的控制寄存器 D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B IE2 中断允许寄存器 P_SW2 T0x12 T1x12 UART_M0x6 T2R T2_C/T AFH ET4 外围设备功能切换控制 BAH 寄存器 - ET3 - - U C M ES4 d e t i m ES3 Li - - T2x12 EXTRAM S1ST2 0000 0001B ET2 ESPI ES2 x000 0000B S4_S S3_S S2_S xxxx x000B 1. 串行口4的控制寄存器S4CON 串行口4控制寄存器S4CON用于确定串行口4的工作方式和某些控制功能。其格式如下: C T S S4CON : 串行口4控制寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 B1 S4CON 84H name S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI B0 S4RI S4SM0:指定串行口4的工作方式,如下表所示。 S4SM0 工作方式 功能说明 0 方式0 8位UART,波 (定时器T4的溢出率)/4 特率可变 1 方式1 9位UART,波 (定时器T4的溢出率)/4 特率可变 波特率 当T4T3M.5/T4x12=1时,定时器������ T4的溢出率 = SYSclk / ( 65536 - [RL_TH4, RL_TL4] ) 当T4T3M.5/T4x12=0时,定时器T����� 4的溢出率 = SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4] ) 式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 S4ST4:串口4(UART4)选择定时器4作波特率发生器的控制位。 0,�������������������� 串������������������� 行������������������ 口4选择定时器2���������� 作为其������� 波特率发生器; 1�������������������� ,������������������� 串������������������ 行����������������� 口4��������������� 选择定时器4作为其������ 波特率发生器 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 681 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 S4SM2:允许方式1多机通信控制位。 在方式1时,如果S4SM2位为1且S4REN位为1,则接收机处于地址帧筛选状态。此时 可以利用接收到的第9位(即S4RB8)来筛选地址帧:若S4RB8=1,说明该帧是地址帧, 地址信息可以进入S4BUF,并使S4RI为1,进而在中断服务程序中再进行地址号比较; 若S4RB8=0,说明该帧不是地址帧,应丢掉且保持S4RI=0。在方式1中,如果S4SM2位 为0且S4REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的S4RB8为0或1, 均可使接收到的信息进入S4BUF,并使S4RI=1,此时S4RB8通常为校验位. 方式0是非多机通信方式,在这种方式时,要设置S4SM2 应为0。 S4REN:允许/禁止串行口4接收控制位。由软件置位S4REN,即S4REN=1为允许串行接收状 态,可启动串行接收器RxD4,开始接收信息。软件复位S4REN,即S4REN=0,则禁 止接收。 S4TB8:在方式1,S4TB8为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数据 的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0中,该位不用. d e t i im S4RB8:在方式1,S4RB8是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用S4RB8(置S4SM2=0, S4RB8是接收到的停止位)。 L S4TI:发送中断请求标志位。在停止位开始发送时由S4TI内部硬件置位,即S4TI=1,响应中断 后S4TI必须用软件清零。 U C M S4RI:接收中断请求标志位。在串行接收到停止位的中间时刻S4RI由内部硬件置位,即 S4RI=1,向CPU发中断申请,响应中断后S4RI必须由软件清零。 C T S S4CON的所有位可通过整机复位信号复位为全� “ 0”� 。 S4CON的字节地址为84H,不可 位寻址。串行通信的中断请求:当一帧发送完成,内部硬件自动置位S4TI,即S4TI=1,请求 中断处理;当接收完一帧信息时,内部硬件自动置位S4RI,即S4RI=1,请求中断处理。由于 S4TI和S4RI以������������������������������� “������������������������������ 或逻辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是S4TI还是 S4RI请求的中断,必须在中断服务程序中查询S4TI和S4RI进行判别,然后分别处理。因此, 两个中断请求标志位均不能由硬件自动置位,必须通过软件清0,否则将出现一次请求多次响 应的错误。 682 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 串行口4的数据缓冲寄存器S4BUF STC15W4K60S4系列单片机的串行口4数据缓冲寄存器(S4BUF)的地址是85H,实际是2个缓 冲器,写S4BUF的操作完成待发送数据的加载,读S4BUF的操作可获得已接收到的数据。两个操 作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。 串行通道内设有数据寄存器。在所有的串行通信方式中,在写入S4BUF信号(MOV S4BUF,A)的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为 移位寄存器的输出位。根据不同的工作方式会自动将� “1”� 或S4TB8的值装入移位寄存器的第9 位,并进行发送. 串行通道的接收寄存器是一个输入移位寄存器。在方式0和方式1时均为9位。当一帧接收 完毕,移位寄存器中的数据字节装入串行数据缓冲器S4BUF中,其第9位则装入S4CON寄存器 中的S4RB8位。如果由于S4SM2使得已接收到的数据无效时,S4RB8和S4BUF中内容不变. 由于接收通道内设有输入移位寄存器和S4BUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入S4BUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从S4BUF缓冲器 中将数据取走,否则前一帧数据将丢失。S4BUF以并行方式送往内部数据总线。 U C M d e t i im L 3. 串行口4既能选择定时器2作为其波特率发生器,也能选择定时器4作为其波特率 发生器——定时器2的寄存器T2H, T2L和定时器4的寄存器T3H, T3L 定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用 于保存重装时间常数。 C T S 定时器4寄存器T4H(地址为D2H,复位值为00H)及寄存器T3L(地址为D3H,复位值为00H)用 于保存重装时间常数。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 683 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 4. 定时器2的控制位——TR2、T2_C/T、T2x12 AUXR : 辅助寄存器 (不可位寻址) SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 B4 B3 B2 T2R T2_C/T T2x12 B1 B0 EXTRAM S1ST2 T2R: 定时器2允许控制位 0, 不允许定时器2运行; 1, 允许定时器2运行 T2_C/T: 控制定时器2用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T2/P3.1的外部脉冲进行计数) T2x12: 定时器2速度控制位 0, 定时器2是传统8051速度,12分频; 1, 定时器2的速度是传统8051的12倍,不分频 如果串口1或串口2用T2作为波特率发生器,则由T2x12决定串口1或串口2是12T还是1T. U C M 5. 定时器4的控制位——TR4、T4_C/T、T4x12 T4T3M(不可位寻址) SFR name Address T4T3M D1H bit B7 name T4R C T S B6 B5 B4 d e t i im L B3 B2 B1 B0 T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO B7 - T4R:定时器4运行控制位� 。 0, 不允许定时器4运行; 1, 允许定时器4运行。 B6 - T4_C/T: 控制定时器4用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T4/P0.5的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0, 定时器4速度是8051单片机定时器的速度,即12分频; 1, 定时器4速度是8051单片机定时器速度的12倍,即不分频。 684 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 6. 与串行口4中断相关的寄存器IE2 串行口4中断允许位ES4位于中断允许寄存器IE2中,中断允许寄存器的格式如下: IE2 : 中断允许寄存器2 (不可位寻址) SFR name IE2 Address AFH bit name B7 - B6 ET4 B5 ET3 B4 ES4 B3 ES3 B2 ET2 B1 ESPI B0 ES2 ET4:定时器4的中断允许位。 1,允许定时器4产生中断; 0,禁止定时器4产生中断。 ET3:定时器3的中断允许位。 1,允许定时器3产生中断; 0,禁止定时器3产生中断。 d e t i im ES4 : 串行口4中断允许位。 1,允许串行口4中断; 0,禁止串行口4中断 ES3 : 串行口3中断允许位。 1,允许串行口3中断; 0,禁止串行口3中断。 ET2:定时器2的中断允许位。 1,允许定时器2产生中断; 0,禁止定时器2产生中断。 C T S L U C M ESPI:SPI中断允许位。 1,允许SPI中断; 0,禁止SPI中断。 ES2 : 串行口2中断允许位。 1,允许串行口2中断; 0,禁止串行口2中断。 IE : 中断允许寄存器 (可位寻址) SFR name Address bit B7 IE A8H name EA B6 B5 ELVD EADC B4 B3 B2 B1 B0 ES ET1 EX1 ET0 EX0 EA : CPU的总中断允许控制位 EA=1,CPU开放中断, EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的 中断允许控制位控制。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 685 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 7. 串行口4在2组管脚之间切换的控制位——S4_S/P_SW2.2 通过设置寄存器P_SW2中的S4_S位,可以将串口4在2组管脚之间任意切换,P_SW2寄存器的 格式如下: P_SW2 : 外围设备切换控制寄存器2 (不可位寻址) Mnemonic Add P_SW2 Name 7 6 5 4 3 外围设备功能切换 BAH 控制寄存器2 2 1 0 Reset Value S4_S S3_S S2_S xxxx,x000 串口2/������������� S2����������� 可在2个地方切换,由 ����������� S2_S 控制位来选择 S2_S S2可在P1/P4之间来回切换 0 串口2/S2在[P1.0/RxD2,P1.1/TxD2] 1 串口2/S2在[P4.6/RxD2_2,P4.7/TxD2_2] 串口3/������������� S3����������� 可在2个地方切换,由 ����������� S3_S 控制位来选择 S3_S S3可在P0/P5之间来回切换 0 串口3/S3在[P0.0/RxD3,P0.1/TxD3] 1 串口3/S3在[P5.0/RxD3_2,P5.1/TxD3_2] U C M 串口4/������������� S4����������� 可在2个地方切换,由 ����������� S4_S 控制位来选择 S4_S S4可在P0/P5之间来回切换 0 串口4/S4在[P0.2/RxD4,P0.3/TxD4] 1 串口4/S4在[P5.2/RxD4_2,P5.3/TxD4_2] C T S 686 南通国芯微电子有限公司 d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.11 串行口4工作模式 STC15W4K60S4系列单片机的串行口4有两种工作模式,可通过软件编程对S4CON中的 S4SM0的设置进行选择。其中模式0和模式1都为异步通信,每个发送和接收的字符都带有1个 启动位和1个停止位。 8.11.1 串行口4的工作模式0----8位UART,波特率可变 10����� 位数据通过RxD4/P0.2(RxD4_2/P5.2)接收,通过TxD4/P0.3(TxD4_2/P5.3)发送。一帧 数据包含一个起始位����������������������������������� (0),8������������������������������ 个数据位和一个停止位�������������������� (1)����������������� 。接收时,停止位进入特殊功能寄存器 S4CON的S4RB8位。串行口4既可以选择定时器2作其波特率发生器,也可以选择定时器4作其 波特率发生器。所以串行口4的波特率由定时器T2的溢出率或定时器T4的溢出率决定。 d e t i im 当串行口4选择定时器T2作为其波特率发生器(即S4ST4/S4SCON.1=0)时: 串口4在模式0的��� 波特率 = 定时器�������� T2的溢出率/4 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); L 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 U C M 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 C T S 当串行口4选择定时器T4作为其波特率发生器(即S4ST4/S4SCON.1=1)时: 串口4在模式0的��� 波特率 = 定时器�������� T4的溢出率/4 ,定时器����� 当T4工作在1T模式(T4T3M.5/T4x12=1)时� 4的溢出率=SYSclk / ( 65536 - [RL_TH4, RL_TL4] ); 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4 当T4工作在12T模式(T4T3M.5/T4x12=0)时� ,定时器����� 4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]); 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4 上式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 687 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.11.2 串行口4的工作模式1----9位UART,波特率可变 11位数据通过TxD4/P0.3(TxD4_2/P5.3)发送,通过RxD4/P0.2(RxD4_2/P5.2)接收。一�� 帧� 数 据包含一个起始位(0),8个数据位,一个可编程的第9位,和一个停止位(1)。发送时,第9位 数据位来自特殊功能寄存器S4CON的S4TB8位.接收时,第9位进入特殊功能寄存器S4CON的 S4RB8位。串行口4既可以选择定时器2作其波特率发生器,也可以选择定时器4作其波特率发 生器。所以串行口4的波特率由定时器T2的溢出率或定时器T4的溢出率决定。 当串行口4选择定时器T2作为其波特率发生器(即S4ST4/S4SCON.1=0)时: 串口4在模式1的��� 波特率 = 定时器�������� T2的溢出率/4 ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); d e t i im 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 L 当串行口4选择定时器T4作为其波特率发生器(即S4ST4/S4SCON.1=1)时: U C M 串口4在模式1的��� 波特率= 定时器T4的溢出率/4 ,定时器����� 当T4工作在1T模式(T4T3M.5/T4x12=1)时� 4的溢出率=SYSclk / ( 65536 - [RL_TH4, RL_TL4] ); 即此时,串行口4的波特率=SYSclk / ( 65536 - [RL_TH4, RL_TL4]) / 4 C T S 当T4工作在12T模式(T4T3M.5/T4x12=0)时� ,定时器����� 4的溢出率=SYSclk /12/(65536 - [RL_TH4, RL_TL4]); 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4 上式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 可见,模式1和模式0一样,其波特率可通过软件对定时器2的设置进行波特率的选择,是 可变的。 用户在程序中如何具体使用串口4 1.设置串口4的工作模式,S4CON寄存器中的S4SM0决定了串口4的2种工作模式 2.设置串口4的波特率相应的寄存器: ������� 定时器���� 4寄存器T4H / T4L 3.启动������ 定时器��� 4,让T4R位为1,������������ 定时器��������� 4就立即开始计数。 4.�� 设置T4T3M.5/T4x12,确定定时器4的速度 5.打开串口4中断����������� ,设置�������� 相应的控制位是: ES4, EA 6.如要串口4接收,将S4REN置1 即可 如要串口4发送,将数据送入S4BUF即可, 接收完成标志S4RI,发送完成标志S4TI,要由软件清0。 688 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.12 双机通信 STC15系列单片机的串行通信根据其应用可分为双机通信和多机通信两种。下面先介绍双 机通信。 如果两个8051应用系统相距很近,可将它们的串行端口直接相连(TXD—RXD,RXD— 地),即可实现双机通信。为了增加通信距离,减少通道及电源干扰, TXD,GND—GND—������������������������������� 可采用RS—232C或RS—422、RS—485标准进行双机通信,两通信系统之间采用光����� —���� 电隔离技 术,以减少通道及电源的干扰,提高通信可靠性。 8051 TxD RxD RxD TxD GND GND U C M d e t i im 8051 L 为确保通信成功,通信双方必须在软件上有系列的约定通常称为软件通信������� “������ 协议���� ”��� 。现举 例简介双机异步通信软件������� “������ 协议���� ”��� 如下: C T S 通信双方均选用2400波特的传输速率,设系统的主频SYSclk=6MHz,甲机发送数据,乙机 接收数据。在双机开始通信时,先由甲机发送一个呼叫信号(例如� “06H”�������� ),以询问乙机是 否可以接收数据;乙机接收到呼叫信号后,若同意接收数据,则发回� “00H”������� 作为应答信号, 否则发� “05H”��������������������������� 表示暂不能接收数据,;甲机只有在接收到乙机的应答信号� “00H”���� 后才可将 存储在外部数据存储器中的内容逐一发送给乙机,否则继续向乙机发呼叫信号,直到乙机同意 接收。其发送数据格式如下: 字节数n 数据1 数据2 数据3 … 数据n 累加校验和 字节数n:甲机向乙机发送的数据个数; 数据1~数据n:甲机将向乙机发送的n帧数据; 累加校验和:为字节数n、数据1、���� …��� 、数据n,这(n+1)个字节内容的算术累加和. 乙机根据接收到的������������ “����������� 校验和�������� ”������� 判断已接收到的n个数据是否正确。若接收正确,向甲机回发 “0FH”��������� 信号才算完成发送任 “0FH”信号,否则回发“F0H”信号。甲机只有在接收到乙机发回的� 务,返回被调用的程序,否则继续呼叫,重发数据。 不同的通信要求,软件����������������������������� “���������������������������� 协议�������������������������� ”������������������������� 内容也不一样,有关需甲、乙双方共同遵守的约定应尽量 完善,以防止通信不能正确判别而失败。 STC15系列单片机的串行通信,可直接采用查询法,也可采用自动中断法。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 689 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 (1)������������ 查询方式双机通信软件举例 ①�������� 甲机发送子程序段 下图为甲机发送子程序流程图。 开始 定时器,串行口初始化 发送数据 地址指针DPTR,长度计数器 R7,校验寄存器R6置初值 发送完否? N Y 发送校验和 d e t i im 发送呼叫信号06H 等待乙机回答 等待乙机回答 N 是00H? Y C T S 发字节长度数 CU N L M 传送正确吗? Y 返回 甲机发送程序设置: (a) �������������������������������������������� 波特率设置:选用定时器��������������������������������� /�������������������������������� 计数器����������������������������� 1���������������������������� 定时模式、工作方式������������������� 2������������������ ,计数常数������������� F3H���������� ,��������� SMOD=1��� 。波 特率为���������� 2400������ (位���� /��� 秒); (b) �������������������� 串行通信设置:异步通信方式������� 1������ ,允许接收; (c) �������������� 内部������������ RAM��������� 和工作寄存器设置: 31H������������������ ��������������������� 和����������������� 30H�������������� 单元存放发送的数据块首地址; 2FH������������� ���������������� 单元存放发送的数据块个数; R6�������� ���������� 为累加和寄存器。 690 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 甲机发送子程序清单: START: MOV MOV MOV MOV MOV SETB ST-RAM: MOV MOV MOV MOV TX-ACK: MOV MOV WAIT1: JBC SJMP RX-YES: JBC SJMP NEXT1: MOV CJNE TX-BYT: MOV TMOD,#20H TH1, #0F3H TL1, #0F3H SCON, #50H PCON, #80H TR1 ;设置定时器/计数器1定时、工作方式2 ;设置定时计数常数 ; ;串口初始化 ;设置SMOD=1 ;启动定时 DPH, DPL, R7, R6, 31H 30H 2FH #00H ;设置外部RAM数据指针 ;DPTR初值 ;发送数据块数送R7 ;累加和寄存器R6清0 A, #06H ; SBUF, A ; T1, WAIT1 ;等待发送完呼叫信号 ;未发送完转WATI1 RX – YES RI, NEXT1 RX-YES C T S d e t i im 发送呼叫信号“06H” U C M L ;判断乙机回答信号 ;未收到回答信号,则等待 A, A, SBUF ;接收回答信号送A #00H, TX-ACK ;判断是否“00H”,否则重发呼叫信号 A, R7 ; MOV SBUF, ADD A, MOV R6, WAIT2: JBC TI, A R6 A ; TX-NES ; JMP TX-NES: MOVX MOV ADD MOV INC WAIT2 ; A, SBUF, A, R6, DPTR @DPTR A R6 A ;从外部RAM取发送数据 ;发送数据块 南通国芯微电子有限公司 发送数据块数n 等待发送完 ;DPTR指针加1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 691 STC15F2K60S2系列单片机指南 WAIT3: JBC SJMP NEXT2: DJNZ TX-SUM: MOV MOV WAIT4: JBC NEXT2 ;判断一数据块发送完否 ;等待发送完 R7, TX-NES ;判断发送全部结束否 A, R6 SBUF, A TI, SJMP IF-0FH: MOV RX-0FH RI, A, A, ; 等待发送完 ; IF-0FH 研发顾问Tel:13922805190 ;发送累加和给乙机 RX-0FH WAIT4 CJNE RET 临时技术支持Tel:13922829991 TI, WAIT3 SJMP RX-0FH: JBC 技术支持网站:www.GXWMCU.com ; 等待接收乙机回答信号 ; d e t i im ; 判断传输是否正确,否则重新发送 #0FH, ST-RAM ; ;返回 SBUF; C T S U C M L 乙机接收子程序段 接收程序段的设置: (a) ��������������� 波特率设置初始化:同发送程序; (b) �������������� 串行通信初始化:同发送程序; (c) ������ 寄存器设置: 内部RAM 31H、30H单元存放接收数据缓冲区首地址。 R7——数据块个数寄存器。 R6——累加和寄存器。 (d) ��������� 向甲机回答信号:“0FH”为接收正确,“F0H”为传送出错,“00H”为同意接收数 据,“05H”为暂不接收。 692 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 下图为双机通信查询方式乙机接收子程序流程图。 开始 定时器,串行口初始化 接收数据并存入RAM 地址指针DPTR赋值, 校验寄存器清0 地址指针DPTR加1 数据接收完否? N Y 接收呼叫信号 接收校验和 是06H? d e t i im Y 传送正确吗? N 向甲机回送15H 向甲机回送00H C T S 接收数据块长度 U C M Y N L 向甲机回送F0H 向甲机回送0FH 返回 接收子程序清单: TART: MOV MOV TMOD, #20H TH1, #0F3H ; TL1, #0F3H TR1 SCON, #50H 定时器/计数器1设置 ; ;启动定时器/计数器1 ; 置串行通信方式1,允许接收 MOV ST-RAM: MOV PCON, #80H ; DPH, 31H ; DPL, 30H R6, #00H MOV SETB MOV MOV MOV 南通国芯微电子有限公司 SMOD置位 设置DPTR首地址 ; ;校验和寄存器清0 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 693 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RX-ACK: JBC RI, SJMP RX-ACK MOV A, CJNEA #06H, TX-05H IF-06H ;判断接收呼叫信号 ;等待接收呼叫信号 IF-06H: SBUF ;呼叫信号送A ;判断呼叫信号正确否? TX-00H: MOV A, #00H MOV WAIT1: SBUF, A JBC TI, SJMP WAIT1 ; ; RX-BYS 向甲机发送“00H”,同意接收 ;等待应答信号发送完 d e t i im TX-05H: MOV A, #05H MOV SBUF, A ;向甲机发送“05H”呼叫 ;不正确信号 WAIT2:  JBC TI, SJMP WAIT2 HAVE1:  RX-BYS: JBC RI, HAVE2 SJMP RX-BYS L ;因呼叫错,返回重新接收呼叫 C T S LJMP RX-ACK ;等待发送完 U C M HAVE1 ;等待接收数据块个数 ; HAVE2: MOV A, SBUF ; MOV R7, A ;数据块个数帧送R7,R6 MOV R6, A ; RX-NES: JBC RI, HAVE3 SJMP RX-NES HAVE3: MOV MOVX @DPTR,A INC DPTR ADD A, R6 MOV DJNZ R6, R7, A RX-NES 694 ; A, ; SBUF ; ;接收到的数据存入外部RAM ; 南通国芯微电子有限公司 接收数据帧 ; 形成累加和 ; ;判断数据是否接收完 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 RX-SUM: JBC RI, SJMP RX-SUM HAVE4: ; ; HAVE4 MOV A, SBUF CJNE TX-RIT: A, R6, A, #0FH MOV MOV WAIT3: SBUF, A TI, JBC WAIT3 MOV A, MOV SBUF, A JBC TI, ; ; ; ; ; GOOD SJMP TX-ERR: ; TX-ERR #0F0H AGAIN 等待发送结束 SJMP WAIT4 AGAIN: LJMP C T S ST-RAM GOOD: RET d e t i im ;向甲机发送传输有误信号 L ;等待发送完 U C M 判断传输是否正确 向甲机发送接收正确信息 WAIT4: 等待接收校验和 ;返回重新开始接收 ;传输正确返回 (2)中断方式双机通信软件举例 在很多应用场合,双机通信的双方或一方采用中断方式以提高通信效率。由于STC15系列 单片机的串行通信是双工的,且中断系统只提供一个中断矢量入口地址,所以实际上是中断和 查询必须相结合,即接收/发送均可各自请求中断,响应中断时主机并不知道是谁请求中断, 统一转入同一个中断矢量入口,必须由中断服务程序查询确定并转入对应的服务程序进行处 理。 这里,任以上述协议为例,甲方(发送方)任以查询方式通信(从略),乙方(接收方) 则改用中断���������� —��������� 查询方式进行通信。 在中断接收服务程序中,需设置三个标志位来判断所接收的信息是呼叫信号还是数据块个 数,是数据还是校验和。增设寄存器:内部RAM32H单元为数据块个数寄存器,33H单元为校 验和寄存器,位地址7FH、7EH、7DH为标志位。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 695 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 乙机接收中断服务程序清单 采用中断方式时,应在主程序中安排定时器/计数器、串行通信等初始化程序。通信接收的数据存放在外 部RAM的首地址也需在主程序中确定。 主程序: ORG AJMP START 0000H ORG 0023H LIMP SERVE ;转至主程序起始处 ;转中断服务程序处 · · · START: 696 MOV TMOD, #20H MOV TH1, #0F3H MOV MOV TL1, #0F3H SCON, #50H MOV PCON, #80H SETB TR1 SETB 7FH SETB 7EH SETB 7DH MOV 31H,#10H MOV MOV SETB SETB 30H,#00H 33H,#00H EA ES C T S d e t i im ;定义定时器/计数器1定时、工作方式2 ; 设置波特率为2400位/秒 ; ;设置串行通信方式1,允许接收 U C M ;设置SMOD=1 L ;启动定时器 ; ;设置标志位为1 ; ; 规定接收的数据存储于外部RAM的 ; 起始地址1000H ;累加和单元清0 ; ; 开中断 · · · 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 中断服务程序: SERVE: CLR EA ;关中断 CLR RI ;清除接收中断请求标志 PUSH DPH ; PUSH DPL ; 现场保护 PUSH A JB 7FH, RXACK ;判断是否是呼叫信号 JB 7EH, RXBYS ;判断是否是数据块数据 JB 7DH, RXDATA ;判断是否是接收数据帧 MOV A, ;接收到的校验和 CJNE A, 33H, TXERR :判断传输是否正确 MOV A, ; ; ; RXSUM: SBUF d e t i im TXRI: #0FH MOV WAIT1: SBUF, A JNB TI, WAIT1 CLR TI SJMP AGAIN MOV A, TI, CLR TI SJMP AGAIN ;转结束处理 ; ; #0F0H SBUF, A JNB ;清除发送中断请求标志位 MOV WAIT2: U C M ;等待发送完毕 C T S TXERR: WAIT2 L 向甲机发送接收正确信号“0FH” 向甲机发送接收出错信号“F0H” ;等待发送完毕 ;清除发送中断请求标志 ;转结束处理 RXACK: MOV A, SBUF ;判断是否是呼叫信号“06H” XRL A, #06H ;异或逻辑处理 JZ TXREE ;是呼叫,则转TXREE TXNACK: MOV A, MOV SBUF, A 南通国芯微电子有限公司 #05H ;接收到的不是呼叫信号,则向甲机发送 ;“05H”,要求重发呼叫 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 697 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 WAIT3: JNB TI, CLR TI SJMP RETURN WAIT3 ; 等待发送结束 ;转恢复现场处理 TXREE: MOV A, MOV SBUF, A ;接收到的是呼叫信号,发送“00H” ;接收到的是呼叫信号,发送“00H” #00H WAIT4: JNB TI, CLR TI CLR 7FH SJMP RETURN WAIT4 ;等待发送完毕 ;清除TI标志 ;清除呼叫标志 ;转恢复现场处理 d e t i im RXBYS: MOV A, MOV 32H, A ADD A, MOV CLR 33H, A 7EH SJMP RETURN RXDATA: ;接收到数据块数 ;存入32H单元 33H ; U C M ;转恢复现场处理 C T S L 形成累加和 ; ;清除数据块数标志 ; MOV DPH, 31H MOV MOV DPL, 30H A, SBUF MOVX @DPTR, A 698 SBUF 设置存储数据地址指针 ; ;读取数据帧 ;将数据存外部RAM ;地址指针加1 INC DPTR MOV 31H, DPH ; 30H, DPL A, 33H MOV ADD ; ; MOV DJNZ 33H, A 32H, RETURN 形成累加和 ; ;判断数据接收完否 CLR 7DH ;清数据接收完标志 SJMP RETURN 南通国芯微电子有限公司 保存地址指针值 ;转恢复现场处理 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 AGAIN: SETB 7FH ; SETB 7EH ;恢复标志位 SETB 7DH ; MOV 33H, #00H ;累加和单元清0 MOV 31H, #10H ; MOV RETURN: 30H, ; POP A ; POP DPL ;恢复现场 POP DPH ; SETB EA RET1 #00H 恢复接收数据缓冲区首地址 ;开中断 d e t i im ;返回 L 上述程序清单中,ORG为程序段说明伪指令,在程序汇编时,它向汇编程序说明该程序段 的起始地址。 U C M 在实际应用中情况多种多样,而且是两台独立的计算机之间进行信息传输。因此,应周密 考虑通信协议,以保证通信的正确性和成功率 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 699 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.13 多机通信 在很多实际应用系统中,需要多台微计算机协调工作。STC15系列单片机的串行通信方 式2和方式3具有多机通信功能,可构成各种分布式通信系统。下图为全双工主从式多机通信 系统的连接框图。 TxD STC MCU RxD 主机 TxD RxD STC MCU 从机1 TxD d e t i im RxD L STC MCU 从机2 U C M TxD … RxD STC MCU 从机n 上图为一台主机和几台从机组成的全双工多机通信系统。主机可与任一台从机通信,而从 机之间的通信必须通过知己转发。 C T S (1)��������� 多机通信的基本原理 在多机通信系统中,为保证主机(发送)与多台从机(接收)之间能可靠通信,串行通 信必须具备识别能力。����������������������������������� MCS-51����������������������������� 系列单片机的串行通信控制寄存器�������������� SCON���������� 中设有多机通信选择位 SM2�������������������������������������������� 。当程序设置�������������������������������������� SM2=1��������������������������������� ,串行通信工作于方式����������������������� 2���������������������� 或方式������������������� 8������������������ ,发送端通过对����������� TB8�������� 的设置以区别于发 送的是地址帧(������������������������������������������� TB8=1�������������������������������������� )还是数据帧(������������������������������� TB8=0�������������������������� ),接收端通过对接收到��������������� RB8������������ 进行识别:当������ SM2=1� , 若接收到��������������������������������������������� RB8=1���������������������������������������� ,则被确认为呼叫地址帧,将该帧内容装入��������������������� SBUF����������������� 中,并置位������������ RI=1�������� ,向������ CPU��� 请求中 断,进行地址呼叫处理;若���������������������������������� RB8=0����������������������������� 为数据帧,将不予理睬,接收的信息被丢弃。若�������� SM2=0��� ,则无 论是地址帧还是数据帧均接收,并置位����������������������������� RI=1������������������������� ,向����������������������� CPU�������������������� 请求中断,将该帧内容装入�������� SBUF���� 。据此原 理,可实现多机通信。 对于上图的从机式多机通信系统,从机的地址为�������������������� 0������������������� ,������������������ 1����������������� ,���������������� 2��������������� ,�������������� …������������� ,������������ n����������� 。实现多机通信的过程如 下: ① ����������������������� 置全部从机的����������������� SM2=1������������ ,处于只接收地址帧状态。 ② 主机首先发送呼叫地址帧信息,将���������������������� ������������������������������������� TB8������������������� 设置为���������������� 1��������������� ,以表示发送的是������� 呼叫地址帧。 ������ ③ ������������������������������������ 所有从机接收到呼叫地址帧后,各自将接收到的主机呼叫的地址与本机的地址相比 较:若比较结果相等,则为被寻址从机,清除����������������������� SM2=0������������������ ,准备接收从主机发送的数据帧,直至全 部数据传输完;若比较不相等,则为非寻址从机,任维持������������������ SM2=1������������� 不变,对其后发来的数据帧不 予理睬,即接收到的数据帧内容不装入���������������������������� SBUF������������������������ ,不置位,������������������� RI=0��������������� ,不会产生中断请求,直至被寻址 为止。 700 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ④ 主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的� ����������������������������� TB8=0�������������� ,以表示为数据帧。����� ⑤ ������������������������������������� 当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机,原先被寻址的从机经分 析得知主机在寻呼其他从机时,恢复其���������������������� SM2=1����������������� ,对其后主机发送的数据帧不予理睬。 上述过程均在软件控制下实现。 (2)�������� 多机通信协议简述 由于串行通信是在二台或多台各自完全独立的系统之间进行信息传输这就需要根据时间通 信要求制定某些约定,作为通信规范遵照执行,协议要求严格、完善,不同的通信要求,协议 的内容也不相同。在多机通信系统中要考虑的问题较多,协议内容比较复杂。这里仅例举几条 作一说明。 上图的主从式多机通信系统,允许配置���������������� 255������������� 台从机,各从机的地址分别为00H~FEH。 d e t i im ① ������������������������������������������ 约定地址�������������������������������������� FFH����������������������������������� 为全部从机的控制命令,命令各从机恢复����������������� SM2=1������������ 状态,准备接收主机的地 址呼叫。 L ② 主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址 �������������������������������������� 给主机,经验证地址相符后主机再向被寻址的从机发送命令字,被寻址的从机根据命 令字要求回送本机的状态,若主机判断状态正常,主机即开始发送或接收数据帧,发 送或接收的第一帧为传输数据块长度。 ③ ������������ 约定主机发送的命令字为: C T S 00H����������� :要求从机接收数据块; U C M 01H����������� :要求从机发送数据块; · · · 其他:非法命令。 ④ ������������ 从机的状态字格式约定为: B7 B6 B5 B4 B3 B2 B1 B0 ERR 0 0 0 0 0 TRDY RRDY ��������������������� 定义: 若���������������� ERR=1����������� ,从机接收到非法命令; ����������������� 若���������������� TRDY=1���������� ,从机发送准备就绪; ����������������� 若���������������� RRDY=1���������� ,从机接收准备就绪; ⑤ ������������ 其他:如传输出错措施等。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 701 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 (3)���� 程序举例 在实际应用中如传输波特率不太高,系统实时性有一定要求以及希望提高通信效率,则多 半采用中断控制方式,但程序调试较困难,这就要求提高程序编制的正确性。采用查询方式, 则程序调试较方便。这里仅以中断控制方式为例简单介绍主������������� —������������ 从机之间一对一通信软件。 ① 主机发送程序 ������ 该主机要发送的数据存放在内部����������������������������� RAM�������������������������� 中,数据块的首地址为���������������� 51H������������� ,数据块长度存放做���� 50H� 单 元中,有关发送前的初始化、参数设置等采用子程序格式,所有信息发送均由中断服务程序完 成。当主机需要发送时,在完成发送子程序的调用之后,随即返回主程序继续执行。以后只需 查询��������������������������� PSW·5���������������������� 的��������������������� F0������������������� 标志位的状态即可知道数据是否发送完毕。 要求主机向��������������������� #5������������������� 从机发送数据,中断服务程序选用工作寄存存器区1的R0~R7。 d e t i im 主机发送程序清单: ORG AJMP MAIN ORG 0023H LJMP SERVE 0000H . . . MAIN: ... ... C T S . . . ORG 1000H ;转主程序 ;转中断服务程序 U C M L ;发送中断服务程序入口 ;主程序 ;发送子程序入口 TXCALL: ;设置定时器/计数器1定时、方式2 MOV TMOD, #20H MOV TH1, #0F3H ;设置波特率为2400位/秒 ;置位SMOD MOV TL1, #0F3H MOV PCON, #80H SETB TR1 MOV SCON, #0D8H SETB EA ;开中断总控制位 CLR ES ;禁止串行通信中断 ; ;启动定时器/计数器1 ;串行方式8,允许接收,TB8=1 TXADDR: MOV SBUF, #05H JNB TI, CLR TI ;发送呼叫从机地址 WAIT1: 702 WAIT1 南通国芯微电子有限公司 ;等待发送完毕 ;复位发送中断请求标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 RXADDR: ;等待从机回答本机地址 ;复位接收中断请求标志 JNB RI, RXADDR CLR TI MOV A, SBUF CJNE A, #05H, TXADDR CLR TB8 CLR PSW.5 MOV 08H, #50H MOV 0CH, 50H INC 0CH SETB ES RET ;读取从机回答的本机地址 ;判断呼叫地址符否,否则重发 ;地址相符,复位TB8=0,准备发数据 ;复位F0=0标志位 ;发送数据地址指针送R0 ;数据块长度送R4 ;数据块长度加1 ;允许串行通信中断 ;返回主程序 SERVE: CLR TI PUSH PSW PUSH A CLR RS1 C T S SETB TXDATA: RS0 MOV SBUF, @R0 WAIT2: WAIT2 ; CU M L ;中断服务程序段,清中断请求标志TI d e t i im . . . ; ; ; 现场入栈保护 选择工作寄存器组1 ;发送数据块长度及数据 ;等待发送完毕 JNB TI, CLR TI INC R0 DJNZ R4, SETB PSW.5 ;已发送完毕置位F0=1 CLR ES ;关闭串行中断 ;复位TI=0 ;地址指针加1 RETURN ;数据块未发送完,转返回 RETURN: POP A POP RETI PSW 南通国芯微电子有限公司 ; 恢复现场 ; ;返回 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 703 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ②������ 从机接收程序 主机发送的地址呼叫帧,所有的从机均接收,若不是呼叫本机地址即从中断返回;若是本 机地址,则回送本机地址给主机作为应答,并开始接收主机发送来的数据块长度帧,并存放于 内部RAM的60H单元中,紧接着接收的数据帧存放于61H为首地址的内部RAM单元中,程序 中还选用20·0H、20·1H位作标志位,用来判断接收的是地址、数据块长度还是数据,选用了 2FH、2EH两个字节单元用于存放数据字节数和存储数据指针。#5从机的接收程序如下,供参 考。 #5从机接收程序清单: ORG 0000H AJMP START ORG 0023H LJMP SERVE ORG 0100H ;转主程序段 ;从中断入口转中断服务程序 START: L ;主程序段:初始化程序,设置定时 MOV TMOD, #20H MOV TH1, #0F3H MOV TL1, #0F3H MOV PCON, #80H MOV SCON, #0F0H SETB TR1 ;启动定时器/计数器1 SETB 20·0 ; SETB SETB 20·1 EA ; ; SETB . . . ES ; ORG 1000H C T S SERVE: CLR RI PUSH A 704 d e t i im ;器/计数器1定时、工作方式2,设 U C M ;置波特率为2400位/秒的有关初值 ;置位SMOD ;设置串行方式3,允许接收,SM2=1 置标志位为1 开中断 PUSH PSW CLR RS1 SETB JB RS0 20·0H, ISADDR ;清接收中断请求标志RI=0 ; 现场保护 ; ; 选择工作寄存器组1 ; ;判断是否是地址帧 JB 20·1H, ISBYTE ;判断是否是数据块长度帧 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15F2K60S2系列单片机指南 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ISDATA: ;数据指针送R0 MOV R0, 2EH MOV A, SBUF MOV @R0, A INC 2EH DJNZ 2FH, RETURN SETB 20·0H ; SETB 20·1H ;恢复标志位 SETB SM2 SJMP RETURN ;接收数据 ;数据指针加1 ;判断数据接收完否? ; ;转入恢复现场,返回 ISADDR: MOV A, SBUF CJNE MOV A, #05H, RETURN SBUF, #01H JNB TI, CLR TI CLR 20·0H CLR SM2 SJMP RETURN ; 是地址呼叫,判断与本机地址 d e t i im 相符否,不符则转返回 ; ;相符,发回答信号“01H” WAIT: U C M L ;等待发送结束 ;清0TI,20·0,SM2 ;清0TI,20·0,SM2 C T S ISBYTES: WAIT ;清0TI,20·0,SM2 ;转返回 ;接收数据块长度帧 MOV A, SBUF MOV R0, #60H MOV @R0, A ;将数据块长度存入内部RAM MOV 2FH, A ;60H单元及2FH单元 MOV 2EH, #61H CLR 20·1H ; ;置首地址61H于2EH单元 ;清20·1H标志,表示以后接收的为数据 RETURN: POP PSW POP RETI A ; 恢复现场 ; ;返回 多机通信方式可多种多样,上例仅以最简单的住一从式作了简单介绍,仅供参考。 对于串行通信工作方式0的同步方式,常用于通过移位寄存器进行扩展并行I/O口,或配置 某些串行通信接口的外部设备。例如,串行打印机、显示器等。这里就不一一举例了。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 705 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.14 串口1作为增强型串口使用时的自动地址识别功能 8.14.1 与串口1自动地址识别功能相关的特殊功能寄存器 符号 描述 地址 SCON 串口控制寄存器 98H 位地址及符号 MSB SM0/FE LSB SM1 SM2 REN TB8 RB8 TI RI 复位值 0000 0000B 串口发送/接收数据缓冲器 99H xxxx xxxxB SADEN 从机地址屏蔽位寄存器 B9H 0000 0000B SBUF 从机地址寄存器 SADDR A9H 0000 0000B 1. 串行口1的控制寄存器SCON 串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下: d e t i im SCON : 串行控制寄存器 (可位寻址) SFR name SCON Address 98H bit name B7 SM0/FE B6 SM1 B5 SM2 U C M B4 REN L B3 TB8 B2 RB8 B1 TI B0 RI SM0/FE:当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个 无效停止位时,通过UART接收器设置该位。它必须由软件清零。 当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作 方式,如下表所示。 C T S 其中SM0、SM1按下列组合确定串行口1的工作方式: SM0 SM1 工作方式 0 0 0 1 方式0 方式1 功能说明 波特率 同步移位串行方 式:移位寄存器 8位UART, 波特率可变 当UART_M0x6 = 0时,波特率是SYSclk/12, 当UART_M0x6 = 1时,波特率是SYSclk / 2 串行口1用定时器1作为其波特率发生器且定时器1工作于模式 0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器 时,波特率=�(定时器1的溢出率或定时器T�������� 2的溢出率)�� /4. 注意:此时波特率与SMOD无关。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�) 1 1 0 1 方式2 方式3 9位UART 9位UART, 波特率可变 (2 SMOD / 64) x SYSclk系统工作时钟频率 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 0(16位自动重装载模式)或串行口用定时器2作为其波特率发生器 时,波特率=�(定时器1的溢出率或定时器T�������� 2的溢出率)�� /4. 注意:此时波特率与SMOD无关。 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式 2(8位自动重装模式)时,波特率=( 2SMOD/32 )×(定时器1的溢出率�) 706 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 SM2:允许方式2或方式3多机通信控制位。 在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时 可以利用接收到的第9位(即RB8)来筛选地址帧:若RB8=1,说明该帧是地址帧,地址信 息可以进入SBUF,并使RI为1,进而在中断服务程序中再进行地址号比较;若RB8=0, 说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位 为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的 信息进入SBUF,并使RI=1,此时RB8通常为校验位. 方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2 应为0。 REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动 串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。 TB8: 在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。例如,可用作数 据的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0和方式1中,该位不用. d e t i im RB8: 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用RB8(置SM2=0). 方式1中也不用RB8(置SM2=0, RB8是接收到的停止位)。 L TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位, 即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中, 则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。 RI: 接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1, 向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收 到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须 由软件清零。 C T S U C M SCON的所有位可通过整机复位信号复位为全� “ 0”� 。 SCON的字节地址为98H,可位寻 址,各位地址为98H~~9FH,可用软件实现位设置。 串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理; 当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以��� “�� 或逻 辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在 中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬 件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 707 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 串行口数据缓冲寄存器SBUF STC15系列单片机的串行口1缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF 的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个 不同的寄存器,1个是只写寄存器,1个是只读寄存器。 串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号(MOV SBUF,A) 的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的 输出位。根据不同的工作方式会自动将� “1”� 或TB8的值装入移位寄存器的第9位,并进行发送. 串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为 9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入 SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变. 由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中 将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。 3. 从机地址控制寄存器SADEN和SADDR U C M d e t i im L 为了方便多机通信,STC15系列单片机设置了从机地址控制寄存器SADEN和SADDR。其中 SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址寄存器(地址为 A9H,复位值为00H)。 C T S 708 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.14.2 串口1自动地址识别功能的介绍 自动地址识别功能典型应用在多机通讯领域,其主要原理是从机系统通过硬件比较功能来 识别来自于主机串口数据流中的地址信息,通过寄存器SADDR和SADEN设置的本机的从机地址, 硬件自动对从机地址进行过滤,当来自于主机的从机地址信息与本机所设置的从机地址相匹配 时,硬件产生串口中断;否则硬件自动丢弃串口数据,而不产生中断。当众多处于空闲模式的 从机链接在一起时,只有从机地址相匹配的从机才会从空闲模式唤醒,从而可以大大降低从机 MCU的功耗,即使从机处于正常工作状态也可避免不停地进入串口中断而降低系统执行效率。 要使用串口的自动地址识别功能,首先需要将参与通讯的MCU的串口通讯模式设置为模式2 或者模式3(通常都选择波特率可变的模式3,因为模式2的波特率是固定的,不便于调节), 并开启从机的SCON的SM2位。对于串口模式2或者模式3的9位数据位中,第9位数据(存放在RB8 中)为地址/数据的标志位,当第9位数据为1时,表示前面的8位数据(存放在SBUF中)为地址 信息。当SM2=1时,从机MCU会自动过滤掉非地址数据(第9位为0的数据),而对SBUF中的地 址数据(第9位为1的数据)自动与SADDR和SADEN所设置的本机地址进行比较,若地址相匹配, 则会将RI置“1”,并产生中断,否则不予处理本次接收的串口数据。 d e t i im L 从机地址的设置是通过SADDR和SADEN两个寄存器进行设置的。SADDR为从机地址寄存器, 里面存放本机的从机地址。SADEN为从机地址屏蔽位寄存器,用于设置地址信息中的“don’t care bit”(忽略位),设置方法如下: C T S U C M 例如 SADDR = 11001010 SADEN = 10000001 则匹配地址为 1xxxxxx0 即,只要主机送出的地址数据中的bit0为0且bit7为1就可以和本机地址相匹配 再例如 SADDR = 11001010 SADEN = 00001111 则匹配地址为 xxxx1010 即,只要主机送出的地址数据中的低4位为1010就可以和本机地址相匹配,而高4为被忽略,可 以为任意值。 主机可以使用广播地址(FFH)同时选中所有的从机来进行通讯。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 709 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 -12V TxD RS232 CONVERTER …… RS232 CONVERTER STC15W4K60S4 STC15W4K60S4 SLAVER-1 PC COM TxD RxD RxD 10K TxD 1 6 2 7 3 8 4 9 5 RxD J1 SLAVER-n 示例代码的测试方法: d e t i im 1、 ����� 首先将两个MCU按照上图的链接方法与电脑相连接 2、 ���� 将代码中SLAVE定义为0(“#define SLAVER 0”),编译产生的HEX文件烧录到 SLAVER-1的MCU中;然后将SLAVE定义为1(“#define SLAVER 1”),编译产生的HEX 文件烧录到SLAVER-2的MCU中 C T S U C M L 3、 ��������������������� 在PC端,打开串口助手,将串口设置如有图, 注意校验位 4、 ���������������������������������������� 在串口助手终端,发送0x55,则会选中从机1,此时从机1应答的数据为8个0x78 710 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 5、 ������������������������������������������ 串口助手终端再发送0x5a,则会选中从机2,此时从机2应答的数据为8个0x49,如图 d e t i im L 8.14.3 串口1自动地址识别功能的测试程序(C和汇编) U C M 1. C程序: /*----------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited -----------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 串口1地址自动识别举例举例------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*----------------------------------------------------------------------------------------------*/ C T S //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; //----------------------------------------------#define SLAVER #if SLAVER == #define SAMASK 南通国芯微电子有限公司 0 0 0x33 //定义从机编号,0为从机1, 1为从机2 //从机1地址屏蔽位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 711 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com #define #define #else #define #define #define #endif SERADR ACKTST 0x55 0x78 //从机1的地址为xx01,xx01 //从机1应答测试数据 SAMASK SERADR ACKTST 0x3C 0x5A 0x49 //从机2地址屏蔽位 //从机2的地址为xx01,10xx //从机2应答测试数据 #define URMD 0 临时技术支持Tel:13922829991 //0:使用定时器2作为波特率发生器 //1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器 //2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器 sfr sfr T2H T2L = = 0xd6; 0xd7; //定时器2高8位 //定时器2低8位 sfr AUXR = 0x8e; //辅助寄存器 sfr sfr SADDR = SADEN = 0xA9; 0xB9; //从机地址寄存器 //从机地址屏蔽寄存器 void InitUart(); char count; void main() { InitUart(); ES = 1; EA = 1; while (1); } 研发顾问Tel:13922805190 C T S U C M d e t i im L //初始化串口 /*---------------------------UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 using 1 { if (TI) { TI = 0; //清除TI位 if (count != 0) { count--; SBUF = ACKTST; //继续发送应答数据 } else { SM2 = 1; //若发送完成,则重新开始地址检测 } } 712 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 if (RI) { } 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 RI SM2 count SBUF = = = = 0; 0; 7; ACKTST; //清除RI位 //本机被选中后,进入数据接收状态 //并开发送应答数据 } /*---------------------------初始化串口 ----------------------------*/ void InitUart() { SADDR = SADEN = SCON = #if #elif #else #endif } URMD T2L T2H AUXR AUXR URMD AUXR TMOD TL1 TH1 TR1 == = = = |= == = = = = = TMOD AUXR TH1 = TR1 = = TL1 = = 南通国芯微电子有限公司 SERADR; SAMASK; 0xf8; 0 0xd8; 0xff; 0x14; 0x01; 1 0x40; 0x00; 0xd8; 0xff; 1; 0x20; 0x40; 0xfb; 1; L //设置波特率重装值 //115200 bps(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 U C M C T S d e t i im //设置串口为9位可变波特率,使能多机通讯检测, //(将TB8设置为1,方便与PC直接通讯测试) //定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值 //115200 bps(65536-18432000/4/115200) //定时器1开始启动 //设置定时器1为8位自动重装载模式 //定时器1为1T模式 //115200 bps(256 - 18432000/32/115200) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 713 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*-----------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited ------------------------------------------------------------------*/ /* --- STC15F2K60S2 系列 串口1地址自动识别举例举例-------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------*/ /* --- Web: www.STCMCU.com --------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序 */ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可 */ /*----------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz #define SLAVER 0 #if SLAVER == #define SAMASK #define SERADR #define ACKTST #else #define SAMASK #define SERADR #define ACKTST #endif 0 0x33 0x55 0x78 0x3C 0x5A 0x49 #define URMD 0 C T S d e t i im //定义从机编号,0为从机1, 1为从机2 L //从机1地址屏蔽位 //从机1的地址为xx01,xx01 //从机1应答测试数据 U C M //从机2地址屏蔽位 //从机2的地址为xx01,10xx //从机2应答测试数据 T2H DATA 0D6H T2L DATA 0D7H AUXR DATA 08EH //0:使用定时器2作为波特率发生器 //1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器 //2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器 //定时器2高8位 //定时器2低8位 //辅助寄存器 SADDR DATA 0A9H SADEN DATA 0B9H //从机地址寄存器 //从机地址屏蔽寄存器 COUNT DATA 20H //---------------------------------------- ORG 0000H LJMP MAIN ORG 0023H LJMP UART_ISR //---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH 714 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com LCALL INIT_UART SETB ES SETB EA SJMP $ //----------------------------------------//串口中断服务程序 UART_ISR: PUSH PSW PUSH ACC JNB TI, CHK_RX CLR TI MOV A, COUNT JZ RESTART DEC COUNT MOV SBUF, #ACKTST JMP UREXIT RESTART: SETB SM2 JMP UREXIT CHK_RX: JNB RI, UREXIT CLR RI CLR SM2 MOV SBUF, #ACKTST MOV COUNT, #7 UREXIT: POP ACC POP PSW RETI C T S /*---------------------------初始化串口 ----------------------------*/ INIT_UART: MOV SADDR, #SERADR MOV SADEN, #SAMASK MOV SCON, #0F8H URMD == MOV T2L, MOV T2H, MOV AUXR, ORL AUXR, URMD == MOV AUXR, MOV TMOD, MOV TL1, MOV TH1, 南通国芯微电子有限公司 0 #0D8H #0FFH #14H #01H 1 #40H #00H #0D8H #0FFH STC — 全球最大的8051单片机设计公司 //初始化串口 //发送完成8个数据后,就不再发送 //发送应答测试数据 d e t i im //若发送完成,则重新开始地址检测 U C M L //本机被选中后,进入数据接收状态 //并开发送应答数据 #if #elif 研发顾问QQ:800003751 //设置串口为9位可变波特率,使能多机通讯检测, //(将TB8设置为1,方便与PC直接通讯测试) //设置波特率重装值(65536-18432000/4/115200) //T2为1T模式, 并启动定时器2 //选择定时器2为串口1的波特率发生器 //;定时器1为1T模式 //定时器1为模式0(16位自动重载) //设置波特率重装值(65536-18432000/4/115200) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 715 STC15F2K60S2系列单片机指南 #else #endif SETB TR1 MOV MOV MOV MOV SETB TMOD, AUXR, TL1, TH1, TR1 技术支持网站:www.GXWMCU.com #20H #40H #0FBH #0FBH 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //定时器1开始运行 //设置定时器1为8位自动重装载模式 //定时器1为1T模式 //115200 bps(256 - 18432000/32/115200) RET //---------------------------------------- END C T S 716 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 8.15 串行口1的中继广播方式 串行口1可在3组管脚间进行切换:[RxD/P3.0, TxD/P3.1];[RxD_2/P3.6, TxD_2/P3.7]; [RxD_3/P1.6, TxD_3/P1.7]. Mnemonic Add Name 7 BB6 B5 B4 B3 B2 B1 B0 Reset Value CLK_DIV 时钟分频 97H MCKO_S1 MCKO_S0 ADRJ Tx_Rx MCLKO_2 CLKS2 CLKS1 CLKS0 0000,0000 (PCON2) 寄存器 Tx_Rx:串口1的中继广播方式设置 0:串口1为正常工作方式 1:串口1为中继广播方式,即将RxD端口输入的电平状态实时输出在TxD外部管脚上,TxD 外部管脚可以对RxD管脚的输入信号进行实时整形放大输出,TxD管脚的对外输出实时 反映RxD端口输入的电平状态。 d e t i im 串口1的RxD管脚和TxD管脚可以在3组不同管脚之间进行切换:[RxD/P3.0, TxD/P3.1]; [RxD_2/P3.6, TxD_2/P3.7]; [RxD_3/P1.6, TxD_3/P1.7]. U C M L 串行口1的中继广播方式除可以在用户程序中设置Tx_Rx/CLK_DIV.4来选择外,还可以在 STC-ISP下载编程软件中设置。 当单片机的工作电压低于上电复位门槛电压(POR,3V单片机在1.8V附近,5V单片机在3.2V 附近)时,Tx_Rx默认为0,即串行口1默认为正常工作方式。当单片机的工作电压高于上电复 位门槛电压(POR,3V单片机在1.8V附近,5V单片机在3.2V附近)时,单片机首先读取用户在 STC-ISP下载编程软件中的设置,如果用户允许了“单片机TxD管脚的对外输出实时反映RxD端 口输入的电平状态”即中继广播方式,则上电复位后P3.7/TxD_2管脚的对外输出可以实时反映 P3.6/RxD_2端口输入的电平状态,如果用户未选择“单片机TxD管脚的对外输出实时反映RxD端 口输入的电平状态”,则上电复位后串口1为正常工作方式,即P3.7/TxD_2管脚的对外输出不 实时反映P3.6/RxD_2端口输入的电平状态。 C T S 串行口1的位置和中继广播方式除可以在STC-ISP下载编程软件中设置外,还可以在用户的 用户程序中用设置。在STC-ISP下载编程软件中的设置是在单片机上电复位后就可以执行的, 如果用户在用户程序中的设置与STC-ISP下载编程软件中的设置不一致时,当执行到相应的用 户程序时就会覆盖原来STC-ISP下载编程软件中的设置。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 717 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.16 软件模拟串行口的测试程序(C及汇编) ——如串行口不够用或无串行口可用[P3.0, P3.1]结合定时器0软件模拟串行口 1. C程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited ------------------------------------------------------------------------*/ /* --- STC15Fxx 系列 软件模拟串口举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */ /*----------------------------------------------------------------------------------------------------*/ //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译 //假定测试芯片的工作频率为18.432MHz U C M d e t i im L #include "reg51.h" //----------------------------------------//define baudrate const //BAUD = 256 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110) C T S //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFFA0 //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD #define BAUD 0xEC00 0xF600 0xFB00 0xFD80 0xFEC0 0xFF60 // 1200bps @ 18.432MHz // 2400bps @ 18.432MHz // 4800bps @ 18.432MHz // 9600bps @ 18.432MHz //19200bps @ 18.432MHz //38400bps @ 18.432MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xE800 0xF400 0xFA00 0xFD00 // 1200bps @ 22.1184MHz // 2400bps @ 22.1184MHz // 4800bps @ 22.1184MHz // 9600bps @ 22.1184MHz 718 南通国芯微电子有限公司 // 1200bps @ 11.0592MHz // 2400bps @ 11.0592MHz // 4800bps @ 11.0592MHz // 9600bps @ 11.0592MHz //19200bps @ 11.0592MHz //38400bps @ 11.0592MHz 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 //#define BAUD //#define BAUD //#define BAUD sfr AUXR sbit RXB sbit TXB 0xFE80 0xFF40 0xFF80 = 0x8E; = P3^0; = P3^1; typedef bit BOOL; typedef unsigned char typedef unsigned int BYTE BYTE BYTE BYTE BOOL BOOL void TBUF, TDAT, TCNT, TBIT, TING, TEND, 官方网站:www.STCMCU.com //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz //define UART TX/RX port RBUF; RDAT; RCNT; RBIT; RING; REND; UART_INIT(); C T S void main() { TMOD = 0x00; AUXR = 0x80; TL0 = BAUD; TH0 = BAUD>>8; TR0 = 1; ET0 = 1; PT0 = 1; EA = 1; STC — 全球最大的8051单片机设计公司 BYTE; WORD; BYTE t, r; BYTE buf[16]; 研发顾问QQ:800003751 U C M d e t i im L //timer0 in 16-bit auto reload mode //timer0 working at 1T mode //initial timer0 and set reload value //tiemr0 start running //enable timer0 interrupt //improve timer0 interrupt priority //open global interrupt switch UART_INIT(); while (1) { if (REND) { REND = 0; buf[r++ & 0x0f] = RBUF; } if (TEND) 南通国芯微电子有限公司 //user's function 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 719 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 { if (t != r) { TEND = 0; TBUF = buf[t++ & 0x0f]; TING = 1; } } } } //----------------------------------------//Timer interrupt routine for UART d e t i im void tm0() interrupt 1 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //reset send baudrate counter if (--RBIT == 0) { RBUF = RDAT; //save the data to RBUF RING = 0; //stop receive REND = 1; //set receive completed flag } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //shift RX data to RX buffer } } } else if (!RXB) { RING = 1; //set start receive flag RCNT = 4; //initial receive baudrate counter RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } C T S 720 if (--TCNT == 0) { TCNT = 3; 南通国芯微电子有限公司 U C M L //reset send baudrate counter 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 if (TING) //judge whether sending { if (TBIT == 0) { TXB = 0; //send start bit TDAT = TBUF; //load data from TBUF to TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } else { TDAT >>= 1; //shift data to CY if (--TBIT == 0) { TXB = 1; TING = 0; //stop send TEND = 1; //set send completed flag } else { TXB = CY; //write CY to TX port } } } } } C T S U C M d e t i im L //----------------------------------------//initial UART module variable void UART_INIT() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 721 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 汇编程序: /*----------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited ------------------------------------------------------------------------*/ /* --- STC15Fxx 系列 软件模拟串口举例---------------------------------------------------*/ /* --- 研发顾问QQ:800003751--------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 --------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */ /*----------------------------------------------------------------------------------------------------*/ //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译 //假定测试芯片的工作频率为18.432MHz ;----------------------------------------;define baudrate const ;BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12) ;NOTE: (FOSC/3/BAUDRATE) must be greater then 75, (RECOMMEND GREATER THEN 100) U C M d e t i im L ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU 0F400H EQU 0FA00H EQU 0FD00H EQU 0FE80H EQU 0FF40H EQU 0FFA0H EQU 0FFC0H ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD BAUD EQU EQU EQU EQU EQU EQU EQU 0EC00H 0F600H 0FB00H 0FD80H 0FEC0H 0FF60H 0FF95H ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU EQU EQU EQU EQU EQU EQU 0E800H 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FF80H ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz 722 C T S 南通国芯微电子有限公司 ; 1200bps @ 11.0592MHz ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;57600bps @ 11.0592MHz 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ;----------------------------------------;define UART TX/RX port RXB TXB BIT BIT P3.0 P3.1 ;----------------------------------------;define SFR AUXR DATA 8EH ;----------------------------------------;define UART module variable TBUF RBUF TDAT RDAT TCNT RCNT TBIT RBIT DATA DATA DATA DATA DATA DATA DATA DATA 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH C T S d e t i im ;(R0) ready send data buffer (USER WRITE ONLY) ;(R1) received data buffer (UAER READ ONLY) ;(R2) sending data buffer (RESERVED FOR UART MODULE) ;(R3) receiving data buffer (RESERVED FOR UART MODULE) ;(R4) send baudrate counter (RESERVED FOR UART MODULE) ;(R5) receive baudrate counter (RESERVED FOR UART MODULE) ;(R6) send bit counter (RESERVED FOR UART MODULE) ;(R7) receive bit counter (RESERVED FOR UART MODULE) U C M L TING BIT 20H.0 RING BIT 20H.1 TEND BIT 20H.2 REND BIT 20H.3 ; sending flag (USER WRITE "1" TO TRIGGER SEND DATA, ; CLEAR BY MODULE) ; receiving flag (RESERVED FOR UART MODULE) ; sent flag (SET BY MODULE AND SHOULD USER CLEAR) ; received flag (SET BY MODULE AND SHOULD USER CLEAR) RPTR DATA 21H WPTR DATA 22H BUFFER DATA 23H ;circular queue read pointer ;circular queue write pointer ;circular queue buffer (16 bytes) ;---------------------------------------- ORG 0000H LJMP RESET ;----------------------------------------;Timer0 interrupt routine for UART ORG 000BH PUSH PUSH ACC PSW 南通国芯微电子有限公司 ;4 save ACC ;4 save PSW 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 723 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV PSW, #08H ;3 using register group 1 L_UARTSTART: ;------------------ JB RING, L_RING ;4 judge whether receiving JB RXB, L_REND ; check start signal L_RSTART: SETB RING ; set start receive flag MOV R5, #4 ; initial receive baudrate counter MOV R7, #9 ; initial receive bit number (8 data bits + 1 stop bit) SJMP L_REND ; end this time slice L_RING: DJNZ R5, L_REND ;4 judge whether sending MOV R5, #3 ;2 reset send baudrate counter L_RBIT: MOV C, RXB ;3 read RX port data MOV A, R3 ;1 and shift it to RX buffer RRC A ;1 MOV R3, A ;2 DJNZ R7, L_REND ;4 judge whether the data have receive completed L_RSTOP: RLC A ; shift out stop bit MOV R1, A ; save the data to RBUF CLR RING ; stop receive SETB REND ; set receive completed flag L_REND: ;------------------L_TING: DJNZ R4, L_TEND ;4 check send baudrate counter MOV R4, #3 ;2 reset it JNB TING, L_TEND ;4 judge whether sending MOV A, R6 ;1 detect the sent bits JNZ L_TBIT ;3 "0" means start bit not sent L_TSTART: CLR TXB ; send start bit MOV TDAT, R0 ; load data from TBUF to TDAT MOV R6, #9 ; initial send bit number (8 data bits + 1 stop bit) JMP L_TEND ; end this time slice L_TBIT: MOV A, R2 ;1 read data in TDAT SETB C ;1 shift in stop bit RRC A ;1 shift data to CY MOV R2, A ;2 update TDAT MOV TXB, C ;4 write CY to TX port DJNZ R6, L_TEND ;4 judge whether the data have send completed C T S 724 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com L_TSTOP: CLR TING SETB TEND L_TEND: ;------------------L_UARTEND: POP PSW POP ACC RETI ;----------------------------------------;initial UART module variable UART_INIT: CLR TING CLR RING SETB TEND CLR REND CLR A MOV TCNT, A MOV RCNT, A RET ;----------------------------------------;main program entry C T S 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ; stop send ; set send completed flag ;3 restore PSW ;3 restore ACC ;4 (69) U C M d e t i im L RESET: MOV R0, #7FH ;clear RAM CLR A MOV @R0, A DJNZ R0, $-1 MOV SP, #7FH ;initial SP ;------------------;system initial MOV TMOD, #00H ;timer0 in 16-bit auto reload mode MOV AUXR, #80H ;timer0 working at 1T mode MOV TL0, #LOW BAUD ;initial timer0 and MOV TH0, #HIGH BAUD ;set reload value SETB TR0 ;tiemr0 start running SETB ET0 ;enable timer0 interrupt SETB PT0 ;improve timer0 interrupt priority SETB EA ;open global interrupt switch LCALL UART_INIT ;----------------------------------------MAIN: JNB REND, CHECKREND ;if (REND) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 725 STC15F2K60S2系列单片机指南 CLR REND MOV A, INC RPTR ANL A, ADD A, MOV R0, MOV @R0, CHECKREND: JNB TEND, MOV A, XRL A, JZ MAIN CLR TEND MOV A, INC WPTR ANL A, ADD A, MOV R0, MOV TBUF, SETB TING SJMP MAIN 技术支持网站:www.GXWMCU.com 726 END 研发顾问Tel:13922805190 #0FH #BUFFER A RBUF ;{ ; REND = 0; ; BUFFER[RPTR++ & 0xf] = RBUF; ;} ; ; ; MAIN RPTR WPTR ;if (TEND) ;{ ; if (WPTR != REND) ; { ; TEND = 0; ; TBUF = BUFFER[WPTR++ & 0xf]; ; TING = 1; ; } ;} ; ; ; RPTR WPTR #0FH #BUFFER A @R0 ;---------------------------------------- 临时技术支持Tel:13922829991 C T S 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 第9章 STC15系列单片机EEPROM的应用 STC15系列单片机内部集成了大容量的EEPROM,其与程序空间是分开的。���������� 利用ISP/IAP技 术可将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区,��� 每个扇 区包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放 在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。 EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。在用户程序 中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。在工作电压Vcc偏低时,建议不要进 行EEPROM/IAP操作。 d e t i im 9.1 IAP及EEPROM新增特殊功能寄存器介绍 符号 描述 地址 ISP/IAP Flash Data Register ISP/IAP Flash IAP_ADDRH Address High ISP/IAP Flash IAP_ADDRL Address Low ISP/IAP Flash IAP_CMD Command Register ISP/IAP Flash IAP_TRIG Command Trigger ISP/IAP IAP_CONTR Control Register PCON Power Control IAP_DATA C T S 南通国芯微电子有限公司 C2H C3H C4H C5H 位地址及符号 L MSB U C M - - - LSB 1111 1111B 0000 0000B 0000 0000B - - - MS1 MS0 C6H C7H 87H 复位值 xxxx x000B xxxx xxxxB IAPEN SWBS SWRST CMD_FAIL SMOD SMOD0 LVDF POF 总机:0513-5501 2928 / 2929 / 2966 - WT2 WT1 GF1 GF0 PD WT0 0000 x000B IDL 0011 0000B 传真:0513-5501 2969 / 2956 / 2947 727 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 1. ISP/IAP数据寄存器IAP_DATA IAP_DATA : ISP/IAP 操作时的数据寄存器。 ISP/IAP 从Flash读出的数据放在此处,向Flash写的数据也需放在此处 2. ISP/IAP地址寄存器IAP_ADDRH和IAP_ADDRL IAP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。 IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。 3. ISP/IAP命令寄存器IAP_CMD ISP/IAP命令寄存器IAP_CMD格式如下: SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0 IAP_CMD C5H name - - - - - - MS1 MS0 命令 / 操作 d e t i im 模式选择 MS1 MS0 0 0 Standby 0 1 从用户的应用程序区对"Data Flash/EEPROM区"进行字节读 1 0 从用户的应用程序区对"Data Flash/EEPROM区"进行字节编程 1 1 从用户的应用程序区对"Data Flash/EEPROM区"进行扇区擦除 待机模式,无ISP操作 U C M L 程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除 IAP15������������������������������� 系列����������������������������� 除外,IAP15��������������������� 系列������������������� 可在����������������� 用户��������������� 应用程序区修改�������� 用户������ 应用程序区。 特别声明:EEPROM也可以用MOVC指令读(MOVC访问的是程序存储器),但起始地址不再是0000H, 而是程序存储空间结束地址的下一个地址。 C T S 4. ISP/IAP命令触发寄存器IAP_TRIG IAP_TRIG: ISP/IAP操作时的命令触发寄存器。 在IAPEN(IAP_CONTR.7) = 1 时,对IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP命令才会生效。 ISP/IAP��������������������������������������������������� 操作完成后,IAP地址高八位寄存器IAP_ADDRH、IAP地址低八位寄存器IAP_ADDRL和IAP 命令寄存器IAP_CMD的内容不变。如果接下来要对下一个地址的数据进行ISP/IAP操作,需手动 将该地址的高8位和低8位分别写入IAP_ADDRH和IAP_ADDRL寄存器。 每次IAP操作时,都要对IAP_TRIG先写入5AH,再写入A5H,ISP/IAP命令才会生效。 在每次触发前,需重新送字节读/字节编程/扇区擦除命令,在命令不改变时,不需重新送 命令 728 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 5. ISP/IAP命令寄存器IAP_CONTR ISP/IAP控制寄存器IAP_CONTR格式如下: SFR name Address IAP_CONTR C7H bit B7 B6 B5 B4 name IAPEN SWBS SWRST CMD_FAIL B3 B2 B1 B0 - WT2 WT2 WT0 IAPEN: ISP/IAP功能允许位。0:禁止IAP读/写��� /�� 擦除Data Flash/EEPROM 1: 允许IAP读/写��� /�� 擦除Data Flash/EEPROM SWBS: ��������������� 软件选择复位后从用户应用程序区启动(送���������������� 0)�������������� ,还是从系统IS������ P����� 监控程序区启动(送1)。 要与SWRST直接配合才可以实现 SWRST: 0: 不操作; 1: ����������������� 软件控制产生复位,单片机自动复位� 。 CMD_FAIL: 如果IAP地址(由IAP地址寄存器IAP_ADDRH和IAP_ADDRL的值决定)指向了非法地 址或无效地址,且送了ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败�� ,� 则 。 CMD_FAIL为1,需由软件清零� d e t i im ;在用户应用程序区(AP 区)软件复位并从用户应用程序区(AP 区)开始执行程序 MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP 区), SWRST = 1(软复位) ;在用户应用程序区(AP 区)软件复位并从系统ISP 监控程序区开始执行程序 MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP 区), SWRST = 1(软复位) ;在系统ISP 监控程序区软件复位并从用户应用程序区(AP 区)开始执行程序 MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP 区), SWRST = 1(软复位) ;在系统ISP 监控程序区软件复位并从系统ISP 监控程序区开始执行程序 MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP 区), SWRST = 1(软复位) 设置等待时间 WT2 WT1 WT0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 C T S U C M CPU等待时间(多少个CPU工作时钟 ) Sector Erase Read/读 Program/编程 扇区擦除 (2个时钟) (=55us) (=21ms) 2个时钟 55个时钟 21012个时钟 2个时钟 110个时钟 42024个时钟 2个时钟 165个时钟 63036个时钟 2个时钟 330个时钟 126072个时钟 2个时钟 660个时钟 252144个时钟 2个时钟 1100个时钟 420240个时钟 2个时钟 1320个时钟 504288个时钟 2个时钟 1760个时钟 672384个时钟 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 L Recommended System Clock 跟等待参数对应的推荐系统时钟 ≤ 1MHz ≤ 2MHz ≤ 3MHz ≤ 6MHz ≤ 12MHz ≤ 20MHz ≤ 24MHz ≤ 30MHz 传真:0513-5501 2969 / 2956 / 2947 729 技术支持网站:www.GXWMCU.com STC15F2K60S2系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6. 工作电压过低判断,此时不要进行EEPROM/IAP操作 PCON : 电源控制寄存器 SFR name Address PCON 87H bit B7 B6 B5 B4 B3 B2 B1 B0 name SMOD SMOD0 LVDF POF GF1 GF0 PD IDL LVDF: 低压检测标志位,当工作电压Vcc低于低压检测门槛电压时,该位置1。该位要由软件清0 当低压检测电路发现工作电压Vcc偏低时,不要进行EEPROM/IAP操作。 5V单片机的低压检测门槛电压: -40 ℃ 25 ℃ 85 ℃ 4.74 4.64 4.60 4.41 4.32 4.27 4.14 4.05 4.00 3.90 3.82 3.77 3.69 3.61 3.56 3.51 3.43 3.38 3.36 3.28 3.23 3.21 3.14 3.09 3.3V单片机的低压检测门槛电压: -40 ℃ 3.11 2.85 2.63 2.44 2.29 2.14 2.01 1.90 C T S 25 ℃ 3.08 2.82 2.61 2.42 2.26 2.12 2.00 1.89 U C M d e t i im L 85 ℃ 3.09 2.83 2.61 2.43 2.26 2.12 2.00 1.89 建议在电压偏低时,不要操作EEPROM/IAP, 烧录时直接选择“低压禁止EEPROM操作” 730 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 9.2 STC15系列单片机EEPROM空间大小及地址 9.2.1 STC15W4K60S4系列单片机EEPROM空间大小及地址 STC15W4K60S4系列单片机内部EEPROM选型一览表 型号 用IAP字 扇 节读时 EEPROM 区 EEPROM 字节数 数 起始扇区 首地址 用IAP字 节读时 EEPROM 结束扇区 末尾地址 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 STC15W4K08S4 53K 106 0000h D3FFh 2000h F3FFh STC15W4K16S4 45K 90 0000h B3FFh 4000h F3FFh STC15W4K24S4 37K 74 0000h 93FFh 6000h STC15W4K32S4 29K 58 0000h 73FFh 8000h STC15W4K40S4 21K 42 0000h 53FFh A000h STC15W4K48S4 13K 26 0000h 33FFh C000h STC15W4K56S4 5K 10 0000h 13FFh E000h F3FFh STC15W4K60S4 1K 2 0000h 03FFh F000h F3FFh M CU STC15W4K60S4 系列单片机内部 EEPROM还可以用 MOVC指令读,但 此时首地址不再是 0000H,而是程序存 储空间结束地址的 下一个地址 d e t i im F3FFh F3FFh L F3FFh F3FFh 512字节为一个扇区 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15W4K61S4 南通国芯微电子有限公司 C T S - 122 0000h F3FFh 总机:0513-5501 2928 / 2929 / 2966 没有专门的EEPROM,但可在用户程 序区修改用户程序, 使用时不要将自己的 有效程序擦除。 传真:0513-5501 2969 / 2956 / 2947 731 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 9.2.2 STC15F2K60S2及STC15L2K60S2系列EEPROM空间大小及地址 STC15F2K60S2系列单片机内部EEPROM选型一览表 STC15L2K60S2系列单片机内部EEPROM选型一览表 型号 用IAP字 用IAP字 扇 节读时 节读时 EEPROM 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 STC15F2K60S2及 末尾地址 STC15L2K60S2系列 F3FFh 单片机内部EEPROM 还可以用MOVC指令 读,但此时首地址不 F3FFh 再是0000H,而是程 序存储空间结束地址 F3FFh 的下一个地址 STC15F2K08S2 STC15L2K08S2 53K 106 0000h D3FFh 2000h STC15F2K16S2 STC15L2K16S2 45K 90 0000h B3FFh 4000h STC15F2K24S2 STC15L2K24S2 37K 74 0000h 93FFh 6000h STC15F2K32S2 STC15L2K32S2 29K 58 0000h 73FFh 8000h STC15F2K40S2 STC15L2K40S2 21K 42 0000h 53FFh F3FFh STC15F2K48S2 STC15L2K48S2 13K 26 0000h CU A000h 33FFh C000h F3FFh STC15F2K56S2 STC15L2K56S2 STC15F2K60S2 STC15L2K60S2 C T S M d e t i im L F3FFh 5K 10 0000h 13FFh E000h F3FFh 1K 2 0000h 03FFh F000h F3FFh 512字节为一个扇区 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15F2K61S2 IAP15L2K61S2 732 - 南通国芯微电子有限公司 122 0000h F3FFh 总机:0513-5501 2928 / 2929 / 2966 没有专门的EEPROM, 但可在用户程序区修 改用户程序,使用时 不要将自己的有效程 序擦除。 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 9.2.3 STC15W1K16S系列单片机EEPROM空间大小及地址 STC15W1K16S系列单片机内部EEPROM选型一览表 用IAP字 用IAP字 节读时 扇 节读时 EEPROM 型号 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 STC15W1K16S 13K 26 0000h 33FFh STC15W1K24S 5K 10 0000h 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 STC15W1K16S系列单片 机内部EEPROM还可以用 MOVC指令读,但此时首地 址不再是0000H,而是程序 存储空间结束地址的下一个 地址 512字节为一个扇区 13FFh 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 - IAP15W1K29S 58 0000h 没有专门的EEPROM,但可在 用户程序区修改用户程序, 使用时不要将自己的有效程 序擦除。 d e t i im 73FFh L STC15W1K16S系列中以STC开头的单片机不能用MOVC读EEPROM。 C T S U C M 9.2.4 STC15W408S系列单片机EEPROM空间大小及地址 STC15W408S系列单片机内部EEPROM选型一览表 用IAP字 用IAP字 节读时 扇 节读时 EEPROM 型号 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 STC15W404S 9K 18 0000h 23FFh STC15W408S 5K 10 0000h 13FFh STC15W410S 3K 6 0000h 0BFFh 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 STC15W408S系列单片机内 部EEPROM还可以用MOVC 指令读,但此时首地址不再 是0000H,而是程序存储空 间结束地址的下一个地址 512字节为一个扇区 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15W413S - 26 0000h 没有专门的EEPROM,但可在 用户程序区修改用户程序, 使用时不要将自己的有效程 序擦除。 33FFh STC15W408S系列中以STC开头的单片机不能用MOVC读EEPROM。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 733 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 9.2.5 STC15W408AS系列单片机EEPROM空间大小及地址 STC15W408AS系列单片机内部EEPROM选型一览表 用IAP字 用IAP字 节读时 扇 节读时 EEPROM 型号 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 STC15W404AS 9K 18 0000h 23FFh 用MOVC 指令读时 EEPROM 起始扇区 首地址 1000h 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 33FFh STC15W408AS 5K 10 0000h 13FFh 2000h 33FFh STC15W410AD 3K 6 0000h 0BFFh 2800h 33FFh STC15W412AD 1K 2 0000h 03FFh 3000h 33FFh STC15W408AS系列单片 机内部EEPROM还可以用 MOVC指令读,但此时首地 址不再是0000H,而是程序 存储空间结束地址的下一个 地址 512字节为一个扇区 d e t i im 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15W413AS - 26 C T S 0000h 33FFh U C M 没有专门的EEPROM,但可在 用户程序区修改用户程序, 使用时不要将自己的有效程 序擦除。 L 9.2.6 STC15W201S系列单片机EEPROM空间大小及地址 STC15W201S系列单片机内部EEPROM选型一览表 型号 STC15W201S 用IAP字 用IAP字 节读时 扇 节读时 EEPROM 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 4K 8 0000h 0FFFh STC15W202S 3K 6 0000h 0BFFh STC15W203S 2K 4 0000h 07FFh STC15W204S 1K 2 0000h 03FFh 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 STC15W201S系列单片机内 部EEPROM还可以用MOVC 指令读,但此时首地址不再 是0000H,而是程序存储空 间结束地址的下一个地址 512字节为一个扇区 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15W205S - 10 0000h 没有专门的EEPROM,但可在 用户程序区修改用户程序, 使用时不要将自己的有效程 序擦除。 13FFh STC15W408S系列中以STC开头的单片机不能用MOVC读EEPROM。 734 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 9.2.7 STC15F408AD及STC15L408AD系列EEPROM空间大小及地址 STC15F408AD系列单片机内部EEPROM选型一览表 STC15L408AD系列单片机内部EEPROM选型一览表 用IAP字 用IAP字 用MOVC 节读时 指令读时 扇 节读时 EEPROM 型号 区 EEPROM EEPROM EEPROM 字节数 数 起始扇区 结束扇区 起始扇区 首地址 末尾地址 首地址 STC15F408AD STC15L408AD 5K 10 0000h 13FFh 2000h 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 STC15F408AD及 STC15L408AD系列单片 机内部EEPROM还可以用 MOVC指令读,但此时首地 址不再是0000H,而是程序 存储空间结束地址的下一个 地址 33FFh 512字节为一个扇区 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15F413AD IAP15L413AD - 26 0000h d e t i im 33FFh U C M L 没有专门的EEPROM,但可在 用户程序区修改用户程序, 使用时不要将自己的有效程 序擦除。 9.2.8 STC15F101W及STC15L101W系列EEPROM空间大小及地址 C T S STC15F101W系列单片机内部EEPROM选型一览表 STC15L101W系列单片机内部EEPROM选型一览表 用IAP字 用IAP字 用MOVC 节读时 指令读时 扇 节读时 EEPROM 型号 区 EEPROM EEPROM EEPROM 字节数 数 起始扇区 结束扇区 起始扇区 首地址 末尾地址 首地址 STC15F101W 4K 8 0000h 0FFFh 0400h STC15L101W STC15F102W 3K 6 0000h 0BFFh 0800h STC15L102W STC15F103W 2K 4 0000h 07FFh 0C00h STC15L103W STC15F104W 1K 2 0000h 03FFh 1000h STC15L104W 用MOVC 指令读时 EEPROM STC15F101W及STC15L101W 结束扇区 系列单片机内部EEPROM还 末尾地址 可以用MOVC指令读,但此 时首地址不再是0000H,而是 13FFh 程序存储空间结束地址的下 一个地址 13FFh 13FFh 512字节为一个扇区 13FFh 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15F105W IAP15L105W - 南通国芯微电子有限公司 10 0000h 13FFh 总机:0513-5501 2928 / 2929 / 2966 没有专门的EEPROM,但可在 用户程序区修改用户程序,使 用时不要将自己的有效程序擦 除。 传真:0513-5501 2969 / 2956 / 2947 735 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 STC15单片机的内部EEPROM地址表 第一扇区 第二扇区 第三扇区 第四扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 0000h 1FFh 200h 3FFh 400h 5FFh 600h 第五扇区 第六扇区 7FFh 第七扇区 第八扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 800h 9FFh A00h BFFh C00h DFFh E00h 第九扇区 第十扇区 第十二扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 1000h 11FFh 1200h 13FFh 1400h 15FFh 1600h 第十四扇区 第十五扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 1800h 19FFh 1A00h 1BFFh 1C00h 1DFFh 1E00h 第十八扇区 第十九扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 2000h 21FFh 2200h 23FFh 2400h 25FFh 第二十一扇区 第二十二扇区 起始地址 结束地址 起始地址 结束地址 2800h 29FFh 2A00h 2BFFh 第二十五扇区 第二十三扇区 起始地址 U C M 第二十六扇区 2C00h 2DFFh 第二十七扇区 17FFh 结束地址 1FFFh 第二十扇区 d e t i im L 结束地址 结束地址 第十六扇区 起始地址 第十七扇区 结束地址 FFFh 第十一扇区 起始地址 第十三扇区 结束地址 起始地址 结束地址 2600h 27FFh 第二十四扇区 起始地址 结束地址 2E00h 2FFFH 第二十八扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 3000h 31FFh 3200h 33FFh 3400h 35FFh 3600h 37FFH 第二十九扇区 C T S 第三十扇区 第三十一扇区 第三十二扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 3800h 39FFh 3A00h 3BFFh 3C00h 3DFFh 3E00h 3FFFH 第三十三扇区 第三十四扇区 第三十五扇区 第三十六扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 4000h 41FFh 4200h 43FFh 4400h 45FFh 4600h 第三十七扇区 第三十八扇区 第三十九扇区 47FFH 第四十扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 4800h 49FFh 4A00h 4BFFh 4C00h 4DFFh 4E00h 4FFFH 第四十二扇区 第四十三扇区 第四十四扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 5000h 51FFh 5200h 53FFh 5400h 55FFh 5600h 57FFH 第四十五扇区 第四十六扇区 第四十七扇区 第四十八扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 5800h 59FFh 5A00h 5BFFh 5C00h 5DFFh 5E00h 5FFFH 第四十九扇区 第五十扇区 第五十一扇区 第五十二扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 6000h 61FFh 6200h 63FFh 6400h 65FFh 6600h 67FFH 第五十三扇区 第五十四扇区 第五十五扇区 第五十六扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 6800h 69FFh 6A00h 6BFFh 6C00h 6DFFh 6E00h 6FFFH 736 南通国芯微电子有限公司 建议同一次修 改的数据放在 同一扇区,不 是同一次修改 的数据放在不 同的扇区,不 必用满, 当 然可全用 结束地址 起始地址 第四十一扇区 每个扇区 512字节 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 研发顾问QQ:800003751 STC15单片机的内部EEPROM地址表 第五十七扇区 第五十八扇区 第五十九扇区 第六十扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 7000h 71FFh 7200h 73FFh 7400h 75FFh 7600h 77FFh 第六十一扇区 第六十二扇区 第六十三扇区 第六十四扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 7800h 79FFh 7A00h 7BFFh 7C00h 7DFFh 7E00h 7FFFh 第六十五扇区 第六十六扇区 第六十七扇区 第六十八扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 8000h 81FFh 8200h 83FFh 8400h 85FFh 8600h 87FFh 第六十九扇区 第七十扇区 第七十一扇区 第七十二扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 8800h 89FFh 8A00h 8BFFh 8C00h 8DFFh 8E00h 8FFFh 第七十三扇区 第七十四扇区 第七十五扇区 第七十六扇区 d e t i im 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 9000h 91FFh 9200h 93FFh 9400h 95FFh 9600h 97FFh 第七十七扇区 第七十八扇区 第七十九扇区 起始地址 结束地址 起始地址 结束地址 9800h 99FFh 9A00h 9BFFh 第八十一扇区 起始地址 A000h 第八十二扇区 起始地址 结束地址 U C M 9C00h 9DFFh 第八十三扇区 第八十扇区 L 起始地址 结束地址 9E00h 9FFFH 第八十四扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 A1FFh A200h A3FFh A400h A5FFh A600h A7FFh 第八十五扇区 起始地址 结束地址 A800h A9FFh 第八十九扇区 起始地址 C T S 结束地址 起始地址 结束地址 起始地址 结束地址 AA00h ABFFh AC00h ADFFh AE00h AFFFH 第八十六扇区 第九十扇区 第八十七扇区 第九十一扇区 第八十八扇区 第九十二扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 B000h B1FFh B200h B3FFh B400h B5FFh B600h B7FFh 第九十三扇区 第九十四扇区 第九十五扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 B800h B9FFh BA00h BBFFh BC00h BDFFh BE00h BFFFH 第九十八扇区 第九十九扇区 第一百扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 C000h C1FFh C200h C3FFh C400h C5FFh C600h C7FFh 第一百零一扇区 第一百零二扇区 第一百零三扇区 第一百零四扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 C800h C9FFh CA00h CBFFh CC00h CDFFh CE00h CFFFH 第一百零五扇区 第一百零六扇区 第一百零七扇区 第一百零八扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 D000h D1FFh D200h D3FFh D400h D5FFh D600h D7FFh 第一百零九扇区 第一百一十扇区 第一百一十一扇区 第一百一十二扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 D800h D9FFh DA00h DBFFh DC00h DDFFh DE00h DFFFH 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 建议同一次修 改的数据放在 同一扇区,不 是同一次修改 的数据放在不 同的扇区,不 必用满, 当 然可全用 第九十六扇区 起始地址 第九十七扇区 每个扇区 512字节 传真:0513-5501 2969 / 2956 / 2947 737 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 STC15单片机的内部EEPROM地址表 第一百一十三扇区 第一百一十四扇区 第一百一十五扇区 第一百一十六扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 E000h E1FFh E200h E3FFh E400h E5FFh E600h E7FFh 第一百一十七扇区 第一百一十八扇区 第一百一十九扇区 第一百二十扇区 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 E800h E9FFh EA00h EBFFh EC00h EDFFh EE00h EFFFH 第一百二十一扇区 第一百二十二扇区 起始地址 结束地址 起始地址 结束地址 F000h F1FFh F200h F3FFh C T S 738 南通国芯微电子有限公司 U C M 每个扇区 512字节 建议同一次修改 的数据放在同一 扇区,不是同一 次修改的数据放 在不同的扇区, 不必用满, 当 然可全用 d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 9.3 IAP及EEPROM汇编简介 ;用DATA还是EQU声明新增特殊功能寄存器地址要看你用的汇编器/编译器 IAP_DATA DATA 0C2h; IAP_ADDRH DATA IAP_ADDRL 或 IAP_DATA EQU 0C2h 0C3h; 或 IAP_ADDRH EQU 0C3h DATA 0C4h; 或 IAP_ADDRL EQU 0C4h IAP_CMD DATA 0C5h; 或 IAP_CMD EQU 0C5h IAP_TRIG DATA 0C6h; 或 IAP_TRIG EQU 0C6h IAP_CONTR DATA 0C7h; 或 IAP_CONTR EQU 0C7h ;定义ISP/IAP命令及等待时间 d e t i im ISP_IAP_BYTE_READ EQU 1 ;字节读 ISP_IAP_BYTE_PROGRAM EQU 2 ;字节编程,前提是该字节是空,0FFh ISP_IAP_SECTOR_ERASE EQU 3 ;扇区擦除,要某字节为空,要擦一扇区 WAIT_TIME EQU U C M 0 L ;设置等待时间,30MHz以下0,24M以下1, ;20MHz以下2,12M以下3,6M以下4,3M以下5,2M以下6,1M以下7, ;字节读,���������������������������� 也可以用MOVC指令读,但起始地址不再是0000H,而是程序存储空间结束地址的下一个地址 C T S MOV IAP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节 MOV IAP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节 MOV IAP_CONTR, #WAIT_TIME ;设置等待时间 ORL IAP_CONTR, #10000000B ;允许ISP/IAP操作 MOV IAP_CMD, #ISP_IAP_BYTE_READ 地址需要改变时 才需重新送地址 此两句可以合成一句, 并且只送一次就够了 ������������������������� ;送字节读命令,����������������� 现有A版本每次触发前需重新送命令。 ;在��������������� 命令不需改变时,不需重新送命令 MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序。 NOP MOV A, 南通国芯微电子有限公司 ISP_DATA ;数据读出到IAP_DATA寄存器后,CPU继续执行程序 ;将读出的数据送往Acc 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 739 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FF,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FF,防止误操作 ;字节编程,该字节为FFh/空时,可对其编程,否则不行,要先执行扇区擦除 MOV IAP_DATA, #ONE_DATA ;送字节编程数据到IAP_DATA, ;只有数据改变时才需重新送 d e t i m MOV IAP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节 MOV IAP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节 MOV IAP_CONTR, #WAIT_TIME ORL IAP_CONTR, #10000000B IAP_CMD, #ISP_IAP_BYTE_PROGRAM MOV U C M Li ;设置等待时间 ;允许ISP/IAP操作 地址需要改变时 才需重新送地址 此两句可合成 一句,并且只 送一次就够了 ;送字节编程命令,现有A版本每次触发前需重新送命令。 ;在��������������� 命令不需改变时,不需重新送命令 C T S MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;字节编程成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FF,;指向非EEPROM区,防止误操作 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FF,指向非EEPROM区,防止误操作 740 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 ;扇区擦除,没有字节擦除,只有扇区擦除,512字节/扇区,每个扇区用得越少越方便 ;如果要对某个扇区进行擦除,而其中有些字节的内容需要保留,则需将其先读到单片机 ;内部的RAM中保存,再将该扇区擦除,然后将须保留的数据写回该扇区,所以每个扇区 ;中用的字节数越少越好,操作起来越灵活��� 方便�. ;扇区中任意一个字节的地址都是该扇区的地址,无需求出首地址. MOV IAP_ADDRH, #SECTOR_FIRST_BYTE_ADDR_HIGH ;送扇区起始地址高字节 MOV IAP_ADDRL, #SECTOR_FIRST_BYTE_ADDR_LOW ;送扇区起始地址低字节 ;地址需要改变时才需重新送地址 MOV IAP_CONTR, #WAIT_TIME ;设置等待时间 ORL IAP_CONTR, #10000000B ;允许ISP/IAP MOV IAP_CMD, #ISP_IAP_SECTOR_ERASE d e t i im 此两句可以合 成一句,并且只 送一次就够了 L ;送扇区擦除命令,����������������� 现有A版本每次触发前需重新送命令。 ;在��������������� 命令不需改变时,不需重新送命令 MOV IAP_TRIG, MOV C T S IAP_TRIG, #5Ah U C M ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;扇区擦除成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FF,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FF,防止误操作 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 741 STC15F2K60S2系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 小常识: (STC单片机的Data Flash 当EEPROM功能使用) 3个基本命令----字节读,字节编程,扇区擦除 字节编程:将“1”���������������������������������� 写成“1”或���������������������������� “0”,������������������������ 将����������������������� “0”�������������������� 写成“0”。�������������� 如果������������ 某����������� 字节是F F H,���� 才��� 可�� 对其 如果该字节������������������������������ 不是F F H������������������������� ,则须先将整个扇区擦除,因为只有“扇区擦除”才可以 进行字节编程。����������������������������������� 将“0”变为“1”。 扇区擦除:只有“扇区擦除”才可能将“0”擦除为“1”。 大建议: 1.同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区,就不须读出保 护。 d e t i im 2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC单片机的Data Flash比外部EEPROM要 快很多,读一个字节/编程一个字节大概是2��������� 个时钟������ /55uS。 U C M L 3.如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则 另外的不需要修改的数据须先读出放在STC单片机的RAM中,然后擦除整个扇区,再将需要保留 的数据和需修改的数据�������������������������������� 按字节逐字节�������������������������� 写回该扇区中(������������������� 只有字节写命令,无连续字节写命令��� )。这 时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。 C T S 常问的问题: 1:IAP指令完成后,地址是否会自动“加1”或“减1”? 答:不会 2:送5A和A5触发后,下一次IAP命令是否还需要送5A和A5触发? 答:是,一定要。 742 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F2K60S2系列单片机指南 官方网站:www.STCMCU.com 研发顾问QQ:800003751 STC — 全球最大的8051单片机设计公司 9.4 EEPROM测试程序(C和汇编) 9.4.1 EEPROM测试程序(不用串口送出数据)(C和汇编) 1. C程序: ;STC15系列单片机EEPROM/IAP 功能测试程序演示 /*--------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited. --------------- -----------------------------------------------------*/ /* --- 演示STC 15 系列单片机 EEPROM/IAP功能----------------------------------------*/ /* --- 研发顾问QQ:800003751------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 -----------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 --------------------------------*/ /*---- 在 Keil ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-----*/ /*---------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz void IapIdle(); BYTE IapReadByte(WORD addr); #include "reg51.h" #include "intrins.h" U C M C T S d e t i im L typedef unsigned char BYTE; typedef unsigned int WORD; //----------------------------------------------sfr sfr sfr sfr sfr sfr IAP_DATA IAP_ADDRH IAP_ADDRL IAP_CMD IAP_TRIG IAP_CONTR #define #define #define #define CMD_IDLE 0 CMD_READ 1 CMD_PROGRAM 2 CMD_ERASE 3 //#define ENABLE_IAP //#define ENABLE_IAP #define ENABLE_IAP //#define ENABLE_IAP //#define ENABLE_IAP 南通国芯微电子有限公司 = = = = = = 0xC2; 0xC3; 0xC4; 0xC5; 0xC6; 0xC7; 0x80 0x81 0x82 0x83 0x84 //IAP数据寄存器 //IAP地址寄存器高字节 //IAP地址寄存器低字节 //IAP命令寄存器 //IAP命令触发寄存器 //IAP控制寄存器 //空闲模式 //IAP字节读命令 //IAP字节编程命令 //IAP扇区擦除命令 //if SYSCLK
STC15W204S-35I-SOP16 价格&库存

很抱歉,暂时无法提供与“STC15W204S-35I-SOP16”相匹配的价格&库存,您可以联系我们找货

免费人工找货
STC15W204S-35I-SOP16
  •  国内价格
  • 1+3.50000
  • 10+3.10000
  • 100+2.50000
  • 500+2.10000

库存:1000