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

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
STC15W404AS-35I-SOP16

STC15W404AS-35I-SOP16

  • 厂商:

    STC(宏晶科技)

  • 封装:

    SOP16_150MIL

  • 描述:

    STC15W404AS SOP16 512B 2.5~5.5V 35MHz

  • 数据手册
  • 价格&库存
STC15W404AS-35I-SOP16 数据手册
STC — 8051单片机全球第一品牌,全球最大的8051单片机设计公司 官方网站:www.STCMCU.com www.GXWMCU.com STC15系列单片机器件手册 ---超��������� 强抗干扰,���� 无法解密 ---采用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: 2015/6/29 STC15F2K60S2系列单片机指南 建议使用Foxit Reader (福昕PDF阅读器) 打开此文档,福昕阅读器 下载地址:http://www.foxitsoftware.cn/downloads/ 临时技术支持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 STC15W4K32S4系列1T 8051单片机,4K字节SRAM,超高速四串口,6路15位PWM 1组比较器 比较器可当1路ADC用 P2.3/A11/MOSI_2/PWM5 P2.2/A10/MISO_2/PWM4 P2.1/A9/SCLK_2/PWM3 P2.0/A8/RSTOUT_LOW P4.4/RD/PWM4_2 P4.3/SCLK_3 P4.2/WR/PWM5_2 P4.1/MISO_3 P7.3 P7.2 P7.1 P7.0 P3.7/INT3/TxD_2/PWM2 P3.6/INT2/RxD_2/CCP1_2 P3.5/T1/T0CLKO/CCP0_2 P5.1/TxD3_2 此线路只针对 标 所有封装 可 IAP15W4K58S4 LQFP64S/LQFP64L/QFN64/ 准 比较 可程 8路 PWM 掉 普通 大串 设支支 LQFP48/QFN48 外 A/D 8 器 对序 和以STC15W4K 容 行 定时器 电 内部 内 下持持 LQFP44/PDIP40 部 路 (可当 内部 外 加 开头的单片机, Flash 量 口 计数器 唤 低压 部 次R U LQFP32/SOP28/SKDIP28 中 (8路 1路 D 复位 输 密 IRC15W4K63S4和 工作 程序 S 并 S T0-T4 醒 检测 看 高 更S S (可选 出 后 断 PWM ADC P EEP 电压 存储 R 可 P 外部 6路15位 2路CCP 专 精 新4 B 中断 门 IAP15W4K61S4不 支 可当 使用, T ROM 复位 时 传 (V) 器 A 掉 I 管脚 专门的 10位PWM 用 并可 狗 准 程8直 支持此线路,可通 持 8路 可作 R 门槛 钟 输 (byte) M 电 也能 PWM 可当外部 定 掉电 时 序5接 部分封装 过RS232或USB转 掉 D/A 外部 电压) 及 (防 字唤 掉电 (带死区 中断并可 时 唤醒 钟 需下下 价格(RMB ¥) 电 使用) 掉电 复拦 串口电路连接电脑 节醒 唤醒 控制) 掉电唤醒 器 口载载 唤 检测) 位 截) 下载程序 令 醒 PWMFLT/SS_2/ECI_3/A12/P2.4 STC15W4K32S4系列单片机选型价格一览表,已开始供货 CCP0_3/A13/P2.5 PDIP40 LQFP44 LQFP48 LQFP64S CCP1_3/A14/P2.6 特别提醒:8路PWM可当8路D/A使用,2路CCP可当2个������������ 定时器��������� 或2个外部中断�� 使用 PWM2_2/A15/P2.7 2.5-5.5 16K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 42K 有 有 16级 有 是 有 是 是 是 ¥5.7 ¥5.2 ¥5.2 ¥5.4 PWM3_2/ALE/P4.5 2.5-5.5 32K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 26K 有 有 16级 有 是 有 是 是 是 ¥5.9 ¥5.5 ¥5.5 ¥5.7 RxD2_2/P4.6 RxD3/AD0/P0.0 2.5-5.5 40K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 18K 有 有 16级 有 是 有 是 是 是 ¥5.9 ¥5.6 ¥5.6 ¥5.8 TxD3/AD1/P0.1 2.5-5.5 48K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 10K 有 有 16级 有 是 有 是 是 是 ¥5.9 ¥5.6 ¥5.6 ¥5.8 RxD4/AD2/P0.2 2.5-5.5 56K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 2K 有 有 16级 有 是 有 是 是 是 ¥5.9 ¥5.6 ¥5.6 ¥5.8 TxD4/AD3/P0.3 T3CLKO/AD4/P0.4 ¥5.9 ¥5.6 ¥5.6 ¥5.8 RxD4_2/P5.2 2.5-5.5 58K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 IAP 有 有 16级 有 是 有 是 是 是 用户可将用户程序区的 程序Flash当EEPROM使用 ¥5.9 ¥5.6 ¥5.6 ¥5.8 2.5-5.5 61K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 IAP 有 有 16级 有 是 有 是 是 否 用户可将用户程序区的 程序Flash当EEPROM使用 ¥5.9 ¥5.6 ¥5.6 ¥5.8 37 38 39 40 41 42 43 44 45 46 47 48 P3.2/INT0 6 P3.1/T2 5 P3.0/INT4/T2CLKO LQFP48 46个I/O 24 23 22 21 20 19 18 17 16 15 14 13 IRC15W4K63S4 默认使用外部晶振 2.5-5.5 63.5K 4K 4 有 5 6-ch 2-ch 有 有 10位 √ 2 IAP 有 有 16级 有 是 无 否 否 否 用户可将用户程序区的 如无外部晶振则使 程序Flash当EEPROM使用 用内部24MHz时钟 STC15W1K08PWM系列单片机选型价格一览表,2014年10月开始供货 SOP28 LQFP32 特别提醒:8路PWM可当8路D/A使用,2路CCP可当2个������������ 定时器��������� 或2个外部中断�� 使用 建议用户将串口1设在[P3.6/RxD_2,P3.7/TxD_2] STC15W1K08PWM 2.5-5.5 8K 1K 1 有 3 6-ch 2-ch 有 有 10位 √ 1 19K 有 有 16级 有 是 有 是 是 是 ¥3.6 ¥3.7 或[P1.6/RxD_3, P1.7/TxD_3] STC15W1K16PWM 2.5-5.5 16K 1K 1 有 3 6-ch 2-ch 有 有 10位 √ 1 11K 有 有 16级 有 是 有 是 是 是 ¥3.7 ¥3.8 IAP15W4K58S4和IAP15W4K61S4 我们直销,所以低价,����� 以上单价为10K/M起定量,量小每片需加0.1元,以上价格运费由客户承担,零售10片起,如对价格不满,可来电要求降� 价 单片机可作仿真芯片 IRC15W4K63S4������������������������������������������������������������������ 型号单片机的内部复位门槛电压固定,P5.4不可当复位管脚RST使用,且P3.2/P3.3与下载无关,且不支持"程序加密后传输"功能。 IAP15W4K58S4��������������������������������������������������� 型号单片机的不能设置����������������������������������������� “P3.2/P3.3������������������������������� 同时为���������������������������� 0/0������������������������� 才能下载程序������������������� ”������������������ ,P5.4不可当复位管脚RST使用。 封装形式: LQFP64L(16mm x 16mm) LQFP64S(12mm x 12mm) QFN64(9mm x 9mm) LQFP48(9mm x 9mm, 强烈推荐) QFN48(7mm x 7mm) LQFP44(12mm x 12mm, 强烈推荐) PDIP40(正常生产,但不推荐) LQFP32(9mm x 9mm) SOP28 SKDIP28 强烈推荐选择SOP28, LQFP44/48/64贴片封装 每片单片机具有全球 唯一身份证号码(ID号), 无法解密,加密坚不可摧 STC15W4K系列及IAP15W4K58S4单片机 USB直接下载����� 编程线路�,USB-ISP P3.0/P3.1直接连接电脑USB的D-/D+ USB +5V USB-Micro P5.0/RxD3_2 P3.4/T0/T1CLKO/ECI_2 P3.3/INT1 P3.2/INT0 P3.1/TxD/T2 1 2 3 4 5 DD+ 1N4729-3.6V稳压保护管, RMB 0.03元 22Ω P3.0/RxD/INT4/T2CLKO 22Ω P4.0/MOSI_3 Gnd C2 C1 P5.5/CMP+ 0.01μF 47μF Vcc P5.4/RST/SysClkO/SS_3/CMPP1.7/ADC7/TxD_3/XTAL1/PWM7 pF PWM可当D/A使用 提升的是性能 降低的是成本 47 A/D (高速10位8路) Hz 分时复用可当9组使用 6路15位高速PWM 2路CCP可作PWM或定时器 全部175℃ 8小时高温烘烤 M P7 P6 P3.5/T1/T0CLKO/CCP0_2 P5.1/TxD3_2 最多62个I/O P3.3/INT1/RSTOUT_LOW 7 STC15F100W系列,大批量供货中 RMB0.89元起(STC15F100W) P3.7/INT3/TxD_2/PWM2 P3.6/INT2/RxD_2/CCP1_2 P5 P5.0/RxD3_2 P3.4/T0/T1CLKO/ECI_2 P3.3/INT1 P3.2/INT0 P3.1/TxD/T2 P3.0/RxD/INT4/T2CLKO P6.7 P6.6 P6.5 P6.4 P4.0//MOSI_3 Gnd P5.5/CMP+ Vcc P5.4/RST/SysClkO/SS_3/CMPP1.7/ADC7/TxD_3/XTAL1/PWM7 P4.1/MISO_3 P4 + P5.0 - P5.5 4 36 35 34 33 32 31 30 29 28 27 26 25 P3/P4/P6/P7 LQFP64L LQFP64S 62个I/O Gnd 8 USB +5V 系统电源 USB-ISP下载时单片机可直接由电脑USB供电, 也可不用电脑USB供电,而由系统电源供电。 24 IAP15W4K61S4 本身就是仿真器 高速(0-35M),高可靠 超强抗干扰,无法解密 P3 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 3 pF IAP15W4K58S4 本身就是仿真器 P2 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 2 47 STC15W4K16S4 STC15W4K32S4 STC15W4K40S4 STC15W4K48S4 STC15W4K56S4 P1 PWMFLT/SS_2/ECI_3/A12/P2.4 CCP0_3/A13/P2.5 CCP1_3/A14/P2.6 PWM2_2/A15/P2.7 P7.4 P7.5 P7.6 P7.7 PWM3_2/ALE/P4.5 RxD2_2/P4.6 RxD3/AD0/P0.0 TxD3/AD1/P0.1 RxD4/AD2/P0.2 TxD4/AD3/P0.3 T3CLKO/AD4/P0.4 RxD4_2/P5.2 1 Vcc INT3/T0CLKO/P3.5 1 2 3 4 5 6 7 8 9 10 11 12 型号 7组8位 微处理器 内置高精准时钟(ISP编程时5~30MHz可任意设置) 内置高可靠复位电路(16级复位门槛电压可设置) 掉电模式:高 ;延时 ;数据线上升沿 ;延时 ;---------------------------;发送ACK/NAK信号 ;---------------------------- 448 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 I2C_TXACK: MOV SETB CALL CLR CALL SETB RET SDA, C SCL I2C_DELAY SCL I2C_DELAY SDA ;---------------------------;接收ACK/NAK信号 ;---------------------------I2C_RXACK: SETB SDA SETB SCL CALL I2C_DELAY MOV C, SDA CLR SCL CALL I2C_DELAY RET ;---------------------------;接收一字节数据 ;---------------------------I2C_TXBYTE: MOV R7, #8 TXNEXT: RLC A MOV SDA, C SETB SCL CALL I2C_DELAY CLR SCL CALL I2C_DELAY DJNZ R7, TXNEXT RET C T S ;---------------------------;发送一字节数据 ;---------------------------I2C_RXBYTE: MOV R7, #8 RXNEXT: SETB SCL CALL I2C_DELAY MOV C, SDA RLC A CLR SCL CALL I2C_DELAY 南通国芯微电子有限公司 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 ;送ACK数据 ;时钟->高 ;延时 ;时钟->低 ;延时 ;发送完成 ;准备读数据 ;时钟->高 ;延时 ;读取ACK信号 ;时钟->低 ;延时 U C M d e t i im L ;8位计数 ;移出数据位 ;数据送数据口 ;时钟->高 ;延时 ;时钟->低 ;延时 ;送下一位 ;8位计数 ;时钟->高 ;延时 ;时钟->低 ;延时 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 449 技术支持网站:www.GXWMCU.com STC15系列单片机指南 DJNZ RET R7, RXNEXT 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;收下一位 ;---------------------------I2C_DELAY: PUSH MOV DJNZ POP RET 0 R0, #1 R0, $ 0 ;6 ;4 ;2 6(200K) 1(400K) [18'432'000/400'000=46] ;4 ;3 ;4 ;--------------------------- END C T S 450 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 4.24.2 STC15系列单片机I/O口软件模拟I2C接口的从机模式 ;/* --- STC MCU Limited. --------------------------------------------------*/ ;/* --- STC 1T Series MCU Simulate I2C Slave Demo ----------------*/ ;/* --- 技术支持QQ:800003751------------------------------------------*/ ;/* --- Fax: 86-755-82944243 ----------------------------------------------*/ ;/* --- Tel: 86-755-82948412 -----------------------------------------------*/ ;/* --- Web: www.STCMCU.com -----------------------------------------*/ ;/* If you want to use the program or the program referenced in the */ ;/* article, please specify in which data and procedures from STC */ ;/*-------------------------------------------------------------------------------*/ SCL BIT P1.0 SDA BIT P1.1 ;--------------------------- ORG 0 RESET: SETB SCL SETB SDA CALL CALL CLR CALL SETB RRC MOV JC WRITEDATA: CALL MOV INC CLR CALL CALL JMP d e t i im I2C_WAITSTART I2C_RXBYTE C I2C_TXACK C A R0, A READDATA ;等待起始信号 ;接收地址数据 I2C_RXBYTE @R0, A R0 C I2C_TXACK I2C_WAITSTOP RESET ;接收数据 ;写入IDATA ;地址+1 C T S U C M READDATA: MOV A, @R0 INC R0 CALL I2C_TXBYTE CALL I2C_RXACK CALL I2C_WAITSTOP JMP RESET ;---------------------------;等待起始信号 ;---------------------------I2C_WAITSTART: JNB SCL, $ JB SDA, $ JB SCL, $ RET 南通国芯微电子有限公司 L ;回应ACK ;读/写 IDATA[80H - FFH] ;读/写位->C ;地址送入R0 ;C=1(读) C=0(写) ;回应ACK ;等待停止信号 ;发送IDATA数据 ;接收ACK ;等待停止信号 ;等待时钟->高 ;等待数据线下降沿 ;等待时钟->低 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 451 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;---------------------------;等待结束信号 ;---------------------------I2C_WAITSTOP: JNB SCL, $ ;等待时钟->高 JNB SDA, $ ;等待数据线上升沿 RET ;---------------------------;发送ACK/NAK信号 ;---------------------------I2C_TXACK: MOV SDA, C ;送ACK数据 JNB SCL, $ ;等待时钟->高 JB SCL, $ ;等待时钟->低 SETB SDA ;发送完成 RET ;---------------------------;接收ACK/NAK信号 ;---------------------------I2C_RXACK: SETB SDA ;准备读数据 JNB SCL, $ ;等待时钟->高 MOV C, SDA ;读取ACK信号 JB SCL, $ ;等待时钟->低 RET ;--------------------------;接收一字节数据 ;---------------------------I2C_RXBYTE: MOV R7, #8 ;8位计数 RXNEXT: JNB SCL, $ ;等待时钟->高 MOV C, SDA ;读取数据口 RLC A ;保存数据 JB SCL, $ ;等待时钟->低 DJNZ R7, RXNEXT ;收下一位 RET ;---------------------------;发送一字节数据 ;---------------------------I2C_TXBYTE: MOV R7, #8 ;8位计数 TXNEXT: RLC A ;移出数据位 MOV SDA, C ;数据送数据口 JNB SCL, $ ;等待时钟->高 JB SCL, $ ;等待时钟->低 DJNZ R7, TXNEXT ;送下一位 RET ;--------------------------- END C T S 452 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 第5章 指令系统 5.1 寻址方式 寻址方式是每一种计算机的指令集中不可缺少的部分。寻址方式规定了数据的来源和目 的地。对不同的程序指令,来源和目的地的规定也会不同。在STC单片机中的寻址方式可概括 为: • • • • • • • 立即寻址 直接寻址 间接寻址 寄存器寻址 相对寻址 变址寻址 位寻址 5.1.1 立即寻址 d e t i im L 立即寻址也称立即数,它是在指令操作数中直接给出参加运算的操作数,其指令格式如 下: 如:MOV A, #70H U C M 这条指令的功能是将立即数70H传送到累加器A中 5.1.2 直接寻址 C T S 在直接寻址方式中,指令操作数域给出的是参加运算操作数地址。直接寻址方式只能用来 表示特殊功能寄存器、内部数据寄存器和位地址空间。其中特殊功能寄存器和位地址空间只能 用直接寻址方式访问。 如:ANL 70H, #48H 表示70H单元中的数与立即数48H相“与”,结果存放在70H单元中。其中70H为直接地 址,表示内部数据存储器RAM中的一个单元。 5.1.3 间接寻址 间接寻址采用R0或R1前添加“@”符号来表示。例如,假设R1中的数据是40H,内部数据存 储器40H单元所包含的数据为55H,那么如下指令: MOV A, @R1 把数据55H传送到累加器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 453 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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, 454 20H 南通国芯微电子有限公司 ;片内位单元位操作型指令 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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倍。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 455 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 现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 12 2 6倍 A,#data 2 12 2 6倍 INC A C T S 1 SUBB 累加器带借位减寄存器内� 容 累加器带借位减直接地址单 元的内� 容 累加器带借位减间接RAM中 的内� 容 累加器带借位减立即� 数 2 1 累加器加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倍 456 南通国芯微电子有限公司 CU M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 1 24倍 2 6 3 24倍 8倍 4倍 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 逻辑操作类指令 助记符 字 传统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 XRL direct, A 直接地址单元与累加器相“异或” 2 XRL direct,#data CLR d e t i im 2 6倍 3 4倍 3 8倍 1 12倍 2 6倍 2 6倍 12 2 6倍 12 3 4倍 直接地址单元与立即数相“异或” 3 24 3 8倍 A 累加器清“ 0” 1 12 1 12倍 CPL A 累加器求� 反 1 12 1 12倍 RL A 累加器循环左� 移 1 12 1 12倍 RLC A 累加器带进位位循环左� 移 1 12 1 12倍 RR A 累加器循环右� 移 1 12 1 12倍 RRC A 累加器带进位位循环右� 移 1 12 1 12倍 SWAP A 累加器�������� 内高低����� 半字节交� 换 1 12 1 12倍 南通国芯微电子有限公司 C T S M CU 总机:0513-5501 2928 / 2929 / 2966 L 传真:0513-5501 2969 / 2956 / 2947 457 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 数据传送类指令 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 MOV @Ri, A 累加器内容送间接RAM单元 1 MOV @Ri, direct 直接地址单元数据送入间接RAM单元 MOV @Ri, #data 助记符 功能说明 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 MOVC 立即数送入间接RAM单元 DPTR,#data16 16位立即数送入���� 3 数据指针 A, @A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 MOVC A, @A+PC MOV 2 U C M 以PC为基地址变址寻址单元中的数据送入累加器 d e t i m 24 3 12 2 3 2 24 12 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. 458 南通国芯微电子有限公司 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 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 布尔变量操作类指令 助记符 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 功能说明 清零进位位 清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 总机:0513-5501 2928 / 2929 / 2966 d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 效率 提升 459 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 控制转移类指令 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日止 460 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 0 1 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)�� ←� 页码地址 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 461 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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)) 462 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 0 0 1 0 immediate data STC — 全球最大的8051单片机设计公司 ADD A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 操作: 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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 463 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 464 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 465 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 L direct address U C M immediate data 操作: ANL (direct)���������� ←��������� (direct) ∧ #data C T S ANL C , 功能: 对位变量进行逻辑与运算 说明: 如果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) 466 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 CU ; ... ...... NOT_EQ: JC ; ... M C T S ; 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� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 467 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 CJNE A, #data, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 1 1 0 1 0 0 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 468 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 469 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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) 470 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 DA 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 471 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 指令长度(字节): 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) ←��� �� (A ��3-0) + 6 AND IF [[(A7-4) > 9] V [(C) = 1]] THEN (A7-4) ←��� �� (A ��7-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 472 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 DEC 官方网站:www.STCMCU.com 技术支持QQ:800003751 0 0 0 1 direct address STC — 全球最大的8051单片机设计公司 direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 1 操作: 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 ←�������� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 473 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 TOOOLE: MOV 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 474 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 DJNZ 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 �� ������ 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 475 技术支持网站:www.GXWMCU.com STC15系列单片机指南 INC 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 �������� 476 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 JB 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 477 技术支持网站:www.GXWMCU.com STC15系列单片机指南 JC 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 JMP @A+DPTR 功能: 间接跳转。 C T S d e t i im rel. address U C M 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) 478 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 479 技术支持网站:www.GXWMCU.com STC15系列单片机指南 JNZ 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 480 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 addr15-addr8 U C M C T S L 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 481 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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)) 482 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 0 1 1 1 immediate data STC — 全球最大的8051单片机设计公司 MOV A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 操作: 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 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 L 操作: 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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 483 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV direct, direct 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 0 0 0 1 0 1 dir.addr. (src) dir.addr. (dest) 操作: 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 二进制编码: C T S 1 1 1 1 U C M 0 1 0 1 L direct address immediate data 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 484 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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) ����� MOV bit,C 指令长度(字节): 2 执行周期: 2 二进制编码: 1 C T S 0 0 1 0 0 1 d e t i im bit address U C M 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 immediate data7-0 操作: MOV (DPTR) �� ←� ����� #data15-0 DPH DPL ← #data �� �����15-8 #data7-0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 485 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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)) 486 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 MOVX 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 , 功能: 外部传送 说明: 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)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 487 技术支持网站:www.GXWMCU.com STC15系列单片机指南 MOVX 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 @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 488 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 0 操作: NOP (PC)+1 (PC) ←������� C T S ORL , 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。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 489 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 操作: ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: C T S 0 1 0 0 0 1 i 0 0 U C M 1 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 490 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 ORL 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 0 操作: ORL (C) ←���� �� (C)∨(bit) ��� C T S POP direct U C M 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 491 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 操作: PUSH (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←��������� �������� (direct) RET 0 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 492 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 493 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RLC A 功能: 带进位循环左移 说明: 累加器的8位数据和进位标志一起循环左移1位。其中位7移入进位标志,进位标志的 初始状态值移到位0。该指令不影响其他标志位。 举例: 假设累加器A的值为0C5H(11000101B),则指令 RLC A 执行后,将把累加器A的数据变为8BH(10001011B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 1 操作: RLC �� (A ��n) (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 ←��� �� (An+1) (An) �� (A7) �� ←��� �� (A0) 494 南通国芯微电子有限公司 0 0 1 1 n=0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 RRC A 功能: 带进位循环右移 说明: 累加器的8位数据和进位标志一起循环右移1位。其中位0移入进位标志,进位标志的 初始状态值移到位7。该指令不影响其他标志位。 举例: 假设累加器的值为0C5H(11000101B),进位标志为0,则指令 RRC A 执行后,将把累加器的数据变为62H(01100010B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 0 操作: RRC ←��� �� (An) (An+1) �� (A7) �� ←���� ��� (C) (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� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 495 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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清零。 496 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ������ ((Ri)) U C M SUBB A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 0 C T S 1 0 1 i 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 操作: SWAP (A3-0) 南通国芯微电子有限公司 0 0 0 1 0 0 (A7-4) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 497 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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) U C M XCH A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 0 0 C T S 操作: XCH (A) 0 1 0 1 d e t i im L direct address (direct) XCH A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: XCH (A) 498 0 1 1 i ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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被取反。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 499 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 XRL A, Rn 操作: XRL (A) �� ← (A)� ���� ≮ 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 1 0 1 r r r (Rn) XRL A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 操作: XRL (A) �� ← (A)� ���� 0 1 0 1 ≮ 0 1 1 0 direct address (direct) d e t i im XRL A, @Ri 指令长度(字节): 1 执行周期: 1 0 1 1 操作: XRL (A) �� ← (A)� ���� 0 ≮ 二进制编码: 0 1 1 i U C M ((Ri)) XRL A, #data C T S 指令长度(字节): 2 L 执行周期: 1 0 1 1 操作: XRL (A) �� ← (A)� ���� 0 ≮ 二进制编码: 0 1 0 0 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)� �� ��������� 500 南通国芯微电子有限公司 ≮ 二进制编码: direct address immediate data # data 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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: 2 2 Encoding: Operation: a10 a9 a8 1 ACALL (PC)�� ←�������� ������� (PC)+ 2 (SP)��������� ←�������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP)��������� ←�������� (SP) + 1 ((SP))���� ←��� (PC15-8) (PC10-0)�� ←� ����� page ������� address C T S U C M 0 0 0 1 a7 a6 a5 a4 L a3 a2 a1 a0 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. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 501 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 ADD (A)������������� ←������������ (A) + ((Ri)) ADD A,#data Bytes: Cycles: Encoding: Operation: 0 1 1 i 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: 502 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 ADDC (A)������������������� ←������������������ (A) + (C) + ((Ri)) ADDC A,#data Bytes: 2 Cycles: 1 Encoding: Operation: C T S 0 0 1 1 U C M 0 1 0 0 L immediate data ADDC (A)������������� ←������������ (A) + (C) + ����� #data AJMP addr 11 Function: Description: Example: Bytes: Cycles: Encoding: Operation: 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 503 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: 504 0 1 0 1 0 1 1 i ANL (A)����� ←���� (A) ∧ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 direct address L immediate data ANL (direct)���������� ←��������� (direct) ∧ #data ANL C , Function: Description: U C M 0 0 1 1 C T S 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: 1 0 0 0 0 0 1 0 bit address ANL (C) �� ← ���� ���� (C) ∧ (bit) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 505 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 ; NOT_EQ: ; CJNE ... JC ... 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: 506 1 0 1 1 0 1 0 0 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 immediata data 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 rel. address CJNE @Ri,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 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 507 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: 508 1 1 0 0 0 0 1 0 bit address CLR (bit) ← � �� 0� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 509 STC15系列单片机指南 DA 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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. 510 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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]] �� (A ��3-0) + 6 THEN(A3-0) ←��� AND IF [[(A7-4) > 9] V [(C) = 1]] THEN (A7-4) ←��� �� (A ��7-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 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 511 技术支持网站:www.GXWMCU.com STC15系列单片机指南 DEC 研发顾问Tel:13922805190 direct Bytes: Cycles: 2 1 Encoding: Operation: DEC 临时技术支持Tel:13922829991 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: 512 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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, MOV CPL DJNZ TOOOLE: 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 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 direct, rel Bytes: 3 Cycles: 2 Encoding: 南通国芯微电子有限公司 1 1 0 1 0 1 0 1 direct address 总机:0513-5501 2928 / 2929 / 2966 rel. address 传真:0513-5501 2969 / 2956 / 2947 513 技术支持网站:www.GXWMCU.com STC15系列单片机指南 Operation: INC 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 A Bytes: Cycles: 1 1 Encoding: Operation: INC 0 0 0 0 1 0 0 Rn Bytes: 1 Cycles: 1 Operation: direct Bytes: Cycles: Encoding: Operation: 514 0 INC (A) �� ← (A)+1 ����� Encoding: INC C T S 0 0 0 0 1 r r r INC (Rn) ← (Rn)+1 �� ������ 2 1 0 0 0 0 0 1 0 1 direct address INC (direct)���������� ←��������� (direct) + 1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 INC Bytes: 1 Cycles: 1 Operation: 0 0 0 0 0 1 1 i INC ((Ri))����������� ←���������� ((Ri)) + 1 DPTR Function: Description: Example: Bytes: Cycles: 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: 0 U C M L 0 0 1 1 C T S 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 Encoding: Operation: 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: JB STC — 全球最大的8051单片机设计公司 @Ri Encoding: INC 技术支持QQ:800003751 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 515 技术支持网站:www.GXWMCU.com STC15系列单片机指南 JBC 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: Encoding: Operation: rel Function: Description: Example: Bytes: Cycles: Encoding: Operation: 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 0 0 0 1 0 0 0 0 U C M C T S d e t i im bit address JBC (PC) �� ← ������� ������� (PC)+ 3 IF (bit) = 1 THEN (bit) ← 0 �� � (PC) �� ←�������� ������� (PC) + ��� rel rel. address L 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. The carry flag is cleared. The instruction sequence, JC CPL JC 516 研发顾问Tel:13922805190 bit, rel Function: Description: JC 临时技术支持Tel:13922829991 LABEL1 C LABEL2s will set the carry and cause program execution to continue at the instruction identified by the label LABEL2. 2 2 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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: MOV JMP AJMP AJMP AJMP AJMP JMP-TBL: 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: 3 2 Encoding: Operation: 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 517 技术支持网站:www.GXWMCU.com STC15系列单片机指南 JNC 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: Encoding: Operation: 518 2 2 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 官方网站:www.STCMCU.com STC15系列单片机指南 JZ 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 LCALL addr16 Function: Description: Example: d e t i im rel. address U C M 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: 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 Encoding: Operation: 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 519 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: Encoding: Operation: 520 1 1 1 1 1 0 1 r r r MOV (A) �� ←����� ���� (Rn) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 *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: 0 1 1 1 MOV (Rn) ←� �� ����� #data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 521 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 MOV (direct)�� ←��������� �������� (direct) MOV direct, @Ri Bytes: 2 Cycles: 2 Encoding: Operation: 0 1 0 1 C T S 1 0 0 0 dir.addr. (src) U C M 0 1 1 i direct addr. 0 1 0 1 direct address L dir.addr. (dest) MOV (direct)������� ←������ ((Ri)) MOV direct,#data Bytes: 3 Cycles: 2 Encoding: 0 1 1 1 Operation: MOV (direct) ← ����� �� ����� #data immediate data MOV @Ri, A 522 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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: 1 0 0 MOV (bit)�� ←���� (C) ��� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 523 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: immediate data7-0 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. U C M C T S 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: 524 1 0 0 1 0 0 1 1 MOVC (A) �� ←������������� ������������ ((A)+(DPTR)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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: 1 2 Encoding: Operation: 1 1 1 0 0 0 1 i MOVX (A) �� ←������� ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 525 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: Example: 0 0 0 0 MOVX (DPTR)���� ←��� (A) C T S MUL AB Function: Description: U C M 1 1 1 1 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: 526 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 0 NOP (PC) ←������� (PC)+1 ORL , Function: Description: d e t i im 1 1 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. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 527 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 1 C T S 0 1 0 0 0 1 i 0 0 U C M 1 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: 528 0 1 0 0 0 0 1 immediate data ORL (direct) ←��������� �� �������� (direct)∨#data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 ORL 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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: 1 Function: Example: Bytes: Cycles: Encoding: Operation: 1 0 0 1 0 1 0 0 0 0 ORL (C) ←���� �� (C)∨(bit) ��� C T S POP direct Description: 1 0 U C M 0 d e t i im bit address ORL (C) ←���� �� (C)∨(bit) ��� ORL C, /bit Bytes: Operation: 1 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 529 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: 530 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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 RETI (PC15-8) ←������� �� ((SP)) ������ (SP) �� ←�������� ������� (SP) -1 �� ((SP)) ������ (PC7-0) ←������� (SP) �� ←�������� ������� (SP) -1 C T S RL A Description: 0 0 U C M 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: 1 1 0 0 1 0 RL (An+1) ←��� �� (A ��n) (A0) ←��� �� (A ��7) 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 531 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 RLC (An+1) ←��� �� (A ��n) (A0) ←���� �� (C) ��� (C) ←��� �� (A ��7) 0 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 C T S 0 0 0 0 RR (An) ←��� �� (A ��n+1) (A7) ←��� �� (A ��0) U C M 0 0 1 1 n=0-6 RRC A Function: Description: Example: Bytes: Cycles: Encoding: Operation: 532 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 0 0 0 1 RRC (An+1) ←��� �� (A ��n) (A7) ←���� �� (C) ��� (C) ←��� �� (A ��0) 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 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 STC — 全球最大的8051单片机设计公司 Description: SETB 技术支持QQ:800003751 1 bit Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 0 1 1 1 0 1 0 0 1 SETB (bit) ←�� �� 1� C T S SJMP rel Function: 1 1 d e t i im SETB (C) ←�� �� 1� U C M 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: 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 533 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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: 1 1 C T S 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: 534 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 官方网站:www.STCMCU.com STC15系列单片机指南 SUBB A, #data Bytes: Cycles: Encoding: Operation: 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 (A7-4) XCH A, C T S 0 U C M 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: 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 535 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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) C T S U C M L 0 1 1 i (Ri3-0) 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. 536 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 U C M ((Ri)) XRL A, #data Bytes: 2 Cycles: 1 Encoding: Operation: C T S 0 1 1 0 XRL (A) �� ← (A)� ���� 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: 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 537 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第6章 中断系统 中断系统是为使CPU具有对外界���������������� 紧急�������������� 事件的����������� 实时��������� 处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的 工作,转而去处理这个紧急事件��������������������������� ,�������������������������� 处理完以后,再回到原来被中断的地方,继续原来的工作, 这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断 源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服 务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排 队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响 应������������ 优先���������� 级别最高的中断请求。 当CPU正在处理一个中断源请求的时候(执行相应的���������������� 中断�������������� 服务程序),发生了另外一个优 先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的������������� 服务����������� 程序,转而去处理优先级 更高的中断请求源,处理完以后,再回到原低级中断������������������ 服务���������������� 程序,这样的过程称为中断嵌套。这 样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。 d e t i im L STC15W4K32S4系列单片机提供了21个中断请求源,它们分别是:外部中断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中断、比较器 中断、PWM中断及PWM异常检测中断。除外部中断2(INT2)、外部中断3(INT3)、定时器T2 中断、外部中断4(INT4)、串口3中断、串口4中断、定时器3中断、定时器4中断及比较器中断 固定是最低优先级中断外,其它的中断都具有2个中断优先级,可实现2级中断服务程序嵌套。 用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打 开相应的中断允许位来使CPU响应相应的中断申请;每一个中断源可以用软件独立地控制为开 中断或关中断状态;部分中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优 先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中 断同时产生时,将由查询次序来决定系统先响应哪个中断。 C T S 538 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 6.1 STC15系列单片机的中断请求源 STC15全系列的中断请求源的类型如下表所示(下表中√表示对应的系列有相应的中断源)。 单片机型号 STC15F100W STC15F408AD STC15W201S STC15W401AS STC15W404S STC15W1K16S STC15F2K60S2 STC15W4K32S4 系列 系列 系列 系列 系列 系列 系列 系列 中断源类型 外部中断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中断 比较器中断 PWM中断 PWM������ 异常检测中断 √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ CU √ C T S √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ d e t i im L √ M √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ 6.1.1 STC15F100W系列单片机的中断请求源 STC15F100W系列单片机提供了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)及比较器中断固定是最低优先级中断外,其它的中 断都具有两个中断优先级。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 539 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.1.4 STC15W401AS系列单片机的中断请求源 STC15W401AS系列单片机提供了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 STC15W404S系列单片机的中断请求源 STC15W404S系列单片机提供了12个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、定时器1中断、串口中断、低压检测(LVD)中断、SPI中断、外部 中断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断。除外部中 断2(INT2)、外部中断3(INT3)、定时器2中断、外部中断4(INT4)及比较器中断固定是最低优 先级中断外,其它的中断都具有两个中断优先级。 d e t i im L 6.1.6 STC15W1K16S系列单片机的中断请求源 U C M 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 STC15W4K32S4系列单片机的中断请求源 STC15W4K32S4系列单片机提供了21个中断请求源,它们分别是:外部中断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中断、比较器 中断、PWM中断及PWM异常检测中断。除外部中断2(INT2)、外部中断3(INT3)、定时器2中 断、串口3中断、串口4中断、定时器3中断、定时器4中断及比较器中断固定是最低优先级中断 外,其它的中断都具有2个中断优先级。 540 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 6.2 中断结构图 上升沿和 下降沿均 可中断 技术支持QQ:800003751 中断优先级 控制寄存器 中断允许控 制寄存器 最低优先级中断 IE, INT_CLKO, IE2 TCON.0/IT0=0 EA EX0 IP, IP2 最高优先级中断 PX0 0 IE0 INT0 STC — 全球最大的8051单片机设计公司 注意:当定时器/计数器0工作在不可屏蔽中断的16位 自动重装载模式时,其优先级是所有中断中最高的, 而且不受总中断允许位EA控制。 1 TCON.0/IT0=1 PT0 ET0 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 ES 系列单片机无 STC15W4K 串口1/S1 RI TI CCP2 CF ECF CCF0 ECCF0 CCF1 ECCF1 CCF2 ECCF2 PS 1 PADC EADC ADC_FLAG PLVD ELVD LVDF CU PPCA 串口2/S2 S2RI S2TI C T S SPI中断 SPIF PWM中断 CBIF PWM异常检测中断 FDIF ES2 M ESPI 0 1 L 0 1 0 1 PS2 0 PSPI 0 PPWM 0 1 1 ENPWM/ECBI 中断 查询 次序 1 ENPWM/ ENFD/EFDI PPWMFD 0 1 EX2 INT2 EX3 INT3 EX4 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 ES3 ES4 ET3 T3 ET4 T4 PIE||NIE 比较器 CMPIF(CMPIF_p||CMPIF_n) PWM中断和PWM异常检测中断的中断查询 次序顺延到此位置(比较器中断后面) 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 INT4 串口3/S3 S3RI S3TI 串口4/S4 S4RI S4TI 无中断优先级控制位, 中断优先级固定为0级 ET2 T2 南通国芯微电子有限公司 d e t i im 0 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 无中断优先级控制位, 中断优先级固定为0级 low EA: Global Enable,总中断允许位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 541 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 外部中断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 542 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 的数值时会读到 (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 (IT0 = 1): 下降沿; (IT0 = 0): 上升沿和下降沿均可 定时器0溢出 U C M 定时器1溢出 串口1发送或接收完成 C T S A/D转换完成 电源电压下降到低于LVD检测电压 串口2发送或接收完成 SPI数据传输完成 INT2 下降沿 INT3 (外部中断3) Timer2 INT4 (外部中断4) UART3 UART4 Timer3 Timer4 Comparator (比较器) 南通国芯微电子有限公司 L (IT1 = 1): 下降沿; (IT1 = 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 543 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.3 中断向量入口地址/查询次序/优先级/请求标志/允许位表 中断向量入口地址/查询次序/优先级/请求标志位/允许位 中断源 INT0 (外部中断 0) Timer 0 INT1 (外部中断1) Timer1 S1(UART1) ADC LVD 中断向 相同优先级内 中断优先级 优先级0 优先级1 中断请求标志位 设置 (最低) (最高) 量地址 的查询次序 0003H 0 (highest) PX0 0 1 IE0 中断允许 控制位 EX0/EA 000BH 1 PT0 0 1 TF0 ET0/EA 0013H 2 PX1 0 1 IE1 EX1/EA 001BH 0023B 002BH 0033H 3 4 5 6 PT1 PS PADC PLVD 0 0 0 0 1 1 1 1 ET1/EA ES/EA EADC/EA ELVD/EA CCP/PCA/PWM 003BH 7 PPCA 0 1 S2(UART2) SPI INT2 (外部中断2) INT3 (外部中断3) Timer 2 System Reserved System Reserved INT4 (外部中断4) S3(UART3) S4(UART4) Timer 3 Timer 4 0043H 004BH 8 9 PS2 PSPI 0 0 1 1 TF1 RI+TI ADC_FLAG LVDF CF + CCF0 + CCF1 + CCF2 S2RI+S2TI SPIF 0053H 10 0 0 005BH 11 0063H 0073H 007BH 12 14 15 0083H Comparator (比较器) U C M d e t i m Li EX2/EA 0 0 0 ET2/EA 16 0 0 EX4/EA 008BH 0093H 009BH 00A3H 17 18 19 20 0 0 0 0 0 0 0 0 00ABH 21 0 0 C T S EX3/EA S3RI+S3TI S4RI+S4TI (比较器上升沿 中断允许位) CMPIF_n (比较器下降沿 中断允许位) NIE/EA C3IF 00B3H 22 PPWM 0 1 C4IF C5IF C6IF C7IF PWM异常检测 00BBH 23�������� (lowest) PPWMFD 南通国芯微电子有限公司 0 ES3/EA ES4/EA ET3/EA ET4/EA PIE/EA CMPIF_p CMPIF C2IF 544 ES2/EA ESPI/EA 0 CBIF PWM (ECF+ECCF0+ECCF1 +ECCF2)/EA 1 总机:0513-5501 2928 / 2929 / 2966 FDIF ENPWM/ECBI/EA ENPWM / EPWM2I / EC2T2SI || EC2T1SI / EA ENPWM / EPWM3I / EC3T2SI || EC3T1SI / EA ENPWM / EPWM4I / EC4T2SI || EC4T1SI / EA ENPWM / EPWM5I / EC5T2SI || EC5T1SI / EA ENPWM / EPWM6I / EC6T2SI || EC6T1SI / EA ENPWM / EPWM7I / EC7T2SI || EC7T1SI / EA ENPWM/ENFD/EFDI / EA 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 6.4 在Keil C中如何声明中断函数 如果使用C语言编程,中断查询次序号就是中断号,例如: void 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) Int4_Routine(void) S3_Routine(void) S4_Routine(void) Timer3_Routine(void) Timer4_Routine(void) Comparator_Routine(void) PWM_Routine(void) PWMFD_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; interrupt 22; interrupt 23; U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 545 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.5 中断寄存器 符号 IE IE2 INT_CLKO AUXR2 描述 地址 Interrupt Enable A8H Interrupt Enable 2 AFH 外部中断允许和时钟输出 8FH 寄存器 位地址及符号 MSB EA LSB ELVD EADC - ET4 ET3 复位值 ES ET1 EX1 ET0 EX0 0000 0000B ES4 ES3 ET2 ESPI ES2 x000 0000B EX4 EX3 EX2 MCKO_S2 T2CLKO T1CLKO T0CLKO x000 0000B - PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000 0000B PS2 xx00 0000B IE0 IT0 0000 0000B TI RI 0000 0000B S2RI 0100 0000B IP Interrupt Priority Low B8H IP2 2rd Interrupt Priority Low register B5H - - TCON Timer Control register 88H TF1 TR1 TF0 TR0 IE1 IT1 SCON Serial Control 98H SM0/FE SM1 SM2 REN TB8 RB8 S2CON Serial 2/ UART2 Control S3CON 串口3控制寄存器 ACH S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 0000 0000B S4CON 84H S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 0000 0000B 9AH S2SM0 - - PX4 PPWMFD PPWM PSPI S2SM2 S2REN S2TB8 S2RB8 S2TI d e t i im PCON 串口4控制寄存器 T4和T3的控制 寄存器 Power Control register 87H SMOD SMOD0 LVDF ADC_CONTR ADC control register BCH ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 SPSTAT SPI Status register CDH T4T3M CCON CMOD CCAPM0 PCA Control Register D1H T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T3CLKO 0000 0000B CU SPIF WCOL C T S POF GF1 - - CF CR - - - CIDL - - - CPS2 M D8H PCA Mode Register D9H PCA Module 0 Mode RegDAH ister - L GF0 - PD - IDL 0011 0000B CHIS0 0000 0000B - 00xx xxxxB CCF2 CCF1 CCF0 00xx x000B CPS1 CPS0 ECF 0xxx 0000B - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000 0000B CCAPM1 PCA Module 1 Mode RegDBH ister - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000 0000B CCAPM2 PCA Module 2 Mode RegDCH ister - ECOM2 CAPP2 CAPN2 MAT2 TOG2 PWM2 ECCF2 x000 0000B AUXR 辅助寄存器 8EH CMPCR1 比较器控制寄存器1 E6H T0x12 T1x12 UART_M0x6 T2R T2_C/T CMPEN CMPIF PIE T2x12 EXTRAM S1ST2 NIE PIS NIS CMPOE 0000 0001B CMPRES 0000 0000B STC15W4K32S4系列新增6通道带死区控制的PWM波形发生器的中断相关特殊功能寄存器 符号 描述 地址 B7 B6 B5 位址及符号 B4 B3 B2 B1 B0 初始值 IP2 PX4 PPWMFD PPWM PSPI PS2 xxx0,0000 中断优先级控制 B5H PWMCR PWM控制 F5H ENPWM ECBI ENC7O ENC6O ENC5O ENC4O ENC3O ENC2O 0000,0000 PWMIF PWM中断标志 F6H CBIF C7IF C6IF C5IF C4IF C3IF C2IF x000,0000 ENFD FLTFLIO EFDI FDCMP FDIO FDIF xx00,0000 PWMFDCR PWM外部异常控制 F7H PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000 PWM2CR PWM2控制 FF04H PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000 PWM3CR PWM3控制 FF14H PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000 PWM4CR PWM4控制 FF24H PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000 PWM5CR PWM5控制 FF34H PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000 PWM6CR PWM6控制 FF44H PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000 PWM7CR PWM7控制 FF54H - 546 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 上表中列出了与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中断。。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 547 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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) 格式如下: INT_CLKO (AUXR2) : 外部中断允许和时钟输出寄存器 SFR name Address bit INT_CLKO 8FH name (AUXR2) B7 - C T S B6 B5 M CU B4 L B3 B2 B1 B0 EX4 EX3 EX2 MCKO_S2 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)同 样只能下降沿触发。 MCKO_S2, 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)来解决。 548 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 2. 中断优先级控制寄存器IP、IP2 传统8051单片机具有两个中断优先级,即高优先级和低优先级,可以实现两级中断嵌套。 STC15系列单片机通过设置特殊功能寄存器(IP和IP2)中的相应位,可将部分中断设有2个中断 优先级,除外部中断2( INT2)、外部中断3( INT3)、定时器2、定时器3、定时器4、串行口3及 串行口4外,所有中断请求源可编程为2个优先级中断。一个正在执行的低优先级中断能被高 优先级中断所中断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令 RETI,返回主程序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基 本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断 STC15系列单片机的片内各优先级控制寄存器的格式如下: IP : 中断优先级控制寄存器 (可位寻址) SFR name Address bit B7 IP B8H name PPCA B6 PLVD B5 PADC B4 PS d e t i m B3 PT1 Li B2 PX1 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) C T S U C M B1 PT0 B0 PX0 PX0: 外部中断0优先级控制位。 当PX0=0时,外部中断0为最低优先级中断(优先级0) 当PX0=1时,外部中断0为最高优先级中断(优先级1) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 549 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 IP2 : 中断优先级控制寄存器 (不可位寻址) SFR name IP2 Address B5H bit name B7 - B6 - B5 - B4 PX4 B3 PPWMFD B2 PPWM B1 PSPI B0 PS2 PX4: 外部中断4(INT4)优先级控制位。 当PX4=0时,外部中断4(INT4)为最低优先级中断(优先级0) 当PX4=1时,外部中断4(INT4)为最高优先级中断(优先级1) PPWMFD: PWM异常检测中断优先级控制位。 当PPWMFD=0时,PWM异常检测中断为最低优先级中断(优先级0) 当PPWMFD=1时,PWM异常检测中断为最高优先级中断(优先级1) PPWM: PWM中断优先级控制位。 当PPWM=0时,PWM中断为最低优先级中断(优先级0) 当PPWM=1时,PWM中断为最高优先级中断(优先级1) PSPI: SPI中断优先级控制位。 当PSPI=0时,SPI中断为最低优先级中断(优先级0) 当PSPI=1时,SPI中断为最高优先级中断(优先级1) U C M d e t i im L PS2: 串口2中断优先级控制位。 当PS2=0时,串口2中断为最低优先级中断(优先级0) 当PS2=1时,串口2中断为最高优先级中断(优先级1) 中断优先级控制寄存器IP和IP2的各位都由可用户程序置“1”和清“0”。但IP寄存器可 位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IP2寄存器的内容只能用字节 操作指令来更新。STC15系列单片机复位后IP和IP2均为00H,各个中断源均为低优先级中断。 C T S 3. 定时器/计数器控制寄存器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: 定时器1的运行控制位。 TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置 “1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询 软件清0)。 550 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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为下降沿触发方式。 4. 串行口1控制寄存器SCON d e t i im SCON为串行口控制寄存器,SCON格式如下: SCON : 串行口控制寄存器 (可位寻址) SFR name SCON RI: 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 串行口1接收中断标志。若串行口1允许接收且以方式0工作,则每当接收到第8位数据时 置1;若以方式1、2、3工作且SM2=0时,则每当接收到停止位的中间时置1;当串行口以 方式2或方式3工作且SM2=1时,则仅当接收到的第9位数据RB8为1后,同时还要接收到停 止位的中间时置1。RI为1表示串行口1正向CPU申请中断(接收中断),RI必须由用户的中 断服务程序清零。 C T S TI: 串行口1发送中断标志。串行口1以方式0发送时,每当发送完8位数据,由硬件置1;若以 方式1、方式2或方式3发送时,在发送停止位的开始时置1。TI=1表示串行口1正在向CPU 申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务程序 时并不将TI清零,TI必须由用户在中断服务程序中清零。 SCON寄存器的其他位与中断无关,在此不作介绍。 5. 串行口2控制寄存器S2CON S2CON为串行口2控制寄存器,S2CON格式如下: 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必 须由用户的中断服务程序清零。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 551 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 S2TI:串行口2发送中断标志。串行口2以方式0发送时,每当发送完8位数据,由硬件置1;若 以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S2TI=1表示串行口2正在 向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服 务程序时并不将S2TI清零,S2TI必须由用户在中断服务程序中清零。 S2CON寄存器的其他位与中断无关,在此不作介绍。 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必 须由用户的中断服务程序清零。 U C M d e t i im L S3TI:串行口3发送中断标志。串行口3以方式0发送时,每当发送完8位数据,由硬件置1;若 以方式1、方式2或方式3发送时,在发送停止位的开始时置1。S3TI=1表示串行口3正在 向CPU申请中断(发送中断)。值得注意的是,CPU响应发送中断请求,转向执行中断服务 程序时并不将S3TI清零,S3TI必须由用户在中断服务程序中清零。 C T S S3CON寄存器的其他位与中断无关,在此不作介绍。 7. 串行口4控制寄存器S4CON S4CON为串行口4控制寄存器,S4CON格式如下: 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寄存器的其他位与中断无关,在此不作介绍。 552 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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中的其他位与中断无关,在此不作介绍。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 553 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 在中断允许寄存器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 CMPEN:比较器模块使能位 CMPEN=1,使能比较器模块; CMPEN=0,禁用比较器模块, 比较器的电源关闭。 U C M d e t i m B3 B2 B1 B0 PIS 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) 使能比较器由HIGH变LOW的事件 设定CMPIF_n产生中断� ; NIE = 1,������ NIE = 0,������ 禁用比较器由HIGH变LOW的事件 设定CMPIF_n产生中断� 。 比较器控制寄存器1—CMPCR1 的其他位与中断无关,在此不作介绍。 554 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 11. PWM控制寄存器:PWMCR PWM控制寄存器的格式如下: SFR name Address PWMCR F5H bit B7 B6 B5 B4 B3 B2 B1 B0 Reset Value name ENPWM ECBI ENC70 ENC60 ENC50 ENC40 ENC30 ENC20 0000,0000B ECBI :PWM计数器归零中断使能位 0:关闭PWM计数器归零中断(CBIF依然会被硬件置位) 1:使能PWM计数器归零中断 12. PWM中断标志寄存器:PWMIF PWM中断标志寄存器的格式如下: SFR name Address PWMIF F6H bit B7 B6 B5 B4 B3 name - CBIF C7IF C6IF C5IF B2 B1 C4IF C3IF d e t i m B0 Reset Value C2IF x000,0000B CBIF :PWM计数器归零中断标志位 当PWM计数器归零时,硬件自动将此位置1。� 当ECBI==1时,程序会跳转到相应中断 入口执行中断服务程序。需要软件清零。 U C M Li C7IF :第7通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C7IF(详见EC7T1SI和EC7T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM7I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C6IF :第6通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C6IF(详见EC6T1SI和EC6T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM6I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C T S C5IF :第5通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C5IF(详见EC5T1SI和EC5T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM5I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C4IF :第4通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C4IF(详见EC4T1SI和EC4T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM4I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C3IF :第3通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C3IF(详见EC3T1SI和EC3T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM3I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 555 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 C2IF :第2通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C2IF(详见EC2T1SI和EC2T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM2I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 13. PWM外部异常控制寄存器:PWMFDCR PWM外部异常控制寄存器的格式如下: SFR name Address bit B7 B6 PWMFDCR F7H name - - B5 B4 B3 B2 B1 ENFD FLTFLIO EFDI FDCMP FDIO B0 Reset Value FDIF xx00,0000B EFDI :PWM异常检测中断使能位 0:关闭PWM异常检测中断(FDIF依然会被硬件置位) 1:使能PWM异常检测中断 d e t i im FDIF :PWM异常检测中断标志位 当发生PWM异常(比较器�� 正极P5.5/CMP+的电平比比较器负极P5.4/CMP-的电平高 或����� 比较器�� 正极P5.5/CMP+的电平比内部参考电压源1.28V高�� 或者P2.4的电平��� 为�� 高) 时,硬件自动将此位置1。当EFDI==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零 L U C M 14. PWM2的控制寄存器:PWM2CR C T S PWM2的控制寄存器的格式如下: SFR name Address PWM2CR FF04H (XSFR) bit B7 B6 B5 B4 name - - - - B3 B2 B1 B0 Reset Value PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000B EPWM2I :PWM2中断使能控制位 0:关闭PWM2中断 1:使能PWM2中断,当C2IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC2T2SI :PWM2的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC2T1SI :PWM2的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 556 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 15. PWM3的控制寄存器:PWM3CR PWM3的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM3CR FF14H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000B EPWM3I :PWM3中断使能控制位 0:关闭PWM3中断 1:使能PWM3中断,当C3IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC3T2SI :PWM3的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 d e t i im L EC3T1SI :PWM3的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 U C M C T S 16. PWM4的控制寄存器:PWM4CR PWM4的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM4CR FF24H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000B EPWM4I :PWM4中断使能控制位 0:关闭PWM4中断 1:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC4T2SI :PWM4的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 557 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 EC4T1SI :PWM4的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 17. PWM5的控制寄存器:PWM5CR PWM5的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM5CR FF34H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000B EPWM5I :PWM5中断使能控制位 0:关闭PWM5中断 1:使能PWM5中断,当C5IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 d e t i im L U C M EC5T2SI :PWM5的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 C T S EC5T1SI :PWM5的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 18. PWM6的控制寄存器:PWM6CR PWM6的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM6CR FF44H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000B EPWM6I :PWM6中断使能控制位 0:关闭PWM6中断 1:使能PWM6中断,当C6IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 558 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 EC6T2SI :PWM6的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC6T1SI :PWM6的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 19. PWM7的控制寄存器:PWM7CR d e t i im PWM7的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM7CR FF54H (XSFR) name - - - - B3 L B2 B1 B0 Reset Value PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000B U C M EPWM7I :PWM7中断使能控制位 0:关闭PWM7中断 1:使能PWM7中断,当C7IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 C T S EC7T2SI :PWM7的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC7T1SI :PWM7的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 559 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.6 中断优先级 除外部中断2(INT2)、外部中断3(INT3)、定时器T2中断、外部中断4(INT4)、串口3中 断、串口4中断、定时器T3中断、定时器T4中断及比较器中断外,STC15W4K32S4系列单片 机的所有的中断都具有2个中断优先级。����������������������� 一个正在执行的低优先级中断能被高优先级中断所中 断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程 序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不能被它的同级中断所中断。 当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次 序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC15W4K32S4系列单片 机各中断优先查询次序如下: 中断源 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 22. PWM 23 PWMFD C T S 查询次序 d e t i im (highest) U C M L (lowest) 注意:当定时器/计数器0工作在不可屏蔽中断的16位自动重装载模式时,如果此时定时器/计 数器0中断被允许了(只需置位ET0即可,不需置位EA,工作在不可屏蔽中断的16位自动重装载模 式下的定时器/计数器0中断与EA无关),则该中断优先级是所有中断中最高的,任何一个中断 都不能打断它,而且该中断被打开后它不仅不受EA控制也不再受ET0控制了。 560 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 如果使用C 语言编程,中断查询次序号就是中断号,例如: void 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) Int4_Routine(void) S3_Routine(void) S4_Routine(void) Timer3_Routine(void) Timer4_Routine(void) Comparator_Routine(void) PWM_Routine(void) PWMFD_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; interrupt 22; interrupt 23; U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 561 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 6.7 中断处理 当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作: 1. 当前正被执行的指令全部执行完毕; 2. PC值被压入栈; 3. 现场保护; 4. 阻止同级别其他中断; 5. 将中断向量地址装载到程序计数器PC; 6. 执行相应的中断服务程序。 中断服务程序ISR完成和该中断相应的一些操作。中断服务程序ISR以RETI(中断返回)指令 结束,将PC值从栈中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。 当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是该中断源相对应的 中断服务程序的起始地址。各中断源服务程序的入口地址(即中断向量)为: C T S 562 南通国芯微电子有限公司 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 PWM PWMFD 0003H 000BH 0013H 001BH 0023H 002BH 0033H 003BH 0043H 004BH 0053H 005BH 0063H 006BH 0073H 007BH 0083H 008BH 0093H 009BH 00A3H 00ABH 00B3H 00BBH U C M L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持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 563 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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个外部中断(支持上升沿/下降沿中断) 564 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 565 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 566 //将测试口取反 //读取INT0口的状态 //保存, INT0=0(下降沿); INT0=1(上升沿) END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 567 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 //将测试口取反 ;---------------------------------------- 568 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 569 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 570 南通国芯微电子有限公司 //将测试口取反 //读取INT1口的状态 //保存, INT1=0(下降沿); INT0=1(上升沿) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 571 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 //将测试口取反 ;---------------------------------------- 572 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 573 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 574 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 575 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 576 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 577 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 578 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 579 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 580 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 581 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 582 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 583 技术支持网站:www.GXWMCU.com STC15系列单片机指南 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 //----------------------------------------- //中断入口 584 ORG 0100H 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 MAIN: MOV SP, 技术支持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 585 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 586 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 官方网站:www.STCMCU.com STC15系列单片机指南 sfr CCAP2H = sfr sfr sfr PCAPWM0 = PCAPWM1 = PCA_ PWM2 = 0xf2; 0xf3; 0xf4; sbit PCA_LED P1^0; = 0xFC; 技术支持QQ:800003751 // // // // // // // // // ACC ACC ACC P_SW1 = &= |= = ACC ACC ACC P_SW1 = &= |= = //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 = STC — 全球最大的8051单片机设计公司 //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 587 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 588 ORG 003BH 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 589 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第7章 定时器/计数器 STC15W4K32S4系列单片机内部设置了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 单片机型号 STC15F100W系列 √ √ STC15F408AD系列 √ √ STC15W201S系列 √ √ STC15W401AS系列 √ √ STC15W404S系列 √ √ √ STC15W1K16S系列 √ √ √ STC15F2K60S2系列 √ √ √ STC15W4K32S4系列 √ √ √ √ √ 上表中√表示对应的系列有相应的定时器/计数器。 590 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 L T0x12 T1x12 UART_M0x6 T2R T2_C/T - T2x12 EXTRAM S1ST2 EX4 EX3 EX2 MCKO_S2 T2CLKO T1CLKO T0CLKO U C M 复位值 0000 0000B 0000 0000B 0000 0001B x000 0000B 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 591 STC15系列单片机指南 技术支持网站: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,TR0=1且INT0输入 高电平时,才允许T0计数,TR0=0时禁止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程控为下降沿触发方式。 592 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 593 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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得到释放,可以作为 独立定时器使用 594 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 B2 B1 d e t i im B0 EX4 EX3 EX2 MCKO_S2 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 595 STC15系列单片机指南 技术支持网站: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)同 样只能下降沿触发。 596 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 597 STC15系列单片机指南 技术支持网站: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.7的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 B4 - T4CLKO:是否允许将P0.6脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.6脚��� 配置为定时器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.7/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 C T S 0: 不允许� 将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.5的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 B0 - T3CLKO:是否允许将P0.4脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.4脚��� 配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.4脚��� 配置为定时器3(T3)的时钟输出T3CLKO 598 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 599 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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]。 600 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 601 技术支持网站:www.GXWMCU.com STC15系列单片机指南 /* 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的资料及程序 ----------------------------------*/ ������� C� 开发环境中选择 Intel 8052编译,头文件包含即可-------*/ /*---- 在 Keil /*-----------------------------------------------------------------------------------------------------*/ //假定测试芯片的工作频率为18.432MHz AUXR DATA 08EH //辅助特殊功能寄存器 ;----------------------------------------------T1MS EQU //T1MS EQU 0B800H 0FA00H //1T模式的1ms定时值(65536-18432000/1000) //12T模式的1ms定时值(65536-18432000/1000/12) ;----------------------------------------------- 602 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT 技术支持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 603 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 &= 604 0x80; ~0x80; 南通国芯微电子有限公司 //定时器0为1T模式 //定时器0为12T模式 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 605 STC15系列单片机指南 技术支持网站: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 $ ;---------------------------------------------- 606 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 STC15系列单片机指南 官方网站: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 607 技术支持网站:www.GXWMCU.com STC15系列单片机指南 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 ;----------------------------------------------- 608 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 609 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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); } 610 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 611 STC15系列单片机指南 技术支持网站: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��� 模式。 612 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 613 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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; } 614 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 615 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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, #11H //设置定时器为模式3(不可屏蔽中断的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都不能关闭此中断。 616 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 617 STC15系列单片机指南 技术支持网站: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; //----------------------------------------------- 618 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 /* 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 619 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 //将测试口取反 ;---------------------------------------- 620 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 621 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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); // //使能定时器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) //复位入口 //----------------------------------------------- 622 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 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 623 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 624 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 = = = = = = = 技术支持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 625 STC15系列单片机指南 技术支持网站: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 //辅助寄存器 //忙标志位 //----------------------------------------- 626 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 627 STC15系列单片机指南 CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI 技术支持网站:www.GXWMCU.com TI, TI BUSY 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 628 临时技术支持Tel:13922829991 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 629 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;---------------------------------------- 630 //将测试口取反 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 631 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持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 632 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 633 技术支持网站:www.GXWMCU.com STC15系列单片机指南 #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 } 634 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 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 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 635 STC15系列单片机指南 技术支持网站: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, 636 CHECKTI SBUF RB8 南通国芯微电子有限公司 //检测RI位 //清除RI位 //P0显示串口数据 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 MOV CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI 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 637 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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中断 } 638 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 639 STC15系列单片机指南 技术支持网站: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 ; 640 } 现场恢复 RETI ;返回 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 641 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 ;启动 642 … SETB 南通国芯微电子有限公司 } 开中断 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 (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 643 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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中 … 644 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 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 T0x12 T1x12 UART_M0x6 T2R T2_C/T - 0000 0000B T2x12 EXTRAM S1ST2 EX4 EX3 EX2 MCKO_S2 T2CLKO T1CLKO T0CLKO U C M - 0000 0000B d e t i m D7H ET4 ET3 ES4 ES3 ET2 ESPI 复位值 0000 0001B x000 0000B 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 645 STC15系列单片机指南 技术支持网站: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得到释放,可以作为 独立定时器使用 U C M L 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 - EX4 EX3 B4 B3 B2 B1 B0 EX2 MCKO_S2 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 646 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 647 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持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中断。 648 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 649 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 T2L = = = = sbit TEST_PIN = P0^0; //test pin //----------------------------------------------/* Timer2 interrupt routine */ void t2_isr() interrupt 12 using 1 { TEST_PIN = !TEST_PIN; } 650 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 //----------------------------------------------/* 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 651 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 //将测试口取反 //若需要手动清除中断标志,可先关闭中断, //此时系统会自动清除内部的中断标志 //然后再开中断即可 ;---------------------------------------- 652 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 653 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 $ //----------------------------------------- 654 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 655 STC15系列单片机指南 技术支持网站: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的重装载寄存器。 656 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 657 技术支持网站:www.GXWMCU.com STC15系列单片机指南 // 临时技术支持Tel:13922829991 //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 AUXR &= AUXR |= ~0x08; 0x08; T2L T2H F38_4KHz; F38_4KHz >> 8; /初始化计时值 AUXR |= INT_CLKO = 0x10; 0x04; //定时器2开始计时 //使能定时器2的时钟输出功能 while (1); = = 研发顾问Tel:13922805190 //程序终止 } 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) //----------------------------------------------- 658 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com ORG 0000H LJMP MAIN 技术支持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 659 STC15系列单片机指南 技术支持网站: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的重装载寄存器。 660 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 661 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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) 662 南通国芯微电子有限公司 L //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 663 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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) 664 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 665 STC15系列单片机指南 技术支持网站: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 666 南通国芯微电子有限公司 临时技术支持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 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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 667 STC15系列单片机指南 技术支持网站: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 STC15系列单片机指南 官方网站: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 STC15系列单片机指南 技术支持网站: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 670 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 671 STC15系列单片机指南 技术支持网站: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 官方网站:www.STCMCU.com STC15系列单片机指南 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.7的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 673 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 B4 - T4CLKO:是否允许将P0.6脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.6脚��� 配置为定时器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.7/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 0: 不允许� 将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.5的外部脉冲进行计数) d e t i im B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 U C M L B0 - T3CLKO:是否允许将P0.4脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.4脚��� 配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.4脚��� 配置为定时器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产生中断。 674 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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.5 T3H (8 bits) d e t i m control T3CLKO P0.4 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.5/T3,即T3工作在计数方式。 STC15W4K32S4������������������������������������ 系列单片机的定时器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 675 STC15系列单片机指南 技术支持网站: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.5 T3H (8 bits) T3CLKO control P0.4 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.4管脚配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 上面所有的式子中RL_TH3是T3H的重装载寄存器,RL_TL3是T3L的重装载寄存器。 676 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 677 STC15系列单片机指南 技术支持网站: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.7 T4H (8 bits) T4R RL_TL4 (8 bits) T4CLKO d e t i im control RL_TH4 (8 bits) P0.6 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.7/T4,即T4工作在计数方式。 STC15W4K32S4������������������������������������ 系列单片机的定时器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]。 678 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持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.7 T4H (8 bits) T4CLKO control P0.6 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.6管脚配置为定时器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.7/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 679 STC15系列单片机指南 技术支持网站: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的重装载寄存器。 680 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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: STC15W4K32S4系列�������������������������������������� 是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�: 是1T的8051单片机,��������������������������� 为了兼容传统��������������������� 8051,���������������� 串口�������������� 1������������� 复位后是兼容传统����� 8051� 的 STC15W4K32S4系列��������������������������������������� 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 681 C T S U C M L d e t i im STC15系列单片机指南 技术支持网站: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.7的外部脉冲进行计数) B4 - T4CLKO:是否允许将P0.6脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.6脚��� 配置为定时器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.7/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 0: 不允许� 将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.5的外部脉冲进行计数) B0 - T3CLKO:是否允许将P0.4脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.4脚��� 配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.4脚��� 配置为定时器3(T3)的时钟输出T3CLKO 682 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 7.8 可编程时钟输出(也可作分频器使用) STC15系列单片机最多有六路可编程时钟输出(如STC15W4K32S4系列),如下表所示。对于 STC15系列5V单片机,由于I/O口的对外输出速度最快不超过13.5MHz,所以对外可编程时 钟输出速度最快也不超过13.5MHz;对于3.3V单片机,由于I/O口的对外输出速度最快不超过 8MHz,所以对外可编程时钟输出速度最快也不超过8MHz。 STC15全系列的可编程时钟输出的类型如下表所示。 可编程时钟 系统时钟输出 定时器/计数器0 定时器/计数器1 定时器/计数器2 定时器/计数器3 定时器/计数器4 主时钟输出 (SysClkO/P5.4或 时钟输出 输出 时钟输出 时钟输出 时钟输出 时钟输出 (MCLKO/P5.4) 单片机型号 SysClkO_2/P1.6) (T0CLKO/P3.5) (T1CLKO/P3.4) (T2CLKO/P3.0) (T3CLKO/P.0.4) (T4CLKO/P0.6) 该系列主时 √ STC15F100W系列 钟输出在 √ MCLKO/P3.4 STC15F408AD系 列 √ √ STC15W201S系列 √ √ √ STC15W401AS系列 √ (该系列 STC15W404S系列 主时钟输 出还可在 MCLKO_2/ P1.6) √ C T S (该系列 STC15W1K16S系列 主时钟输 出还可在 MCLKO_2/ XTAL2/P1.6) d e t i im √ L √ U C M √ √ √ √ √ √ √ √ √ √ √ STC15W4K32S4系列 √ √ √ √ STC15W1K08PWM 系列 √ √ √ √ STC15W1K20SLQFP64 √ √ √ √ STC15F2K60S2系列 √ √ √ 上表中√表示对应的系列有相应的可编程时钟输出。 特别注意:对于STC15W1K16S系列和STC15W408S单片机,若要使用T0CLKO时钟输出功能,必须将P3.5口 设置为强推挽输出模式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 683 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 (主时钟对外输出管脚MCLKO或MCLKO_2既可对外输出内部R/C时钟,也可对外输出 外部输入的时钟或外部晶体振荡产生的时钟) 0 0 主时钟不对外输出时钟 0 1 主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1 1 0 主时钟对外输出时钟,但时钟频率被2分频��������� , 输出时钟频率 = MCLK / 2 1 1 主时钟对外输出时钟,但时钟频率被4分频��������� , 输出时钟频率 = MCLK / 4 主时钟既可以是内部R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。但对于无外部 时钟源的单片机(STC15F100W系列、STC15W201S系列、STC15W404S系列、STC15W1K16S系列)以 及现供货的STC15F2K60S2系列C版单片机,其主时钟只能是内部R/C时钟。 主时钟可在管脚MCLKO或MCLKO_2对外输出。其中,STC15系列8-pin单片机(如STC15F100W系列) 在MCLKO/P3.4口对外输出时钟;STC15F2K60S2系列、STC15W201S系列及STC15F408AD系列单片机在 MCLKO/P5.4口对外输出时钟;而STC15W404S系列及STC15W1K16S系列单片机除可在MCLKO/P5.4口 对外输出时钟外,还可在MCLKO_2/P1.6口对外输出时钟。 684 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 特意注意:STC15W4K32S4系列、STC15W1K08PWM系列及STC15W1K20S-LQFP64单片机是将系统 时钟在管脚SysClkO/P5.4或SysCLKO_2/XTAL2/P1.6对外分频输出,并可如下分频SysClk/1, SysClk/2, SysClk/4, SysClk/16。 STC15W401AS系列单片机也是将系统时钟在管脚SysClkO/P5.4或SysCLKO_2/XTAL2/P1.6对 外分频输出,但只可如下分频SysClk/1, SysClk/2, SysClk/4。 系统时钟是指对主时钟进行分频后供给CPU、定时器、串行口、SPI、CCP/PWM/PCA、A/D转换的 实际工作时钟。STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系列及STC15W1K20SLQFP64单片机的主时钟既可以是内部R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。 MCLK是指主时钟频率,MCLKO是指系统时钟输出。SysClk是指系统时钟频率,SysClkO是指系统 时钟输出。 STC15W404S系列及STC15W1K16S系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在 MCLKO/P5.4口对外输出主时钟,还是在MCLKO_2/P1.6口对外输出主时钟。 d e t i im MCLKO_2:主时钟对外输出位置的选择位 0:在MCLKO/P5.4口对外输出主时钟; 1:在MCLKO_2/P1.6口对外输出主时钟; STC15W404S系列及STC15W1K16S系列单片机的主时钟只能是内部R/C时钟。 U C M L STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系列及STC15W1K20SLQFP64单片机通过CLK_DIV.3/SysClkO_2位来选择是在SysClkO/P5.4口对外输出系统时钟,还 是在SysClkO_2/P1.6口对外输出系统时钟。 C T S SysClkO_2:系统时钟对外输出位置的选择位 0:在SysClkO/P5.4口对外输出系统时钟; 1:在SysClkO_2/P1.6口对外输出系统时钟; 系统时钟是指对主时钟进行分频后供给CPU、定时器、串行口、SPI、CCP/PWM/PCA、 A/D转换的实际工作时钟。STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系 列及STC15W1K20S-LQFP64单片机的主时钟既可以是内部R/C时钟,也可以是外部输入的时钟 或外部晶体振荡产生的时钟。 CLKS2 CLKS1 CLKS0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 系统时钟选择控制位 (系统时钟是指对主时钟进行分频后供给CPU、串行口、SPI、定时器、 CCP/PWM/PCA、A/D转换的实际工作时钟) 主时钟频率/1,不分频 主时钟频率/2 主时钟频率/4 主时钟频率/8 主时钟频率/16 主时钟频率/32 主时钟频率/64 主时钟频率/128 主时钟既可是内部R/C时钟,也可是外部输入的时钟或外部晶体振荡产生的时钟。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 685 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持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 686 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 允许外部中断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 687 STC15系列单片机指南 技术支持网站: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.7的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0���������������������������� :定时器4速度是8051单片机定时器的速度,即12分频; 1:定时器4速度是8051单片机定时器速度的12倍,即不分频。 B4 - T4CLKO:是否允许将P0.6脚配置为定时器4(T4)的时钟输出T4CLKO 1:允许将P0.6脚��� 配置为定时器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.7/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 C T S 0: 不允许� 将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO 。 B3 - T3R:定时器3运行控制位� 0����������� :不允许定时器3运行; 1:允许定时器3运行。 B2 - T3_C/T: 控制定时器3用作定时器或计数器。 0, 用作定时器(对内部系统时钟进行计数); 1, 用作计数器(对引脚T3/P0.5的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0���������������������������� :定时器3速度是8051单片机定时器的速度,即12分频; 1:定时器3速度是8051单片机定时器速度的12倍,即不分频。 B0 - T3CLKO:是否允许将P0.4脚配置为定时器3(T3)的时钟输出T3CLKO 1:允许将P0.4脚��� 配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 0: 不允许� 将P0.4脚��� 配置为定时器3(T3)的时钟输出T3CLKO 688 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 7.8.2 主时钟输出及其测试程序(C和汇编) 主时钟可以是内部高精度R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时 钟。由于STC15系列5V单片机I/O口的对外输出速度最快不超过13.5MHz,所以5V单片机的对外 可编程时钟输出速度最快也不超过13.5MHz,如果频率过高,需进行分频输出;而3.3V单片机 I/O口的对外输出速度最快不超过8MHz,故3.3V单片机的对外可编程时钟输出速度最快也不超 过8MHz,如果频率过高,需进行分频输出。 时钟对外输出控制寄存器:CLK_DIV(不可位寻址)与INT_CLKO(不可位寻址) Mnemonic Add CLK_DIV (PCON2) Name 时钟分频 寄存器 97H B7 B6 MCKO_S1 MCKO_S0 B5 B4 ADRJ Tx_Rx B3 B2 B1 MCLKO_2 CLKS2 CLKS1 B0 CLKS0 Reset Value 0000 0000 如何利用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管脚配置为主时钟输出 同时还可以设置该主时钟的输出频率。 特殊功能寄存器: CLK_DIV (地址:97H) d e t i im L 主时钟对外分频输出控制位 MCKO_S1 MCKO_S0 (主时钟对外输出管脚MCLKO或MCLKO_2既可对外输出内部R/C时钟,也可对外输出 外部输入的时钟或外部晶体振荡产生的时钟) 0 0 0 1 1 0 1 1 U C M 主时钟不对外输出时钟 C T S 主时钟对外输出时钟,但时钟频率不被分频,输出时钟频率 = MCLK / 1 主时钟对外输出时钟,但时钟频率被2分频��������� , 输出时钟频率 = MCLK / 2 主时钟对外输出时钟,但时钟频率被4分频��������� , 输出时钟频率 = MCLK / 4 主时钟既可以是内部R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。但对于无外部 时钟源的单片机(STC15F100W系列、STC15W201S系列、STC15W404S系列、STC15W1K16S系列)以 及现供货的STC15F2K60S2系列C版单片机,其主时钟只能是内部R/C时钟。 主时钟可在管脚MCLKO或MCLKO_2对外输出。其中,STC15系列8-pin单片机(如STC15F100W系列) 在MCLKO/P3.4口对外输出时钟;STC15F2K60S2系列、STC15W201S系列及STC15F408AD系列单片机在 MCLKO/P5.4口对外输出时钟;而STC15W404S系列及STC15W1K16S系列单片机除可在MCLKO/P5.4口 对外输出时钟外,还可在MCLKO_2/P1.6口对外输出时钟。 特意注意:STC15W4K32S4系列、STC15W1K08PWM系列及STC15W1K20S-LQFP64单片机是将系统 时钟在管脚SysClkO/P5.4或SysCLKO_2/XTAL2/P1.6对外分频输出,并可如下分频SysClk/1, SysClk/2, SysClk/4, SysClk/16。 STC15W401AS系列单片机也是将系统时钟在管脚SysClkO/P5.4或SysCLKO_2/XTAL2/P1.6对 外分频输出,但只可如下分频SysClk/1, SysClk/2, SysClk/4。 系统时钟是指对主时钟进行分频后供给CPU、定时器、串行口、SPI、CCP/PWM/PCA、A/D转换的 实际工作时钟。STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系列及STC15W1K20SLQFP64单片机的主时钟既可以是内部R/C时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 689 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MCLK是指主时钟频率,MCLKO是指系统时钟输出。SysClk是指系统时钟频率,SysClkO是指系统 时钟输出。 STC15W404S系列及STC15W1K16S系列单片机通过CLK_DIV.3/MCLKO_2位来选择是在 MCLKO/P5.4口对外输出主时钟,还是在MCLKO_2/P1.6口对外输出主时钟。 MCLKO_2:主时钟对外输出位置的选择位 0:在MCLKO/P5.4口对外输出主时钟; 1:在MCLKO_2/P1.6口对外输出主时钟; STC15W404S系列及STC15W1K16S系列单片机的主时钟只能是内部R/C时钟。 STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系列及STC15W1K20SLQFP64单片机通过CLK_DIV.3/SysClkO_2位来选择是在SysClkO/P5.4口对外输出系统时钟,还 是在SysClkO_2/P1.6口对外输出系统时钟。 SysClkO_2:系统时钟对外输出位置的选择位 0:在SysClkO/P5.4口对外输出系统时钟; 1:在SysClkO_2/P1.6口对外输出系统时钟; d e t i im L 系统时钟是指对主时钟进行分频后供给CPU、定时器、串行口、SPI、CCP/PWM/PCA、 A/D转换的实际工作时钟。STC15W4K32S4系列、STC15W401AS系列、STC15W1K08PWM系 列及STC15W1K20S-LQFP64单片机的主时钟既可以是内部R/C时钟,也可以是外部输入的时钟 或外部晶体振荡产生的时钟。 C T S U C M 由于STC15系列5V单片机I/O口的对外输出速度最快不超过13.5MHz,所以5V单片机的对外可编程时钟 输出速度最快也不超过13.5MHz,如果频率过高,需进行分频输出。 而3.3V单片机I/O口的对外输出速度最快不超过8MHz,故3.3V单片机的对外可编程时钟输出速度最快也 不超过8MHz,如果频率过高,需进行分频输出。 690 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 下面是主时钟输出的示例程序: 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 U C M BYTE; WORD; #define FOSC 18432000L //----------------------------------------sfr CLK_DIV = C T S 0x97; = = = 0x40; 0x80; 0xC0; L //时钟分频寄存器 //----------------------------------------void main() { CLK_DIV // CLK_DIV // CLK_DIV while (1); //0100,0000 P5.4输出频率为SYSclk //1000,0000 P5.4输出频率为SYSclk/2 //1100,0000 P5.4输出频率为SYSclk/4 //程序终止 } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 691 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 692 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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) T0CLKO control P3.5 GATE INT0 RL_TL0 (8 bits) 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)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 693 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 AUXR.7/T0x12=0 ÷12 研发顾问Tel:13922805190 Interrupt TF0 SYSclk ÷1 Toggle AUXR.7/T0x12=1 C/T=0 TL0 (8 Bits) C/T=1 T0 Pin T0CLKO control TR0 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 694 = P3^5; (65536-FOSC/2/38400) (65536-FOSC/2/12/38400) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 //1T模式 //12T模式 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 //----------------------------------------------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); // 技术支持QQ:800003751 //定时器0为1T模式 //定时器0为12T模式 //设置定时器为模式0(16位自动重装载) //C/T0=0, 对内部时钟进行时钟输出 //C/T0=1, 对T0引脚的外部时钟进行时钟输出 //初始化计时值 d e t i im //使能定时器0的时钟输出功能 //程序终止 } U C M 2. 汇编程序: STC — 全球最大的8051单片机设计公司 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 //----------------------------------------------南通国芯微电子有限公司 //辅助特殊功能寄存器 //唤醒和时钟输出功能寄存器 //定时器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 695 STC15系列单片机指南 技术支持网站:www.GXWMCU.com ORG 0000H LJMP MAIN 临时技术支持Tel:13922829991 //复位入口 //定时器0为1T模式 //定时器0为12T模式 研发顾问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 $ C T S ;---------------------------------------------- 696 END U C M 南通国芯微电子有限公司 d e t i im //初始化计时值 L //使能定时器0的时钟输出功能 //程序终止 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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的重装载寄存器。 ÷12 C T S AUXR.6/T1x12=0 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)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 697 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 AUXR.6/T1x12=0 ÷12 研发顾问Tel:13922805190 Interrupt TF1 SYSclk ÷1 Toggle AUXR.6/T1x12=1 C/T=0 TL1 (8 Bits) C/T=1 T1 Pin T1CLKO control TR1 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编译,头文件包含即可-------*/ /*-----------------------------------------------------------------------------------------------------*/ U C M C T S 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) 698 南通国芯微电子有限公司 //1T模式 //12T模式 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 //---------------------------------------------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); // 技术支持QQ:800003751 //定时器1为1T模式 //定时器1为12T模式 //设置定时器为模式1(16位自动重装载) //C/T1=0, 对内部时钟进行时钟输出 //C/T1=1, 对T1引脚的外部时钟进行时钟输出 //初始化计时值 //程序终止 U C M C T S d e t i im //使能定时器1的时钟输出功能 } 2. 汇编程序: STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 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 699 STC15系列单片机指南 技术支持网站:www.GXWMCU.com ORG 0000H LJMP MAIN 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //复位入口 //---------------------------------------------- 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的时钟输出功能 //程序终止 ;---------------------------------------------- 700 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 701 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 下面是定时器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 &= 702 0x04; ~0x04; 南通国芯微电子有限公司 //定时器2为1T模式 //定时器2为12T模式 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 // 技术支持QQ:800003751 //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 AUXR &= AUXR |= ~0x08; 0x08; T2L T2H F38_4KHz; F38_4KHz >> 8; AUXR |= INT_CLKO 0x10; = while (1); = = STC — 全球最大的8051单片机设计公司 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) //----------------------------------------------- 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 703 技术支持网站:www.GXWMCU.com STC15系列单片机指南 ORG 0000H LJMP MAIN 临时技术支持Tel:13922829991 //复位入口 //定时器2为1T模式 //定时器2为12T模式 研发顾问Tel:13922805190 //---------------------------------------- MAIN: ORG 0100H // ORL AUXR, #04H ANL AUXR, #0FBH // ANL AUXR, #0F7H ORL AUXR, #08H MOV SP, MOV MOV ORL MOV SJMP #3FH 704 END //T2_C/T=0, 对内部时钟进行时钟输出 //T2_C/T=1, 对T2(P3.1)引脚的外部时钟进行时钟输出 T2L, #LOW F38_4KHz T2H, #HIGH F38_4KHz AUXR, #10H INT_CLKO, #04H $ CU ;---------------------------------------------- C T S 南通国芯微电子有限公司 M d e t i im //初始化计时值 L //定时器2开始计时 //使能定时器2的时钟输出功能 //程序终止 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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.5 T3H (8 bits) T3CLKO control P0.4 T3R RL_TL3 (8 bits) RL_TH3 (8 bits) T3CLKO d e t i im 定时器/计数器3的工作模式: 16位自动重装载 L STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 如何利用T3CLKO/P0.4管脚输出时钟 T4T3M.0 - T3CLKO:是否允许将P0.4脚配置为定时器3(T3)的时钟输出T3CLKO 1: 允许将P0.4脚��� 配置为定时器3(T3)的时钟输出T3CLKO, 0: 不允许� 将P0.4脚��� 配置为定时器3(T3)的时钟输出T3CLKO C T S U C M 当T3CLKO/T4T3M.0=1时,P0.4管脚配置为定时器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.5/T3)计数,则: 输出���� 时钟�� 频率 = (T3_Pin_CLK) / (65536-[RL_TH3, RL_TL3])/2 RL_TH3为T3H的重装载寄存器,RL_TL3为T3L的重装载寄存器。 用户在程序中如何具体设置T3CLKO/P0.4管脚输出时钟 1.对��� 定时器3寄存器T3H/T3L送16位重装载值, [T3H,T3L] = #reload_data 2.对T4T3M寄存器中的T3R位置1,让������ 定时器��� 3运行 3.对T4T3M寄存器中的T3CLKO位置1,让�������� 定时器����� 3的溢出在P0.4口输出时钟� 。 注意:当定时器/计数器3用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复 进中断,在特殊情况下也可允许定时器/计数器3中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 705 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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.7 T4H (8 bits) T4CLKO control P0.6 T4R RL_TL4 (8 bits) RL_TH4 (8 bits) T4CLKO d e t i im 定时器/计数器4的工作模式: 16位自动重装载 L STC创新设计,请不 要再抄袭,再抄袭就 很无耻了 如何利用T4CLKO/P0.6管脚输出时钟 T4T3M.4 - T4CLKO:是否允许将P0.6脚配置为定时器4(T4)的时钟输出T4CLKO 1: 允许将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO, 0: 不允许� 将P0.6脚��� 配置为定时器4(T4)的时钟输出T4CLKO C T S U C M 当T4CLKO/T4T3M.4=1时,P0.6管脚配置为定时器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.7/T4)计数,则: 输出���� 时钟�� 频率 = (T4_Pin_CLK) / (65536-[RL_TH4, RL_TL4])/2 RL_TH4为T4H的重装载寄存器,RL_TL4为T4L的重装载寄存器。 用户在程序中如何具体设置T4CLKO/P0.6管脚输出时钟 1.对��� 定时器4寄存器T4H/T4L送16位重装载值, [T4H,T4L] = #reload_data 2.对T4T3M寄存器中的T4R位置1,让������ 定时器��� 4运行 3.对T4T3M寄存器中的T4CLKO位置1,让�������� 定时器����� 4的溢出在P0.6口输出时钟� 。 注意:当定时器/计数器4用作可编程时钟输出时,不要允许相应的定时器中断,免得CPU反复 进中断,在特殊情况下也可允许定时器/计数器4中断。 706 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 7.9 掉电唤醒专用定时器及测试程序(C和汇编) ——进入掉电模式后可将单片机唤醒 ——以15L开头的单片机进入掉电模式前必须启动掉电唤醒定时器 特别声明:以15L开头的芯片如需进入"掉电模式",进入"掉电模式"前必须启动掉电唤醒定时器 ,不超过1秒要唤醒一次,以15F和15W开头的芯片以及新供货的STC15L2K60S2 系列D版本芯片则不需要 STC15系列����������������������������������� 部分��������������������������������� 单片机������������������������������ 新增了内部掉电唤醒定时器,����������������� 在进入�������������� 停机模式/��������� 掉电模式后,除了可 以通过外部中断源进行唤醒外,还可以在无外部中断源的情况下通过使能内部掉电唤醒定时器 定期唤醒CPU,使其恢复到正常工作状态。 d e t i im 掉电唤醒专用定时器的功耗:3V器件典型值低于3uA;5器件典型值低于5uA。 STC15����������������������������������������� 系列单片机的内部低功耗掉电唤醒专用定时器由特殊功能寄存器WKTCH和WKTCL进行 管理和控制。 WKTCL(不可位寻址) SFR name Address WKTCL AAH bit B7 name C T S WKTCH(不可位寻址) SFR name Address WKTCH ABH bit B7 name WKTEN U C M B6 B6 B5 B5 B4 B4 L B3 B2 B1 B0 Reset Value 1111 11110B 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中的内容。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 707 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 特殊功能寄存器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单片机即STC15F100W系列,用户可以通过读RAM区78单元和79单元 的内容来获取内部掉电唤醒专用定时器常温下的时钟频率。下面以16-pin及其以上的单片机为 例,介绍如何计算内部掉电唤醒专用定时器的计数时间。 假设我们用[WIRC_H,WIRC_L]来表示从RAM区F8单元和F9单元获取到的内部掉电唤醒专用 定时器常温下的时钟频率,则��������������������� 内部掉电唤醒专用定时器计数时间������ 按下式计算: 内部掉电唤醒专用定时器计数时间 = 708 南通国芯微电子有限公司 106 uS 数 x 16 x 计数次� [WIRC_H, WIRC_L] 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 例如:�������������������������������������������� 假设读到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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 709 STC15系列单片机指南 技术支持网站:www.GXWMCU.com {WKTCH[6:0],WKTCL[7:0]} = 999, {WKTCH[6:0],WKTCL[7:0]} = 4095, {WKTCH[6:0],WKTCL[7:0]} = 32767, 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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中的内容),可以读出单片机在停机模式/掉电模式等待的 时间。 为了降低功耗,未制作掉电唤醒定时器的抗误差和抗温漂的电路,因此,掉电唤醒定时器 制造误差较大,压漂(电压抖动)较大。 710 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 /*利用内部专用掉电唤醒定时器来唤醒掉电模式的示例程序(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; //进入掉电模式 //掉电唤醒后,取反测试口 } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 711 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 $ ;---------------------------------------- 712 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 7.10 外部管脚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.5,T4/P0.7)如发生由高到低的变化可以将MCU从掉电模式/停机模式唤醒。当MCU由定时器T0/ T1/T2/T3/T4的外部管脚由高到低的变化唤醒时,如果主时钟使用的是内部系统时钟����� (由用户在 ISP烧录程序时自行设置)�������������������������������� ,������������������������������� MCU���������������������������� 在��������������������������� 等待64个时钟后������������������� ,就����������������� 认为此时系统时钟从开始起振的不稳定 状态已经过渡到稳定状态,������������������������������� 就������������������������������ 将时钟供给CPU工作�������������������� ;如果主时钟使用的是外部晶体或时钟��� (由用 户在ISP烧录程序时自行设置)������������������������������� ,������������������������������ MCU��������������������������� 在�������������������������� 等待1024个时钟后���������������� ,就�������������� 认为此时系统时钟从开始起振的 不稳定状态已经过渡到稳定状态,����������������������������� 就���������������������������� 将时钟供给CPU工作������������������ ;����������������� CPU获得时钟后,程序从上次��� 设置单 片机进入掉电模式语句的下一条语句开始往������������������ 下执行��������������� ,不进入相应定时器的中断程序。 d e t i im 注意:对于STC15W4K32S4系列A版本单片机,[T3/P0.5, T4/P0.7]在掉电模式时不要作掉 电唤醒。 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 L 传真:0513-5501 2969 / 2956 / 2947 713 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第8章 串行口通信 除STC15F100W系列无串行口功能外,其他STC15系列单片机都有串行口功能,其中STC15W4K32S4系列单片机有4个高速异步串行通信端口、STC15F2K60S2系列单片机有2个高速异 步串行通信端口、STC15W1K16S/STC15W408S/STC15W408AS/STC15W201S/STC15F408AD 系列单片机有1个高速异步串行通信端口,如下表所示: 下表总结了STC15系列单片机内置了高速异步串行通信端口的单片机型号: 高速异步串行 通信端口 串行口1 串行口2 串行口3 串行口4 STC15W4K32S4系列 √ √ √ √ STC15F2K60S2系列 √ √ STC15W1K16S系列 √ STC15W404S系列 √ STC15W401AS系列 √ STC15W201S系列 √ STC15F408AD系列 √ 单片机型号 STC15F100W系列 C T S U C M d e t i im L 上表中√表示对应的系列有相应的串行口。 现以STC15W4K32S4系列单片机为例,介绍STC15系列单片机的串行通信端口。 STC15W4K32S4系列单片机具有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� 。 STC15W4K32S4系列单片机的串行口1有4种工作方式,其中两种方式的波特率是可变的,另 两种是固定的,以供不同应用场合选用。串行口2/串行口3/串行口4都只有两种工作方式,这 两种方式的波特率都是可变的。用户可用软件设置不同的波特率和选择不同的工作方式。主机 可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。 STC15W4K32S4系列单片机串行口1对应的硬件部分是TxD和RxD。串行口1可以在3组管 714 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 脚之间进行切换。通过设置特殊功能寄存器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]上。 STC15W4K32S4系列单片机串行口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]。 STC15W4K32S4系列单片机串行口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 STC15W4K32S4系列单片机串行口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 STC15W4K32S4系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多 个并行I/O口,或作串���������������� —��������������� 并转换,或用于扩展串行外设等。 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 715 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.1 串行口1的相关寄存器 符号 描述 AUXR 定时器2高8位 寄存器 定时器2低8位 寄存器 辅助寄存器 SCON Serial Control T2H T2L LSB 复位值 0000 0000B D7H 0000 0000B 8EH T0x12 T1x12 UART_M0x6 T2R T2_C/T 98H SM0/FE SBUF Serial Buffer 99H Power Control 87H IE Interrupt Enable A8H IP Interrupt Priority Low SM1 SM2 REN TB8 POF GF1 ES ET1 SADEN Slave Address Mask B9H Slave Address A9H AUXR1 P_SW1 CLK_DIV PCON2 辅助寄存器1 A2H 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 SADDR C T S MSB D6H PCON 时钟分频寄存器 位地址及符号 地址 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 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接收器设置该位。它必须由软件清零。 716 当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作 方式,如下表所示。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 其中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,则禁止接收。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 717 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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无关,在此不作介绍。 718 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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以并行方式送往内部数据总线。 d e t i im L 3. 辅助寄存器AUXR U C M 辅助寄存器AUXR的格式及各位含义如下: AUXR : 辅助寄存器 (不可位寻址) SFR name Address AUXR 8EH bit B7 C T S B6 B5 name T0x12 T1x12 UART_M0x6 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的外部脉冲进行计数) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 719 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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)。 720 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 L d e t i im 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]上。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 721 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 722 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 723 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 U C M TxD OUTPUT FUNCTION SHIFT CLOCK SHIFT L RxD INPUT FUNCTION SBUF C T S READ SBUF INTERNAL BUS WRITE TO SBUF SEND SHIFT TRANSMIT RXD(DATA OUT) 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功能结构及时序示意图 724 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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"� 。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 725 技术支持网站:www.GXWMCU.com STC15系列单片机指南 研发顾问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 RX CLOCK START 1-TO-0 TRANSITION DETECTOR d e t i im RX CONTROL SHIFT 1FFH L BIT DETECTOR U C 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 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功能结构示意图及接收/发送时序图 726 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 串行通信模式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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 727 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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的设置以及通信协议的约定,为多机通信提供了方便。 728 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 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 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功能结构示意图及接收/发送时序图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 729 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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产生。 730 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 INTERNAL BUS Timer 1 Overflow TB8 WRITE TO SBUF T 1 工作在 8 位重装模式 T1工作在16 位重装模式 STC — 全球最大的8051单片机设计公司 技术支持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 1-TO-0 TRANSITION DETECTOR RX CLOCK START 1FFH L BIT DETECTOR RxD C T S d e t i im RX CONTROL SHIFT CU M INPUT SHIFT REG. (9 BITS) 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 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功能结构示意图及接收/发送时序图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 731 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 模式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的设置进行 波特率的选择,是可变的。 732 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 8.3 串行口1的波特率设置 ——串口1和串口2的波特率相同时,串口1和串口2可共享T2作波特率发生器 STC15W4K32S4系列单片机串行口1的波特率随所选工作模式的不同而异,对于工作模式0 和模式2,其波特率与系统时钟频率SYSclk和PCON中的波特率选择位SMOD有关,而模式1和 模式3的波特率除与SYSclk和PCON位有关外,还与定时器/计数器1或定时器2设置有关。通过 对定时器/计数器1或定时器2的设置,可选择不同的波特率,所以这种波特率是可变的。建议 用户优先选择定时器2作为串行口1的波特率发生器。 说明:当串口1和串口2的波特率相同时,串口1和串口2可以共享波特率发生器,此时建议用户 选择定时器T2作为串口1的波特率发生器;当串口1和串口2的波特率不同时,才建议选 择定时器T1作为串口1的波特率发生器(因串口2固定使用定时器T2作波特率发生器)。 d e t i im 串行通信模式0,其波特率与系统时钟频率SYSclk有关 。 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12。 L 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2。 U C M 一旦SYSclk选定且UART_M0x6/AUXR.5设置好,则串行通信工作模式0的波特率固定不 变。 C T S 串行通信工作模式2,其波特率除与SYSclk有关外,还与SMOD位有关。 其基本表达式为:串行通信模式2波特率=2SMOD/64×(SYSclk系统工作时钟频率) 当SMOD=1时,波特率=2/64(SYSclk)=1/32(SYSclk); 当SMOD=0时,波特率=1/64(SYSclk)。 当SYSclk选定后,通过软件设置PCON中的SMOD位,可选择两种波特率。所以,这种模 式的波特率基本固定。 串行通信模式1和3,其波特率是可变的(建议用户优先选择定时器T2作为串口1的波特率发 生器): 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 733 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 当串行口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 当串行口1用定时器1作为其波特率发生器且定时器1工作于模式2(8位自动重装模式)时, 串行口1的波特率=��� ( 2SMOD/32 )×(定时器1的溢出率�� )�. d e t i im 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 0时� , 定时器����� 1的溢出率 = SYSclk / 12 / ( 256 - TH1); L 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / 12 / ( 256 - TH1) U C M 当��������������������� 定时器1工作于模式2(8位自动重装模式)且T1x12 = 1时, �������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 即此时,串行口1的波特率=( 2SMOD/32 )×SYSclk / ( 256 - TH1) C T S 通过对定时器1和定时器2的设置,可灵活地选择不同的波特率。在实际应用中多半选用串 行模式1或串行模式3。显然,为选择波特率,关键在于定时器1和定时器2的溢出率的计算。 SMOD的选择,只需根据需要执行下列指令就可实现SMOD=0或1; MOV PCON,#00H ;使SMOD=0 MOV PCON,#80H ;使SMOD=1 SMOD只占用电源控制寄存器PCON的最高一位,其他各位的具体设置应根据实际情况而定。 当用户选择定时器/计数器������������������������ 1����������������������� 作波特率发生器时,为选择波特率,关键在于定时器/计数器1 的溢出率。下面介绍如何计算定时器/计数器1的溢出率。 定时器/计数器1的溢出率定义为:单位时间(秒)内定时器/计数器1回0溢出的次数,即定 时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒。 STC15W4K32S4系列单片机设有3个定时器/计数器,定时器/计数器1具有4种工作方式,而 常选用定时器/计数器1的工作方式0(16位自动重装载模式)及工作方式2(8位自动重装)作 为波特率的溢出率。 734 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 以定时器/计数器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× d e t i im L 当T1x12/AUXR.6=1时,定时器/计数器1溢出一次所需的时间为:(28—N)×1时钟=(28—N)× U C M 于是得定时器/计数器每秒溢出的次数,即 1 SYSclk 1 SYSclk 当T1x12/AUXR.6=0时,定时器/计数器1的溢出率=SYSclk/12×(28-N) (次/秒) 当T1x12/AUXR.6=1时,定时器/计数器1的溢出率=SYSclk×(28-N) (次/秒) C T S 式中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(次/秒); 设: T1x12/AUXR.6=0,SYSclk=12MHz, N=00H, 定时器/计数器1工作于方式2的溢出率 = 12×106/12×256≈3906(次/秒) 设: T1x12/AUXR.6=1,SYSclk=6MHz, N=FFH, 定时器/计数器1工作于方式2的溢出率为6×106/(256-255) = 6×106(次/秒); 设: T1x12/AUXR.6=1,SYSclk=12MHz, N=00H, 定时器/计数器1工作于方式2的溢出率 = 12×106/256 = 46875(次/秒) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 735 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 MOV MOV MOV SETB MOV MOV TMOD, TH1, TL1, TR1 PCON, SCON, C T S #20H #xxH #xxH #80H #50H d e t i im L ;设置定时器/计数器1定时、工作方式2 ; 设置定时常数N ; ;启动定时器/计数器1 ;设置SMOD=1 ;设置串行通信方式1 U C M … … 下表给出各种常用波特率与定时器/计数器1各参数之间的关系。 常用波特率与定时器/计数器1各参数关系(T1x12/AUXR.6=0) 系统时钟频率 定时器1 SMOD 常用波特率 方式 重新装入值 C/T (MHz) 12 方式0 MAX:1M × × × × 1 × × × 方式2 MAX:375K 12 62.5K 12 1 0 2 FFH 方式1和3 1 0 2 FDH 19.2K 11.059 11.059 0 0 2 FDH 9.6K 11.059 0 0 2 FAH 4.8K 11.059 0 0 2 F4H 2.4K 11.059 0 0 2 F8H 1.2K 11.986 0 0 2 1DH 137.5 6 0 0 2 72H 110 12 0 0 1 FFFBH 110 设置波特率的初始化程序段如下: 执行上述程序段后,即可完成对定时器/计数器1的操作方式及串行通信的工作方式和波特 率的设置。 由于用其他工作方式设置波特率计算方法较复杂,一般应用较少,故不一一论述。 当用户选择定时器2作波特率发生器时,为选择波特率,关键在于定时器2的溢出率。当用 户选择定时器2作波特率发生器时,��������������������������� 定时器/����������������������� 计数器�������������������� 1可以释放出来作为定时器/计数器/时钟输 出使用� 。 用户在程序中如何具体使用串口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。 736 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 当串口1工作在模式1和模式3时������������������������������� ,������������������������������ 计算相应的波特率需要设置的重装载数������������� ,������������ 结果送入T2H/T2L寄 存器���������������� ,��������������� 计算自动重装数 RELOAD: 1. 计算 RELOAD 计算公式: RELOAD = 65536 - INT(SYSclk/Baud0/4 + 0.5) 计算出的RELOAD 数直接送T2H/T2L寄存器 式中: INT() 表示取整运算即舍去小数, 在式中加 0.5 可以达到四舍五入的目的 SYSclk = 晶振频率 Baud0 = 标准波特率 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 U C M 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 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% 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 737 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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() 738 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 { #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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 739 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 #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 740 南通国芯微电子有限公司 U C M d e t i im L //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 U C M EVEN_PARITY C T S //----------------------------------------AUXR EQU 08EH T2H DATA 0D6H T2L DATA 0D7H //----------------------------------------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) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 741 STC15系列单片机指南 技术支持网站:www.GXWMCU.com MOV SCON, #0DAH #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D2H #endif //------------------------------ MOV T2L, MOV T2H, MOV AUXR, ORL AUXR, SETB ES SETB EA //9位可变波特率,校验位初始为1 //9位可变波特率,校验位初始为0 //设置波特率重装值(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 742 南通国芯微电子有限公司 研发顾问Tel:13922805190 #0D8H #0FFH #14H #01H MOV DPTR, #TESTSTR LCALL SENDSTRING 临时技术支持Tel:13922829991 //P2.2显示校验位 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.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 南通国芯微电子有限公司 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 //设置校验位为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 743 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 744 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 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); 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; } } C T S /*---------------------------发送串口数据 ----------------------------*/ 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; 南通国芯微电子有限公司 L //清除RI位 //P0显示串口数据 //P2.2显示校验位 U C M d e t i im //清除TI位 //清忙标志 //等待前面的数据发送完成 //获取校验位P (PSW.0) //根据P来设置校验位 //设置校验位为0 //设置校验位为1 //设置校验位为1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 745 STC15系列单片机指南 技术支持网站: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 //辅助寄存器 //忙标志位 //----------------------------------------- 746 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站: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 #0D8H #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/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, 南通国芯微电子有限公司 CHECKTI //检测RI位 //清除RI位 SBUF //P0显示串口数据 RB8 C //P2.2显示校验位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 747 STC15系列单片机指南 CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI 技术支持网站:www.GXWMCU.com TI, TI BUSY 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 748 临时技术支持Tel:13922829991 //设置校验位为1 //设置校验位为0 //校验位设置完成 //写数据到UART数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 749 技术支持网站:www.GXWMCU.com STC15系列单片机指南 #elif (PARITYBIT == SCON = #endif = = = = = = = SPACE_PARITY) 0xd2; AUXR TMOD TL1 TH1 TR1 ES EA SendString("STC15F2K60S2\r\nUart Test !\r\n"); while(1); 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 //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; } } 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 #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; //设置校验位为1 #endif } 750 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 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 751 STC15系列单片机指南 技术支持网站: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, 752 CHECKTI SBUF RB8 南通国芯微电子有限公司 //检测RI位 //清除RI位 //P0显示串口数据 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 MOV CHECKTI: JNB CLR CLR ISR_EXIT: POP POP RETI 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 753 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 AUXR 辅助寄存器 IE Interrupt Enable IE2 Interrupt Enable 2 AFH IP2 Interrupt Priority 2 Low B5H P_SW2 8EH MSB LSB S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI T0x12 T1x12 UART_M0x6 T2R T2_C/T A8H EA ELVD EADC ET4 - - 外围设备功能切换控制 BAH EAXSFR 寄存器 T2x12 EXTRAM S1ST2 0100 0000B 0000 0001B ET1 EX1 ET0 EX0 0000 0000B ES3 ET2 ESPI ES2 x000 0000B PX4 PPWMFD PPWM PSPI PS2 xxx0 0000B ET3 - S2RI 0 1. 串行口2的控制寄存器S2CON ES ES4 0 d e t i im 0 - S4_S S3_S S2_S 0000 x000B L 串行口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:保留,该位复位后为1. 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。 754 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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的字节地址为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以并行方式送往内部数据总线。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 755 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 L T2R B3 B2 T2_C/T T2x12 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作为其波 特率发生器。 756 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 L B4 - - B3 - U C M 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 外围设备功能切换 BAH 控制寄存器2 B4 B3 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] 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 757 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.6 串行口2工作模式 ——串口2固定使用定时器T2作波特率发生器 ——串口1/3/4和串口2的波特率相同时,串口1/3/4和串口2可共享T2作波特 率发生器 STC15W4K32S4系列单片机的串行口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 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 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); 即此时,串行口2的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 C T S 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 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的设置进行波特率的选择,是 可变的。 758 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 说明:当串口1、串口3及串口4和串口2的波特率相同时,串口1、串口3及串口4和串口2可以共 享定时器T2作波特率发生器,此时建议串口1、串口3及串口4都选择定时器T2作为波特 率发生器; 当串口1、串口3及串口4和串口2的波特率不同时,串口1、串口3及串口4和串口2不可 以共享定时器T2作波特率发生器,这是才建议串口1选择定时器T1作波特率发生器,串 口3选择定时器T3作波特率发生器,串口4选择定时器T4作波特率发生器。 用户在程序中如何具体使用串口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 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 759 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 760 = = = = = = 0x8e; 0x9a; 0x9b; 0xd6; 0xd7; 0xaf; 0x01 0x02 南通国芯微电子有限公司 //S2CON.0 //S2CON.1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com #define S2RB8 0x04 #define S2TB8 0x08 bit 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 //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位 //清忙标志 /*---------------------------- 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 761 STC15系列单片机指南 技术支持网站:www.GXWMCU.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 南通国芯微电子有限公司 研发顾问Tel:13922805190 //等待前面的数据发送完成 //获取校验位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++); } } 762 临时技术支持Tel:13922829991 //写数据到UART2数据寄存器 //检测字符串结束标志 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 763 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 764 南通国芯微电子有限公司 ;读取UART2控制寄存器 ;检测S2RI位 ;清除S2RI位 ;P0显示串口数据 ; ;P2.2显示校验位 ;读取UART2控制寄存器 ;检测S2TI位 ;清除S2TI位 ;清忙标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.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 STC — 全球最大的8051单片机设计公司 //等待前面的数据发送完成 //获取校验位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 南通国芯微电子有限公司 技术支持QQ:800003751 //写数据到UART2数据寄存器 //读取字符 //检测字符串结束标志 //字符串地址+1 //发送当前字符 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 765 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 外围设备功能切换控制 BAH 寄存器 ET4 - 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作为其������ 波特率发生器 766 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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,否则将出现一次请求多次响 应的错误。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 767 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 串行口3的数据缓冲寄存器S3BUF STC15W4K32S4系列单片机的串行口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作为波特率发生器� 。 768 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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 B6 C T S name T4R 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.5的外部脉冲进行计数) B1 - T3x12:定时器3速度控制位� 。 0, 定时器3速度是8051单片机定时器的速度,即12分频; 1, 定时器3速度是8051单片机定时器速度的12倍,即不分频。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 769 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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控制;其次还受各中断源自己的 中断允许控制位控制。 770 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 771 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.9 串行口3工作模式 ——串口3和串口2的波特率相同时,串口3和串口2可共享T2作波特率发生器 STC15W4K32S4系列单片机的串行口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 L ,定时器����� 当T2工作在1T模式(AUXR.2/T2x12=1)时� 2的溢出率=SYSclk / ( 65536 - [RL_TH2, RL_TL2] ); U C M 即此时,串行口3的波特率=SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4 当T2工作在12T模式(AUXR.2/T2x12=0)时� ,定时器����� 2的溢出率=SYSclk /12/(65536 - [RL_TH2, RL_TL2]); C T S 即此时,串行口3的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 当串行口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的重装载寄存器。 说明:当串口3和串口2的波特率相同时,串口3和串口2可以共享波特率发生器,此时建议用户 选择定时器T2作为串口3的波特率发生器;当串口3和串口2的波特率不同时,才建议选 择定时器T3作为串口3的波特率发生器(因串口2固定使用定时器T2作波特率发生器)。 772 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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)时: 串口3波特率在模式1= 定时器T3的溢出率/4 U C M ,定时器����� 当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和串口2的波特率相同时,串口3和串口2可以共享波特率发生器,此时建议用户 选择定时器T2作为串口3的波特率发生器;当串口3和串口2的波特率不同时,才建议选 择定时器T3作为串口3的波特率发生器(因串口2固定使用定时器T2作波特率发生器)。 用户在程序中如何具体使用串口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。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 773 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 外围设备功能切换控制 BAH 寄存器 ET4 - 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作为其������ 波特率发生器 774 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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,否则将出现一次请求多次响 应的错误。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 775 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 2. 串行口4的数据缓冲寄存器S4BUF STC15W4K32S4系列单片机的串行口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的寄存器T4H, T4L 定时器2寄存器T2H(地址为D6H,复位值为00H)及寄存器T2L(地址为D7H,复位值为00H)用 于保存重装时间常数。 C T S 定时器4寄存器T4H(地址为D2H,复位值为00H)及寄存器T4L(地址为D3H,复位值为00H)用 于保存重装时间常数。 776 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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.7的外部脉冲进行计数) B5 - T4x12:定时器4速度控制位� 。 0, 定时器4速度是8051单片机定时器的速度,即12分频; 1, 定时器4速度是8051单片机定时器速度的12倍,即不分频。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 777 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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控制;其次还受各中断源自己的 中断允许控制位控制。 778 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 779 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.11 串行口4工作模式 ——串口1和串口2的波特率相同时,串口1和串口2可共享T2作波特率发生器 STC15W4K32S4系列单片机的串行口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 U C M L ,定时器����� 当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]); C T S 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 当串行口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的重装载寄存器。 说明:当串口4和串口2的波特率相同时,串口4和串口2可以共享波特率发生器,此时建议用户 选择定时器T2作为串口4的波特率发生器;当串口4和串口2的波特率不同时,才建议选 择定时器T4作为串口4的波特率发生器(因串口2固定使用定时器T2作波特率发生器)。 780 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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]); 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH2, RL_TL2]) / 4 d e t i im 上式中RL_TH2是T2H的重装载寄存器,RL_TL2是T2L的重装载寄存器。 L 当串行口4选择定时器T4作为其波特率发生器(即S4ST4/S4SCON.1=1)时: 串口4在模式1的��� 波特率= 定时器T4的溢出率/4 U C M ,定时器����� 当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]); C T S 即此时,串行口4的波特率=SYSclk / 12 / ( 65536 - [RL_TH4, RL_TL4]) / 4 上式中RL_TH4是T4H的重装载寄存器,RL_TL4是T4L的重装载寄存器。 可见,模式1和模式0一样,其波特率可通过软件对定时器2的设置进行波特率的选择,是 可变的。 说明:当串口4和串口2的波特率相同时,串口4和串口2可以共享波特率发生器,此时建议用户 选择定时器T2作为串口4的波特率发生器;当串口4和串口2的波特率不同时,才建议选 择定时器T4作为串口4的波特率发生器(因串口2固定使用定时器T2作波特率发生器)。 用户在程序中如何具体使用串口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。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 781 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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系列单片机的串行通信,可直接采用查询法,也可采用自动中断法。 782 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 (1)������������ 查询方式双机通信软件举例 ①�������� 甲机发送子程序段 下图为甲机发送子程序流程图。 开始 定时器,串行口初始化 发送数据 地址指针DPTR,长度计数器 R7,校验寄存器R6置初值 发送完否? N Y 发送校验和 d e t i im 发送呼叫信号06H 等待乙机回答 等待乙机回答 N 是00H? Y C T S 发字节长度数 CU M N L 传送正确吗? Y 返回 甲机发送程序设置: (a) �������������������������������������������� 波特率设置:选用定时器��������������������������������� /�������������������������������� 计数器����������������������������� 1���������������������������� 定时模式、工作方式������������������� 2������������������ ,计数常数������������� F3H���������� ,��������� SMOD=1��� 。波 特率为���������� 2400������ (位���� /��� 秒); (b) �������������������� 串行通信设置:异步通信方式������� 1������ ,允许接收; (c) �������������� 内部������������ RAM��������� 和工作寄存器设置: 31H������������������ ��������������������� 和����������������� 30H�������������� 单元存放发送的数据块首地址; 2FH������������� ���������������� 单元存放发送的数据块个数; R6�������� ���������� 为累加和寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 783 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 甲机发送子程序清单: 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取发送数据 ;发送数据块 784 南通国芯微电子有限公司 发送数据块数n 等待发送完 ;DPTR指针加1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 WAIT3: JBC SJMP NEXT2: DJNZ TX-SUM: MOV MOV WAIT4: JBC TI, WAIT3 NEXT2 ;判断一数据块发送完否 ;等待发送完 R7, TX-NES ;判断发送全部结束否 A, R6 SBUF, A TI, WAIT4 SJMP IF-0FH: MOV RX-0FH CJNE RET RI, A, A, ; 等待发送完 ; IF-0FH STC — 全球最大的8051单片机设计公司 ;发送累加和给乙机 RX-0FH SJMP RX-0FH: JBC 技术支持QQ:800003751 ; 等待接收乙机回答信号 ; 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”为暂不接收。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 785 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 下图为双机通信查询方式乙机接收子程序流程图。 开始 定时器,串行口初始化 接收数据并存入RAM 地址指针DPTR赋值, 校验寄存器清0 地址指针DPTR加1 数据接收完否? N Y 接收呼叫信号 接收校验和 是06H? 传送正确吗? N 向甲机回送15H 向甲机回送00H C T S d e t i im Y 接收数据块长度 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 786 MOV SETB MOV MOV MOV 南通国芯微电子有限公司 SMOD置位 设置DPTR首地址 ; ;校验和寄存器清0 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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, HAVE1 SJMP WAIT2 HAVE1:  RX-BYS: JBC RI, HAVE2 SJMP RX-BYS U C M L ;因呼叫错,返回重新接收呼叫 C T S LJMP RX-ACK ;等待发送完 ;等待接收数据块个数 ; 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 南通国芯微电子有限公司 ; A, ; SBUF 接收数据帧 ; ;接收到的数据存入外部RAM ; ; 形成累加和 ; ;判断数据是否接收完 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 787 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 GOOD: RET C T S ST-RAM d e t i im ;向甲机发送传输有误信号 L ;等待发送完 U C M 判断传输是否正确 向甲机发送接收正确信息 WAIT4: 等待接收校验和 ;返回重新开始接收 ;传输正确返回 (2)中断方式双机通信软件举例 在很多应用场合,双机通信的双方或一方采用中断方式以提高通信效率。由于STC15系列 单片机的串行通信是双工的,且中断系统只提供一个中断矢量入口地址,所以实际上是中断和 查询必须相结合,即接收/发送均可各自请求中断,响应中断时主机并不知道是谁请求中断, 统一转入同一个中断矢量入口,必须由中断服务程序查询确定并转入对应的服务程序进行处 理。 这里,任以上述协议为例,甲方(发送方)任以查询方式通信(从略),乙方(接收方) 则改用中断���������� —��������� 查询方式进行通信。 在中断接收服务程序中,需设置三个标志位来判断所接收的信息是呼叫信号还是数据块个 数,是数据还是校验和。增设寄存器:内部RAM32H单元为数据块个数寄存器,33H单元为校 验和寄存器,位地址7FH、7EH、7DH为标志位。 788 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 乙机接收中断服务程序清单 采用中断方式时,应在主程序中安排定时器/计数器、串行通信等初始化程序。通信接收的数据存放在外 部RAM的首地址也需在主程序中确定。 主程序: ORG AJMP START 0000H ORG 0023H LIMP SERVE ;转至主程序起始处 ;转中断服务程序处 · · · START: 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 789 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 中断服务程序: 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, SBUF, A JNB TI, CLR TI SJMP AGAIN ;清除发送中断请求标志位 ;转结束处理 ; ; #0F0H 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: 790 MOV A, MOV SBUF, A #05H 南通国芯微电子有限公司 ;接收到的不是呼叫信号,则向甲机发送 ;“05H”,要求重发呼叫 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 ; U C M L 形成累加和 ; ;清除数据块数标志 ;转恢复现场处理 ; MOV DPH, 31H MOV MOV DPL, 30H A, SBUF MOVX @DPTR, A ;接收到数据块数 ;存入32H单元 33H C T S RXDATA: 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 791 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 792 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 8.13 多机通信 在很多实际应用系统中,需要多台微计算机协调工作。STC15系列单片机的串行通信方 式2和方式3具有多机通信功能,可构成各种分布式通信系统。下图为全双工主从式多机通信 系统的连接框图。 TxD STC MCU RxD 主机 TxD TxD RxD STC MCU 从机1 d e t i im RxD TxD L STC MCU 从机2 U C M … 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��������������� ,不会产生中断请求,直至被寻址 为止。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 793 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ④ 主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的� ����������������������������� TB8=0�������������� ,以表示为数据帧。����� ⑤ ������������������������������������� 当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机,原先被寻址的从机经分 析得知主机在寻呼其他从机时,恢复其���������������������� SM2=1����������������� ,对其后主机发送的数据帧不予理睬。 上述过程均在软件控制下实现。 (2)�������� 多机通信协议简述 由于串行通信是在二台或多台各自完全独立的系统之间进行信息传输这就需要根据时间通 信要求制定某些约定,作为通信规范遵照执行,协议要求严格、完善,不同的通信要求,协议 的内容也不相同。在多机通信系统中要考虑的问题较多,协议内容比较复杂。这里仅例举几条 作一说明。 上图的主从式多机通信系统,允许配置���������������� 255������������� 台从机,各从机的地址分别为00H~FEH。 d e t i im ① ������������������������������������������ 约定地址�������������������������������������� FFH����������������������������������� 为全部从机的控制命令,命令各从机恢复����������������� SM2=1������������ 状态,准备接收主机的地 址呼叫。 L ② 主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址 �������������������������������������� 给主机,经验证地址相符后主机再向被寻址的从机发送命令字,被寻址的从机根据命 令字要求回送本机的状态,若主机判断状态正常,主机即开始发送或接收数据帧,发 送或接收的第一帧为传输数据块长度。 ③ ������������ 约定主机发送的命令字为: C T S U C M 00H����������� :要求从机接收数据块; 01H����������� :要求从机发送数据块; · · · 其他:非法命令。 ④ ������������ 从机的状态字格式约定为: B7 B6 B5 B4 B3 B2 B1 B0 ERR 0 0 0 0 0 TRDY RRDY ��������������������� 定义: 若���������������� ERR=1����������� ,从机接收到非法命令; ����������������� 若���������������� TRDY=1���������� ,从机发送准备就绪; ����������������� 若���������������� RRDY=1���������� ,从机接收准备就绪; ⑤ ������������ 其他:如传输出错措施等。 794 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 (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: 南通国芯微电子有限公司 WAIT1 ;等待发送完毕 ;复位发送中断请求标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 795 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 RS0 MOV SBUF, @R0 WAIT2: CU M WAIT2 L ;中断服务程序段,清中断请求标志TI SETB TXDATA: 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 796 南通国芯微电子有限公司 ; 恢复现场 ; ;返回 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 ②������ 从机接收程序 主机发送的地址呼叫帧,所有的从机均接收,若不是呼叫本机地址即从中断返回;若是本 机地址,则回送本机地址给主机作为应答,并开始接收主机发送来的数据块长度帧,并存放于 内部RAM的60H单元中,紧接着接收的数据帧存放于61H为首地址的内部RAM单元中,程序 中还选用20·0H、20·1H位作标志位,用来判断接收的是地址、数据块长度还是数据,选用了 2FH、2EH两个字节单元用于存放数据字节数和存储数据指针。#5从机的接收程序如下,供参 考。 #5从机接收程序清单: ORG 0000H AJMP START ORG 0023H LJMP SERVE ORG 0100H ;转主程序段 ;从中断入口转中断服务程序 START: d e t i im 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 ;器/计数器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 797 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ISDATA: MOV R0, 2EH MOV A, SBUF MOV @R0, A INC 2EH DJNZ 2FH, RETURN SETB 20·0H SETB 20·1H SETB SM2 SJMP RETURN ;数据指针送R0 ;接收数据 ;数据指针加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口,或配置 某些串行通信接口的外部设备。例如,串行打印机、显示器等。这里就不一一举例了。 798 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 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的溢出率�) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 799 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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,否则将出现一次请求多次响应的错误。 800 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 801 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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)同时选中所有的从机来进行通讯。 802 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 -12V J1 TxD CONVERTER …… RS232 CONVERTER STC15W4K60S4 STC15W4K60S4 SLAVER-1 PC COM TxD RS232 TxD RxD RxD 10K RxD 1 6 2 7 3 8 4 9 5 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 803 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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 804 0 0 0x33 南通国芯微电子有限公司 //定义从机编号,0为从机1, 1为从机2 //从机1地址屏蔽位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 #define #define #else #define #define #define #endif 技术支持QQ:800003751 SERADR ACKTST 0x55 0x78 //从机1的地址为xx01,xx01 //从机1应答测试数据 SAMASK SERADR ACKTST 0x3C 0x5A 0x49 //从机2地址屏蔽位 //从机2的地址为xx01,10xx //从机2应答测试数据 #define URMD 0 //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); } STC — 全球最大的8051单片机设计公司 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; //若发送完成,则重新开始地址检测 } } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 805 技术支持网站:www.GXWMCU.com STC15系列单片机指南 if (RI) { } 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 RI SM2 count SBUF = = = = 0; 0; 7; ACKTST; //清除RI位 //本机被选中后,进入数据接收状态 //并开发送应答数据 } /*---------------------------初始化串口 ----------------------------*/ void InitUart() { SADDR = SADEN = SCON = #if #elif #else #endif } 806 SERADR; SAMASK; 0xf8; URMD T2L T2H AUXR AUXR URMD AUXR TMOD TL1 TH1 TR1 == = = = |= == = = = = = 0 0xd8; 0xff; 0x14; 0x01; 1 0x40; 0x00; 0xd8; 0xff; 1; TMOD AUXR TH1 = TR1 = = TL1 = = 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 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 807 STC15系列单片机指南 技术支持网站:www.GXWMCU.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 808 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 南通国芯微电子有限公司 研发顾问Tel:13922805190 //初始化串口 //发送完成8个数据后,就不再发送 //发送应答测试数据 d e t i im //若发送完成,则重新开始地址检测 U C M L //本机被选中后,进入数据接收状态 //并开发送应答数据 #if #elif 临时技术支持Tel:13922829991 //设置串口为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 STC15系列单片机指南 #else #endif 官方网站:www.STCMCU.com SETB TR1 MOV MOV MOV MOV SETB TMOD, AUXR, TL1, TH1, TR1 技术支持QQ:800003751 #20H #40H #0FBH #0FBH STC — 全球最大的8051单片机设计公司 //定时器1开始运行 //设置定时器1为8位自动重装载模式 //定时器1为1T模式 //115200 bps(256 - 18432000/32/115200) RET //---------------------------------------- END C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 809 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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下载编程软件中的设置。 810 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 8.16 用T0软件模拟串行口的测试程序(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 = 65536 - 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 南通国芯微电子有限公司 // 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 811 技术支持网站:www.GXWMCU.com STC15系列单片机指南 //#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, UART_INIT(); C T S 812 //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz //define UART TX/RX port RBUF; RDAT; RCNT; RBIT; RING; REND; void main() { TMOD = 0x00; AUXR = 0x80; TL0 = BAUD; TH0 = BAUD>>8; TR0 = 1; ET0 = 1; PT0 = 1; EA = 1; 研发顾问Tel:13922805190 BYTE; WORD; BYTE t, r; BYTE buf[16]; 临时技术支持Tel:13922829991 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 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 { 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 if (--TCNT == 0) { TCNT = 3; 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 L //reset send baudrate counter 传真:0513-5501 2969 / 2956 / 2947 813 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 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; } 814 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 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 815 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ;----------------------------------------;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 816 ORG 000BH PUSH PUSH ACC PSW 南通国芯微电子有限公司 ;4 save ACC ;4 save PSW 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 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 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 817 STC15系列单片机指南 技术支持网站:www.GXWMCU.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 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ; 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) 818 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 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 END 南通国芯微电子有限公司 STC — 全球最大的8051单片机设计公司 #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 ;---------------------------------------- 技术支持QQ:800003751 C T S U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 819 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8.17 用T2结合INT4模拟一个半双工串口的测试程序(C及汇编) 1. C程序: /*-------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited ---------------------------------------------------------------------*/ /* --- Mobile: (86)13922805190 -------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 ------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 -------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com --------------------------------------------------------------*/ /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */ /*----------------------------------------------------------------------------------------------------*/ /************* 功能说明 ************** 使用STC15系列的Timer2做的模拟串口. P3.0接收, P3.1发送, 半双工. d e t i im 假定测试芯片的工作频率为22118400Hz. 时钟为5.5296MHZ ~ 35MHZ. 波特率高,则时钟也要选高, 优先使用 22.1184MHZ, 11.0592MHZ. 测试方法: 上位机发送数据, MCU收到数据后原样返回. U C M L 串口固定设置: 1位起始位, 8位数据位, 1位停止位, 波特率在范围如下. 1200 ~ 115200 bps @ 33.1776MHZ 600 ~ 115200 bps @ 22.1184MHZ 600 ~ 76800 bps @ 18.4320MHZ 300 ~ 57600 bps @ 11.0592MHZ 150 ~ 19200 bps @ 5.5296MHZ ******************************************/ #include C T S #define MAIN_Fosc 22118400UL #define UART3_Baudrate 115200UL #define RX_Lenth 32 //定义主时钟 //定义波特率 //接收长度 #define UART3_BitTime (MAIN_Fosc / UART3_Baudrate) typedef unsigned char typedef unsigned int typedef unsigned long sfr sfr sfr sfr sfr u8 u8 820 u8; u16; u32; IE2 = 0xAF; AUXR = 0x8E; INT_CLKO = 0x8F; T2H = 0xD6; T2L = 0xD7; Tx3_read; Rx3_write; 南通国芯微电子有限公司 //发送读指针 //接收写指针 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 u8 idata buf3[RX_Lenth]; //接收缓冲 u16 bit //接收结束标志 RxTimeOut; B_RxOk; STC — 全球最大的8051单片机设计公司 //===================== 模拟串口相关=========================== sbit P_RX3 = P3^0; //定义模拟串口接收IO sbit P_TX3 = P3^1; //定义模拟串口发送IO u8 Tx3_DAT; // 发送移位变量, 用户不可见 u8 Rx3_DAT; // 接收移位变量, 用户不可见 u8 Tx3_BitCnt; // 发送数据的位计数器, 用户不可见 u8 Rx3_BitCnt; // 接收数据的位计数器, 用户不可见 u8 Rx3_BUF; // 接收到的字节, 用户读取 u8 Tx3_BUF; // 要发送的字节, 用户写入 bit Rx3_Ring; // 正在接收标志, 低层程序使用, 用户程序不可见 bit Tx3_Ting; // 正在发送标志, 用户置1请求发送, 底层发送完成清0 bit RX3_End; // 接收到一个字节, 用户查询 并清0 //============================================================= void UART_Init(void); U C M d e t i im L /******************** 主函数 **************************/ void main(void) { UART_Init(); //PCA初始化 EA = 1; while (1) //user's function { if (RX3_End) // 检测是否收到一个字节 { RX3_End = 0; // 清除标志 buf3[Rx3_write] = Rx3_BUF; // 写入缓冲 if(++Rx3_write >= RX_Lenth) Rx3_write = 0; // 指向下一个位置, 溢出检测 RxTimeOut = 1000; //装载超时时间 } if(RxTimeOut != 0) // 超时时间是否非0? { if(--RxTimeOut == 0) // (超时时间 - 1) == 0? { B_RxOk = 1; AUXR &= ~(1= RX_Lenth) Rx3_write = 0; // 指向下一个位置, 溢出检测 } if (!Tx3_Ting) // 检测是否发送空闲 { if (Tx3_read != Rx3_write) // 检测是否收到过字符 { Tx3_BUF = buf3[Tx3_read]; // 从缓冲读一个字符发送 Tx3_Ting = 1; // 设置发送标志 if(++Tx3_read >= RX_Lenth) Tx3_read = 0; // 指向下一个位置, 溢出检测 } } } } //======================================================================== PCA_Init(void) // 函数: void // 描述: PCA初始化程序. // 参数: none // 返回: none. C T S 1018 南通国芯微电子有限公司 U C M d e t i im L 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 // 版本: V1.0, 2013-11-22 //======================================================================== void PCA_Init(void) { CR = 0; CCAPM0 = (PCA_Mode_Capture | PCA_Fall_Active | ENABLE); //16位下降沿捕捉中断模式 CCAPM1 = PCA_Mode_SoftTimer | ENABLE; CCAP1_tmp = UART3_BitTime; CCAP1L = (u8)CCAP1_tmp; //将影射寄存器写入捕获寄存器,先写CCAP0L CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP0H CH = 0; CL = 0; AUXR1 = (AUXR1 & ~(3 8); //后写CCAP0H } } else { CCAP0_tmp = ((u16)CCAP0H > 8); //后写CCAP0H CCAPM0 = (PCA_Mode_SoftTimer | ENABLE);//16位软件定时中断模式 Rx3_Ring = 1; //标志已收到起始位 Rx3_BitCnt = 9; //初始化接收的数据位数(8个数 //据位+1个停止位) } } d e t i im if(CCF1) //PCA模块1中断, 16位软件定时中断模式 { CCF1 = 0; //清PCA模块1中断标志 CCAP1_tmp += UART3_BitTime; CCAP1L = (u8)CCAP1_tmp; //将影射寄存器写入捕获寄存器,先写CCAP0L CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP0H U C M L if(Tx3_Ting) // 不发送, 退出 { if(Tx3_BitCnt == 0) //发送计数器为0 表明单字节发送还没开始 { P_TX3 = 0; //发送开始位 Tx3_DAT = Tx3_BUF; //把缓冲的数据放到发送的buff Tx3_BitCnt = 9; //发送数据位数 (8数据位+1停止位) } else //发送计数器为非0 正在发送数据 { if (--Tx3_BitCnt == 0) //发送计数器减为0 表明单字节发送结束 { P_TX3 = 1; //送停止位数据 Tx3_Ting = 0; //发送停止 } else { Tx3_DAT >>= 1; //把最低位送到 CY(益处标志位) P_TX3 = CY; //发送一个bit数据 } } } } } C T S 1020 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 2. 汇编程序: ;/*---------------------------------------------------------------------------------------------------*/ ;/* --- STC MCU Limited ----------------------------------------------------------------------*/ ;/* --- Mobile: (86)13922805190 --------------------------------------------------------------*/ ;/* --- Fax: 86-755-82905966 ------------------------------------------------------------------*/ ;/* --- Tel: 86-755-82948412 -------------------------------------------------------------------*/ ;/* --- Web: www.STCMCU.com --------------------------------------------------------------*/ ;/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */ ;/*----------------------------------------------------------------------------------------------------*/ ;************* 功能说明 ************** ;使用STC15系列的PCA0和PCA1做的模拟串口. PCA0接收(P2.5), PCA1发送(P2.6). ;假定测试芯片的工作频率为22118400Hz. 时钟为5.5296MHZ ~ 35MHZ. ;波特率高,则时钟也要选高, 优先使用 22.1184MHZ, 11.0592MHZ. d e t i im ;测试方法: 上位机发送数据,MCU收到数据后原样返回. ;串口固定设置: 1位起始位, 8位数据位, 1位停止位. U C M ;****************************************** STACK_POIRTER EQU 0D0H C T S ;UART3_BitTime EQU 9216 ;UART3_BitTime EQU 4608 ;UART3_BitTime EQU 2304 ;UART3_BitTime EQU 1152 ;UART3_BitTime EQU 576 ;UART3_BitTime EQU 288 L ;堆栈开始地址 ; 1200bps @ 11.0592MHz ;UART3_BitTime = (MAIN_Fosc / Baudrate) ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime EQU EQU EQU EQU EQU EQU EQU 15360 7680 3840 1920 960 480 320 ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime UART3_BitTime ;UART3_BitTime EQU EQU EQU EQU EQU EQU EQU EQU 18432 9216 4608 2304 1152 576 384 27648 ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz ; 1200bps @ 33.1776MHz 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1021 技术支持网站:www.GXWMCU.com STC15系列单片机指南 ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime ;UART3_BitTime 临时技术支持Tel:13922829991 EQU EQU EQU EQU EQU EQU EQU 13824 6912 3456 1728 864 576 288 ; 2400bps @ 33.1776MHz ; 4800bps @ 33.1776MHz ; 9600bps @ 33.1776MHz ;19200bps @ 33.1776MHz ;38400bps @ 33.1776MHz ;57600bps @ 33.1776MHz ;115200bps @ 33.1776MHz PCA_P12_P11_P10_P37 PCA_P34_P35_P36_P37 PCA_P24_P25_P26_P27 PCA_Mode_Capture PCA_Mode_SoftTimer PCA_Clock_1T PCA_Clock_2T PCA_Clock_4T PCA_Clock_6T PCA_Clock_8T PCA_Clock_12T PCA_Clock_ECI PCA_Rise_Active PCA_Fall_Active EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU (0 SHL 4) (1 SHL 4) (2 SHL 4) 0 048H (4 SHL 1) (1 SHL 1) (5 SHL 1) (6 SHL 1) (7 SHL 1) (0 SHL 1) (3 SHL 1) (1 SHL 5) (1 SHL 4) ENABLE EQU C T S U C M 研发顾问Tel:13922805190 d e t i im L 1 AUXR1 CCON CMOD CCAPM0 CCAPM1 CCAPM2 DATA DATA DATA DATA DATA DATA 0xA2 0xD8 0xD9 0xDA 0xDB 0xDC ; PCA模块0的工作模式寄存器。 ; PCA模块1的工作模式寄存器。 ; PCA模块2的工作模式寄存器。 CL CCAP0L CCAP1L CCAP2L DATA DATA DATA DATA 0xE9 0xEA 0xEB 0xEC ; PCA模块0的捕捉/比较寄存器低8位。 ; PCA模块1的捕捉/比较寄存器低8位。 ; PCA模块2的捕捉/比较寄存器低8位。 CH CCAP0H CCAP1H CCAP2H DATA DATA DATA DATA 0xF9 0xFA 0xFB 0xFC ; PCA模块0的捕捉/比较寄存器高8位。 ; PCA模块1的捕捉/比较寄存器高8位。 ; PCA模块2的捕捉/比较寄存器高8位。 CCF0 BIT CCON.0 CCF1 BIT CCON.1 CCF2 BIT CCON.2 CR BIT CCON.6 CF BIT CCON.7 PPCA BIT IP.7 1022 南通国芯微电子有限公司 ; PCA 模块0中断标志,由硬件置位,必须由软件清0。 ; PCA 模块1中断标志,由硬件置位,必须由软件清0。 ; PCA 模块2中断标志,由硬件置位,必须由软件清0。 ; 1: 允许PCA计数器计数,0: 禁止计数。 ; PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。 ;PCA计数器溢出后由硬件置位,必须由软件清0。 ; PCA 中断 优先级设定位 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 ;===================== 模拟串口相关 =========================== P_RX3 BIT P2.5 ; 定义模拟串口接收IO P_TX3 BIT P2.6 ; 定义模拟串口发送IO Rx3_Ring Tx3_Ting BIT RX3_End BIT 20H.0 20H.1 BIT 20H.2 ; 正在接收标志, 低层程序使用, 用户程序不可见 ; 正在发送标志, 用户置1请求发送, 底层发送完成清0 ; 接收到一个字节, 用户查询 并清0 Tx3_DAT DATA 30H ; 发送移位变量, 用户不可见 Rx3_DAT DATA 31H ; 接收移位变量, 用户不可见 Tx3_BitCnt DATA 32H ; 发送数据的位计数器, 用户不可见 Rx3_BitCnt DATA 33H ; 接收数据的位计数器, 用户不可见 Rx3_BUF DATA 34H ; 接收到的字节, 用户读取 Tx3_BUF DATA 35H ; 要发送的字节, 用户写入 ;================================================================= Tx3_read DATA 36H ; 发送读指针 Rx3_write DATA 37H ; 接收写指针 d e t i im RX_Lenth EQU 16 ; 接收长度 buf3 EQU 40H ; 40H ~ 4FH 接收缓冲 ;******************************************************************* ;******************************************************************* ORG 00H ;reset LJMP F_Main ORG LJMP 3BH F_PCA_Interrupt C T S U C M L ;7 PCA interrupt ;******************** 主程序 **************************/ F_Main: MOV SP, #STACK_POIRTER MOV PSW, #0 USING 0 ;选择第0组R0~R7 ;================= 用户初始化程序 ==================================== LCALL F_PCA_Init ;PCA初始化 SETB EA MOV Tx3_read, #0 MOV Rx3_write, #0 CLR Tx3_Ting CLR RX3_End CLR Rx3_Ring MOV Tx3_BitCnt, #0 ;=================== 主循环 ================================== L_MainLoop: JNB RX3_End, L_QuitRx3 ; 检测是否收到一个字节 CLR RX3_End ; 清除标志 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1023 STC15系列单片机指南 技术支持网站:www.GXWMCU.com MOV ADD MOV MOV INC MOV CLR SUBB JC MOV L_QuitRx3: A, #buf3 A, Rx3_write R0, A @R0, Rx3_BUF Rx3_write A, Rx3_write C A, #RX_Lenth L_QuitRx3 Rx3_write, #0 JB MOV XRL JZ Tx3_Ting, L_QuitTx3 A, Tx3_read A, Rx3_write L_QuitTx3 MOV ADD MOV MOV SETB INC MOV CLR SUBB JC MOV L_QuitTx3: A, #buf3 A, Tx3_read R0, A Tx3_BUF, @R0 Tx3_Ting Tx3_read A, Tx3_read C A, #RX_Lenth L_QuitTx3 Tx3_read, #0 L_MainLoop SJMP C T S 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ; 写入缓冲 ; 指向下一个位置 ; 溢出检测 ;检测是否发送空闲 ;检测是否收到过字符 d e t i im L ; 从缓冲读一个字符发送 ; 设置发送标志 ; 指向下一个字符位置 U C M ; 溢出检测 ;=================== 主程序结束 ================================== ;======================================================================== ; 函数: F_PCA_Init ; 描述: PCA初始化程序. ; 参数: none ; 返回: none. ; 版本: V1.0, 2013-11-22 ;======================================================================== F_PCA_Init: CLR CR MOV CCAPM0, #(PCA_Mode_Capture OR PCA_Fall_Active OR ENABLE) ; 16位下降沿捕捉中断模式 MOV CCAPM1, #(PCA_Mode_SoftTimer OR ENABLE) ; 16位软件定时器, 中断模式 MOV CCAP1L, #LOW UART3_BitTime ; 将影射寄存器写入捕获寄存器,先写CCAP0L MOV CCAP1H, #HIGH UART3_BitTime ; 后写CCAP0H 1024 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 MOV CH, #0 MOV CL, #0 MOV A, AUXR1 ANL A, # NOT(3 SHL 4) ORL A, #PCA_P24_P25_P26_P27 ;切换IO口 MOV AUXR1, A ANL A, #NOT(7 SHL 1) ORL A, #PCA_Clock_1T ;选择时钟源 MOV CMOD, A SETB PPCA ; 高优先级中断 SETB CR ; 运行PCA定时器 RET ;====================================================================== ;======================================================================== ; 函数: F_PCA_Interrupt ; 描述: PCA中断处理程序. ; 参数: None ; 返回: none. ; 版本: V1.0, 2012-11-22 ;======================================================================== F_PCA_Interrupt: PUSH PSW PUSH ACC ;=============== PCA模块0中断 =================== JNB CCF0, L_QuitPCA0 ; PCA模块0中断 CLR CCF0 ; 清PCA模块0中断标志 C T S U C M d e t i im L JNB Rx3_Ring, L_Rx3_Start ; 已收到起始位 DJNZ Rx3_BitCnt, L_RxBit ; 接收完一帧数据 CLR Rx3_Ring ; 停止接收 MOV Rx3_BUF, Rx3_DAT ; 存储数据到缓冲区 SETB RX3_End ; MOV CCAPM0, #(PCA_Mode_Capture OR PCA_Fall_Active OR ENABLE) ; 16位下降沿捕捉中断模式 SJMP L_QuitPCA0 L_RxBit: MOV A, Rx3_DAT ; 把接收的单b数据 暂存到 RxShiftReg(接收缓冲) MOV C, P_RX3 RRC A MOV Rx3_DAT, A MOV A, CCAP0L ; ADD A, #LOW UART3_BitTime ; 数据位时间 MOV CCAP0L, A ; 将影射寄存器写入捕获寄存器,先写CCAP0L MOV A, CCAP0H ; 数据位时间 ADDC A, #HIGH UART3_BitTime ; MOV CCAP0H, A ; 后写CCAP0H SJMP L_QuitPCA0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1025 STC15系列单片机指南 L_Rx3_Start: MOV MOV ADD MOV MOV ADDC MOV SETB MOV L_QuitPCA0: 技术支持网站:www.GXWMCU.com 研发顾问Tel:13922805190 CCAPM0, #(PCA_Mode_SoftTimer OR ENABLE) ; 16位软件定时中断模式 A, CCAP0L ; 数据位时间 A, #LOW (UART3_BitTime / 2 + UART3_BitTime) ; CCAP0L, A ; 将影射寄存器写入捕获寄存器,先写CCAP0L A, CCAP0H ; 数据位时间 A, #HIGH (UART3_BitTime / 2 + UART3_BitTime) ; CCAP0H, A ; 后写CCAP0H Rx3_Ring ; 标志已收到起始位 Rx3_BitCnt, #9 ; 初始化接收的数据位数(8个数据位+1个停止位) ;=============== PCA模块1中断 =================== JNB CCF1, L_QuitPCA1 ; PCA模块1中断, 16位软件定时中断模式 CLR CCF1 ; 清PCA模块1中断标志 MOV A, CCAP1L ; ADD A, #LOW UART3_BitTime ; 数据位时间 MOV CCAP1L, A ; 将影射寄存器写入捕获寄存器,先写CCAP0L MOV A, CCAP1H ; ADDC A, #HIGH UART3_BitTime ; 数据位时间 MOV CCAP1H, A ; 后写CCAP0H CU JNB Tx3_Ting, L_QuitPCA1 MOV A, Tx3_BitCnt JNZ L_TxData CLR P_TX3 MOV Tx3_DAT, Tx3_BUF MOV Tx3_BitCnt, #9 SJMP L_QuitPCA1 L_TxData: DJNZ Tx3_BitCnt, L_TxBit SETB P_TX3 CLR Tx3_Ting SJMP L_QuitPCA1 L_TxBit: MOV A, Tx3_DAT RRC A MOV P_TX3, C MOV Tx3_DAT, A L_QuitPCA1: C T S POP POP RETI END 1026 临时技术支持Tel:13922829991 M d e t i im L ; 不发送, 退出 ; 发送计数器为0 表明单字节发送还没开始 ; 发送开始位 ; 把缓冲的数据放到发送的buff ; 发送数据位数 (8数据位+1停止位) ; 发送计数器为非0 正在发送数据 ; 发送计数器减为0 表明单字节发送结束 ; 送停止位数据 ; 发送停止 ; 把最低位送到 CY(益处标志位) ; 发送一个bit数据 ACC PSW 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 11.15 比利用CCP/PCA模块实现8~16位DAC的参考线路图 CCP:是英文单词的缩写 Capture(捕获),Compare(比较),PWM(脉宽调制) 38个I/O 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 PDIP40 RxD3/AD0/P0.0 TxD3/AD1/P0.1 RxD4/AD2/P0.2 TxD4/AD3/P0.3 T4CLKO/AD4/P0.4 T4/AD5/P0.5 T3CLKO/AD6/P0.6 T3/AD7/P0.7 RxD2/CCP1/ADC0/P1.0 TxD2/CCP0/ADC1/P1.1 CMP+/ECI/SS/ADC2/P1.2 MOSI/ADC3/P1.3 CMP-/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 P5.5 Gnd 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 P4.5/ALE/CCP5 P2.7/A15/CCP2_3 P2.6/A14/CCP1_3 P2.5/A13/CCP0_3 P2.4/A12/ECI_3/SS_2 P2.3/A11/MOSI_2 P2.2/A10/MISO_2 P2.1/A9/SCLK_2 P2.0/A8/RSTOUT_LOW P4.4/RD/CCP4 P4.2/WR/CCP3 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 P3.4/T0/T1CLKO/ECI_2 P3.3/INT1 P3.2/INT0 P3.1/TxD/T2 P3.0/RxD/INT4/T2CLKO VDD ADC5_REF2.5V C1 104 R1 510Ω 基准电压测量 C2 104 TL431B C T S 基准参考电压源TL431B U C M 1K d e t i im 10K 10K 104 D/A 104 L 可以用T0/T1软件模拟10位/12位/16位PWM,具体实现方法请参 照“用T0软硬结合模拟10位/16位PWM输出的程序”这一节;还 可以用CCP/PCA软硬结合实现9~16位PWM,具体实现方法参照 “用CCP/PCA软硬结合实现9~16位PWM输出的程序” 如应用简单,可无需基准参考电压源,直接与Vcc比较即可。 提示: (1)PWM频率越高,输出波形越平滑。 利用CCP/PCA模块的高速脉冲输出功能实现9~16位PWM 来实现9~16位DAC,或用本身的硬件8位PWM来实现8位 DAC,单片机本身也有10位ADC。 (2)如果工作电压为5V,需输出1V电压,则设置高电平为1/5,低电平为4/5,则PWM输出电压就为1V。 (3)如果要输出高精准电压,建议用A/D检测输出的电压值,然后根据A/D检测的电压值逐步调整到所需 要的电压。 基准参考电压源TL431B的符号 基准参考电压源TL431B (参考)REF (阴极)CATHODE 1 3 ADODE(阳极) (阳极)ADODE CATHODE(阴极) (参考)REF 2 SOT23-3封装,RMB¥0.15~0.3 如应用简单,可无需基准参考电压源,直接与Vcc比较即可。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1027 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 第12章 STC15W4K32S4系列新增6通道高精度PWM ——带死区控制的增强型PWM波形发生器 STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器。 PWM波形发生器内部有一个15位的PWM计数器供6路PWM使用,用户可以设置每路PWM的 初始电平。另外,PWM波形发生器为每路PWM又设计了两个用于控制波形翻转的计数器T1/ T2,可以非常灵活的每路PWM的高低电平宽度,从而达到对PWM的占空比以及PWM的输出 延迟进行控制的目的。由于6路PWM是各自独立的,且每路PWM的初始状态可以进行设定, 所以用户可以将其中的任意两路配合起来使用,即可实现互补对称输出以及死区控制等特殊应 用。 增强型的PWM波形发生器还设计了对外部异常事件(包括外部端口P2.4的电平异常、比 较器比较结果异常)进行监控的功能,可用于紧急关闭PWM输出。PWM波形发生器还可在15 位的PWM计数器归零时������� 触发����� 外部事件(ADC转换)。 d e t i im L STC15W4K32S4系列增强型PWM输出端口定义如下: U C M [PWM2:P3.7, PWM3:P2.1, PWM4:P2.2, PWM5:P2.3, PWM6:P1.6, PWM7:P1.7] 每路PWM的输出端口都可使用特殊功能寄存器位CnPINSEL分别独立的切换到第二组 C T S [PWM2_2:P2.7, PWM3_2:P4.5, PWM4_2:P4.4, PWM5_2:P4.2, PWM6_2:P0.7, PWM7_2:P0.6] 所有与PWM相关的端口,在上电后均为高阻输入态,必须在程序中将这些口设置为双向 口或强推挽模式才可正常输出波形。 端口模式设置相关特殊功能寄存器 符号 描述 地址 位址及符号 B7 B6 B5 B4 B3 B2 B1 B0 初始值 P1M1 P1模式配置1 91H 0000,0000 P1M0 P1模式配置0 92H 0000,0000 P0M1 P0模式配置1 93H 0000,0000 P0M0 P0模式配置0 94H 0000,0000 P2M1 P2模式配置1 95H 0000,0000 P2M0 P2模式配置0 96H 0000,0000 P3M1 P3模式配置1 B1H 0000,0000 P3M0 P3模式配置0 B2H 0000,0000 P4M1 P4模式配置1 B3H 0000,0000 P4M0 P4模式配置0 B4H 0000,0000 1028 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 端口模式设置 PxM1 PxM0 模式 0 0 准双向口 0 1 强推挽输出 1 0 高阻输入 1 1 开漏输出 若需要正常使用与PWM相关的端口,则需要将相应的端口设置为准双向口或强推挽输出 口。 例如将端口均设置为准双向口的汇编代码如下: MOV P0M0, #00H MOV P0M1, #00H MOV P1M0, #00H MOV P1M1, #00H MOV P2M0, #00H MOV P2M1, #00H MOV P3M0, #00H MOV P3M1, #00H MOV P4M0, #00H MOV P4M1, #00H C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 1029 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 12.1 增强型PWM波形发生器相关功能寄存器 增强型PWM波形发生器相关的特殊功能寄存器 符号 描述 地址 位址及符号 B7 B6 B5 B4 B3 B2 B1 P_SW2 S4_S S3_S 端口配置寄存器 BAH EAXSFR DBLPWR P31PU P30PU PWMCFG PWM配置 F1H CBTADC C7INI C6INI C5INI C4INI C3INI PWMCR PWM控制 F5H ENPWM ECBI ENC7O ENC6O ENC5O ENC4O ENC3O PWMIF PWM中断标志 F6H CBIF C7IF C6IF C5IF C4IF C3IF ENFD FLTFLIO EFDI FDCMP FDIO PWMFDCR PWM外部异常控制 F7H PWMCH PWM计数器高位 FFF0H PWMCH[14:8] PWMCL PWM计数器低位 FFF1H PWMCL[7:0] PWMCKS PWM时钟选择 FFF2H SELT2 PS[3:0] PWM2T1H PWM2T1计数高位 FF00H PWM2T1H[14:8] PWM2T1L PWM2T1计数低位 FF01H PWM2T1L[7:0] PWM2T2H PWM2T2计数高位 FF02H PWM2T2L PWM2CR PWM3T1H PWM3T1L PWM3T2H PWM3T2L PWM3CR PWM4T1H PWM4T1L PWM4T2H PWM4T2L PWM4CR PWM5T1H PWM5T1L PWM5T2H PWM5T2L PWM5CR PWM6T1H PWM6T1L PWM6T2H PWM6T2L PWM6CR PWM7T1H PWM7T1L PWM7T2H PWM7T2L PWM7CR 1030 PWM2T2计数低位 FF03H PWM2控制 FF04H PWM3T1计数高位 FF10H PWM3T1计数低位 FF11H PWM3T2计数高位 FF12H PWM3T2计数低位 FF13H PWM3控制 FF14H PWM4T1计数高位 FF20H PWM4T1计数低位 FF21H PWM4T2计数高位 FF22H PWM4T2计数低位 FF23H PWM4控制 FF24H PWM5T1计数高位 FF30H PWM5T1计数低位 FF31H PWM5T2计数高位 FF32H PWM5T2计数低位 FF33H PWM5控制 FF34H PWM6T1计数高位 FF40H PWM6T1计数低位 FF41H PWM6T2计数高位 FF42H PWM6T2计数低位 FF43H PWM6控制 FF44H PWM7T1计数高位 FF50H PWM7T1计数低位 FF51H PWM7T2计数高位 FF52H PWM7T2计数低位 FF53H PWM7控制 FF54H C T S 南通国芯微电子有限公司 - 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 - - - - - - - - - - - U C M - S2_S 0000,0000 C2INI 0000,0000 ENC2O 0000,0000 C2IF x000,0000 FDIF xx00,0000 x000,0000 0000,0000 xxx0,0000 x000,0000 0000,0000 L - - 初始值 x000,0000 - d e t i im PWM2T2H[14:8] B0 PWM2T2L[7:0] 0000,0000 PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000 PWM3T1H[14:8] x000,0000 PWM3T1L[7:0] 0000,0000 PWM3T2H[14:8] x000,0000 PWM3T2L[7:0] 0000,0000 PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000 PWM4T1H[14:8] x000,0000 PWM4T1L[7:0] 0000,0000 PWM4T2H[14:8] x000,0000 PWM4T2L[7:0] 0000,0000 PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000 PWM5T1H[14:8] x000,0000 PWM5T1L[7:0] 0000,0000 PWM5T2H[14:8] x000,0000 PWM5T2L[7:0] 0000,0000 PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000 PWM6T1H[14:8] x000,0000 0000,0000 PWM6T1L[7:0] PWM6T2H[14:8] x000,0000 PWM6T2L[7:0] 0000,0000 PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000 PWM7T1H[14:8] x000,0000 PWM7T1L[7:0] 0000,0000 PWM7T2H[14:8] x000,0000 PWM7T2L[7:0] 0000,0000 PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000 - STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 1. 端口配置寄存器:P_SW2 端口配置寄存器的格式如下: SFR name Address P_SW2 BAH bit B7 B6 B5 B4 name EAXSFR DBLPWR P31PU P30PU B3 - B2 B1 B0 Reset Value S4_S S3_S S2_S 0000,0000B EAXSFR:扩展SFR访问控制使能 0:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) 1:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) 注意:若要访问PWM在扩展RAM区的特殊功能寄存器,必须先将EAXSFR位置为1; 2. PWM配置寄存器:PWMCFG d e t i im PWM配置寄存器的格式如下: SFR name Address PWMCFG F1H bit B7 name - B6 B5 B4 B3 B2 L B1 B0 CBTADC C7INI C6INI C5INI C4INI C3INI C2INI Reset Value 0000,0000 CBTADC:PWM计数器归零时(CBIF==1时)触发ADC转换 0:PWM计数器归零时不触发ADC转换 1:PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使 能,即ENPWM==1,且ADCON==1) C T S U C M C7INI :设置PWM7输出端口的初始电平 0:PWM7输出端口的初始电平为低电平 1:PWM7输出端口的初始电平为高电平 C6INI :设置PWM6输出端口的初始电平 0:PWM6输出端口的初始电平为低电平 1:PWM6输出端口的初始电平为高电平 C5INI :设置PWM5输出端口的初始电平 0:PWM5输出端口的初始电平为低电平 1:PWM5输出端口的初始电平为高电平 C4INI :设置PWM4输出端口的初始电平 0:PWM4输出端口的初始电平为低电平 1:PWM4输出端口的初始电平为高电平 C3INI :设置PWM3输出端口的初始电平 0:PWM3输出端口的初始电平为低电平 1:PWM3输出端口的初始电平为高电平 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1031 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 C2INI :设置PWM2输出端口的初始电平 0:PWM2输出端口的初始电平为低电平 1:PWM2输出端口的初始电平为高电平 3. PWM控制寄存器:PWMCR PWM控制寄存器的格式如下: SFR name Address PWMCR F5H bit B7 B6 B5 B4 B3 B2 B1 B0 Reset Value name ENPWM ECBI ENC70 ENC60 ENC50 ENC40 ENC30 ENC20 0000,0000B ENPWM :使能增强型PWM波形发生器 0:关闭PWM波形发生器 1:使能PWM波形发生器,PWM计数器开始计数 关于ENPWM控制位的重要说明: 1、ENPWM一旦被使能后,内部的PWM计数器会立即开始计数,并与T1/T2两个翻转点的值进行比 较。所有ENPWM必须在其他所有的PWM设置(包括T1/T2翻转点的设置、初始电平的设置、PWM异 常检测的设置以及PWM中断设置)都完成后,最后才能使能ENPWM位。 2、ENPWM控制位既是整个PWM模块的的使能位,也是PWM计数器开始计数的控制位。在PWM计数 器计数的过程中,ENPWM控制位被关闭时,PWM计数会立即停止,当再次使能ENPWM控制位时, PWM的计数会从0开始重新计数,而不会记忆PWM停止计数前的计数值 U C M d e t i im L ECBI :PWM计数器归零中断使能位 0:关闭PWM计数器归零中断(CBIF依然会被硬件置位) 1:使能PWM计数器归零中断 C T S ENC7O :PWM7输出使能位 0:PWM通道7的端口为GPIO 1:PWM通道7的端口为PWM输出口,受PWM波形发生器控制 ENC6O :PWM6输出使能位 0:PWM通道6的端口为GPIO 1:PWM通道6的端口为PWM输出口,受PWM波形发生器控制 ENC5O :PWM5输出使能位 0:PWM通道5的端口为GPIO 1:PWM通道5的端口为PWM输出口,受PWM波形发生器控制 ENC4O :PWM4输出使能位 0:PWM通道4的端口为GPIO 1:PWM通道4的端口为PWM输出口,受PWM波形发生器控制 ENC3O :PWM3输出使能位 0:PWM通道3的端口为GPIO 1:PWM通道3的端口为PWM输出口,受PWM波形发生器控制 1032 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 ENC2O :PWM2输出使能位 0:PWM通道2的端口为GPIO 1:PWM通道2的端口为PWM输出口,受PWM波形发生器控制 4. PWM中断标志寄存器:PWMIF PWM中断标志寄存器的格式如下: SFR name Address PWMIF F6H bit B7 B6 B5 B4 B3 B2 B1 name - CBIF C7IF C6IF C5IF C4IF C3IF B0 Reset Value C2IF x000,0000B CBIF :PWM计数器归零中断标志位 当PWM计数器归零时,硬件自动将此位置1。� 当ECBI==1时,程序会跳转到相应中断 入口执行中断服务程序。需要软件清零。 d e t i im C7IF :第7通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C7IF(详见EC7T1SI和EC7T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM7I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 U C M L C6IF :第6通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C6IF(详见EC6T1SI和EC6T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM6I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C T S C5IF :第5通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C5IF(详见EC5T1SI和EC5T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM5I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C4IF :第4通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C4IF(详见EC4T1SI和EC4T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM4I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C3IF :第3通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C3IF(详见EC3T1SI和EC3T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM3I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C2IF :第2通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C2IF(详见EC2T1SI和EC2T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM2I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1033 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 5. PWM外部异常控制寄存器:PWMFDCR PWM外部异常控制寄存器的格式如下: SFR name Address bit B7 B6 PWMFDCR F7H name - - B5 B4 B3 B2 B1 ENFD FLTFLIO EFDI FDCMP FDIO B0 Reset Value FDIF xx00,0000B ENFD :PWM外部异常检测功能控制位 0:关闭PWM的外部异常检测功能 1:使能PWM的外部异常检测功能 FLTFLIO:发生PWM外部异常时对PWM输出口控制位 0:发生PWM外部异常时,PWM的输出口不作任何改变 (既不对外输出 1:发生PWM外部异常时,PWM的输出口立即被设置为高阻输入模式������� 电流,也不对内输出电流)������ 。(注:只有ENCnO==1所对应的端口才会被强制悬 空�� ;当PWM外部异常��������� 状态取消时,相应的PWM的输出口�������� 会自动恢复以前的I/O设 置� ) d e t i im L EFDI :PWM异常检测中断使能位 0:关闭PWM异常检测中断(FDIF依然会被硬件置位) 1:使能PWM异常检测中断 U C M FDCMP :设定PWM异常检测源为比较器的输出 0:比较器与PWM无关 1:当比较器�� 正极P5.5/CMP+的电平比比较器负极P5.4/CMP-的电平高或者����� 比较器�� 正极 P5.5/CMP+的电平比内部参考电压源1.28V高时��� ,触发PWM异常 C T S FDIO :设定PWM异常检测源为端口P2.4的状态 0:P2.4的状态与PWM无关 为����� 高时,触发PWM异常 1:当P2.4的电平������ FDIF :PWM异常检测中断标志位 当发生PWM异常(比较器�� 正极P5.5/CMP+的电平比比较器负极P5.4/CMP-的电平高 或����� 比较器�� 正极P5.5/CMP+的电平比内部参考电压源1.28V高�� 或者P2.4的电平��� 为�� 高) 时,硬件自动将此位置1。当EFDI==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零 6. PWM计数器 PWM计数器高字节:PWMCH(高7位) SFR name PWMCH 1034 Address FFF0H (XSFR) bit B7 name - 南通国芯微电子有限公司 B6 B5 B4 B3 B2 PWMCH[14:8] 总机:0513-5501 2928 / 2929 / 2966 B1 B0 Reset Value x000,0000B 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 PWM计数器低字节:PWMCL(低8位) SFR name PWMCL Address FFF1H (XSFR) bit B7 B6 B5 name B4 B3 B2 B1 B0 PWMCL[7:0] Reset Value 0000,0000B PWM计数器位一个15位的寄存器,可设定1~32767之间的任意值作为PWM的周期。PWM 波形发生器内部的计数器从0开始计数,每个PWM时钟周期递增1,当内部计数器的计数值达 到[PWMCH,PWMCL]所设定的PWM周期时,PWM波形发生器内部的计数器将会从0重新开 始开始计数,硬件会自动将PWM归零中断中断标志位CBIF置1,若ECBI==1,程序将跳转到相 应中断入口执行中断服务程序。 d e t i im 7. PWM时钟选择寄存器:PWMCKS PWM时钟选择寄存器的格式如下: SFR name Address bit B7 B6 PWMCKS FFF2H (XSFR) name - - B5 B4 CU - SELT2 L B3 B2 B1 B0 PS[3:0] Reset Value 0000,0000B M SELT2 :PWM时钟源选择 0:PWM时钟源为系统时钟经分频器分频之后的时钟 1:PWM时钟源为定时器2的溢出脉冲 C T S PS[3:0] :系统时钟预分频参数。当SELT2==0时,PWM时钟为系统时钟 / ( PS[3:0]+1) 8. PWM2的翻转计数器 PWM2的第一次翻转计数器的高字节:PWM2T1H SFR name Address bit B7 PWM2T1H FF00H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM2T1H[14:8] Reset Value x000,0000B PWM2的第一次翻转计数器的低字节:PWM2T1L SFR name Address bit PWM2T1L FF01H (XSFR) name 南通国芯微电子有限公司 B7 B6 B5 B4 B3 PWM2T1L[7:0] 总机:0513-5501 2928 / 2929 / 2966 B2 B1 B0 Reset Value 0000,0000B 传真:0513-5501 2969 / 2956 / 2947 1035 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 PWM2的第二次翻转计数器的高字节:PWM2T2H SFR name PWM2T2H Address FF02H (XSFR) bit B7 name - B6 B5 B4 B3 B2 B1 B0 PWM2T2H[14:8] Reset Value x000,0000B PWM2的第二次翻转计数器的低字节:PWM2T2L SFR name PWM2T2L Address FF03H (XSFR) bit B7 B6 B5 B4 name B3 B2 B1 B0 PWM2T2L[7:0] Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 d e t i im 9. PWM2的控制寄存器:PWM2CR PWM2的控制寄存器的格式如下: SFR name Address bit B7 B6 PWM2CR FF04H (XSFR) name - - C T S U C M B5 B4 - - B3 L B2 B1 B0 Reset Value PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000B PWM2_PS:PWM2输出管脚选择位 0:PWM2的输出管脚为PWM2:P3.7 1:PWM2的输出管脚为PWM2_2:P2.7 EPWM2I :PWM2中断使能控制位 0:关闭PWM2中断 1:使能PWM2中断,当C2IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC2T2SI :PWM2的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC2T1SI :PWM2的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 1036 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 10. PWM3的翻转计数器 PWM3的第一次翻转计数器的高字节:PWM3T1H SFR name Address bit B7 PWM3T1H FF10H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM3T1H[14:8] Reset Value x000,0000B PWM3的第一次翻转计数器的低字节:PWM3T1L SFR name Address bit PWM3T1L FF11H (XSFR) name B7 B6 B5 B4 B3 B2 B1 B0 PWM3T1L[7:0] 0000,0000B PWM3的第二次翻转计数器的高字节:PWM3T2H SFR name Address bit B7 PWM3T2H FF12H (XSFR) name - B6 B5 B4 d e t i m B3 B2 B1 B0 Li PWM3T2H[14:8] U C M Reset Value Reset Value x000,0000B PWM3的第二次翻转计数器的低字节:PWM3T2L SFR name Address PWM3T2L FF13H (XSFR) bit B7 B6 C T S name B5 B4 B3 B2 B1 B0 PWM3T2L[7:0] Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 11. PWM3的控制寄存器:PWM3CR PWM3的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM3CR FF14H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000B PWM3_PS:PWM3输出管脚选择位 0:PWM3的输出管脚为PWM3:P2.1 1:PWM3的输出管脚为PWM3_2:P4.5 EPWM3I :PWM3中断使能控制位 0:关闭PWM3中断 1:使能PWM3中断,当C3IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1037 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 EC3T2SI :PWM3的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC3T1SI :PWM3的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 d e t i im 12. PWM4的翻转计数器 PWM4的第一次翻转计数器的高字节:PWM4T1H SFR name Address bit B7 PWM4T1H FF20H (XSFR) name - B6 B5 B4 U C M L B3 B2 B1 B0 PWM4T1H[14:8] Reset Value x000,0000B PWM4的第一次翻转计数器的低字节:PWM4T1L C T S SFR name Address bit PWM4T1L FF21H (XSFR) name B7 B6 B5 B4 B3 B2 B1 B0 PWM4T1L[7:0] Reset Value 0000,0000B PWM4的第二次翻转计数器的高字节:PWM4T2H SFR name Address bit B7 PWM4T2H FF22H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM4T2H[14:8] Reset Value x000,0000B PWM4的第二次翻转计数器的低字节:PWM4T2L SFR name Address bit PWM4T2L FF23H (XSFR) name B7 B6 B5 B4 B3 PWM4T2L[7:0] B2 B1 B0 Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 1038 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 13. PWM4的控制寄存器:PWM4CR PWM4的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM4CR FF24H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000B PWM4_PS:PWM4输出管脚选择位 0:PWM4的输出管脚为PWM4:P2.2 1:PWM4的输出管脚为PWM4_2:P4.4 EPWM4I :PWM4中断使能控制位 0:关闭PWM4中断 1:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 d e t i im EC4T2SI :PWM4的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 C T S L U C M EC4T1SI :PWM4的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 14. PWM5的翻转计数器 PWM5的第一次翻转计数器的高字节:PWM5T1H SFR name Address bit B7 PWM5T1H FF30H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM5T1H[14:8] Reset Value x000,0000B PWM5的第一次翻转计数器的低字节:PWM5T1L SFR name Address bit PWM5T1L FF31H (XSFR) name 南通国芯微电子有限公司 B7 B6 B5 B4 B3 PWM5T1L[7:0] 总机:0513-5501 2928 / 2929 / 2966 B2 B1 B0 Reset Value 0000,0000B 传真:0513-5501 2969 / 2956 / 2947 1039 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 PWM5的第二次翻转计数器的高字节:PWM5T2H SFR name Address bit B7 PWM5T2H FF32H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM5T2H[14:8] Reset Value x000,0000B PWM5的第二次翻转计数器的低字节:PWM5T2L SFR name Address bit PWM5T2L FF33H (XSFR) name B7 B6 B5 B4 B3 B2 B1 B0 PWM5T2L[7:0] Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 d e t i im 15. PWM5的控制寄存器:PWM5CR PWM5的控制寄存器的格式如下: SFR name Address bit B7 B6 PWM5CR FF34H (XSFR) name - - C T S U C M B5 B4 - - B3 L B2 B1 B0 Reset Value PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000B PWM5_PS:PWM5输出管脚选择位 0:PWM5的输出管脚为PWM5:P2.3 1:PWM5的输出管脚为PWM5_2:P4.2 EPWM5I :PWM5中断使能控制位 0:关闭PWM5中断 1:使能PWM5中断,当C5IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC5T2SI :PWM5的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC5T1SI :PWM5的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 1040 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 16. PWM6的翻转计数器 PWM6的第一次翻转计数器的高字节:PWM6T1H SFR name Address bit B7 PWM6T1H FF40H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM6T1H[14:8] Reset Value x000,0000B PWM6的第一次翻转计数器的低字节:PWM6T1L SFR name Address bit B7 PWM6T1L FF41H (XSFR) name B6 B5 B4 B3 B2 B1 B0 PWM6T1L[7:0] Reset Value 0000,0000B PWM6的第二次翻转计数器的高字节:PWM6T2H SFR name Address bit B7 PWM6T2H FF42H (XSFR) name - B6 B5 B4 B3 Address bit PWM6T2L FF43H (XSFR) name B1 d e t i m B0 PWM6T2H[14:8] Li PWM6的第二次翻转计数器的低字节:PWM6T2L SFR name B2 U C M B7 B6 B5 B4 B3 B2 B1 x000,0000B B0 PWM6T2L[7:0] C T S Reset Value Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 17. PWM6的控制寄存器:PWM6CR PWM6的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM6CR FF44H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000B PWM6_PS:PWM6输出管脚选择位 0:PWM6的输出管脚为PWM6:P1.6 1:PWM6的输出管脚为PWM6_2:P0.7 EPWM6I :PWM6中断使能控制位 0:关闭PWM6中断 1:使能PWM6中断,当C6IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1041 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 EC6T2SI :PWM6的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC6T1SI :PWM6的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 d e t i im 18. PWM7的翻转计数器 PWM7的第一次翻转计数器的高字节:PWM7T1H SFR name Address bit B7 PWM7T1H FF50H (XSFR) name - B6 B5 B4 U C M L B3 B2 B1 B0 PWM7T1H[14:8] Reset Value x000,0000B PWM7的第一次翻转计数器的低字节:PWM7T1L C T S SFR name Address bit PWM7T1L FF51H (XSFR) name B7 B6 B5 B4 B3 B2 B1 B0 PWM7T1L[7:0] Reset Value 0000,0000B PWM7的第二次翻转计数器的高字节:PWM7T2H SFR name Address bit B7 PWM7T2H FF52H (XSFR) name - B6 B5 B4 B3 B2 B1 B0 PWM7T2H[14:8] Reset Value x000,0000B PWM7的第二次翻转计数器的低字节:PWM7T2L SFR name Address bit PWM7T2L FF53H (XSFR) name B7 B6 B5 B4 B3 PWM7T2L[7:0] B2 B1 B0 Reset Value 0000,0000B PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间 的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输 出波形将发生翻转。 1042 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 19. PWM7的控制寄存器:PWM7CR PWM7的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM7CR FF54H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000B PWM7_PS:PWM7输出管脚选择位 0:PWM7的输出管脚为PWM7:P1.7 1:PWM7的输出管脚为PWM7_2:P0.6 EPWM7I :PWM7中断使能控制位 0:关闭PWM7中断 1:使能PWM7中断,当C7IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 d e t i im EC7T2SI :PWM7的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 C T S U C M L EC7T1SI :PWM7的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1043 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 12.2 增强型PWM波形发生器的中断控制 PWM波形发生器中断相关的特殊功能寄存器 符号 IP2 描述 地址 中断优先级控制 B5H PWMCR PWM控制 PWMIF PWM中断标志 位址及符号 B7 B6 B5 B4 B3 - - - PX4 B2 PPWMFD PPWM B1 B0 PSPI PS2 初始值 xxx0,0000 F5H ENPWM ECBI ENC7O ENC6O ENC5O ENC4O ENC3O ENC2O 0000,0000 F6H - CBIF PWMFDCR PWM外部异常控制 F7H - - C7IF C6IF C5IF ENFD FLTFLIO EFDI C3IF C2IF x000,0000 FDCMP FDIO C4IF FDIF xx00,0000 PWM2CR PWM2控制 FF04H - - - - PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000 PWM3CR PWM3控制 FF14H - - - - PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000 PWM4CR PWM4控制 FF24H - - - - PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000 PWM5CR PWM5控制 FF34H - - - - PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000 PWM6CR PWM6控制 FF44H - - - - PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000 PWM7CR PWM7控制 FF54H - - - - PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000 1. PWM中断优先级控制寄存器:IP2 U C M IP2 : 中断优先级控制寄存器 (不可位寻址) SFR name Address bit B7 IP2 B5H name - C T S B6 - B5 - d e t i im L B4 B3 B2 B1 B0 PX4 PPWMFD PPWM PSPI PS2 Reset Value 0000,0000B PPWMFD: PWM异常检测中断优先级控制位。 当PPWMFD=0时,PWM异常检测中断为最低优先级中断(优先级0) 当PPWMFD=1时,PWM异常检测中断为最高优先级中断(优先级1) PPWM: PWM中断优先级控制位。 当PPWM=0时,PWM中断为最低优先级中断(优先级0) 当PPWM=1时,PWM中断为最高优先级中断(优先级1) 中断优先级控制寄存器IP和IP2的各位都由可用户程序置“1”和清“0”。但IP寄存器可 位操作,所以可用位操作指令或字节操作指令更新IP的内容。而IP2寄存器的内容只能用字节 操作指令来更新。STC15系列单片机复位后IP和IP2均为00H,各个中断源均为低优先级中断。 2. PWM控制寄存器:PWMCR PWM控制寄存器的格式如下: SFR name Address PWMCR F5H bit B7 B6 B5 B4 B3 B2 B1 B0 Reset Value name ENPWM ECBI ENC70 ENC60 ENC50 ENC40 ENC30 ENC20 0000,0000B ECBI :PWM计数器归零中断使能位 0:关闭PWM计数器归零中断(CBIF依然会被硬件置位) 1:使能PWM计数器归零中断 总机:0513-5501 2928 / 2929 / 2966 1044 南通国芯微电子有限公司 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 STC — 全球最大的8051单片机设计公司 技术支持QQ:800003751 3. PWM中断标志寄存器:PWMIF PWM中断标志寄存器的格式如下: SFR name Address PWMIF F6H bit B7 B6 B5 B4 B3 B2 B1 name - CBIF C7IF C6IF C5IF C4IF C3IF B0 Reset Value C2IF x000,0000B CBIF :PWM计数器归零中断标志位 当PWM计数器归零时,硬件自动将此位置1。� 当ECBI==1时,程序会跳转到相应中断 入口执行中断服务程序。需要软件清零。 C7IF :第7通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C7IF(详见EC7T1SI和EC7T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM7I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C6IF :第6通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C6IF(详见EC6T1SI和EC6T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM6I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 d e t i im L C5IF :第5通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C5IF(详见EC5T1SI和EC5T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM5I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 U C M C T S C4IF :第4通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C4IF(详见EC4T1SI和EC4T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM4I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C3IF :第3通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C3IF(详见EC3T1SI和EC3T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM3I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 C2IF :第2通道的PWM中断标志位 可设置在翻转点1和翻转点2触发C2IF(详见EC2T1SI和EC2T2SI)。当PWM发生翻转 时,硬件自动将此位置1。当EPWM2I==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零。 4. PWM外部异常控制寄存器:PWMFDCR PWM外部异常控制寄存器的格式如下: SFR name Address bit B7 B6 PWMFDCR F7H name - - 南通国芯微电子有限公司 B5 B4 B3 B2 B1 ENFD FLTFLIO EFDI FDCMP FDIO 总机:0513-5501 2928 / 2929 / 2966 B0 Reset Value FDIF xx00,0000B 传真:0513-5501 2969 / 2956 / 2947 1045 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 EFDI :PWM异常检测中断使能位 0:关闭PWM异常检测中断(FDIF依然会被硬件置位) 1:使能PWM异常检测中断 FDIF :PWM异常检测中断标志位 当发生PWM异常(比较器�� 正极P5.5/CMP+的电平比比较器负极P5.4/CMP-的电平高 或����� 比较器�� 正极P5.5/CMP+的电平比内部参考电压源1.28V高�� 或者P2.4的电平��� 为�� 高) 时,硬件自动将此位置1。当EFDI==1时,程序会跳转到相应中断入口执行中断服 务程序。需要软件清零 5. PWM2的控制寄存器:PWM2CR PWM2的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM2CR FF04H (XSFR) name - - - - B3 d e t i im B2 B1 B0 Reset Value PWM2_PS EPWM2I EC2T2SI EC2T1SI xxxx,0000B L EPWM2I :PWM2中断使能控制位 0:关闭PWM2中断 1:使能PWM2中断,当C2IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 U C M C T S EC2T2SI :PWM2的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC2T1SI :PWM2的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将 跳转到相应中断入口执行中断服务程序。 6. PWM3的控制寄存器:PWM3CR PWM3的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM3CR FF14H (XSFR) name - - - - 1046 南通国芯微电子有限公司 B3 B2 B1 B0 Reset Value PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000B 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 EPWM3I :PWM3中断使能控制位 0:关闭PWM3中断 1:使能PWM3中断,当C3IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC3T2SI :PWM3的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC3T1SI :PWM3的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将 跳转到相应中断入口执行中断服务程序。 U C M 7. PWM4的控制寄存器:PWM4CR d e t i im L PWM4的控制寄存器的格式如下: SFR name Address PWM4CR FF24H (XSFR) bit B7 B6 name - - C T S B5 B4 - - B3 B2 B1 B0 Reset Value PWM4_PS EPWM4I EC4T2SI EC4T1SI xxxx,0000B EPWM4I :PWM4中断使能控制位 0:关闭PWM4中断 1:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC4T2SI :PWM4的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 EC4T1SI :PWM4的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将 跳转到相应中断入口执行中断服务程序。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1047 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 8. PWM5的控制寄存器:PWM5CR PWM5的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM5CR FF34H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM5_PS EPWM5I EC5T2SI EC5T1SI xxxx,0000B EPWM5I :PWM5中断使能控制位 0:关闭PWM5中断 1:使能PWM5中断,当C5IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC5T2SI :PWM5的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 d e t i im L EC5T1SI :PWM5的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将 跳转到相应中断入口执行中断服务程序。 U C M C T S 9. PWM6的控制寄存器:PWM6CR PWM6的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM6CR FF44H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM6_PS EPWM6I EC6T2SI EC6T1SI xxxx,0000B EPWM6I :PWM6中断使能控制位 0:关闭PWM6中断 1:使能PWM6中断,当C6IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 EC6T2SI :PWM6的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 1048 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 EC6T1SI :PWM6的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将 跳转到相应中断入口执行中断服务程序。 10. PWM7的控制寄存器:PWM7CR PWM7的控制寄存器的格式如下: SFR name Address bit B7 B6 B5 B4 PWM7CR FF54H (XSFR) name - - - - B3 B2 B1 B0 Reset Value PWM7_PS EPWM7I EC7T2SI EC7T1SI xxxx,0000B d e t i im EPWM7I :PWM7中断使能控制位 0:关闭PWM7中断 1:使能PWM7中断,当C7IF被硬件置1时,程序将跳转到相应中断入口执行中断服务 程序。 L U C M EC7T2SI :PWM7的T2匹配发生波形翻转时的中断控制位 0:关闭T2翻转时中断 1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 C T S EC7T1SI :PWM7的T1匹配发生波形翻转时的中断控制位 0:关闭T1翻转时中断 1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配 时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将 跳转到相应中断入口执行中断服务程序。 中断向量地址及中断控制 中断名称 PWM中断 入口 地址 00B3H (22) 优先级 设置 PPWM PWM异常 00BBH PPWMFD (23) 检测中断 南通国芯微电子有限公司 中断 请求位 CBIF 中断允许位 中断标志 清除方式 ENPWM/ECBI/EA 需软件清除 C2IF ENPWM / EPWM2I / EC2T2SI || EC2T1SI / EA 需软件清除 C3IF ENPWM / EPWM3I / EC3T2SI || EC3T1SI / EA 需软件清除 C4IF ENPWM / EPWM4I / EC4T2SI || EC4T1SI / EA 需软件清除 C5IF ENPWM / EPWM5I / EC5T2SI || EC5T1SI / EA 需软件清除 C6IF ENPWM / EPWM6I / EC6T2SI || EC6T1SI / EA 需软件清除 C7IF ENPWM / EPWM7I / EC7T2SI || EC7T1SI / EA 需软件清除 FDIF ENPWM / ENFD / EFDI / EA 需软件清除 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1049 技术支持网站:www.GXWMCU.com STC15系列单片机指南 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 在Keil C中声明中断函数 void PWM_Routine(void) interrupt 22; void PWMFD_Routine(void) interrupt 23; PWM波形发生器的结构框图 [PWMCH, PWMCL] 周期结束 匹配 PWM时钟 计数器 R 清零 [T2H, T2L] [T1H, T1L] [T2H, T2L] L 翻转 翻转 周期结束 U C M d e t i im [T2H, T2L] 匹配 翻转 [T1H, T1L] 匹配 翻转 周期结束 匹配 匹配 翻转 周期结束 匹配 匹配 翻转 [T1H, T1L] PWM波形发生器框图 C T S 汇编示例代码1 假如要生成一个重复的PWM波形,波形如下: PWM波形发生器的时钟频率为系统时钟/4,波形由通道4输出,周期为20个PWM时钟,占空 比为1/3,由4个PWM时钟的相位延迟(波形如下图所示) Initialized @ LOW 0 1 2 3 4 5 6 7 8 9 10 Period ==(16+1) Channel-4: 16 19 0 1 2 3 4 5 6 7 8 9 10 toggle-point-1==3(0003H) 16 19 0 1 2 3 4 5 6 7 8 9 10 16 19 toggle-point-2==16(0010H) 汇编代码可以如下设计: ;; +-----------------------------+ ;; | Global Configuration | ;; +-----------------------------+ ; Set EAXSFR to enable xSFR writing against XRAM writing MOV A, P_SW2 ORL A, #10000000B 1050 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 MOV ; 官方网站:www.STCMCU.com 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 P_SW2, A ; Set channel-4 output register start at LOW MOV A, PWMCFG ANL A, #11111011B MOV PWMCFG, A ; ; channel-4 start at LOW ; Set a clock of the waveform generator consists of 4 Fosc MOV DPTR, #PWMCKS ; FFF2H MOV A, #00000011B MOVX @DPTR, A ; ; Set period as 20 ; {PWMCH,PWMCL} Standard, 01--->push-pull // =10--->pure input, 11--->open drain PWMCH PWMCL PWMCKS PWM2T1H EQU EQU EQU EQU 0xFFF0 0xFFF1 0xFFF2 0xFF00 /* PWM计数器高字节 */ /* PWM计数器低字节 */ /* PWM时钟选择 */ /* PWM2T1计数高字节 */ 1078 南通国芯微电子有限公司 //PWM配置寄存器 //PWM控制寄存器 //PWM中断标志寄存器 //PWM外部异常控制寄存器 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 PWM2T1L EQU 0xFF01 PWM2T2H EQU 0xFF02 PWM2T2L EQU 0xFF03 PWM2CR EQU 0xFF04 PWM3T1H EQU 0xFF10 PWM3T1L EQU 0xFF11 PWM3T2H EQU 0xFF12 PWM3T2L EQU 0xFF13 PWM3CR EQU 0xFF14 /* PWM2T1计数低字节 */ /* PWM2T2计数高字节 */ /* PWM2T2计数低字节 */ /* PWM2控制 */ PWM4T1H PWM4T1L PWM4T2H PWM4T2L PWM4CR EQU EQU EQU EQU EQU 0xFF20 0xFF21 0xFF22 0xFF23 0xFF24 /* PWM4T1计数高字节 */ /* PWM4T1计数低字节 */ /* PWM4T2计数高字节 */ /* PWM4T2计数低字节 */ /* PWM4控制 */ PWM5T1H PWM5T1L PWM5T2H PWM5T2L PWM5CR EQU EQU EQU EQU EQU 0xFF30 0xFF31 0xFF32 0xFF33 0xFF34 /* PWM5T1计数高字节 */ /* PWM5T1计数低字节 */ /* PWM5T2计数高字节 */ /* PWM5T2计数低字节 */ /* PWM5控制 */ PWM6T1H PWM6T1L PWM6T2H PWM6T2L PWM6CR EQU EQU EQU EQU EQU 0xFF40 0xFF41 0xFF42 0xFF43 0xFF44 /* PWM6T1计数高字节 */ /* PWM6T1计数低字节 */ /* PWM6T2计数高字节 */ /* PWM6T2计数低字节 */ /* PWM6控制 */ PWM7T1H PWM7T1L PWM7T2H PWM7T2L PWM7CR EQU EQU EQU EQU EQU 0xFF50 0xFF51 0xFF52 0xFF53 0xFF54 /* PWM7T1计数高字节 */ /* PWM7T1计数低字节 */ /* PWM7T2计数高字节 */ /* PWM7T2计数低字节 */ /* PWM7控制 */ PwmClk_1T PwmClk_2T PwmClk_3T PwmClk_4T PwmClk_5T PwmClk_6T PwmClk_7T PwmClk_8T PwmClk_9T PwmClk_10T PwmClk_11T EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0 1 2 3 4 5 6 7 8 9 10 C T S 南通国芯微电子有限公司 /* PWM3T1计数高字节 */ /* PWM3T1计数低字节 */ /* PWM3T2计数高字节 */ /* PWM3T2计数低字节 */ /* PWM3控制 */ U C M 总机:0513-5501 2928 / 2929 / 2966 d e t i im L 传真:0513-5501 2969 / 2956 / 2947 1079 技术支持网站:www.GXWMCU.com STC15系列单片机指南 PwmClk_12T PwmClk_13T PwmClk_14T PwmClk_15T PwmClk_16T PwmClk_Timer2 EQU EQU EQU EQU EQU EQU 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 11 12 13 14 15 16 ;******************************************************************* ;******************************************************************* PWM_Index DATA 30H ; SPWM查表索引 STACK_POIRTER EQU 0C0H ;堆栈开始地址 ;******************************************************************* ;******************************************************************* ORG 00H ;reset LJMP F_Main ORG LJMP 00B3H F_PWM_Interrupt d e t i im L ; PWM interrupt U C M ;******************** 主程序 **************************/ F_Main: MOV SP, #STACK_POIRTER MOV PSW, #0 USING 0 ;选择第0组R0~R7 C T S ;================= 用户初始化程序 ==================================== ORL P_SW2, #0x80 ; 访问XFR MOV CLR MOVX INC MOV MOVX INC MOV MOVX INC MOV MOVX DPTR, #PWM3T1H A @DPTR, A DPTR A, #65 @DPTR, A DPTR A, #HIGH 1220 @DPTR, A DPTR A, #LOW 1220 @DPTR, A INC CLR DPTR A 1080 南通国芯微电子有限公司 ; 指针指向PWM3 ; 第一个翻转计数高字节 ; 第一个翻转计数低字节 ; 第二个翻转计数高字节 ; 第二个翻转计数低字节 ; PWM3输出选择P2.1, 无中断 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 ; MOVX ORL ANL ORL CLR ANL ORL @DPTR, A PWMCR, #0x02 ; 相应PWM通道的端口为PWM输出口, ; 受PWM波形发生器控制 PWMCFG, #NOT 0x02 ; 设置PWM输出端口的初始电平为0 PWMCFG, #0x02 ; 设置PWM输出端口的初始电平为1 P2.1 ; P2.1输出低电平 P2M1, #NOT 0x02 ; P2.1设置为推挽输出 P2M0, #0x02 MOV CLR MOVX INC MOV MOVX INC MOV MOVX INC MOV MOVX DPTR, #PWM4T1H A @DPTR, A DPTR A, #(65-PWM_DeadZone) @DPTR, A DPTR A, #HIGH (1220+PWM_DeadZone) @DPTR, A DPTR A, #LOW (1220+PWM_DeadZone) @DPTR, A ; INC CLR MOVX ORL ANL ORL SETB ANL ORL DPTR A @DPTR, A PWMCR, #0x04 PWMCFG, #NOT 0x04 PWMCFG, #0x04 P2.2 P2M1, #NOT 0x04 P2M0, #0x04 MOV MOV MOVX INC MOV MOVX INC MOV MOVX DPTR, #PWMCH ; 指针指向PWMCH A, #HIGH 2400 ; PWM计数器的高字节 @DPTR, A DPTR A, #LOW 2400 ; PWM计数器的低字节 @DPTR, A DPTR A, #PwmClk_1T ; 时钟源: PwmClk_1T,PwmClk_2T, ... PwmClk_16T, PwmClk_Timer2 @DPTR, A ; PWMCKS, PWM时钟选择 ANL P_SW2, #NOT 0x80 C T S 南通国芯微电子有限公司 ; 指针指向PWM4 ; 第一个翻转计数高字节 ; 第一个翻转计数低字节 d e t i im ; 第二个翻转计数高字节 L ; 第二个翻转计数低字节 U C M ; PWM4输出选择P2.2, 无中断 ; 相应PWM通道的端口为PWM输出口, ; 受PWM波形发生器控制 ; 设置PWM输出端口的初始电平为0 ; 设置PWM输出端口的初始电平为1 ; P2.2输出高电平 ; P2.2设置为推挽输出 ; 恢复访问XRAM 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1081 STC15系列单片机指南 ORL 技术支持网站:www.GXWMCU.com PWMCR, #0xC0 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 ; 允许PWM计数器归零中断, 使能PWM波形发生 ; 器,PWM计数器开始计数 ; MOV PWMFDCR, # (ENFD + FLTFLIO + FDIO) ; PWM失效中断控制, ENFD | FLTFLIO | EFDI | FDCMP | FDIO SETB EA ; 允许全局中断 ;=================== 主循环 ================================== L_MainLoop: LJMP L_MainLoop ;=================================================================== ;********************* PWM中断函数************************/ F_PWM_Interrupt: PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH AR2 PUSH AR3 1082 U C M d e t i im L MOV MOV ADD MOV CLR ADDC MOV MOV ADD MOV CLR ADDC MOV CLR MOVC MOV MOV MOVC MOV DPTR, #T_SinTable A, PWM_Index A, DPL DPL, A A A, DPH DPH, A A, PWM_Index A, DPL DPL, A A A, DPH DPH, A A A, @A+DPTR R2, A A, #1 A, @A+DPTR R3, A ; 读正弦波表 MOV JNB ANL A, PWMIF ACC.6, L_Int_NotCBIF PWMIF, #NOT (1 SHL 6) ; 读中断标志寄存器 ; PWM计数器归零中断标志 ; 清除中断标志 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 ; 保存SW2设置 ; 访问XFR ; 指针指向PWM3 ; 第二个翻转计数高字节 PUSH ORL MOV MOV MOVX INC MOV MOVX P_SW2 P_SW2, #0x80 DPTR, #PWM3T2H A, R2 @DPTR, A DPTR A, R3 @DPTR, A MOV ADD MOV CLR ADDC MOV A, R3 A, #PWM_DeadZone R3, A A A, R2 R2, A MOV MOV MOVX INC MOV MOVX POP INC MOV CLR SUBB JC MOV L_Int_NotCBIF: /* MOV JNB ANL L_Int_NotC2IF: DPTR, #PWM4T2H A, R2 @DPTR, A DPTR A, R3 @DPTR, A P_SW2 A, PWMIF ACC.0, L_Int_NotC2IF PWMIF, #NOT 1 ; 读中断标志寄存器 ; PWM2中断标志 ; 清除中断标志 MOV JNB ANL L_Int_NotC3IF: A, PWMIF ACC.1, L_Int_NotC3IF PWMIF, #NOT (1 SHL 1) ; 读中断标志寄存器 ; PWM3中断标志 ; 清除中断标志 A, PWMIF ACC.2, L_Int_NotC4IF PWMIF, #NOT (1 SHL 2) ; 读中断标志寄存器 ; PWM4中断标志 ; 清除中断标志 MOV JNB ANL C T S U C M ; 第二个翻转计数低字节 ; 加死区 d e t i im ; 指针指向PWM4 ; 第二个翻转计数高字节 L ; 第二个翻转计数低字节 ; 恢复访问P_SW2 PWM_Index A, PWM_Index C A, #200 L_Int_NotCBIF PWM_Index, #0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1083 STC15系列单片机指南 技术支持网站:www.GXWMCU.com 临时技术支持Tel:13922829991 研发顾问Tel:13922805190 L_Int_NotC4IF: MOV JNB ANL L_Int_NotC5IF: A, PWMIF ACC.3, L_Int_NotC5IF PWMIF, #NOT (1 SHL 3) ; 读中断标志寄存器 ; PWM5中断标志 ; 清除中断标志 MOV JNB ANL L_Int_NotC6IF: A, PWMIF ACC.4, L_Int_NotC6IF PWMIF, #NOT (1 SHL 4) ; 读中断标志寄存器 ; PWM6中断标志 ; 清除中断标志 MOV A, PWMIF JNB ACC.5, L_Int_NotC7IF ANL PWMIF, #NOT (1 SHL 5) ; 清除中断标志 L_Int_NotC7IF: */ POP AR3 POP AR2 POP DPL POP DPH POP ACC POP PSW RETI T_SinTable: DW ,1805,1836,1866 DW ,2275,2289,2302 DW ,2342,2334,2324 DW ,1981,1953,1925 DW ,1328,1292,1256 DW DW DW DW DW 1084 C T S U C M ; 读中断标志寄存器 ; PWM7中断标志 d e t i im L 1220,1256,1292,1328,1364,1400,1435,1471,1506,1541,1575,1610,1643,1677,1710,1742,1774 1896,1925,1953,1981,2007,2033,2058,2083,2106,2129,2150,2171,2191,2210,2228,2245,2261 2314,2324,2334,2342,2350,2356,2361,2365,2368,2369,2370,2369,2368,2365,2361,2356,2350 2314,2302,2289,2275,2261,2245,2228,2210,2191,2171,2150,2129,2106,2083,2058,2033,2007 1896,1866,1836,1805,1774,1742,1710,1677,1643,1610,1575,1541,1506,1471,1435,1400,1364 1220,1184,1148,1112,1076,1040,1005,969,934,899,865,830,797,763,730,698,666,635,604,574 544,515,487,459,433,407,382,357,334,311,290,269,249,230,212,195,179,165,151,138 126,116,106,98,90,84,79,75,72,71,70,71,72,75,79,84,90,98,106,116 126,138,151,165,179,195,212,230,249,269,290,311,334,357,382,407,433,459,487,515 544,574,604,635,666,698,730,763,797,830,865,899,934,969,1005,1040,1076,1112,1148,1184 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 官方网站:www.STCMCU.com STC15系列单片机指南 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 12.6 用STC15W4K系列的PWM实现渐变灯的示例程序 1、C语言程序 /*------------------------------------------------------------------------------------------------------*/ /* --- STC MCU Limited -------------------------------------------------------------------------*/ /* --- STC15系列 使用PWM实现渐变灯实例-----------------------------------------------*/ /* --- Mobile: (86)13922805190 ----------------------------------------------------------------*/ /* --- Fax: 86-755-82905966 --------------------------------------------------------------------*/ /* --- Tel: 86-755-82948412 ---------------------------------------------------------------------*/ /* --- Web: www.STCMCU.com ---------------------------------------------------------------*/ /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */ /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */ /*----------------------------------------------------------------------------------------------------*/ //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译 //假定测试芯片的工作频率为18.432MHz #include "reg51.h" #define CYCLE #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define PWMC PWMCH PWMCL PWMCKS PWM2T1 PWM2T1H PWM2T1L PWM2T2 PWM2T2H PWM2T2L PWM2CR PWM3T1 PWM3T1H PWM3T1L PWM3T2 PWM3T2H PWM3T2L PWM3CR PWM4T1 PWM4T1H PWM4T1L PWM4T2 0x1000L 南通国芯微电子有限公司 U C M L //定义PWM周期 (*(unsigned int volatile xdata *)0xfff0) (*(unsigned char volatile xdata *)0xfff0) (*(unsigned char volatile xdata *)0xfff1) (*(unsigned char volatile xdata *)0xfff2) (*(unsigned int volatile xdata *)0xff00) (*(unsigned char volatile xdata *)0xff00) (*(unsigned char volatile xdata *)0xff01) (*(unsigned int volatile xdata *)0xff02) (*(unsigned char volatile xdata *)0xff02) (*(unsigned char volatile xdata *)0xff03) (*(unsigned char volatile xdata *)0xff04) (*(unsigned int volatile xdata *)0xff10) (*(unsigned char volatile xdata *)0xff10) (*(unsigned char volatile xdata *)0xff11) (*(unsigned int volatile xdata *)0xff12) (*(unsigned char volatile xdata *)0xff12) (*(unsigned char volatile xdata *)0xff13) (*(unsigned char volatile xdata *)0xff14) (*(unsigned int volatile xdata *)0xff20) (*(unsigned char volatile xdata *)0xff20) (*(unsigned char volatile xdata *)0xff21) (*(unsigned int volatile xdata *)0xff22) C T S d e t i im 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 1085 STC15系列单片机指南 技术支持网站:www.GXWMCU.com #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define PWM4T2H PWM4T2L PWM4CR PWM5T1 PWM5T1H PWM5T1L PWM5T2 PWM5T2H PWM5T2L PWM5CR PWM6T1 PWM6T1H PWM6T1L PWM6T2 PWM6T2H PWM6T2L PWM6CR PWM7T1 PWM7T1H PWM7T1L PWM7T2 PWM7T2H PWM7T2L PWM7CR sfr PIN_SW2 = 0xba; sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr P0M1 P0M0 P1M1 P1M0 P2M1 P2M0 P3M1 P3M0 P4M1 P4M0 P5M1 P5M0 P6M1 P6M0 P7M1 P7M0 1086 = = = = = = = = = = = = = = = = 临时技术支持Tel:13922829991 (*(unsigned char volatile xdata *)0xff22) (*(unsigned char volatile xdata *)0xff23) (*(unsigned char volatile xdata *)0xff24) (*(unsigned int volatile xdata *)0xff30) (*(unsigned char volatile xdata *)0xff30) (*(unsigned char volatile xdata *)0xff31) (*(unsigned int volatile xdata *)0xff32) (*(unsigned char volatile xdata *)0xff32) (*(unsigned char volatile xdata *)0xff33) (*(unsigned char volatile xdata *)0xff34) (*(unsigned int volatile xdata *)0xff40) (*(unsigned char volatile xdata *)0xff40) (*(unsigned char volatile xdata *)0xff41) (*(unsigned int volatile xdata *)0xff42) (*(unsigned char volatile xdata *)0xff42) (*(unsigned char volatile xdata *)0xff43) (*(unsigned char volatile xdata *)0xff44) (*(unsigned int volatile xdata *)0xff50) (*(unsigned char volatile xdata *)0xff50) (*(unsigned char volatile xdata *)0xff51) (*(unsigned int volatile xdata *)0xff52) (*(unsigned char volatile xdata *)0xff52) (*(unsigned char volatile xdata *)0xff53) (*(unsigned char volatile xdata *)0xff54) C T S U C M 研发顾问Tel:13922805190 d e t i im L 0x93; 0x94; 0x91; 0x92; 0x95; 0x96; 0xb1; 0xb2; 0xb3; 0xb4; 0xC9; 0xCA; 0xCB; 0xCC; 0xE1; 0xE2; 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 sfr sfr sfr sfr 官方网站:www.STCMCU.com PWMCFG PWMCR PWMIF PWMFDCR = = = = 技术支持QQ:800003751 STC — 全球最大的8051单片机设计公司 0xf1; 0xf5; 0xf6; 0xf7; void pwm_isr() interrupt 22 using 1 { static bit dir = 1; static int val = 0; if (PWMIF & 0x40) { PWMIF &= ~0x40; if (dir) { val++; if (val >= CYCLE) dir = 0; } else { val--; if (val Standard, 01--->push-pull,实际上1T的都一样 // =10--->pure input,11--->open drain U C M #define ADC_SCALE 50000 sbit P_ADC = P1^5; unsigned int adc; unsigned int adc_duty; unsigned int adc_value; bit adc_ok; sbit P_TXD = P3^1; void void 1106 //定义主时钟 d e t i im L //ADC满量程, 根据需要设置 //P1.2 比较器输出端 //ADC中间值, 用户层不可见 //ADC计数周期, 用户层不可见 //ADC值, 用户层使用 //ADC结束标志, 为1则adc_value的值可用. //此标志给用户层查询,并且清0 //定义模拟串口发送端,可以是任意IO TxSend(u8 dat); PrintString(unsigned char code *puts); 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15系列单片机指南 官方网站:www.STCMCU.com void main() { u8 i; u8 tmp[5]; CMPCR1 = 0; CMPCR2 = 0; 技术支持QQ:800003751 //初始化比较器控制寄存器1 //初始化比较器控制寄存器2 // CMPCR1 &= ~PIS; CMPCR1 |= PIS; // // CMPCR1 &= ~NIS; CMPCR1 |= NIS; //选择外部管脚P5.5(CMP+)为比较器的正极输入源 //选择ADCIS[2:0]所选的ADCIN为比较器的正极输入源 // CMPCR2 &= ~INVCMPO; CMPCR2 |= INVCMPO; // CMPCR2 &= ~DISFLT; CMPCR2 |= DISFLT; // CMPCR2 &= ~LCDTY; CMPCR2 |= (DISFLT & 0x10); // // // CMPCR1 |= CMPEN; while (!(CMPCR1 & CMPIF)); CMPCR1 &= ~CMPIF; LED = !!(CMPCR1 & CMPRES); CMPCR1 &= ~CMPOE; CMPCR1 |= CMPOE; C T S STC — 全球最大的8051单片机设计公司 //选择内部BandGap电压BGV为比较器的负极输入源 //选择外部管脚P5.4(CMP-)为比较器的负极输入源 d e t i im //禁用比较器的比较结果输出 //使能比较器的比较结果输出到P1.2 L //比较器的比较结果正常输出到P1.2 //比较器的比较结果取反后输出到P1.2 U C M //使能比较器输出端的0.1uS虑波电路 //禁用比较器输出端的0.1uS虑波电路 //比较器结果不去抖动,直接输出 //比较器结果在经过16个时钟后再输出 ET0 = 1; PT0 = 1; TMOD &= ~0x03; AUXR |= 0x80; //使能比较器 //查询比较完成标志 //清除完成标志 //将比较器结果CMPRES输出到测试口显示 //允许中断 //高优先级中断 //工作模式,0: 16位自动重装, 1: 16位定时/计数, //2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断 //1T TH0 = (u8)((-(MAIN_Fosc*10)/1000000) >> 8); //10us TL0 = (u8)(-(MAIN_Fosc*10)/1000000); P1M1 &= ~(1
STC15W404AS-35I-SOP16 价格&库存

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

免费人工找货