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

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
STC12C5202AD-35I-SOP20

STC12C5202AD-35I-SOP20

  • 厂商:

    STC(宏晶科技)

  • 封装:

    SOP20_300MIL

  • 描述:

    8位MCU单片机 SOP20_300MIL 256B 3.5~5.5V 8051 35MHz

  • 数据手册
  • 价格&库存
STC12C5202AD-35I-SOP20 数据手册
STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 STC12C5201AD系列单片机器件手册 ---1个时钟/机器周期8051 ---���� 超强加� 密 ---高速,高可靠 ---低功耗,超低价 ---强抗静电,强抗干扰 STC12C5201AD, STC12C5202AD, STC12C5203AD, STC12C5204AD, STC12C5205AD, STC12C5206AD, STC12LE5201AD, STC12LE5202AD, STC12LE5203AD, STC12LE5204AD, STC12LE5205AD, STC12LE5206AD, C T S STC12C5201PWM STC12C5202PWM STC12C5203PWM STC12C5204PWM STC12C5205PWM STC12C5206PWM STC12LE5201PWM STC12LE5202PWM STC12LE5203PWM STC12LE5204PWM STC12LE5205PWM STC12LE5206PWM U C M . d e t i m Li 全部中国本土独立自主知识产权,请全体中国人民支持,您的 支持是中国本土����������� 力量前进的������ 有力保证. STC-ISP:最方便的在线升级软件 技术支持��� 网站: www.STCMCU.com Update date: 2011/10/30 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947  目录 第1章 STC12C5201AD系列单片机总体介绍................... 7 1.1 1.2 1.3 1.4 1.5 1.6 STC12C5201AD系列单片机简介............................... 7 STC12C5201AD系列单片机的内部结构......................... 9 STC12C5201AD系列单片机管脚图............................ 10 STC12C5201AD系列单片机选型一览表........................ 13 STC12C5201AD系列单片机最小应用系统...................... 14 STC12C5201AD系列在系统可编程(ISP)典型应用线路图.......... 16 1.6.1 STC12C5201AD系列单片机28脚典型应用电路..............................................16 1.6.2 STC12C5201AD系列单片机20脚典型应用电路..............................................18 1.6.3 STC12C5201AD系列单片机32脚典型应用电路..............................................20 1.7 STC12C5201AD系列管脚说明................................ 1.8 STC12C5201AD系列单片机封装尺寸图........................ 1.9 STC12C5201AD系列单片机命名规则.......................... 1.10 每个单片机具有全球唯一身份证号码(ID号)................... 21 23 32 33 第2章 时钟,省电模式及复位..............................36 2.1 STC12C5201AD系列单片机的时钟............................ 36 2.1.1 2.1.2 2.1.3 2.1.4 STC12C5201AD系列单片机内部/外部工作时钟可选.....................................36 时钟分频及分频寄存器..................................................................................37 如何知道单片机内部R/C振荡频率(内部时钟频率)........................................38 可编程时钟输出.............................................................................................41 2.2 STC12C5201AD系列单片机的省电模式........................ 45 2.2.1 低速模式........................................................................................................47 2.2.2 空闲模式........................................................................................................48 2.2.3 掉电模式/停机模式........................................................................................48 2.3 复位...................................................... 54 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 外部RST引脚复位(第一复位功能脚).............................................................54 外部低压检测复位(高可靠复位,新增第二复位功能脚RST2复位). ..............54 外部低压检测若不作第二复位功能时,可作外部低压检测中断. ...................56 软件复位........................................................................................................60 上电复位/掉电复位........................................................................................60 MAX810专用复位电路...................................................................................61 2.3.7 看门狗(WDT)复位..........................................................................................61 2.3.8 冷启动复位和热启动复位...............................................................................65 第3章 片内存储器和特殊功能寄存器(SFRs).....................................66 3.1 程序存储器................................................ 66 3.2 数据存储器(SRAM)................................................................................... 67 3.3 特殊功能寄存器(SFRs).............................................................................. 69 第4章 STC12C5201AD系列单片机的I/O口结构...............74 4.1 I/O口各种不同的工作模式及配置介绍.......................... 74 4.2 I/O口各种不同的工作模式结构框图............................ 78 4.2.1 4.2.2 4.2.3 4.2.4 准双向口输出配置.................................................................................................. 78 强推挽输出配置...................................................................................................... 79 仅为输入(高阻)配置.......................................................................................... 79 开漏输出配置(若外加上拉电阻,也可读).....................................................79 4.3 一种典型三极管控制电路.................................... 4.4 典型发光二极管控制电路.................................... 4.5 混合电压供电系统3V/5V器件I/O口互连........................ 4.6 如何让I/O口上电复位时为低电平.............................. 4.7 PWM输出时I/O口的状态..................................... 4.8 I/O口直接驱动LED数码管应用线路图.......................... 4.9 I/O口直接驱动LCD应用线路图................................ 4.10 A/D做按键扫描应用线路图.................................. 81 81 81 82 83 84 85 86 第5章 指令系统..........................................87 5.1 寻址方式.................................................. 87 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 立即寻址........................................................................................................87 直接寻址........................................................................................................87 间接寻址........................................................................................................87 寄存器寻址. ...................................................................................................88 相对寻址........................................................................................................88 变址寻址........................................................................................................88 位寻址............................................................................................................88 5.2 指令系统分类总结.......................................... 89 5.3 传统8051单片机指令定义详解(中文&English)................... 94 5.3.1 传统8051单片机指令定义详解. ......................................................................94 5.3.2 Instruction Definitions of Traditional 8051 MCU......................................134 第6章 中断系统........................................ 171 6.1 6.2 6.3 6.4 6.5 6.6 中断结构................................................. 173 中断寄存器............................................... 175 中断优先级............................................... 182 中断处理................................................. 183 外部中断................................................. 184 中断测试程序............................................. 185 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.6.6 外部中断0(INT0)的测试程序........................................................................185 外部中断1(INT1)的测试程序........................................................................189 定时器0中断(下降沿中断,可用于唤醒掉电模式)的测试程序....................193 定时器1中断(下降沿中断,可用于唤醒掉电模式)的测试程序....................195 RxD中断(RxD/P3.0下降沿中断,可用于唤醒掉电模式)的测试程序............197 PCA模块中断(可用于唤醒掉电模式)的测试程序. .......................................199 第7章 定时器/计数器................................... 203 7.1 定时器/计数器的相关寄存器................................ 203 7.2 定时器/计数器0工作模式................................... 208 7.2.1 7.2.2 7.2.3 7.2.4 模式0(13位定时器/计数器)..........................................................................208 模式1(16位定时器/计数器)..........................................................................209 模式2(8位自动重装模式)..............................................................................213 模式3(两个8位计数器). ................................................................................216 7.3 定时器/计数器1工作模式................................... 217 7.3.1 模式0(13位定时器/计数器)..........................................................................217 7.3.2 模式1(16位定时器/计数器)..........................................................................218 7.3.3 模式2(8位自动重装模式)..............................................................................222 7.4 可编程时钟输出及测试程序(C程序和汇编程序)................ 225 7.4.1 定时器0的可编程时钟输出的测试程序.........................................................228 7.4.2 定时器1的可编程时钟输出的测试程序.........................................................230 7.5 古老Intel 8051单片机定时器0/1的应用举例.................... 232 第8章 串行口通信...................................... 239 8.1 串行口的相关寄存器....................................... 239 8.2 串行口工作模式........................................... 244 8.2.1 串行口工作模式0:同步移位寄存器............................................................244 8.2.2 串行口工作模式1:8位UART,波特率可变...................................................246 8.2.3 串行口工作模式2:9位UART,波特率固定...................................................248 8.2.4 串行口工作模式3:9位UART,波特率可变...................................................250 串行通信中波特率的设置................................... 252 串行口的测试程序......................................... 255 双机通信............................................. 261 多机通信............................................. 272 8.3 8.4 8.8 8.9 第9章 STC12C5201AD系列单片机的A/D转换器............. 278 9.1 9.2 9.3 9.4 9.5 9.6 A/D转换器的结构.......................................... 278 与A/D转换相关的寄存器.................................... 280 A/D转换典型应用线路...................................... 284 A/D做按键扫描应用线路图.................................. 285 A/D转换模块的参考电压源.................................. 286 A/D转换测试程序(C程序和汇编程序)........................ 287 9.6.1 A/D转换测试程序(ADC中断方式)..................................................................... 287 9.6.2 A/D转换测试程序(ADC查询方式)...............................................................293 第10章 STC12C5201AD系列单片机PCA/PWM应用.......... 299 10.1 与PCA/PWM应用有关的特殊功能寄存器..................... 299 10.2 PCA/PWM模块的结构..................................... 304 10.3 PCA模块的工作模式...................................... 306 10.3.1 10.3.2 10.3.3 10.3.4 10.4 10.5 10.6 10.7 10.8 捕获模式.............................................................................................................. 306 16位软件定时器模式.......................................................................................... 307 高速输出模式...................................................................................................... 308 脉宽调节模式(PWM).......................................................................................... 309 用PCA功能扩展外部中断的示例程序(C程序和汇编程序)....... 311 用PCA功能实现定时器的示例程序(C程序和汇编程序)......... 315 PCA输出高速脉冲的示例程序(C程序和汇编程序)............. 319 PCA输出PWM的示例程序(C程序和汇编程序)................ 323 利用PWM实现D/A功能的典型应用线路图.................... 327 第11章 STC12C5201AD系列EEPROM的应用............... 328 11.1 11.2 11.3 11.4 IAP及EEPROM新增特殊功能寄存器介绍..................... 328 STC12C5201AD系列单片机EEPROM空间大小及地址.......... 332 IAP及EEPROM汇编简介................................... 334 EEPROM测试程序........................................ 338 第12章 STC12系列单片机开发/编程工具说明............... 346 12.1 在系统可编程(ISP)原理,官方演示工具使用说明.............. 346 12.1.1 12.1.2 12.1.3 12.1.4 12.1.5 在系统可编程(ISP)原理使用说明. ..............................................................346 STC12C5201AD系列在系统可编程(ISP)典型应用线路图. ..........................347 电脑端的ISP控制软件界面使用说明...........................................................349 STC-ISP(最方便的在线升级软件)下载编程工具硬件使用说明..................351 若无RS-232转换器,如何用STC的ISP下载板做RS-232通信转换...............352 12.2 编译器/汇编器,编程器,仿真器........................... 353 12.3 自定义下载演示程序(实现不停电下载)...................... 355 附录A:汇编语言编程................................... 附录B:C语言编程...................................... 附录C:STC12C5201AD系列单片机电气特性............... 附录D:内部常规256字节RAM间接寻址测试程序........... 附录E:用串口扩展I/O接口.............................. 附录F:利用STC单片机普通I/O驱动LCD显示.............. 附录G:一个I/O口驱动发光二极管并扫描按键.............. 附录H:如何利用Keil C软件减少代码长度................. 附录I:STC12C5201AD系列单片机应用注意事项........... 附录J:STC12C5201AD系列取代传统8051注意事项......... 附录K:每日更新内容的备忘录........................... 359 381 391 393 395 398 405 406 407 408 412 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第1章 STC12C5201AD系列单片机总体介绍 1.1 STC12C5201AD系列单片机简介 STC12C5201AD系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/低功耗 /超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成 MAX810专用复位电路,2路PWM,8路高速8位A/D转换(300K/S����������������� ,即30万次/秒��������� ),针对电机控制, 强干扰场合。 1. 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051 2. 工作电压: STC12C5201AD 系列工作电压: 5.5V - 3.5V(5V单片机) STC12LE5201AD 系列工作电压: 3.6V - 2.2V(3V单片机) 3. 工作频率范围:0~35MHz,相当于普通8051的 0~420MHz 4. 用户应用程序空间 1K /2K / 4K / 5K / 6K 字节...... 5. 片上集成256字节 RAM 6. 通用I/O口(27 / 23 / 15 / 13 / 11个),复位后为:准双向口/弱上拉(普通8051传统I/O口) 可设置成四种模式:准双向口/弱上拉,������������������ 强����������������� 推挽/强上拉,仅为输入/高阻,开漏 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55mA 7. ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片 8. 有EEPROM功能 9. 看门狗 10.内部集成MAX810专用复位电路(外部晶体20M以下时,复位脚可直接1K电阻到地) 11.���������������������������� 内置一个������������������������ 掉电检测电路: 在P1.2口有一个低压门槛比较器 5V单片机为1.33V,误差为±5%,3.3V 单片机为1.31V,误差为±3% 12. 时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为±5%到±10%以内) 用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟 常温下内部R/C振荡器频率为:5.0V 单片机为: 11MHz ~ 17MHz 3.3V 单片机为: 8MHz ~ 12MHz 精度要求不高时������������������������������ ,����������������������������� 可选择使用内部时钟�������������������� ,������������������� 但因为有制造误差和温漂�������� ,������� 以实际测试为准 13. 共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,再加上2路PCA 模块可再实现2个16位定时器 14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟 15. 外部中断I/O口6路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模 块� ,Power Down模式可由外部中断唤醒� ,INT0/P3.2,INT1/P3.3, T0/P3.4, T1/P3.5, RxD/P3.0, PCA0/P3.7, PCA1/P3.5 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947  STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 16. PWM(2路)/ PCA(可编程计数器阵列,2路) --- 也可用来当2路D/A使用 --- 也可用来再实现2个定时器 --- 也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持) 17. A/D转换, 8位精度ADC,共8路,转换速度可达300K/S(每秒钟30万次) 18. 通用全双工异步串行口(UART),由于STC12系列是高速的8051,������������� 可再用定时器或PCA软件 实现多串口 19. 工作温度范围:-40 ~ +85℃(工业级) / 0 ~ 75℃(商业级) 20. 封装:LQFP-32, SOP-32/28/20/16, SKDIP-28, PDIP-20/18/16, LSSOP-20(超小封状6.4mm ×6.4mm),LQFP / SOP32有27个I/O口,SOP28 / SKDIP28有23个I/O口,SOP20/LSSOP20 / PDIP20有15个I/O口,DIP18有13个I/O口,SOP16/DIP16有11个I/O口。I/O口不够时,可用 2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫 描来节省I/O口,或用双CPU,三线通信,还多了串口。 C T S  南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.2 STC12C5201AD系列单片机的内部结构 STC12C5201AD系列单片机的内部结构框图如下图所示。STC12C5201AD单片机中包含 中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、 I/O接口、高速A/D转换、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。STC12C5201AD系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片 上系统。 RAM 256字节 . d e t i m 程序存储器(Flash) B寄存器 ACC TMP2 C T S LVD/LVR TMP1 ALU Control Unit RESET Li 堆栈指针 定时器 0/1 U C M 地址生成器 串口 程序计数器(��� PC) WDT PSW ISP/IAP PCA Port 0,2,3 锁存器 Port1 锁存器 ADC XTAL1 XTAL2 Port 1 驱动器 8 P1.0 ~ P1.7 P1.0 ~ P1.7 Port 0,2,3 驱动器 P0, P2, P3 STC12C5201AD系列内部结构框图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947  STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.3 STC12C5201AD系列������ 单片机��� 管脚图 所有封装形式均满足欧盟RoHS要求,LQFP-32采用Green标准生产 强烈推荐选择SOP-16/20/28/32贴片封装,传统的插件DIP封装稳定供货 STC12C5201系列管脚图 15 P1.7 14 P1.6 XTAL2 4 13 P1.5 XTAL1 5 12 P1.2/EX_LVD/RST2 INT1/P3.3 6 11 P1.1 CLKOUT0/T0/P3.4 7 10 P1.0 Gnd 8 9 P3.7 RST 1 20 VCC 19 P1.7 18 P1.6 17 P1.5 16 P1.4 3 XTAL2 4 XTAL1 5 INT0/P3.2 INT1/P3.3 CLKOUT0/T0/P3.4 CLKOUT1/T1/P3.5 Gnd C T S U C M 15 P1.3 14 P1.2/EX_LVD/RST2 13 P1.1 9 12 P1.0 10 11 P3.7 6 7 8 P2.2 1 32 VCC 2 31 P2.1 3 30 P2.0 RxD/P3.0 4 29 P1.7 TxD/P3.1 5 28 P1.6 P0.0 6 27 P1.5 XTAL2 7 26 P0.3 XTAL1 8 25 P1.4 INT0/P3.2 9 24 P1.3 SOP-32 P2.3 RST P0.1 10 23 P0.2 INT1/P3.3 11 22 P1.2/EX_LVD/RST2 CLKOUT0/T0/P3.4 12 21 P1.1 CLKOUT1/T1/P3.5 13 20 P1.0 P2.4 14 19 P3.7 P2.5 15 18 P2.7 Gnd 16 17 P2.6 RST RxD/P3.0 南通国芯微电子有限公司 16 4 5 6 15 14 13 7 12 8 11 9 10 1 28 VCC 2 27 P2.1 26 P2.0 25 P1.7 24 P1.6 23 P1.5 22 P1.4 21 P1.3 20 P1.2/EX_LVD/RST2 19 P1.1 18 P1.0 3 4 TxD/P3.1 5 XTAL2 6 XTAL1 7 INT0/P3.2 8 INT1/P3.3 9 CLKOUT0/T0/P3.4 10 CLKOUT1/T1/P3.5 11 P2.4 12 17 P3.7 P2.5 13 16 P2.7 Gnd 14 15 P2.6 P1.7 P2.0 P2.1 Vcc P2.2 P2.3 RST RxD/P3.0 25 26 27 28 29 30 31 32 STC12C5201���������������������������� 系列 ������������������������� (������������������������ 无����������������������� A/D�������������������� 转换,无���������������� PWM������������� 功能,无内部������� EEPROM) STC12LE5201��������������������������� 系列(无����������������������� A/D�������������������� 转换,无���������������� PWM������������� 功能,无内部������� EEPROM) 10 3 VCC P1.7 P1.6 P1.5 P1.4 P1.2/EX_LVD/RST2 P1.1 P1.0 P3.7 P1.6 P1.5 P0.3 P1.4 P1.3 P0.2 P1.2/EX_LVD/RST2 P1.1 TxD/P3.1 SOP-20/DIP-20 RxD/P3.0 2 P2.3 17 . d e t i m Li P2.2 18 2 总机:0513-5501 2928 / 2929 / 2966 24 23 22 21 20 19 18 17 3 1 LQFP-32 16 15 14 13 12 11 10 9 P1.0 P3.7 P2.7 P2.6 Gnd P2.5 P2.4 P3.5/T1/CLKOUT1 1 2 3 4 5 6 7 8 2 TxD/P3.1 RST RxD/P3.0 TxD/P3.1 XTAL2 XTAL1 INT1/P3.3 CLKOUT0/T0/P3.4 CLKOUT1/T1/P3.5 Gnd TxD/P3.1 P0.0 XTAL2 XTAL1 INT0/P3.2 P0.1 INT1/P3.3 CLKOUT0/T0/P3.4 VCC SOP-28/SKDIP-28(窄体) 16 DIP-18 1 SOP-16/DIP-16 RST RxD/P3.0 传真:0513-5501 2969 / 2956 / 2947 技术支持网站:www.STCMCU.com 2 TxD/P3.1 3 15 P1.7 14 P1.6 XTAL2 4 13 P1.5 XTAL1 5 12 P1.2/EX_LVD/RST2 INT1/P3.3 6 CLKOUT0/ECI/T0/P3.4 7 Gnd 8 9 P3.7/CCP0 RST 1 20 VCC RxD/P3.0 2 19 P1.7 TxD/P3.1 3 18 P1.6 XTAL2 4 17 P1.5 XTAL1 5 16 P1.4 INT0/P3.2 6 15 P1.3 14 P1.2/EX_LVD/RST2 13 P1.1 11 P1.1 10 P1.0 SOP-20/DIP-20 INT1/P3.3 7 CLKOUT0/ECI/T0/P3.4 8 CLKOUT1/CCP1/T1/P3.5 9 12 P1.0 10 11 P3.7/CCP0 CU M P2.2 1 32 VCC 2 31 P2.1 3 30 P2.0 RxD/P3.0 4 29 P1.7 TxD/P3.1 5 28 P1.6 P0.0 6 27 P1.5 XTAL2 7 26 P0.3 XTAL1 8 25 P1.4 INT0/P3.2 9 24 P1.3 SOP-32 P2.3 RST P0.1 10 23 P0.2 11 22 P1.2/EX_LVD/RST2 12 21 P1.1 CLKOUT1/CCP1/T1/P3.5 13 20 P1.0 P2.4 14 19 P3.7/CCP0 P2.5 15 18 P2.7 Gnd 16 17 P2.6 18 2 17 3 16 4 5 6 VCC P1.7 P1.6 P1.5 P1.4 P1.2/EX_LVD/RST2 P1.1 P1.0 P3.7/CCP0 15 14 13 7 12 8 11 9 10 P2.2 1 28 VCC P2.3 2 27 P2.1 RST 3 26 P2.0 RxD/P3.0 4 25 P1.7 TxD/P3.1 5 24 P1.6 23 P1.5 22 P1.4 21 P1.3 20 P1.2/EX_LVD/RST2 19 P1.1 18 P1.0 i m i . d te L XTAL2 6 XTAL1 7 INT0/P3.2 8 INT1/P3.3 9 CLKOUT0/ECI/T0/P3.4 10 CLKOUT1/CCP1/T1/P3.5 11 P2.4 12 17 P3.7/CCP0 P2.5 13 16 P2.7 Gnd 14 15 P2.6 P1.7 P2.0 P2.1 Vcc P2.2 P2.3 RST RxD/P3.0 25 26 27 28 29 30 31 32 LQFP-32 16 15 14 13 12 11 10 9 P1.0 P3.7/CCP0 P2.7 P2.6 Gnd P2.5 P2.4 P3.5/T1/CCP1/CLKOUT1 TxD/P3.1 P0.0 XTAL2 XTAL1 INT0/P3.2 P0.1 INT1/P3.3 CLKOUT0/ECI/T0/P3.4 INT1/P3.3 CLKOUT0/ECI/T0/P3.4 1 SOP-28/SKDIP-28(窄体) RxD/P3.0 RST RxD/P3.0 TxD/P3.1 XTAL2 XTAL1 INT1/P3.3 CLKOUT0/ECI/T0/P3.4 CLKOUT1/CCP1/T1/P3.5 Gnd P1.6 P1.5 P0.3 P1.4 P1.3 P0.2 P1.2/EX_LVD/RST2 P1.1 VCC 24 23 22 21 20 19 18 17 16 DIP-18 1 SOP-16/DIP-16 RST C T S 研发顾问:13922809991 CCP:是英文单词的缩写 Capture(捕获),Compare(比较),PWM(脉宽调制) STC12C5201PWM系列管脚图 Gnd 临时技术支持:13922829991 1 2 3 4 5 6 7 8 STC12C5201AD系列单片机指南 STC12C5202PWM系列 (无A/D转换,有PWM功能,有内部EEPROM) STC12LE5202PWM系列(无A/D转换,有PWM功能,有内部EEPROM) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 11 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 2 TxD/P3.1 3 XTAL2 4 XTAL1 5 INT1/P3.3 6 CLKOUT0/ECI/T0/P3.4 7 Gnd 8 16 VCC 1 18 15 P1.7/ADC7 2 17 3 16 RST RxD/P3.0 TxD/P3.1 P1.6/ADC6 XTAL2 P1.5/ADC5 XTAL1 P1.2/ADC2/EX_LVD/RST2 INT1/P3.3 P1.1/ADC1 CLKOUT0/ECI/T0/P3.4 P1.0/ADC0 CLKOUT1/CCP1/T1/P3.5 Gnd P3.7/CCP0 14 13 12 11 10 9 DIP-18 1 SOP-16/DIP-16 RST 研发顾问:13922809991 CCP:是英文单词的缩写 Capture(捕获),Compare(比较),PWM(脉宽调制) STC12C5201AD系列管脚图 RxD/P3.0 临时技术支持:13922829991 4 5 6 P2.2 VCC P1.7ADC7 P1.6/ADC6 P1.5/ADC5 P1.4/ADC4 P1.2/ADC2/EX_LVD/RST2 P1.1/ADC1 P1.0/ADC0 P3.7/CCP0 15 14 13 7 12 8 11 9 10 1 28 VCC 2 27 P2.1 26 P2.0 25 P1.7/ADC7 24 P1.6/ADC6 23 P1.5/ADC5 22 P1.4/ADC4 21 P1.3/ADC0 20 P1.2/ADC2/EX_LVD/RST2 19 P1.1/ADC1 18 P1.0/ADC0 SOP-28/SKDIP-28(窄体) . d e t i m P2.3 1 20 VCC RxD/P3.0 2 19 P1.7/ADC7 TxD/P3.1 3 18 P1.6/ADC6 XTAL2 4 17 P1.5/ADC5 XTAL2 XTAL1 5 16 P1.4/ADC4 XTAL1 INT0/P3.2 6 15 P1.3/ADC3 INT1/P3.3 7 14 P1.2/ADC2/EX_LVD/RST2 INT0/P3.2 CLKOUT0/ECI/T0/P3.4 8 13 P1.1/ADC1 CLKOUT1/CCP1/T1/P3.5 CLKOUT0/ECI/T0/P3.4 10 9 12 P1.0/ADC0 CLKOUT1/CCP1/T1/P3.5 11 10 11 P3.7/CCP0 P2.4 12 17 P3.7/CCP0 P2.5 13 16 P2.7 Gnd 14 15 P2.6 P2.3 2 RST 3 RxD/P3.0 4 C T S TxD/P3.1 P0.0 XTAL2 7 XTAL1 8 INT0/P3.2 9 U C M 32 VCC 31 P2.1 P2.0 29 P1.7/ADC7 5 28 P1.6/ADC6 6 27 P1.5/ADC5 26 P0.3 25 P1.4/ADC4 24 P1.3/ADC3 SOP-32 30 P0.1 10 23 P0.2 INT1/P3.3 11 22 P1.2/ADC2/EX_LVD/RST2 12 21 P1.1/ADC1 13 20 P1.0/ADC0 P2.4 14 19 P3.7/CCP0 P2.5 15 18 P2.7 Gnd 16 17 P2.6 INT1/P3.3 5 6 7 8 9 ADC7/P1.7 P2.0 P2.1 Vcc P2.2 P2.3 RST RxD/P3.0 25 26 27 28 29 30 31 32 LQFP-32 16 15 14 13 12 11 10 9 P1.0/ADC0 P3.7/CCP0 P2.7 P2.6 Gnd P2.5 P2.4 P3.5/T1/CCP1/CLKOUT1 TxD/P3.1 P0.0 XTAL2 XTAL1 INT0/P3.2 P0.1 INT1/P3.3 CLKOUT0/ECI/T0/P3.4 CLKOUT0/ECI/T0/P3.4 CLKOUT1/CCP1/T1/P3.5 Li TxD/P3.1 4 P1.6/ADC6 P1.5/ADC5 P0.3 P1.4/ADC4 P1.3/ADC3 P0.2 P1.2/ADC2/EX_LVD/RST2 P1.1/ADC1 1 RxD/P3.0 3 24 23 22 21 20 19 18 17 P2.2 RST 1 2 3 4 5 6 7 8 Gnd SOP-20/DIP-20 RST STC12C5202AD 系列(有A/D转换,有PWM功能,有内部EEPROM) STC12LE5202AD系列(有A/D转换,有PWM功能,有内部EEPROM) 12 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.4 STC12C5201AD系列单片机选型一览表 型号 U Flash 定 PCA A 工作 程序 时 SRAM 定 R 电压 存储 器 字节 时 T (V) 器字 T0 器 串 节 T1 口 D P T R E E P R O M 外 PCA 内 部 封装 看 16位 A/D 18-Pin 置 低 封装16-Pin 门 PWM 8路 复 压 (有11个I/O口) (有13个 狗 8位 I/O口) 位 检 测 封装20-Pin (有15个I/O口) 封装28-Pin 封装32-Pin (有23个I/O口) (有27个I/O口) STC12C5201AD/PWM系列单片机选型一览 STC12C5201 5.5-3.5 1K 256 有 有 1 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP STC12C5201PWM 5.5-3.5 1K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP 有 1 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12C5201AD 5.5-3.5 1K 256 有 STC12C5202 5.5-3.5 2K 256 有 STC12C5202PWM 5.5-3.5 2K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP 有 1 有 有 有 SOP/DIP DIP DIP STC12C5202AD 5.5-3.5 2K 256 有 STC12C5204 5.5-3.5 4K 256 有 STC12C5204PWM 5.5-3.5 4K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP 2 有 1 有 2路 8位 有 有 有 SOP/DIP 有 1 有 有 有 SOP/DIP . d e t i m SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12C5204AD 5.5-3.5 4K 256 有 STC12C5205 5.5-3.5 5K 256 有 STC12C5205PWM 5.5-3.5 5K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP 2 有 1 有 2路 8位 有 有 有 SOP/DIP 有 有 有 SOP/DIP Li DIP 可在应用程序区修改应用程序 2路 有 有 有 SOP/DIP DIP 可在应用程序区修改应用程序 2路 8位 有 有 有 SOP/DIP DIP 可在应用程序区修改应用程序 STC12C5205AD 5.5-3.5 5K 256 有 STC12C5206 5.5-3.5 6K 256 有 STC12C5206PWM 5.5-3.5 6K 256 有 STC12C5206AD 5.5-3.5 6K STC12LE5201 3.6-2.2 1K 有 1 2 有 1 C T S 2 有 1 U C M DIP DIP DIP DIP 256 有 256 有 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP 256 有 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP 256 有 有 1 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5202PWM 3.6-2.2 2K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5202AD 3.6-2.2 2K 256 有 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP 3.6-2.2 4K 256 有 有 1 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5204PWM 3.6-2.2 4K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5204AD 3.6-2.2 4K 256 有 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP 3.6-2.2 5K 256 有 有 1 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5205PWM 3.6-2.2 5K 256 有 2 有 1 有 2路 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP STC12LE5205AD 3.6-2.2 5K 256 有 2 有 1 有 2路 8位 有 有 有 SOP/DIP DIP SOP/LSSOP/DIP SOP/SKDIP SOP/LQFP 3.6-2.2 6K 256 有 有 有 有 SOP/DIP DIP 可在应用程序区修改应用程序 STC12LE5206PWM 3.6-2.2 6K 256 有 2 有 1 2路 有 有 有 SOP/DIP DIP 可在应用程序区修改应用程序 STC12LE5206AD 3.6-2.2 6K 256 有 2 有 1 2路 8位 有 有 有 SOP/DIP DIP 可在应用程序区修改应用程序 STC12LE5201AD/PWM系列单片机选型一览表 STC12LE5201PWM 3.6-2.2 1K STC12LE5201AD 3.6-2.2 1K STC12LE5202 STC12LE5204 STC12LE5205 STC12LE5206 3.6-2.2 2K 南通国芯微电子有限公司 有 1 有 1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 13 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.5 STC12C5201AD系列��������� 单片机最小应用系统 10μF C1 10K + R1 C2 1s ;work LED flash ;count-- ;---------------------------------------------- 212 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 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 CLKOUT0 control GATE P3.4 T0CLKO TH0 (8 Bits) INT0 . d e t i m 定时器/计数器0的模式 2: 8位自动重装 Li TL0��������������������������������������������� 的溢出不仅置位�������������������������������������� TF0����������������������������������� ,而且将������������������������������� TH0���������������������������� 内容重新装入���������������������� TL0������������������� ,������������������ TH0��������������� 内容由软件预置,重装时���� TH0� 内 容不变。 U C M 在此模式下,当T0CLKO/WAKE_CLKO.0=1时,P3.4/T0管脚配置为定时器������ 0����� 的时钟输出 CLKOUT0。输出时钟频率 = T0 溢出率/2 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: C T S 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 213 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;定时器0中断(下降沿中断)的测试程序,定时器0工作在8位自动重装模式 ;下面程序不能将单片机从掉电模式唤醒 1. C程序: /*-------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ----------------------------------*/ /* --- STC 1T Series MCU T0(Falling edge) Demo -------------------*/ /* --- Mobile: (86)13922805190 ------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------*/ /* --- 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 */ /*------------------------------------------------------------------------------*/ #include "reg51.h" sfr AUXR = 0x8e; //T0 interrupt service routine void t0int( ) interrupt 1 { } C T S void main() { AUXR = 0x80; TMOD = 0x06; TL0 = TH0 = 0xff; TR0 = 1; ET0 = 1; EA = 1; Li //Auxiliary register U C M . d e t i m //T0 interrupt (location at 000BH) //timer0 work in 1T mode //set timer0 as counter mode2 (8-bit auto-reload) //fill with 0xff to count one time //timer0 start run //enable T0 interrupt //open global interrupt switch while (1); } 214 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*-------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ----------------------------------*/ /* --- STC 1T Series MCU T0(Falling edge) Demo -------------------*/ /* --- Mobile: (86)13922805190 ------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------*/ /* --- 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 */ /*------------------------------------------------------------------------------*/ AUXR DATA 08EH ;Auxiliary register ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT ;---------------------------------------- MAIN: ORG C T S 0100H MOV SP, MOV AUXR, MOV TMOD, MOV A, MOV TL0, MOV TH0, SETB TR0 SETB ET0 SETB EA SJMP $ U C M #7FH #80H #06H #0FFH A A . d e t i m Li ;T0 interrupt (location at 000BH) ;initial SP ;timer0 work in 1T mode ;set timer0 as counter mode2 (8-bit auto-reload) ;fill with 0xff to count one time ;timer0 start run ;enable T0 interrupt ;open global interrupt switch ;----------------------------------------;T0 interrupt service routine T0INT: RETI ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 215 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.2.4 模式3(两个8位计数器) 对定时器1,在模式3时,定时器1停止计数,效果与将TR1设置为0相同。 对定时器0,此模式下定时器0的TL0及TH0作为2个独立的8位计数器。下图为模式3时的定 时器0逻辑图。TL0占用定时器0的控制位:C/T、GATE、TR0、INT0及TF0。TH0限定为定时器功 能(计数器周期),占用定时器1的TR1及TF1。此时,TH0控制定时器1中断。 模式��������������������������������������� 3�������������������������������������� 是为了增加一个附加的���������������������������� 8��������������������������� 位定时器����������������������� /���������������������� 计数器而提供的,使单片机具有三个定时器��� /�� 计数 器。模式������������������������������������������� 3������������������������������������������ 只适用于定时器����������������������������������� /���������������������������������� 计数器������������������������������� 0������������������������������ ,定时器�������������������������� T1������������������������ 处于模式�������������������� 3������������������� 时相当于��������������� TR1=0���������� ,停止计数,而��� T0� 可 作为两个定时器用。 ÷12 AUXR.7/T0x12=0 . d e t i m SYSclk ÷1 AUXR.7/T0x12=1 C/T=0 TL0 (8 bit) C/T=1 T0 Pin TR0 GATE INT0 control U C M Li TF0 Interrupt ÷12 AUXR.7/T0x12=0 C T S SYSclk ÷1 216 南通国芯微电子有限公司 AUXR.7/T0x12=0 TR1 TH0 (8 Bits) TF1 Interrupt control 定时/计数器0 模式3: 两个8位计数器 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.3 定时器/计数器1工作模式 通过对寄存器TMOD中的M1(TMOD.5)、M0(TMOD.4)的设置,定时器/计数器1有3种不同的 工作模式。 7.3.1 模式0(13位定时器/计数器) 此模式下定时器�������������������������������������� /������������������������������������� 计数器���������������������������������� 1��������������������������������� 作为������������������������������� 13����������������������������� 位定时器/计数器,有������������������� TL1���������������� 的低�������������� 5������������� 位和����������� TH1�������� 的������� 8������ 位所构成,如 下图所示。模式0的操作对于定时器1���������� 和��������� 定时器0是相同的。 AUXR.6/T1x12=0 ÷12 SYSclk ÷1 AUXR.6/T1x12=1 C/T=0 TH1 (8 bits) C/T=1 T1 Pin TR1 control GATE INT1 U C M . d e t i m TL1 (8 bits) TF1 Interrupt Li 定时器/计数器1的模式 0: 13位定时器/计数器 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工作在计数方式。 STC12C5201AD系列单片机的定时器有两种计数速率:一种是��������������� 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 217 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.3.2 模式1(16位定时器/计数器) 此模式下定时器������������������������ /����������������������� 计数器�������������������� 1������������������� 作为����������������� 16��������������� 位定时器/计数器,如下图所示。 ÷12 AUXR.6/T1x12=0 SYSclk ÷1 AUXR.6/T1x12=1 C/T=0 C/T=1 T1 Pin TR1 TL1 TH1 (8 Bits) (8 bits) TF1 Interrupt control GATE INT1 . d e t i m 定时器/计数器1的模式 1: 16位定时器/计数器 此模式下,定时器1配置为����������������������������������� 16��������������������������������� 位定时器/计数器,由����������������������� TL1�������������������� 的������������������� 8������������������ 位和���������������� TH1������������� 的������������ 8����������� 位所构成。������ TL1��� 的8位 溢出向������������������������������ TH1��������������������������� 进位,������������������������ TH1��������������������� 计数溢出置位��������������� TCON����������� 中的溢出标志位���� TF1� 。 U C M Li 当������� GATE=0(TMOD.7)时,如TR1=1,则定时器计数。GATE=1时,允许由外部输入INT1控制定 时器1,这样可实现脉宽测量。TR1为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述 见上节����������� TCON寄存器���� 的介绍� 。 C T S 当C/T=0时,多路开关连接到系统时钟的分频输出,T1对时钟周期计数,T1工作在定时方 式。当C/T=1时,多路开关连接到外部脉冲输入P3.5/T1,即T1工作在计数方式。 STC12C5201AD系列单片机的定时器有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T1������������������������������������������������� 的速率由特殊功能寄存器�������������������������������������� AUXR���������������������������������� 中的�������������������������������� T1x12��������������������������� 决定,如果���������������������� T1x12=0��������������� ,�������������� T1������������ 则工作在�������� 12T����� 模式;如果 T1x12=1������������ ,����������� T1��������� 则工作在����� 1T��� 模式。 218 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 定时器1工作在16位定时器/计数器模式的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器1的16位定时器/计数器模式 --*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" typedef unsigned char typedef unsigned int BYTE; WORD; //----------------------------------------------/* define constants */ #define FOSC 18432000L #define MODE 1T U C M C T S /* define variables */ WORD count; Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE 1T #define T1MS (65536-FOSC/1000) #else #define T1MS (65536-FOSC/12/1000) #endif /* define SFR */ sfr AUXR = sbit TEST_LED = . d e t i m 0x8e; P0^0; //1ms timer calculation method in 1T mode //1ms timer calculation method in 12T mode //Auxiliary register //work LED, flash once per second //1000 times counter //----------------------------------------------/* Timer0 interrupt routine */ void tm1_isr() interrupt 3 using 1 { TL1 = T1MS; TH1 = T1MS >> 8; if (count-- == 0) { count = 1000; TEST_LED = ! TEST_LED; } } //reload timer1 low byte //reload timer1 high byte //1ms * 1000 -> 1s //reset counter //work LED flash //----------------------------------------------南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 219 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com /* main program */ void main( ) { #ifdef MODE 1T AUXR = 0x40; #endif TMOD = 0x10; TL1 = T1MS; TH1 = T1MS >> 8; TR1 = 1; ET1 = 1; EA = 1; count = 0; } while (1); 临时技术支持:13922829991 //timer1 work in 1T mode //set timer1 as mode1 (16-bit) //initial timer1 low byte //initial timer1 high byte //timer1 start running //enable timer1 interrupt //open global interrupt switch //initial counter Li /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器1的16位定时器/计数器模式 ---*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/* define constants */ #define MODE 1T U C M ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE 1T T1MS EQU 0B800H #else T1MS EQU 0FA00H #endif ;/* define SFR */ AUXR DATA TEST_LED BIT . d e t i m //loop 2. 汇编程序: C T S 研发顾问:13922809991 ;1ms timer calculation method in 1T mode is (65536-18432000/1000) ;1ms timer calculation method in 12T mode is (65536-18432000/12/1000) 8EH P1.0 ;/* define variables */ COUNT DATA 20H ;Auxiliary register ;work LED, flash once per second ;1000 times counter (2 bytes) ;----------------------------------------------- 220 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 ORG LJMP ORG LJMP 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 0000H MAIN 001BH TM1_ISR ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #40H #endif MOV TMOD, #10H MOV TL1, #LOW T1MS MOV TH1, #HIGH T1MS SETB TR1 SETB ET1 SETB EA CLR A MOV COUNT, A MOV COUNT+1,A SJMP $ ;----------------------------------------------- ;timer1 work in 1T mode . d e t i m Li ;initial counter U C M ;/* Timer1 interrupt routine */ TM1_ISR: PUSH ACC PUSH PSW MOV TL1, #LOW T1MS MOV TH1, #HIGH T1MS MOV A, COUNT ORL A, COUNT+1 JNZ SKIP MOV COUNT, #LOW 1000 MOV COUNT+1, #HIGH 1000 CPL TEST_LED SKIP: CLR C MOV A, COUNT SUBB A, #1 MOV COUNT, A MOV A, COUNT+1 SUBB A, #0 MOV COUNT+1,A POP PSW POP ACC RETI C T S ;set timer1 as mode1 (16-bit) ;initial timer1 low byte ;initial timer1 high byte ;timer1 start running ;enable timer1 interrupt ;open global interrupt switch ;reload timer1 low byte ;reload timer1 high byte ;check whether count(2byte) is equal to 0 ;1ms * 1000 -> 1s ;work LED flash ;count-- ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 221 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.3.3 模式2(8位自动重装模式) 此模式下定时器�������������������������� /������������������������� 计数器���������������������� 1��������������������� 作为可自动重装载的������������ 8����������� 位计数器,如下图所示。 AUXR.6/T1x12=0 ÷12 Interrupt TF1 SYSclk ÷1 AUXR.6/T1x12=1 Toggle C/T=0 TL1 (8 Bits) C/T=1 T1 Pin TR1 CLKOUT1 control GATE P3.5 T1CLKO TH1 (8 Bits) INT1 . d e t i m 定时器/计数器1的模式 2: 8位自动重装 Li TL1��������������������������������������������� 的溢出不仅置位�������������������������������������� TF1����������������������������������� ,而且将������������������������������� TH1���������������������������� 内容重新装入���������������������� TL1������������������� ,������������������ TH1��������������� 内容由软件预置,重装时���� TH1� 内 容不变。 U C M 当T1CLKO/WAKE_CLKO.1=1时,P3.5/T1管脚配置为定时1的时钟输出。 ������ 输出时钟频率 = 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 222 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;定时器1中断(下降沿中断)的测试程序,定时器1工作在8位自动重装模式 ;下面程序中的定时器中断不能将单片机从掉电模式唤醒 1. C程序: /*-------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ----------------------------------*/ /* --- STC 1T Series MCU T1(Falling edge) Demo -------------------*/ /* --- Mobile: (86)13922805190 ------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------*/ /* --- 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 */ /*------------------------------------------------------------------------------*/ #include "reg51.h" sfr AUXR = 0x8e; C T S void main() { AUXR = 0x40; TMOD = 0x60; TL1 = TH1 = 0xff; TR1 = 1; ET1 = 1; EA = 1; Li //Auxiliary register U C M //T1 interrupt service routine void t1int( ) interrupt 3 { } . d e t i m //T1 interrupt (location at 001BH) //timer1 work in 1T mode //set timer1 as counter mode2 (8-bit auto-reload) //fill with 0xff to count one time //timer1 start run //enable T1 interrupt //open global interrupt switch while (1); } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 223 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*-------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ----------------------------------*/ /* --- STC 1T Series MCU T1(Falling edge) Demo -------------------*/ /* --- Mobile: (86)13922805190 ------------------------------------------*/ /* --- Fax: 86-755-82905966 ----------------------------------------------*/ /* --- 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 */ /*------------------------------------------------------------------------------*/ AUXR DATA 08EH ;Auxiliary register ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 001BH LJMP T1INT C T S ;---------------------------------------- MAIN: ORG 0100H MOV SP, MOV AUXR, MOV TMOD, MOV A, MOV TL1, MOV TH1, SETB TR1 SETB ET1 SETB EA SJMP $ #7FH #40H #60H #0FFH A A U C M . d e t i m Li ;T1 interrupt (location at 001BH) ;initial SP ;timer1 work in 1T mode ;set timer1 as counter mode2 (8-bit auto-reload) ;fill with 0xff to count one time ;timer1 start run ;enable T1 interrupt ;open global interrupt switch ;----------------------------------------;T1 interrupt service routine T1INT: RETI ;---------------------------------------- 224 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4 可编程时钟输出及测试程序(C程序和汇编程序) STC12C5201AD系列单片机有2路可编程时钟输出:CLKOUT0/T0/P3.5, CLKOUT1/T1/P3.4 与可编程时钟输出有关的特殊功能寄存器� : AUXR : Auxiliary register SFR Name Address bit AUXR 8EH name B7 B6 B5 T0x12 T1x12 UART_M0x6 B4 - B3 - B2 - B1 - B0 - WAKE_CLKO :Clock output and Power-down Wakeup Control register SFR Name Address WAKE_CLKO 8FH bit B7 B6 B5 B4 B3 name PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE B2 - B1 B0 T1CLKO T0CLKO . d e t i m 特殊功能寄存器AUXR/WAKE_CLKO的C语言声明: sfr AUXR = 0x8E; ��������� //特殊功能寄存器AUXR的地址声明 sfr WAKE_CLKO = 0x8F; //���������� 新增加特殊功能寄存器WAKE_CLKO的地址声明 Li 特殊功能寄存器AUXR/WAKE_CLKO的汇编语言声明: AUXR EQU 8EH ;特殊功能寄存器AUXR的地址声明 WAKE_CLKO EQU 8FH ;新增加的特殊功能寄存器WAKE_CLKO的地址声明 C T S U C M 如何利用CLKOUT0/P3.4和CLKOUT1/P3.5管脚输出时钟: CLKOUT0/P3.4和CLKOUT1/P3.5的时钟输出控制由WAKE_CLKO寄存器的T0CLKO位和 T1CLKO位控制� 。CLKOUT0的输出时钟频率由定时器0控制,CLKOUT1的输出时钟频率由定时 器1控制, 相应的定时器需要工作在定时器的模式2方式(8位自动重装载模式),不要允许相应的 定时器中断,免得CPU反复进中断. 新增加的特殊功能寄存器: WAKE_CLKO(地址:0x8F) WAKE_CLKO :Clock output and Power-down Wakeup Control register(不可位寻址) SFR Name Address WAKE_CLKO 8FH bit B7 B6 B5 B4 B3 name PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE B2 - B1 B0 T1CLKO T0CLKO B7 - PCAWAKEUP:在掉电模式下,是否�� 允许PCA上升沿/下降沿中断唤醒powerdown。 0����������������� :禁止PCA上升沿/下降沿中断�� 唤醒powerdown ; 1:允许PCA上升沿/下降沿中断唤醒powerdown 。 B6 - RXD_PIN_IE:掉电模式下,允许P3.0(RXD)下降沿置RI,也能使RXD唤醒powerdown. 0��� :禁止P3.0(RXD)下降沿置RI,也�� 禁止RXD唤醒powerdown ; 1:允许P3.0(RXD)下降沿置RI,也�� 允许RXD唤醒powerdown 。 B5 - T1_PIN_IE:掉电模式下,允许T1/P3.5脚下降沿置T1中断标志,也能使T1脚唤醒powerdown. 0��� :禁止T1/P3.5脚下降沿置T1中断标志,也�� 禁止T1脚唤醒powerdown ; 1:允许T1/P3.5脚下降沿置T1中断标志,也�� 允许T1脚唤醒powerdown 。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 225 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 B4 - T0_PIN_IE:掉电模式下,允许T0/P3.4脚下降沿置T0中断标志,也能使T0脚唤醒powerdown. 0��� :禁止T0/P3.4脚下降沿置T0中断标志,也�� 禁止T0脚唤醒powerdown ; 1:允许T0/P3.4脚下降沿置T0中断标志,也�� 允许T0脚唤醒powerdown 。 B3 - LVD_WAKE: 掉电模式下,是否允EX_LVD/P4.6低压检测中断唤醒CPU. 0:禁止EX_LVD/P4.6低压检测中断唤醒CPU 1:允许EX_LVD/P4.6低压检测中断唤醒CPU。 B1 - T1CLKO: 是否允许将P3.5/T1脚配置为定时器T1的时钟输出CLKOUT1 1: 允许将P3.5/T1脚配置为定时器T1的时钟输出CLKOUT1,����������� 此时定时器T1只能工 作在模式2(8位自动重装模式),CLKOUT1输出时钟频率= T1溢出率/2 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式时的输出频率 = SYSclk / ( 256 - TH1 ) / 2 T1工作在12T模式时的输出频率 = SYSclk / 12 / (256 - TH1) / 2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) /(256 - TH1) / 2 0���� :��� 不允许将P3.5/T1脚配置为定时器T1的时钟输出CLKOUT1 U C M . d e t i m Li B0 - T0CLKO:是否允许将P3.4/T0脚配置为定时器T0的时钟输出CLKOUT0 1:�� 允许将P3.4/T0脚配置为定时器T0的时钟输出CLKOUT0,����� 此时定时器T0只能工 作在模式2(8位自动重装模式),CLKOUT0输出时钟频率 = T0溢出率 / 2 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T 模式时的输出频率 = SYSclk / ( 256 - TH0 ) / 2 T0工作在12T模式时的输出频率 = SYSclk / 12 / (256 - TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 0:��� 不允许将P3.4/T0脚配置为定时器T0的时钟输出CLKOUT0 C T S 226 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 特殊功能寄存器: AUXR(地址:0x8E) AUXR : Auxiliary register(不可位寻址) SFR Name Address bit AUXR 8EH name B7 B6 B5 T0x12 T1x12 UART_M0x6 B4 - B3 - B2 - B1 - B0 - B7 - T0x12:定时器0速度控制位� 。 0���������������������������� :定时器0速度是8051单片机定时器的速度,即12分频; 1:定时器0速度是8051单片机定时器速度的12倍,即不分频。 B6 - T1x12:定时器1速度控制位� 。 0���������������������������� :定时器1速度是8051单片机定时器的速度,即12分频; 1:定时器1速度是8051单片机定时器速度的12倍,即不分频。 . d e t i m 如果UART串口用T1作为波特率发生器,则由T1x12位决定UART串口是12T还是1T。 Li UART串口的模式0: STC12C5201AD系列是1T的8051单片机,为了兼容传统8051,UART串口复位后是兼容传统8051的� 。 B5 - UART_M0x6:串口模式0的通信速度设置位� 。 0����������������������������������� :UART串口模式0的速度是传统8051单片机串口的速度,即12分频; 1:UART串口模式0的速度是传统8051单片机串口速度的6倍,即2分频。 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 227 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4.1 定时器0的可编程时钟输出的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器0的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" //----------------------------------------------/* define constants */ #define FOSC 18432000L //#define MODE 1T #ifdef MODE 1T #define F38_4KHz #else #define F38_4KHz #endif CU M (256-FOSC/2/38400) C T S /* define SFR */ sfr AUXR sfr WAKE_CLKO sbit T0CLKO Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode //38.4KHz frequency calculation method of 1T mode (256-FOSC/2/12/38400) //38.4KHz frequency calculation method of 12T mode = 0x8e; = 0x8f; = P3^4; //Auxiliary register //wakeup and clock output control register //timer0 clock output pin //----------------------------------------------/* main program */ void main() { #ifdef MODE 1T AUXR = 0x80; #endif TMOD = 0x02; TL0 = F38_4KHz; TH0 = F38_4KHz; TR0 = 1; WAKE_CLKO = 0x01; } 228 while (1); 南通国芯微电子有限公司 //timer0 work in 1T mode //set timer0 as mode2 (8-bit auto-reload) //initial timer0 //initial timer0 //timer0 start running //enable timer0 clock output //loop 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器0的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/* define constants */ #define MODE 1T ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE 1T F38_4KHz EQU 010H #else F38_4KHz EQU 0ECH #endif Li ;38.4KHz frequency calculation method of 12T mode (256-18432000/2/12/38400) ;/* define SFR */ AUXR DATA 08EH WAKE_CLKO DATA 08FH T0CLKO BIT P3.4 C T S ;---------------------------------------------- . d e t i m ;38.4KHz frequency calculation method of 1T mode is (256-18432000/2/38400) CU ;Auxiliary register ;wakeup and clock output control register ;timer0 clock output pin M ORG 0000H LJMP MAIN ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #80H #endif MOV TMOD, #02H MOV TL0, #F38_4KHz MOV TH0, #F38_4KHz SETB TR0 MOV WAKE_CLKO,#01H SJMP $ ;timer0 work in 1T mode ;set timer0 as mode2 (8-bit auto-reload) ;initial timer0 ;initial timer0 ;enable timer0 clock output ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 229 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4.2 定时器1的可编程时钟输出的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器1的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" //----------------------------------------------/* define constants */ #define FOSC 18432000L //#define MODE 1T #ifdef MODE 1T #define F38_4KHz #else #define F38_4KHz #endif CU (256-FOSC/2/38400) M //38.4KHz frequency calculation method of 1T mode (256-FOSC/2/12/38400) //38.4KHz frequency calculation method of 12T mode = 0x8e; = 0x8f; = P3^5; //Auxiliary register //wakeup and clock output control register //timer1 clock output pin C T S /* define SFR */ sfr AUXR sfr WAKE_CLKO sbit T1CLKO Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode //----------------------------------------------/* main program */ void main() { #ifdef MODE 1T AUXR = 0x40; #endif TMOD = 0x20; TL1 = F38_4KHz; TH1 = F38_4KHz; TR1 = 1; WAKE_CLKO = 0x02; } 230 while (1); 南通国芯微电子有限公司 //timer1 work in 1T mode //set timer1 as mode2 (8-bit auto-reload) //initial timer1 //initial timer1 //timer1 start running //enable timer1 clock output //loop 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机定时器1的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/* define constants */ #define MODE 1T ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE 1T F38_4KHz EQU 010H #else F38_4KHz EQU 0ECH #endif Li ;38.4KHz frequency calculation method of 12T mode (256-18432000/2/12/38400) ;/* define SFR */ AUXR DATA 08EH WAKE_CLKO DATA 08FH T1CLKO BIT P3.5 C T S ;---------------------------------------------- . d e t i m ;38.4KHz frequency calculation method of 1T mode is (256-18432000/2/38400) U C M ;Auxiliary register ;wakeup and clock output control register ;timer1 clock output pin ORG 0000H LJMP MAIN ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE 1T MOV AUXR, #40H #endif MOV TMOD, #20H MOV TL1, #F38_4KHz MOV TH1, #F38_4KHz SETB TR1 MOV WAKE_CLKO, #02H SJMP $ ;timer1 work in 1T mode ;set timer1 as mode2 (8-bit auto-reload) ;initial timer1 ;initial timer1 ;enable timer1 clock output ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 231 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.5 古老Intel 8051单片机定时器0/1的应用举例 【例1】 定时/计数器编程,定时/计数器的应用编程主要需考虑:根据应用要求,通过程序初 始化,正确设置控制字,正确计算和计算计数初值,编写中断服务程序,适时设置控制位等。 通常情况下,设置顺序大致如下: 1)工作方式控制字(TMOD、T2CON)的设置; 2)计数初值的计算并装入THx、TLx、RCAP2H、RCAP2L; 3)中断允许位ETx、EA的设置,使主机开放中断; 4) 启/停位TRx的设置等。 现以定时/计数器0或1为例作一简要介绍。 . d e t i m 8051系列单片机的定时器/计数器0或1是以不断加1进行计数的,即属加1计数器,因此,就 不能直接将实际的计数值作为计数初值送入计数寄存器THx、TLx中去,而必须将实际计数值以 28、213、216为模求补,以其补码作为计数初值设置THx和TLx。 Li 设:实际计数值为X,计数器长度为n(n=8、13、16),则应装入计数器THx、TLx中的计 数初值为2n-x,式中2n为取模值。例如,工作方式0的计数长度为13位,则n=13,以213为模, 工作方式1的计数长度为16,则n=16,以216为模等等。所以,计数初值为(x)= 2n-x。 U C M 对于定时模式,是对机器周期计数,而机器周期与选定的主频密切相关。因此,需根据应 C T S 用系统所选定的主频计算出机器周期值。现以主频6MHz为例,则机器周期为: 一个机器周期= 12 主振频率 = 12 6×106 μs = 2μs 实际定时时间Tc = x·Tp 式中Tp为机器周期,Tc为所需定时时间,x为所需计数次数。Tp和Tp一般为已知值,在求出 Tp后即可求得所需计数值x,再将x求补码,即求得定时计数初值。即 (x)补= 2n - x 例如,设定时时间Tc = 5ms,机器周期TP = 2μs,可求得定时计数次数 5ms x = = 2500次 2μs 设选用工作方式1,则n=16,则应设置的定时时间计数初值为: (x)补= 216 - x=65536-2500=63036,还需将它分解成两个8位十六进制数,分别求得低8 位为3CH装入TLx,高8位为F6H装入THx中。 工作方式0、1、2的最大计数次数分别为8192、65536和256。 对外部事件计数模式,只需根据实际计数次数求补后变换成两个十六进制码即可。 232 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 【例2】 定时/计数器应用编程,设某应用系统,选择定时/计数器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 ;设置低字节计数初值 SETB EA SETB ET1 C T S SETB TR1 (2)中断服务程序 INTT1: PUSH U C M ; 开中断 � ;其他初始化程序 ;启动T1开始计时 ;������ 继续主程序 … … . d e t i } Lim ; A ; PUSH DPL PUSH DPH MOV TL1,#0F0H MOV TH1,#0D8H POP DPH POP DPL POP A } RETI ;返回 } ; 现场保护 … … ; 南通国芯微电子有限公司 ; } ; 重新置初值 ;中断处理主体程序 ; 总机:0513-5501 2928 / 2929 / 2966 ; 现场恢复 ; 传真:0513-5501 2969 / 2956 / 2947 233 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 这里展示了中断服务子程序的基本格式。STC12C5201AD系列单片机的中断属于矢量中断, 每一个矢量中断源只留有8个字节单元,一般是不够用的,常需用转移指令转到真正的中断服 务子程序区去执行。 【例3】 对外部正脉冲测宽。选择定时/计数器2进行脉宽测试较方便,但也可选用定时/计 数器0或定时/计数器1进行测宽操作。本例选用定时/计数器0(T0)以定时模式,工作方式1对 INT0引脚上的正脉冲进行脉宽测试。 INT0 引脚 T0计数 启动 . d e t i m 停止 设置GATE为1,机器周期TP为1μs。本例程序段编制如下: INTT0: MOV TMOD,#09H MOV TL0,#00H MOV TH0,#00H CLR EX0 ;关INT0中断 LOP1: JB P3.2,LOP1 ;等待INT0引低电平 LOP2: JNB P3.2,LOP2 ;等待INT0引脚高电平 SETB TR0 ;启动T0开始计数 LOP3: JB P3.2,LOP3 ;等待INT0低电平 CLR TR0 ;停止T0计数 MOV A,TL0 ;低字节计数值送A MOV B,TH0 ;高字节计数值送B … ;计算脉宽和处理 234 C T S 南通国芯微电子有限公司 L}i U C M ;设T0为定时方式1,GATE为1 ; ; 总机:0513-5501 2928 / 2929 / 2966 TH0,TL0清0 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 【例4】 利用定时/计数器0或定时/计数器1的Tx端口改造成外部中断源输入端口的应用设计。 在某些应用系统中常会出现原有的两个外部中断源INT0和INT1不够用,而定时/计数器有 多余,则可将Tx用于增加的外部中断源。现选择定时/计数器1为对外部事件计数模式工作方式 2(自动再装入),设置计数初值为FFH,则T1端口输入一个负跳变脉冲,计数器即回0溢出, 置位对应的中断请求标志位TF1为1,向主机请求中断处理,从而达到了增加一个外部中断源的 目的。应用定时/计数器1(T1)的中断矢量转入中断服务程序处理。其程序示例如下: (1)主程序段: ORG 0000H AJMP MAIN ;转主程序 ORG 001BH LJMP INTER ;转T1中断服务程序 ORG 0100 … … MAIN: … C T S U C M ;主程序入口 . d e t i m Li MOV SP,#60H MOV TMOD,#60H ;设置定时/计数器1,计数方式2 MOV TL1,#0FFH ;设置计数常数 MOV TH1,#0FFH SETB EA ;开中断 SETB ET1 ;开定时/计数器1中断 SETB TR1 ;启动定时/计数器1计数 … ;设置堆栈区 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 235 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ORG 1000H INTER: PUSH A ; PUSH DPL ; PUSH DPH ; … … … (2)中断服务程序(具体处理程序略) ; 中断处理主体程序 ;� �� POP DPH ; POP DPL POP A RETI 这是中断服务程序的基本格式。 U C M } 现场入栈保护 } }ited. ; 现场出栈复原 Lim ; ;返回 【例5】 某应用系统需通过P1.0和P1.1分别输出周期为200μ s和400μ s的方波。为此,系统 C T S 选用定时器/计数器0(T0),定时方式3,主频为6M H z,T P=2μ s,经计算得定时常数为9C H和 本例程序段编制如下: (1)初始化程序段 PLT0: MOV TMOD,#03H ;设置T0定时方式3 MOV TL0,#9CH ;设置TL0初值 MOV TH0,#38H ;设置TH0初值 SETB EA ; SETB ET0 SETB ET1 } SETB TR0 ;启动 SETB TR1 ;启动 236 … … 38H。 南通国芯微电子有限公司 ; 开中断 ; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 (2)中断服务程序段 1) INT0P: MOV CPL RETI 2) INT1P MOV TH0,#38H CPL P1.1 RETI 在实际应用中应注意的问题如下。 (1)定时/计数器的实时性 定时/计数器启动计数后,当计满回0溢出向主机请求中断处理,由内部硬件自动进 TL0,#9CH P1.0 ;重新设置初值 ;对P1.0输出信号取反 ;返回 … … … … … … C T S U C M . d e t i m Li ;重新设置初值 ;对P1.1输出信号取反 ;返回 行。但从回0溢出请求中断到主机响应中断并作出处理存在时间延迟,且这种延时随中断请求 时的现场环境的不同而不同,一般需延时3个机器周期以上,这就给实时处理带来误差。大多 数应用场合可忽略不计,但对某些要求实时性苛刻的场合,应采用补偿措施。 这种由中断响应引起的时间延时,对定时/计数器工作于方式0或1而言有两种含义:一 是由于中断响应延时而引起的实时处理的误差;二是如需多次且连续不间断地定时/计数,由 于中断响应延时,则在中断服务程序中再置计数初值时已延误了若干个计数值而引起误差,特 别是用于定时就更明显。 例如选用定时方式1设置系统时钟,由于上述原因就会产生实时误差。这种场合应采用 动态补偿办法以减少系统始终误差。所谓动态补偿,即在中断服务程序中对THx、TLx重新置计 数初值时,应将THx、TLx从回0溢出又重新从0开始继续计数的值读出,并补偿到原计数初值中 去进行重新设置。可考虑如下补偿方法: 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 237 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 CLR EA ;禁止中断 MOV A,TLx ;读TLx中已计数值 ADD A,#LOW ;LOW为原低字节计数初值 MOV TLx,A ;设置低字节计数初值 MOV A,#HIGH ;原高字节计数初值送A ADDC A,THx ;高字节计数初值补偿 MOV THx,A ;置高字节计数初值 SETB EA ;开中断 … 研发顾问:13922809991 . d e t i m … (2)动态读取运行中的计数值 U C M Li 在动态读取运行中的定时/计数器的计数值时,如果不加注意,就可能出错。这是因为不 可能在同一时刻同时读取THx和TLx中的计数值。比如,先读TLx后读THx,因为定时/计数器处 于运行状态,在读TLx时尚未产生向THx进位,而在读THx前已产生进位,这时读得的THx就不对 C T S 了;同样,先读THx后读TLx也可能出错。 一种可避免读错的方法是:先读THx,后读TLx,将两次读得的THx进行比较;若两次读得 的值相等,则可确定读的值是正确的,否则重复上述过程,重复读得的值一般不会再错。此法 的软件编程如下: RDTM: MOV A,THx ;读取THx存A中 MOV R0,TLx ;读取TLx存R0中 CJNE A,THx,RDTM ;比较两次THx值,若相等,则读得的 ;值正确,程序往下执行,否则重读 MOV R1,A ;将THx存于R1中 238 … 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第8章 串行口通信 STC12C5201AD系列单片机具有1个采用UART(Universal Asychronous Receiver/Transmitter) 工作方式的全双工串行通信接口。串行口由2个数据缓冲器、一个移位寄存器、一个串行控制 寄存器和一个波特率发生器等组成。串行口的数据缓冲器由��������������� 2�������������� 个互相独立的接收、发送缓冲器 构成,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不 能写入,因而两个缓冲器可以共用一个地址码。串行口的两个缓冲器统称为串行通信特殊功能 寄存器����������������� SBUF������������� ,其共用的地址码是���� 99H� 。 STC12C5201AD系列单片机的两个串行口都有4种工作方式,其中两种方式的波特率是可 变的,另两种是固定的,以供不同应用场合选用。用户可用软件设置不同的波特率和选择不 同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。STC12C5201AD系列单片机串行口对应的硬件部分是TxD/P3.1和RxD/P3.0引脚。 . d e t i m STC12C5201AD系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多 个并行I/O口,或作串���������������� —��������������� 并转换,或用于扩展串行外设等。 8.1 串行口的相关寄存器 C T S U C M 符号 描述 地址 AUXR Auxiliary register 8EH SCON Serial Control 98H SBUF Serial Buffer 99H PCON Power Control IE Interrupt Enable IP 87H Li 位地址及符号 MSB T0x12 T1x12 UART_M0x6 SM0/FE SM1 SM2 LSB - REN - TB8 - RB8 复位值 - - 000x xxxxB TI RI 0000 0000B xxxx xxxxB GF1 GF0 PD ES ET1 EX1 ET0 EX0 0000 0000B Interrupt Priority Low B8H PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000 0000B IPH Interrupt Priority High B7H SADEN Slave Address Mask B9H SADDR Slave Address A9H CLK_Output Power down Wake-up WAKE_CLKO 8FH control register PPCAH PLVDH PADCH PSH PT1H PX1H PT0H IDL 0011 0000B POF 南通国芯微电子有限公司 SMOD SMOD0 LVDF A8H EA ELVD EADC PX0H 0000 0000B 0000 0000B PCAWAKEUP RxD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE 总机:0513-5501 2928 / 2929 / 2966 - T1CLKO T0CLKO 0000 0000B 0000 0x00B 传真:0513-5501 2969 / 2956 / 2947 239 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1. 串行口的控制寄存器SCON和PCON STC12C5201AD系列单片机的串行口1设有两个控制寄存器:串行控制寄存器SCON和波特 率选择特殊功能寄存器PCON。 串行控制寄存器SCON用于选择串行通信的工作方式和某些控制功能。其格式如下: SCON : 串行控制寄存器 (可位寻址) SFR name SCON Address 98H bit name B7 SM0/FE B6 SM1 B5 SM2 B4 REN B3 TB8 B2 RB8 B1 TI B0 RI SM0/FE:当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个 无效停止位时,通过UART接收器设置该位。它必须由软件清零。 当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作 方式,如下表所示。 . d e t i m 其中SM0、SM1按下列组合确定串行口1的工作方式: SM0 SM1 工作方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3 功能说明 同步移位串行 方式:移位寄 存器 8位UART, 波特率可变 9位UART C T S Li 波特率 当UART_M0x6 = 0时,波特率是SYSclk/12, 当UART_M0x6 = 1时,波特率是SYSclk / 2 U C M ( 2SMOD/32 )×(定时器1的溢出率�) (2 SMOD / 64) x SYSclk系统工作时钟频率 9位UART, (2SMOD/32 )x(定时器1的溢出率�) 波特率可变 当T1x12 = 0时��������� ,定时器����� 1的溢出率 = SYSclk/12/( 256 - T H1); 当T1x12 = 1时,�������� 定时器����� 1的溢出率 = SYSclk / ( 256 - T H1) 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中,该位不用. RB8: 在方式2或方式3,是接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。 方式0中不用RB8(置SM2=0). 方式1中也不用RB8(置SM2=0, RB8是接收到的停止位)。 240 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 TI: 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 发送中断请求中断标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置 位,即TI=1,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式 中,则在停止位开始发送时由内部硬件置位,即TI=1,响应中断后TI必须用软件清零。 RI: 接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1, 向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其他方式中,串行接收 到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须 由软件清零。 SCON的所有位可通过整机复位信号复位为全� “ 0”� 。 SCON的字节地址为98H,可位寻 址,各位地址为98H~~9FH,可用软件实现位设置。 串行通信的中断请求:当一帧发送完成,内部硬件自动置位TI,即TI=1,请求中断处理; 当接收完一帧信息时,内部硬件自动置位RI,即RI=1,请求中断处理。由于TI和RI以��� “�� 或逻 辑��������������������������� ”�������������������������� 关系向主机请求中断,所以主机响应中断时事先并不知道是TI还是RI请求的中断,必须在 中断服务程序中查询TI和RI进行判别,然后分别处理。因此,两个中断请求标志位均不能由硬 件自动置位,必须通过软件清0,否则将出现一次请求多次响应的错误。 U C M . d e t i m Li 电源控制寄存器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 C T S 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 241 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 串行口数据缓冲寄存器SBUF STC12C5201AD系列单片机的串行口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中内容不变. . d e t i m 由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位 寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中 将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。 3. 辅助寄存器AUXR U C M 辅助寄存器AUXR的格式及各位含义如下: AUXR : 辅助寄存器 (不可位寻址) C T S SFR name Address AUXR 8EH bit B7 B6 B5 name T0x12 T1x12 UART_M0x6 Li B4 B3 B2 B1 B0 - - - - - T0x12����� :���� 定时器0速度设置位 0, 定时器0是传统8051 速度,12 分频; 1, 定时器0 的速度是传统8051 的12 倍,不分频 T1x12: 定时器1速度设置位 0, 定时器1 是传统8051 速度,12 分频; 1, 定时器1 的速度是传统8051 的12 倍,不分频 如果UART串口用定时器1做波特率发生器,T1x12位就可以控制UART串口是12T还是1T了。 UART_M0x6:串行口模式0的通信速度设置位 0,����������������������������� UART串口的模式0是传统12T的8051速度,12分频; 1�������������������������������� ,������������������������������� UART串口的模式0的速度是传统12T的8051的6倍,2分频 4. 从机地址控制寄存器SADEN和SADDR 为了方便多机通信,STC12C5201AD系列单片机设置了从机地址控制寄存器SADEN和 SADDR。其中SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H),SADDR是从机地址 寄存器(地址为A9H,复位值为00H)。 242 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 5. 与串行口中断相关的寄存器IE、IP和IPH 串行口中断允许位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,禁止串行口中断。 . d e t i m IPH : 中断优先级控制寄存器高 (不可位寻址) SFR name Address IPH B7H bit B7 B6 B5 B4 B3 B2 B1 B0 name PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H CU IP : 中断优先级控制寄存器低 (可位寻址) SFR name IP PSH, PS: Address B8H bit name B7 PPCA C T S B6 PLVD M B5 PADC Li B4 PS B3 PT1 B2 PX1 B1 PT0 B0 PX0 串行口1中断优先级控制位。 当PSH=0且PS=0时,串行口1中断为最低优先级中断(优先级0) 当PSH=0且PS=1时,串行口1中断为较低优先级中断(优先级1) 当PSH=1且PS=0时,串行口1中断为较高优先级中断(优先级2) 当PSH=1且PS=1时,串行口1中断为最高优先级中断(优先级3) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 243 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.2 串行口工作模式 STC12C5201AD系列单片机的串行通信接口有4种工作模式,可通过软件编程对SCON中的 SM0、SM1的设置进行选择。其中模式1、模式2和模式3为异步通信,每个发送和接收的字符 都带有1个启动位和1个停止位。在模式0中,串行口被作为1个简单的移位寄存器使用。 8.2.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 m 模式0的发送过程:当主机执行将数据写入发送缓冲器SBUF指令时启动发送,串行口即将 8位数据以SYSclk/12或SYSclk/2(由UART_M0x6/AUXR.5确定是12分频还是2分频)的波特率从 RxD管脚输出(从低位到高位),发送完中断标志TI置"1",TxD管脚输出同步移位脉冲(SHIFTCLOCK)。波形如图8-1中“发送”所示。 U C M Li 当写信号有效后,相隔一个时钟,发送控制端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。 244 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INTERNAL BUS WRITE TO SBUF DS Q CL RxD OUTPUT FUNCTION SBUF ZERO DETECTOR SYSclk/12 SYSclk/2 START 0 TX CONTROL SERIAL PORT INTERRUPT 1 AUXR.5(UART_M0x6) REN RI TX CLOCK TI RX CLOCK RI START SHIFT SHIFT SEND RECEIVE 1 1 1 1 1 1 1 0 INPUT SHIFT REG. WRITE TO SBUF C T S . d e t i m RX CONTROL SHIFT LOAD SBUF TxD OUTPUT FUNCTION SHIFT CLOCK U C M SHIFT Li RxD INPUT FUNCTION SBUF READ SBUF INTERNAL BUS SEND SHIFT RXD(DATA OUT) TRANSMIT D0 D1 D2 D3 D4 D5 D6 D7 TXD(SHIFT CLOCK) TI WRITE TO SCON(CLEAR RI) RI RECEIVE RECEIVE SHIFT RXD(DATA IN) D0 D1 D2 D3 D4 D5 D6 D7 TXD(SHIFT CLOCK) 图8-1 串行口1模式0功能结构及时序示意图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 245 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.2.2 串行口工作模式1:8位UART,波特率可变 当软件设置SCON的SM0、SM1为� “01”��������� 时,串行口则以模式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 m Li 模式1的接收过程:当软件置位接收允许标志位REN,即REN=1时,接收器便以选定波特 率的16分频的速率采样串行接收端口RxD,当检测到RxD端口从� “1”�� →� “0”������� 的负跳变时就启 动接收器准备接收数据,并立即复位16分频计数器,将1FFH植装入移位寄存器。复位16分频 计数器是使它与输入位时间同步。 U C M 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"� 。 串行通信模式1的波特率是可变的,可变的波特由定时器/计数器1产生。 串行通信模式1的波特率=2SMOD/32×(定时器/计数器1溢出率) 当T1x12 = 0时��������� ,定时器����� 1的溢出率 = SYSclk/12/( 256 - TH1); 当T1x12 = 1时,�������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 246 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INTERNAL BUS TB8 Timer 1 Overflow WRITE TO SBUF ÷2 DS Q CL SBUF ZERO DETECTOR SMOD =1 SMOD =0 TxD SHIFT START ÷16 TX CONTROL TX CLOCK SERIAL PORT INTERRUPT SAMPLE TI SEND RI LOAD SBUF Li RX CONTROL SHIFT 1FFH CU BIT DETECTOR M RxD C T S . d e t i m ÷16 RX CLOCK START 1-TO-0 TRANSITION DETECTOR DATA 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 RECEIVE BIT DETECTOR SAMPLE TIMES SHIFT D6 D7 STOP BIT RI 图8-2 串行口模式1功能结构示意图及接收/发送时序图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 247 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.2.3 串行口工作模式2:9位UART,波特率固定 当SM0、SM1两位为10时,串行口工作在模式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时,选择1/32(SYSclk) ;当SMOD=0时,选择1/64(SYSclk) ,故而称SMOD为波特率加倍位。可见,模式2的波特率基 本上是固定的。 . d e t i m Li 图8-3为串行通信模式2的功能结构示意图及其接收/发送时序图。 由图8-3可知,模式2和模式1相比,除波特率发生源略有不同,发送时由TB8提供给移位寄 存器第9数据位不同外,其余功能结构均基本相同,其接收/发送操作过程及时序也基本相同。 U C M 当接收器接收完一帧信息后必须同时满足下列条件: ·RI=0 C T S ·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。 当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位 RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无 效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变 信息,接收下一帧的输入信息。 在模式2中,接收到的停止位与SBUF、RB8和RI无关。 通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。 248 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INTERNAL BUS TB8 WRITE TO SBUF DS Q CL SBUF TxD ZERO DETECTOR SYSclk/2 STOP BIT START GEN. MODE 2 ÷16 ÷2 TX CLOCK TI SERIAL PORT INTERRUPT SMOD=1 SMOD=0 DATA SEND 1-TO-0 TRANSITION DETECTOR START RX RI CLOCK LOAD SBUF Li RX CONTROL SHIFT 1FFH CU BIT DETECTOR M RxD C T S . d e t i m ÷16 SAMPLE (SMOD IS PCON.7) SHIFT TX CONTROL 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 RECEIVE RXD RB8 STOP BIT BIT DETECTOR SAMPLE TIMES SHIFT RI 图8-3 串行口模式2功能结构示意图及接收/发送时序图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 249 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.2.4 串行口工作模式3:9位UART,波特率可变 当SM0、SM1两位为11时,串行口工作在模式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 为接收端口,以全双工模式进行接收/发送。 模式3的波特率为: 串行通信模式3波特率=2SMOD/32×(定时器/计数器1的溢出率) 当T1x12 = 0时��������� ,定时器����� 1的溢出率 = SYSclk/12/( 256 - TH1); 当T1x12 = 1时,�������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) . d e t i m 可见,模式3和模式1一样,其波特率可通过软件对定时器/计数器1的设置进行波特率的选 择,是可变的。 Li 图8-4为串行口工作模式3的功能结构示意图及其接收/发送时序图。 由图8-4可知,模式3和模式1相比,除发送时由TB8提供给移位寄存器第9数据位不同外, 其余功能结构均基本相同,其接收���������������� ‘��������������� 发送操作过程及时序也基本相同。 U C M 当接收器接收完一帧信息后必须同时满足下列条件: ·RI=0 C T S ·SM2=0或者SM2=1,并且接收到的第9数据位RB8=1。 当上述两条件同时满足时,才将接收到的移位寄存器的数据装入SBUF和RB8中,并置位 RI=1,向主机请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无 效而丢失,也不置位RI。无论上述条件满足与否,接收器又重新开始检测RxD输入端口的跳变 信息,接收下一帧的输入信息。 在模式3中,接收到的停止位与SBUF、RB8和RI无关。 通过软件对SCON中的SM2、TB8的设置以及通信协议的约定,为多机通信提供了方便。 250 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INTERNAL BUS TB8 TIMER 1 OVERFLOW WRITE TO SBUF DS Q CL ÷2 SBUF TxD ZERO DETECTOR SMOD =0 SMOD =1 SHIFT START TX CONTROL ÷16 TX CLOCK SERIAL PORT INTERRUPT TI SEND RI LOAD SBUF . d e t i m ÷16 SAMPLE 1-TO-0 TRANSITION DETECTOR DATA RX CLOCK START Li RX CONTROL SHIFT 1FFH CU BIT DETECTOR RxD C T S 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 251 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.3 串行通信中波特率的设置 STC12C5201AD系列单片机串行通信的波特率随所选工作模式的不同而异,对于工作模式 0和模式2,其波特率与系统时钟频率SYSclk和PCON中的波特率选择位SMOD有关,而模式1 和模式3的波特率除与SYSclk和PCON位有关外,还与定时器/计数器1设置有关。通过对定时器 /计数器1的设置,可选择不同的波特率,所以这种波特率是可变的。 串行通信模式0,其波特率与系统时钟频率SYSclk有关 。 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12。 当����������� 模式0的通信速度设置� 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2。 一旦SYSclk选定且UART_M0x6/AUXR.5设置好,则串行通信工作模式0的波特率固定不 变。 . d e t i m 串行通信工作模式2,其波特率除与SYSclk有关外,还与SMOD位有关。 SMOD 其基本表达式为:串行通信模式2波特率=2 Li /64×(SYSclk系统工作时钟频率) 当SMOD=1时,波特率=2/64(SYSclk)=1/32(SYSclk); U C M 当SMOD=0时,波特率=1/64(SYSclk)。 当SYSclk选定后,通过软件设置PCON中的SMOD位,可选择两种波特率。所以,这种模 式的波特率基本固定。 C T S 串行通信模式1和3,其波特率是可变的: 模式1、3波特率=2SMOD/32×(��� 定时器/计数器1的溢出率�) 当T1x12 = 0时��������� ,定时器����� 1的溢出率 = SYSclk/12/( 256 - TH1); 当T1x12 = 1时,�������� 定时器����� 1的溢出率 = SYSclk / ( 256 - TH1) 通过对定时器/计数器1的设置,可灵活地选择不同的波特率。在实际应用中多半选用串行 模式1或串行模式3。显然,为选择波特率,关键在于定时器/计数器1的溢出率的计算。SMOD 的选择,只需根据需要执行下列指令就可实现SMOD=0或1; MOV MOV PCON,#00H PCON,#80H ;使SMOD=0 ;使SMOD=1 SMOD只占用电源控制寄存器PCON的最高一位,其他各位的具体设置应根据实际情况而 定。 252 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 为选择波特率,关键在于定时器/计数器1的溢出率。下面介绍如何计算定时器/计数器1的 溢出率。 定时器/计数器1的溢出率定义为:单位时间(秒)内定时器/计数器1回0溢出的次数,即定 时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒。 STC12C5201AD系列单片机设有两个定时器/计数器,因定时器/计数器1具有4种工作方式, 而常选用定时器/计数器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倍)。对于一般情况下, U C M . d e t i m Li 当T1x12/AUXR.6=0时,定时器/计数器1溢出一次所需的时间为:(28—N)×12时钟=(28—N)×12× 当T1x12/AUXR.6=1时,定时器/计数器1溢出一次所需的时间为:(28—N)×1时钟=(28—N)× C T S 1 SYSclk 1 SYSclk 于是得定时器/计数器每秒溢出的次数,即 当T1x12/AUXR.6=0时,定时器/计数器1的溢出率=SYSclk/12×(28-N) (次/秒) 当T1x12/AUXR.6=1时,定时器/计数器1的溢出率=SYSclk×(28-N) (次/秒) 式中SYSclk为系统时钟频率,N为再装入时间常数。 显然,选用定时器/计数器0作波特率的溢出率也一样。选用不同工作方式所获得波特率的 范围不同。因为不同方式的计数位数不同,N取值范围不同,且计数方式较复杂。现以定时器 /计数器1工作于方式2为例, 设: 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 253 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 下表给出各种常用波特率与定时器/计数器1各参数之间的关系。 常用波特率与定时器/计数器1各参数关系(T1x12/AUXR.6=0) 常用波特率 系统时钟频率 (MHz) SMOD 方式0 MAX:1M 12 × 方式2 MAX:375K 62.5K 方式1和3 19.2K 9.6K 4.8K 2.4K 1.2K 137.5 110 110 12 12 11.059 11.059 11.059 11.059 11.059 11.986 6 1 1 1 0 0 0 0 0 0 12 0 MOV MOV MOV SETB MOV MOV U C M TMOD, #20H TH1, #××H TL1, #××H TR1 PCON, #80H SCON, #50H C T S C/T × 方式 × 重新装入值 × × 0 0 0 0 0 0 0 0 × 2 2 2 2 2 2 2 2 × FFH FDH FDH FAH F4H F8H 1DH 72H 1 FFFBH Li . d e t i m 0 ;设置定时器/计数器1定时、工作方式2 ; 设置定时常数N ; ;启动定时器/计数器1 ;设置SMOD=1 ;设置串行通信方式1 … … 设置波特率的初始化程序段如下: 定时器1 执行上述程序段后,即可完成对定时器/计数器1的操作方式及串行通信的工作方式和波特 率的设置。 由于用其他工作方式设置波特率计算方法较复杂,一般应用较少,故不一一论述。 254 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.4 串行口的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机串行口1功能 (8-bit/9-bit) ----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" typedef unsigned char typedef unsigned int BYTE; WORD; U C M #define FOSC 18432000L #define BAUD 9600 C T S /*Define UART parity mode*/ #define NONE_PARITY 0 #define ODD_PARITY 1 #define EVEN_PARITY 2 #define MARK_PARITY 3 #define SPACE_PARITY 4 #define PARITYBIT sbit bit bit9 = P2^2; busy; EVEN_PARITY . d e t i m Li //System frequency //UART baudrate //None parity //Odd parity //Even parity //Mark parity //Space parity //Testing even parity //P2.2 show UART data bit9 void SendData(BYTE dat); void SendString(char *s); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8-bit variable UART #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9-bit variable UART, parity bit initial to 1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd5; //9-bit variable UART, parity bit initial to 0 #endif 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 255 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com TMOD TH1 TR1 ES EA SendString("STC12C5201AD\r\nUart Test !\r\n"); while(1); = 0x20; = TL1 = -(FOSC/12/32/BAUD); = 1; = 1; = 1; 临时技术支持:13922829991 研发顾问:13922809991 //Set Timer1 as 8-bit auto reload mode //Set auto-reload vaule //Timer1 start run //Enable UART interrupt //Open master interrupt switch } /*---------------------------UART interrupt service routine ----------------------------*/ void Uart_Isr() interrupt 4 using 1 { if (RI) { RI = 0; P0 = SBUF; bit9 = RB8; } if (TI) { TI = 0; busy = 0; } } /*---------------------------Send a byte data to UART Input: dat (data to be sent) Output:None ----------------------------*/ void SendData(BYTE dat) { while (busy); ACC = dat; if (P) { #if (PARITYBIT == ODD_PARITY) TB8 = 0; #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; #endif } C T S 256 南通国芯微电子有限公司 . d e t i m Li //Clear receive interrupt flag //P0 show UART data //P2.2 show parity bit U C M //Clear transmit interrupt flag //Clear transmit busy flag //Wait for the completion of the previous data is sent //Calculate the even parity bit P (PSW.0) //Set the parity bit according to P //Set parity bit to 0 //Set parity bit to 1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; #endif } busy = 1; SBUF = ACC; } 临时技术支持:13922829991 研发顾问:13922809991 /*---------------------------Send a string to UART Input: s (address of string) Output:None ----------------------------*/ void SendString(char *s) { while (*s) { SendData(*s++); } } C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 //Set parity bit to 1 //Set parity bit to 0 //Send data to UART buffer . d e t i m Li //Check the end of the string //Send current char and increment string ptr 传真:0513-5501 2969 / 2956 / 2947 257 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机串行口1功能 (8-bit/9-bit) ----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/*Define UART parity mode*/ #define NONE_PARITY 0 #define ODD_PARITY 1 #define EVEN_PARITY 2 #define MARK_PARITY 3 #define SPACE_PARITY 4 CU #define PARITYBIT EVEN_PARITY ;----------------------------------------BUSY BIT 20H.0 ;---------------------------------------- ORG 0000H LJMP MAIN C T S //None parity //Odd parity //Even parity //Mark parity //Space parity M . d e t i m Li //Testing even parity ;transmit busy flag ORG 0023H LJMP UART_ISR ;---------------------------------------- ORG 0100H MAIN: CLR BUSY CLR EA MOV SP, #3FH #if (PARITYBIT == NONE_PARITY) MOV SCON, #50H ;8-bit variable UART #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) MOV SCON, #0DAH ;9-bit variable UART, parity bit initial to 1 #elif (PARITYBIT == SPACE_PARITY) MOV SCON, #0D5H ;9-bit variable UART, parity bit initial to 0 #endif ;------------------------------- 258 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com MOV TMOD, #20H MOV A, #0FBH MOV TH1, A MOV TL1, A SETB TR1 SETB ES SETB EA ;------------------------------ MOV DPTR, #TESTSTR LCALL SENDSTRING ;------------------------------ SJMP $ ;----------------------------------------TESTSTR: ;Test string DB "STC12C5201AD Uart Test !", ;/*---------------------------;UART2 interrupt service routine ;----------------------------*/ UART_ISR: PUSH ACC PUSH PSW JNB RI, CHECKTI CLR RI MOV P0, SBUF MOV C, RB8 MOV P2.2, C CHECKTI: JNB TI, ISR_EXIT CLR TI CLR BUSY ISR_EXIT: POP PSW POP ACC RETI C T S 南通国芯微电子有限公司 研发顾问:13922809991 ;Set Timer1 as 8-bit auto reload mode ;256-18432000/12/32/9600 ;Set auto-reload vaule ;Timer1 start run ;Enable UART interrupt ;Open master interrupt switch ;Load string address to DPTR ;Send string . d e t i m 0DH,0AH,0 U C M ;/*---------------------------;Send a byte data to UART ;Input: ACC (data to be sent) ;Output:None ;----------------------------*/ SENDDATA: JB BUSY, $ MOV ACC, A JNB P, EVEN1INACC 临时技术支持:13922829991 Li ;Check RI bit ;Clear RI bit ;P0 show UART data ;P2.2 show parity bit ;Check S2TI bit ;Clear S2TI bit ;Clear transmit busy flag ;Wait for the completion of the previous data is sent ;Calculate the even parity bit P (PSW.0) ;Set the parity bit according to P 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 259 STC12C5201AD系列单片机指南 技术支持网站: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 C T S 260 南通国芯微电子有限公司 研发顾问:13922809991 ;Set parity bit to 0 ;Set parity bit to 1 ;Set parity bit to 1 ;Set parity bit to 0 . d e t i m ;Parity bit set completed Li ;Send data to UART buffer U C M ;/*---------------------------;Send a string to UART ;Input: DPTR (address of string) ;Output:None ;----------------------------*/ SENDSTRING: CLR A MOVC A, @A+DPTR JZ STRINGEND INC DPTR LCALL SENDDATA SJMP SENDSTRING STRINGEND: RET ;---------------------------------------- END 临时技术支持:13922829991 ;Get current char ;Check the end of the string ;increment string ptr ;Send current char ;Check next 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.8 双机通信 STC12C5201AD系列单片机的串行通信根据其应用可分为双机通信和多机通信两种。下面 先介绍双机通信。 如果两个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 m 8051 Li 为确保通信成功,通信双方必须在软件上有系列的约定通常称为软件通信������� “������ 协议���� ”��� 。现举 例简介双机异步通信软件������� “������ 协议���� ”��� 如下: 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”信号,否则回发“F0H”信号。甲机只有在接收到乙机发回的� “0FH”��������� 信号才算完成发送任 务,返回被调用的程序,否则继续呼叫,重发数据。 不同的通信要求,软件����������������������������� “���������������������������� 协议�������������������������� ”������������������������� 内容也不一样,有关需甲、乙双方共同遵守的约定应尽量 完善,以防止通信不能正确判别而失败。 STC12C5201AD系列单片机的串行通信,可直接采用查询法,也可采用自动中断法。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 261 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 (1)������������ 查询方式双机通信软件举例 ①�������� 甲机发送子程序段 下图为甲机发送子程序流程图。 开始 定时器,串行口初始化 发送数据 地址指针DPTR,长度计数器 R7,校验寄存器R6置初值 发送完否? N Y . d e t i m 发送校验和 发送呼叫信号06H CU 等待乙机回答 N 是00H? C T S Y 发字节长度数 M N Li 等待乙机回答 传送正确吗? Y 返回 甲机发送程序设置: (a) �������������������������������������������� 波特率设置:选用定时器��������������������������������� /�������������������������������� 计数器����������������������������� 1���������������������������� 定时模式、工作方式������������������� 2������������������ ,计数常数������������� F3H���������� ,��������� SMOD=1��� 。波 特率为���������� 2400������ (位���� /��� 秒); (b) �������������������� 串行通信设置:异步通信方式������� 1������ ,允许接收; 262 (c) �������������������������������������������� 内部������������������������������������������ RAM��������������������������������������� 和工作寄存器设置:������������������������������ 31H��������������������������� 和�������������������������� 30H����������������������� 单元存放发送的数据块首地址;��������� 2FH������ 单元存放 发送的数据块个数;���������� R6�������� 为累加和寄存器。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 甲机发送子程序清单: 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 m Li 发送呼叫信号“06H” U C M ;判断乙机回答信号 ;未收到回答信号,则等待 A, A, SBUF ;接收回答信号送A #00H, TX-ACK ;判断是否“00H”,否则重发呼叫信号 A, R7 ; MOV SBUF, ADD A, MOV R6, WAIT2: JBC TI, A R6 A ; 发送数据块数n TX-NES ; JMP TX-NES: MOVX MOV ADD MOV INC WAIT2 ; 等待发送完 A, SBUF, A, R6, DPTR @DPTR A R6 A ;从外部RAM取发送数据 ;发送数据块 南通国芯微电子有限公司 ;DPTR指针加1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 263 STC12C5201AD系列单片机指南 WAIT3: JBC SJMP NEXT2: DJNZ TX-SUM: MOV MOV WAIT4: JBC TI, 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 TI, WAIT3 NEXT2 ;判断一数据块发送完否 ;等待发送完 R7, TX-NES ;判断发送全部结束否 A, R6 SBUF, A ;发送累加和给乙机 RX-0FH ; SJMP RX-0FH: JBC WAIT4 ; 等待发送完 SJMP IF-0FH: MOV RX-0FH CJNE RET RI, A, A, IF-0FH . d e t i m ; SBUF; 研发顾问:13922809991 ; 等待接收乙机回答信号 ; Li #0FH, ST-RAM ; 判断传输是否正确,否则重新发送 ;返回 C T S U C M 乙机接收子程序段 接收程序段的设置: (a) ��������������� 波特率设置初始化:同发送程序; (b) �������������� 串行通信初始化:同发送程序; (c) ������ 寄存器设置: 内部RAM 31H、30H单元存放接收数据缓冲区首地址。 R7——数据块个数寄存器。 R6——累加和寄存器。 (d) ��������� 向甲机回答信号:“0FH”为接收正确,“F0H”为传送出错,“00H”为同意接收数 据,“05H”为暂不接收。 264 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 下图为双机通信查询方式乙机接收子程序流程图。 开始 定时器,串行口初始化 接收数据并存入RAM 地址指针DPTR赋值, 校验寄存器清0 地址指针DPTR加1 数据接收完否? N Y . d e t i m 接收呼叫信号 接收校验和 是06H? Y Li 传送正确吗? N 向甲机回送15H 向甲机回送00H C T S 接收数据块长度 U C M Y N 向甲机回送F0H 向甲机回送0FH 返回 接收子程序清单: TART: MOV MOV MOV SETB MOV TMOD, #20H TH1, #0F3H ; TL1, #0F3H TR1 SCON, #50H ; 定时器/计数器1设置 ;启动定时器/计数器1 ; 置串行通信方式1,允许接收 MOV ST-RAM: MOV PCON, #80H ; SMOD置位 DPH, 31H ; DPL, 30H R6, #00H ; 设置DPTR首地址 ;校验和寄存器清0 MOV MOV 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 265 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RX-ACK: JBC RI, IF-06H SJMP RX-ACK MOV A, CJNEA #06H, TX-05H ;判断接收呼叫信号 ;等待接收呼叫信号 IF-06H: SBUF ;呼叫信号送A ;判断呼叫信号正确否? TX-00H: MOV A, #00H MOV WAIT1: SBUF, A JBC TI, SJMP WAIT1 ; ; RX-BYS 向甲机发送“00H”,同意接收 ;等待应答信号发送完 TX-05H: MOV A, #05H MOV SBUF, A ;不正确信号 WAIT2:  JBC TI, RX-BYS: JBC C T S LJMP RX-ACK U C M HAVE1 SJMP WAIT2 HAVE1:  RI, Li ;等待发送完 ;因呼叫错,返回重新接收呼叫 HAVE2 SJMP RX-BYS . d e t i m ;向甲机发送“05H”呼叫 ;等待接收数据块个数 ; 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 266 A, ; SBUF ; ;接收到的数据存入外部RAM 南通国芯微电子有限公司 接收数据帧 ; ; ; 形成累加和 ;判断数据是否接收完 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RX-SUM: JBC RI, HAVE4 SJMP RX-SUM HAVE4: ; ; MOV A, SBUF CJNE TX-RIT: A, R6, MOV A, #0FH MOV WAIT3: JBC SJMP TX-ERR: MOV A, MOV SBUF, A JBC TI, ; ; ; #0F0H LJMP RET 判断传输是否正确 向甲机发送接收正确信息 . d e t i m 等待发送结束 Li ;向甲机发送传输有误信号 U C M C T S ST-RAM GOOD: AGAIN SJMP WAIT4 AGAIN: ; WAIT4: ; GOOD WAIT3 TX-ERR ; SBUF, A TI, 等待接收校验和 ;等待发送完 ;返回重新开始接收 ;传输正确返回 (2)中断方式双机通信软件举例 在很多应用场合,双机通信的双方或一方采用中断方式以提高通信效率。由于STC12C5201AD系列单片机的串行通信是双工的,且中断系统只提供一个中断矢量入口地址,所 以实际上是中断和查询必须相结合,即接收/发送均可各自请求中断,响应中断时主机并不知 道是谁请求中断,统一转入同一个中断矢量入口,必须由中断服务程序查询确定并转入对应的 服务程序进行处理。 这里,任以上述协议为例,甲方(发送方)任以查询方式通信(从略),乙方(接收方) 则改用中断���������� —��������� 查询方式进行通信。 在中断接收服务程序中,需设置三个标志位来判断所接收的信息是呼叫信号还是数据块个 数,是数据还是校验和。增设寄存器:内部RAM32H单元为数据块个数寄存器,33H单元为校 验和寄存器,位地址7FH、7EH、7DH为标志位。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 267 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 乙机接收中断服务程序清单 采用中断方式时,应在主程序中安排定时器/计数器、串行通信等初始化程序。通信接收的数据存放在外 部RAM的首地址也需在主程序中确定。 主程序: ORG AJMP START ORG 0023H LIMP SERVE 0000H ;转至主程序起始处 ;转中断服务程序处 · · · . d e t i m 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 268 C T S ;定义定时器/计数器1定时、工作方式2 ; Li ; 设置波特率为2400位/秒 ;设置串行通信方式1,允许接收 U C M ;设置SMOD=1 ;启动定时器 ; ;设置标志位为1 ; ; 规定接收的数据存储于外部RAM的 ; 起始地址1000H ;累加和单元清0 ; ; 开中断 · · · 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 中断服务程序: 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 TXRI: MOV WAIT1: #0FH SBUF, A JNB TI, WAITI CLR TI SJMP AGAIN TXERR: MOV MOV WAIT2: #0F0H TI, CLR TI SJMP AGAIN ;等待发送完毕 ;转结束处理 ; ; WAIT2 Li 向甲机发送接收正确信号“0FH” ;清除发送中断请求标志位 SBUF, A JNB C T S A, U C M ; . d e t i m 向甲机发送接收出错信号“F0H” ;等待发送完毕 ;清除发送中断请求标志 ;转结束处理 RXACK: MOV A, SBUF ;判断是否是呼叫信号“06H” XRL A, #06H ;异或逻辑处理 JZ TXREE ;是呼叫,则转TXREE TXNACK: MOV A, MOV SBUF, A 南通国芯微电子有限公司 #05H ;接收到的不是呼叫信号,则向甲机发送 ;“05H”,要求重发呼叫 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 269 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 WAIT3: JNB TI, CLR TI SJMP RETURN WAIT3 ; 等待发送结束 ;转恢复现场处理 TXREE: MOV A, MOV SBUF, A #00H JNB TI, CLR TI CLR 7FH SJMP RETURN ;接收到的是呼叫信号,发送“00H” ;接收到的是呼叫信号,发送“00H” WAIT4: WAIT4 ;等待发送完毕 ;清除TI标志 ;清除呼叫标志 MOV A, MOV 32H, A ADD A, MOV CLR 33H, A 7EH SJMP RETURN RXDATA: 33H ;存入32H单元 U C M C T S Li ;接收到数据块数 ; ; 形成累加和 ;清除数据块数标志 ;转恢复现场处理 MOV DPH, 31H MOV MOV DPL, 30H A, SBUF 270 SBUF ; ; 设置存储数据地址指针 ;读取数据帧 MOVX @DPTR, A INC DPTR MOV 31H, DPH MOV ADD 30H, DPL A, 33H MOV DJNZ 33H, A 32H, RETURN ; 形成累加和 ;判断数据接收完否 CLR 7DH ;清数据接收完标志 SJMP RETURN 南通国芯微电子有限公司 ;将数据存外部RAM . d e t i m ;转恢复现场处理 RXBYS: ;地址指针加1 ; ; ; 保存地址指针值 ;转恢复现场处理 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 AGAIN: SETB 7FH ; SETB 7EH ;恢复标志位 SETB 7DH ; MOV 33H, #00H ;累加和单元清0 MOV 31H, #10H ; 30H, ; ; MOV RETURN: POP A POP DPL POP DPH SETB EA RET1 #00H 恢复接收数据缓冲区首地址 ;恢复现场 ; . d e t i m ;开中断 ;返回 U C M Li 上述程序清单中,ORG为程序段说明伪指令,在程序汇编时,它向汇编程序说明该程序段 的起始地址。 在实际应用中情况多种多样,而且是两台独立的计算机之间进行信息传输。因此,应周密 考虑通信协议,以保证通信的正确性和成功率 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 271 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.9 多机通信 在很多实际应用系统中,需要多台微计算机协调工作。STC12C5201AD系列单片机的串 行通信方式2和方式3具有多机通信功能,可构成各种分布式通信系统。下图为全双工主从式 多机通信系统的连接框图。 TxD 8051 RxD TxD RxD 8051 TxD U C M . d e t i m Li RxD 8051 TxD … RxD 8051 上图为一台主机和几台从机组成的全双工多机通信系统。主机可与任一台从机通信,而从 机之间的通信必须通过知己转发。 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��������������� ,不会产生中断请求,直至被寻址 为止。 272 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ④ 主机在发送完呼叫地址帧后,接着发送一连串的数据帧,其中的� ����������������������������� TB8=0�������������� ,以表示为数据帧。����� ⑤ 当主机改变从机通信时间则再发呼叫地址帧,寻呼其他从机,原先 ����������������������������� 被寻址的从机经分析得知主机在寻呼其他从机时,恢复其���������������� SM2=1����������� ,对其后主机发送的数据 帧不予理睬。 上述过程均在软件控制下实现。 (2)�������� 多机通信协议简述 ����������������������������� 由于串行通信是在二台或多台各自完全独立的系统之间进行信息传 输这就需要根据时间通信要求制定某些约定,作为通信规范遵照执行,协议要求严格、完 善,不同的通信要求,协议的内容也不相同。在多机通信系统中要考虑的问题较多,协议内容 比较复杂。这里仅例举几条作一说明。 . d e t i m Li 上图的主从式多机通信系统,允许配置���������������� 255������������� 台从机,各从机的地址分别为00H~FEH。 ① 约定地址�������������������������������������� ������������������������������������������ FFH����������������������������������� 为全部从机的控制命令,命令各从机恢复����������������� SM2=1������������ 状态,准备接收主机的地 址呼叫。 ② 主机和从机的联络过程约定:主机首先发送地址呼叫帧,被寻址的从机回送本机地址 �������������������������������������� 给主机,经验证地址相符后主机再向被寻址的从机发送命令字,被寻址的从机根据命 令字要求回送本机的状态,若主机判断状态正常,主机即开始发送或接收数据帧,发 送或接收的第一帧为传输数据块长度。 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���������� ,从机接收准备就绪; ⑤ 其他:如传输出错措施等。 ������������ 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 273 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 (3)���� 程序举例 �������������������������������������� 在实际应用中如传输波特率不太高,系统实时性有一定要求以及希望提高通信效率,则 多半采用中断控制方式,但程序调试较困难,这就要求提高程序编制的正确性。采用查询方 式,则程序调试较方便。这里仅以中断控制方式为例简单介绍主������������� —������������ 从机之间一对一通信软件。 ① 主机发送程序 ������ 该主机要发送的数据存放在内部����������������������������� RAM�������������������������� 中,数据块的首地址为���������������� 51H������������� ,数据块长度存放做���� 50H� 单 元中,有关发送前的初始化、参数设置等采用子程序格式,所有信息发送均由中断服务程序完 成。当主机需要发送时,在完成发送子程序的调用之后,随即返回主程序继续执行。以后只需 查询��������������������������� PSW·5���������������������� 的��������������������� F0������������������� 标志位的状态即可知道数据是否发送完毕。 要求主机向��������������������� #5������������������� 从机发送数据,中断服务程序选用工作寄存存器区1的R0~R7。 . d e t i m 主机发送程序清单: ORG AJMP MAIN ORG 0023H ;发送中断服务程序入口 LJMP SERVE ;转中断服务程序 0000H Li . . . MAIN: ... C T S ... . . . ORG 1000H TXCALL: ;转主程序 U C M ;主程序 ;发送子程序入口 MOV TMOD, #20H MOV TH1, #0F3H ;设置波特率为2400位/秒 MOV TL1, #0F3H ;置位SMOD ;设置定时器/计数器1定时、方式2 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: 274 WAIT1 南通国芯微电子有限公司 ;等待发送完毕 ;复位发送中断请求标志 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RXADDR: JNB RI, CLR TI MOV A, SBUF CJNE A, #05H, TXADDR CLR TB8 CLR PSW.5 RXADDR ;等待从机回答本机地址 ;复位接收中断请求标志 ;读取从机回答的本机地址 ;判断呼叫地址符否,否则重发 ;地址相符,复位TB8=0,准备发数据 ;复位F0=0标志位 MOV 08H, #50H ;发送数据地址指针送R0 MOV 0CH, 50H ;数据块长度送R4 INC 0CH SETB ES RET ;数据块长度加1 ;允许串行通信中断 SERVE: CLR TI U C M PUSH PSW PUSH A CLR RS1 Li ;中断服务程序段,清中断请求标志TI ; ; ; ; C T S . d e t i m ;返回主程序 . . . 现场入栈保护 SETB TXDATA: RS0 MOV SBUF, @R0 JNB TI, CLR TI ;复位TI=0 INC R0 ;地址指针加1 DJNZ R4, SETB PSW.5 ;已发送完毕置位F0=1 CLR ES ;关闭串行中断 WAIT2: WAIT2 RETURN 选择工作寄存器区1 ;发送数据块长度及数据 ;等待发送完毕 ;数据块未发送完,转返回 RETURN: POP A POP RETI PSW 南通国芯微电子有限公司 ; ; 恢复现场 ;返回 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 275 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ②������ 从机接收程序 主机发送的地址呼叫帧,所有的从机均接收,若不是呼叫本机地址即从中断返回;若是 本机地址,则回送本机地址给主机作为应答,并开始接收主机发送来的数据块长度帧,并存放 于内部RAM的60H单元中,紧接着接收的数据帧存放于61H为首地址的内部RAM单元中,程序 中还选用20·0H、20·1H位作标志位,用来判断接收的是地址、数据块长度还是数据,选用了 2FH、2EH两个字节单元用于存放数据字节数和存储数据指针。#5从机的接收程序如下,供参 考。 #5从机接收程序清单: ORG AJMP START 0000H ORG 0023H LJMP SERVE ORG 0100H ;转主程序段 ;从中断入口转中断服务程序 START: MOV TMOD, #20H MOV TH1, #0F3H MOV TL1, #0F3H MOV PCON, #80H C T S Li ;主程序段:初始化程序,设置定时 ;器/计数器1定时、工作方式2,设 ;置波特率为2400位/秒的有关初值 ;置位SMOD MOV SCON, #0F0H SETB TR1 ;启动定时器/计数器1 SETB 20·0 ; SETB SETB 20·1 EA ; ; 置标志位为1 SETB . . . ES ; 开中断 ORG 1000H ;清接收请求中断标志RI=0 ; SERVE: CLR RI PUSH A 276 U C M . d e t i m ;设置串行方式3,允许接收,SM2=1 PUSH PSW CLR RS1 SETB JB RS0 20·0H, ISADDR ; 选择工作寄存器区1 ;判断是否是地址帧 JB 20·1H, ISBYTE ;判断是否是数据块长度帧 南通国芯微电子有限公司 ; ; 现场保护 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 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 m ; 是地址呼叫,判断与本机地址 WAIT: U C M Li ;等待发送结束 ;清0TI,20·0,SM2 ;清0TI,20·0,SM2 ;清0TI,20·0,SM2 C T S ISBYTES: WAIT ; 相符否,不符则转返回 ;相符,发回答信号“01H” ;转返回 MOV A, SBUF MOV R0, #60H MOV @R0, A ;将数据块长度存入内部RAM MOV 2FH, A ;60H单元及2FH单元 MOV 2EH, #61H CLR 20·1H ;接收数据块长度帧 ; ;置首地址61H于2EH单元 ;清20·1H标志,表示以后接收的为数据 RETURN: POP PSW POP RETI A ; ; 恢复现场 ;返回 多机通信方式可多种多样,上例仅以最简单的住一从式作了简单介绍,仅供参考。 对于串行通信工作方式0的同步方式,常用于通过移位寄存器进行扩展并行I/O口,或配 置某些串行通信接口的外部设备。例如,串行打印机、显示器等。这里就不一一举例了。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 277 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第9章 STC12C5201AD系列单片机的A/D转换器 9.1 A/D转换器的结构 STC12C5201AD系列带A/D转换的单片机的A/D转换口在P1口� (P1.7-P1.0)�������� ,有������ 8����� 路���� 8��� 位高速 A/D转换器������ ,����� 速度可达到300KHz(30万次���� /��� 秒�� )� 。8路电压输入型A/D,可做温度检测、电池电压 检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8 路中的任何一路设置为A/D转换,不需作为A/D使用的口可继续作为I/O口使用。 STC12C5201AD系列单片机ADC(A/D转换器��������� )�������� 的结构如下图所示。 ADC_CONTR Register ADC_POWER SPEED1 SPEED0 ADC_FLAG 模拟输入信号通道选择 开关CHS2/CHS1/CHS0 ADC6/P1.6 ADC4/P1.4 ADC3/P1.3 ADC2/P1.2 ADC1/P1.1 ADC0/P1.0 C T S Li A/D转换结果寄存器: ADC_ RES ADC7/P1.7 ADC5/P1.5 . d e t i m ADC_START CHS2 CHS1 CHS0 + U C M - 逐次比较 寄存器 比较器 8-bit DAC ADC_RES[7:0] ADC_B9 ADC_B8 ADC_B7 ADC_B6 ADC_B5 ADC_B4 ADC_B3 ADC_B2 STC12C5201AD系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、8位DAC、转 换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。 STC12C5201AD系列单片机的ADC是逐次比较型ADC。逐次比较型ADC由一个比较器和D/A 转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换 器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。逐次比较 型A/D转换器具有速度高,功耗低等优点。 278 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 从上图可以看出,通过模拟多路开关,将通过ADC0~7的模拟量输入送给比较器。用数 /模转换器(DAC)转换的模拟量与本次输入的模拟量通过比较器进行比较,将比较结果保存到 逐次比较器,并通过逐次比较寄存器输出转换结果。A/D转换结束后,最终的转换结果保存到 ADC转换结果寄存器ADC_RES,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换结束标志位 ADC_FLAG,以供程序查询或发出中断申请。模拟通道的选择控制由ADC控制寄存器ADC_CONTR中 的CHS2 ~ CHS0确定。ADC的转换速度由ADC控制寄存器中的SPEED1和SPEED0确定。在使用ADC 之前,应先给ADC上电,也就是置位ADC控制寄存器中的ADC_POWER位。 模拟/ 数字转换结果计算公式如下所示: 8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x Vin . d e t i m Vcc Li 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为 模拟参考电压。 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 279 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.2 与A/D转换相关的寄存器 与STC12C5201AD系列单片机A/D转换相关的寄存器列于下表所示。 位地址及其符号 符号 描述 地址 P1ASF P1 Analog Function Configure register 9DH P17ASF P16ASF P15ASF P14ASF P13ASF P12ASF P11ASF P10ASF 0000 0000B ADC_CONTR ADC Control Register BCH ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000 0000B MSB LSB ADC_RES IE ADC Result Register Interrupt Enable BDH A8H IP Interrupt Priority Low B8H PPCA PLVD PADC IPH Interrupt Priority High B7H PPCAH PLVDH PADCH PSH PT1H PX1H PT0H EA ELVD EADC 1. P1口模拟功能控制寄存器P1ASF U C M ES 复位值 0000 0000B 0000 0000B ET1 EX1 ET0 EX0 PT1 PX1 PT0 PX0 0000 0000B PS . d e t i m PX0H 0000 0000B Li STC12C5201AD系列单片机的����������������������������������� A/D转换������������������������������ 通道与��������������������������� P1口(P1.7-P1.0)������������� 复用����������� ,上电复位后P1口为弱 上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的 P1口可继续作为I/O口使用���������������������������������� (建议只作为输入)������������������������� 。需作为A/D使用的口需先将P1ASF特殊功能寄存 器中的相应位置为‘1’,将相应的口设置为模拟功能。P1ASF寄存器的格式如下: C T S P1ASF : P1口模拟功能控制寄存器(该寄存器是只写寄存器,读无效�) SFR name P1ASF Address 9DH bit name B7 B6 B5 B4 B3 B2 B1 B0 P17ASF P16ASF P15ASF P14ASF P13ASF P12ASF P11ASF P10ASF 当P1口中的相应位作为A/D使用时,要将P1ASF中的相应位置1. P1ASF[7:0] P1.x的功能 其中P1ASF寄存器地址为:[9DH](不能够进行位寻址) P1ASF.0 = 1 P1.0口作为模拟功能A/D使用 P1ASF.1 = 1 P1.1口作为模拟功能A/D使用 P1ASF.2 = 1 P1.2口作为模拟功能A/D使用 或P1.2口作为比较器用时,在Power_Down模式下低功耗 P1ASF.3 = 1 P1.3口作为模拟功能A/D使用 P1ASF.4 = 1 P1.4口作为模拟功能A/D使用 P1ASF.5 = 1 P1.5口作为模拟功能A/D使用 P1ASF.6 = 1 P1.6口作为模拟功能A/D使用 P1ASF.7 = 1 P1.7口作为模拟功能A/D使用 280 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. ADC控制寄存器ADC_CONTR ADC_CONTR寄存器的格式如下: ADC_CONTR : ADC控制寄存器 SFR name Address ADC_CONTR BCH B7 bit B6 B5 B4 B3 B2 B1 B0 name ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 对ADC_CONTR寄存器进行操作,建议直接用MOV赋值语句,不要用‘与’和‘或’语句� 。 ADC_POWER: ADC电源控制位。 0:关闭A/D转换器电源; 1:打开A/D转换器电源. 建议进入空闲模式前,将ADC电源关闭,� 即ADC_POWER =0。�� 启动A/D转换前一定要确 认A/D电源已打开,A/D转换结束后关闭A/D电源可降低功耗,也可不关闭。初次打开内部A/D 转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换� 。 建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于高精度A/D 转换��������������������� ,若能将定时器/串行口/中断系统关闭更好。 SPEED1,SPEED0:模数转换器转换速度控制位 U C M SPEED1 SPEED0 A/D转换所需时间 1 1 1 0 0 1 0 0 . d e t i m Li 70个时钟周期转换一次,CPU工作频率21MHz时, A/D转换速度约300KHz C T S 140个时钟周期转换一次 280个时钟周期转换一次 420个时钟周期转换一次 STC12C5201AD系列单片机的A/D转换模块说使用的时钟是内部R/C振荡器所产生的系统时钟,不 使用时钟分频寄存器CLK_DIV对系统时钟分频后所产生的供给CPU工作所使用的时钟. 好处: 这样可以让ADC用较高的频率工作,提高A/D的转换速度 这样可以让CPU用较低的频率工作,降低系统的功耗 ADC_FLAG:模数转换器转换结束标志位����������� ,���������� 当A/D转换完成后,ADC_FLAG = 1,要由软件清0. 不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换 是否结束����������� ,���������� 当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。 ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 281 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 CHS2/CHS1/CHS0:模拟输入通道选择,CHS2/CHS1/CHS0 CHS2 CHS1 CHS0 Analog Channel Select (模拟输入通道选择) 0 0 0 选择 P1.0 作为A/D输入来用 0 0 1 选择 P1.1 作为A/D输入来用 0 1 0 选择 P1.2 作为A/D输入来用 0 1 1 选择 P1.3 作为A/D输入来用 1 0 0 选择 P1.4 作为A/D输入来用 1 0 1 选择 P1.5 作为A/D输入来用 1 1 0 选择 P1.6 作为A/D输入来用 1 1 1 选择 P1.7 作为A/D输入来用 程序中需要注意的事项: . d e t i m Li 由于是2套时钟,所以,设置ADC_CONTR控制寄存器后,要加4个空操作延时才可以正确读 到ADC_CONTR寄存器的值,原因是设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU 时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器. 282 U C M MOV ADC_CONTR, #DATA NOP NOP NOP NOP MOV A, ADC_CONTR ;经过4个时钟延时后,才能够正确读到ADC_CONTR控制寄存器的值 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 3. A/D转换结果寄存器ADC_RES 特殊功能寄存器ADC_RES和ADC_RESL寄存器用于保存A/D转换结果,其格式如下: Mnemonic Add Name B7 ADC_RES BDh A/D转换结果寄存器 B6 B5 B4 B3 B2 B1 B0 模拟/ 数字� (A/D)���������� 转换结果计算公式如下所示: 8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x Vin Vcc 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为 模拟参考电压。 . d e t i m 4. 与A/D中断有关的寄存器 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 ELVD B5 EADC U C M Li B4 ES B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的中断开放标志,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 C T S EADC : A/D转换中断允许位。 EADC=1,允许A/D转换中断; EADC=0,禁止A/D转换中断。 如果要允许A/D转换中断则需要将相应的控制位置1: 1、将EADC置1,允许ADC中断,这是ADC中断的中断控制位。 2、将EA置1,打开单片机总中断控制位,此位不打开,也是无法产生ADC中断的A/D中断服务程 序中要用软件清A/D中断请求标志位ADC_FLAG(也是A/D转换结束标志位)。 IPH : 中断优先级控制寄存器高 (不可位寻址) SFR name Address IPH B7H bit B7 B6 B5 B4 B3 B2 B1 B0 name PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H IP : 中断优先级控制寄存器低 (可位寻址) SFR name IP Address B8H PADCH, PADC: bit name B7 PPCA B6 PLVD B5 PADC B4 PS B3 PT1 B2 PX1 B1 PT0 B0 PX0 A/D转换中断优先级控制位。 当PADCH=0且PADC=0时,A/D转换中断为最低优先级中断(优先级0) 当PADCH=0且PADC=1时,A/D转换中断为较低优先级中断(优先级1) 当PADCH=1且PADC=0时,A/D转换中断为较高优先级中断(优先级2) 当PADCH=1且PADC=1时,A/D转换中断为最高优先级中断(优先级3) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 ‘ 283 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.3 A/D转换典型应用线路 1 28 Vcc P2.3 2 27 P2.1 RST 3 26 P2.0 RxD/P3.0 4 25 P1.7/ADC7 TxD/P3.1 5 24 P1.6/ADC6 XTAL2 6 23 P1.5/ADC5 XTAL1 7 22 P1.4/ADC4 INT0/P3.2 8 21 P1.3/ADC3 INT1/P3.3 9 20 P1.2/ADC2 19 P1.1/ADC1 CLKOUT0/ECI/T0/P3.4 10 CLKOUT1/PWM1/PCA1/T1/P3.5 11 P2.4 SOP-28/SKDIP-28 P2.2 18 P1.0/ADC0 12 17 P3.7/PCA0/PWM0 P2.5 13 16 P2.7 Gnd 14 15 P2.6 47pF以上 A/D转换在P1口,P1.0 - P1.7共8路 C T S 284 南通国芯微电子有限公司 U C M 1K 信号源 . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.4 A/D做按键扫描应用线路图 P2.2 1 28 Vcc P2.3 2 27 P2.1 Vcc 3 26 P2.0 4 25 P1.7/ADC7 TxD/P3.1 5 24 P1.6/ADC6 XTAL2 6 XTAL1 7 INT0/P3.2 8 INT1/P3.3 9 SOP-28/SKDIP-28 RST RxD/P3.0 23 P1.5/ADC5 22 P1.4/ADC4 21 P1.3/ADC3 20 P1.2/ADC2 47pF以上 1/2 Vcc 10K 2/3 Vcc 10K P1.1/ADC1 18 P1.0/ADC0 12 17 P3.7/PCA0/PWM0 13 16 P2.7 14 15 P2.6 10 11 P2.4 P2.5 Gnd 3/4 Vcc 10K A/D转换在P1口,P1.0 - P1.7共8路 P2.2 1 28 P2.3 2 27 C T S 3 26 RxD/P3.0 4 25 TxD/P3.1 XTAL2 XTAL1 5 6 7 INT0/P3.2 8 INT1/P3.3 9 SOP-28/SKDIP-28 RST 24 U C M Vcc P1.6/ADC6 P1.5/ADC5 22 P1.4/ADC4 21 P1.3/ADC3 20 P1.2/ADC2 19 P1.1/ADC1 18 P1.0/ADC0 sw1 10 11 P2.4 12 17 P3.7/PCA0/PWM0 P2.5 13 16 P2.7 Gnd 14 15 P2.6 R1 520Ω 47pF sw1 R2 520Ω R3 1.8KΩ R4 R5 R6 3.3KΩ 5.4KΩ 8.2KΩ sw2 sw3 sw4 0`0.5 0 CLKOUT0/ECI/T0/P3.4 +5V R1 10KΩ 47pF CLKOUT1/PWM1/PCA1/T1/P3.5 R0 ADCx 10KΩ Li ADCx P1.7/ADC7 23 . d e t i m 5/4 Vcc +5V P2.1 P2.0 0V 10K 19 CLKOUT0/ECI/T0/P3.4 CLKOUT1/PWM1/PCA1/T1/P3.5 10K 1K 0.5`1 1`1.5 sw5 sw6 1.5`2.0 2.0`2.5 此电路可以实现单个按键扫描和组合按 键检测功能,但是具体电阻值应根据实 际需要进行选择 本电路图采用10个按键等间隔分压,每个按键正负误差余量允 许在±0.25V范围内变化,可以有效避免因为电阻误差或温度 漂移等造成的按键检测失效,如果要求按键检测更加稳定可 靠,可以减少按键数量放宽各个按键检测电压允许误差量。 R2 1.2KΩ sw2 R3 1.6KΩ sw3 R4 1.8KΩ sw4 R5 3KΩ sw5 R6 4KΩ sw6 R7 6.5Ω sw7 R8 10KΩ sw8 R9 30KΩ sw9 R10 100KΩ sw10 sw11 0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 285 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.5 A/D转换模块的参考电压源 STC12C5201AD系列单片机的参考电压源是输入工作电压Vcc,所以一般不用外接参考电 压源。如7805的输出电压是5V,但实际电压可能是4.88V 到4.96V,用户需要精度比较高的 话,可在出厂时将实际测出的工作电压值记录在单片机内部的EEPROM 里面,以供计算。 如果有些用户的Vcc不固定,如电池供电,电池电压在5.3V-4.2V之间漂移,则Vcc不固 定,就需要在8路A/D转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压 Vcc,再计算出其他几路A/D转换通道的电压。如可在ADC转换通道的第七通道外接一个1.25V (或1V,或...)的基准参考电压源,由此求出此时的工作电压Vcc,再计算出其它几路A/D 转换通道的电压������������������� (理论依据是短时间之内,Vcc不变)� 。 C T S 286 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.6 A/D转换测试程序(C程序和汇编程序) 9.6.1 A/D转换测试程序(ADC中断方式) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 A/D转换功能-----------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" #define FOSC 18432000L #define BAUD 9600 C T S typedef unsigned char typedef unsigned int BYTE; WORD; /*Declare SFR associated with the ADC */ sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD; sfr P1ASF = 0x9D; U C M /*Define ADC operation const for ADC_CONTR*/ #define ADC_POWER 0x80 #define ADC_FLAG 0x10 #define ADC_START 0x08 #define ADC_SPEEDLL 0x00 #define ADC_SPEEDL 0x20 #define ADC_SPEEDH 0x40 #define ADC_SPEEDHH 0x60 . d e t i m Li //ADC control register //ADC 8-bit result register //P1 secondary function control register //ADC power control bit //ADC complete flag //ADC start control bit //420 clocks //280 clocks //140 clocks //70 clocks void InitUart(); void SendData(BYTE dat); void Delay(WORD n); void InitADC(); BYTE ch = 0; 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 //ADC channel NO. 传真:0513-5501 2969 / 2956 / 2947 287 STC12C5201AD系列单片机指南 void main() { InitUart(); InitADC(); IE = 0xa0; } while (1); 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 //Init UART, use to show ADC result //Init ADC sfr //Enable ADC interrupt and Open master interrupt switch //Start A/D conversion /*---------------------------ADC interrupt service routine ----------------------------*/ void adc_isr() interrupt 5 using 1 { ADC_CONTR &= !ADC_FLAG; . d e t i m //Clear ADC interrupt flag Li SendData(ch); SendData(ADC_RES); if (++ch > 7) ch = 0; //switch to next channel ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch; } C T S 研发顾问:13922809991 //Show Channel NO. //Get ADC 8-bit result and Send to UART U C M /*---------------------------Initial ADC sfr ----------------------------*/ void InitADC( ) { P1ASF = 0xff; //Set all P1 as analog input port ADC_RES = 0; //Clear previous result ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch; Delay(2); //ADC power-on delay and Start A/D conversion } /*---------------------------Initial UART ----------------------------*/ void InitUart() { SCON = 0x5a; TMOD = 0x20; TH1 = TL1 = -(FOSC/12/32/BAUD); TR1 = 1; } 288 南通国芯微电子有限公司 //8 bit data ,no parity bit //T1 as 8-bit auto reload //Set Uart baudrate //T1 start running 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com /*---------------------------Send one byte data to PC Input: dat (UART data) Output:----------------------------*/ void SendData(BYTE dat) { while (!TI); TI = 0; SBUF = dat; } /*---------------------------Software delay function ----------------------------*/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } 南通国芯微电子有限公司 C T S 临时技术支持:13922829991 研发顾问:13922809991 //Wait for the previous data is sent //Clear TI flag //Send current data U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 289 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/*Declare SFR associated with the ADC */ ADC_CONTR EQU 0BCH ADC_RES EQU 0BDH P1ASF EQU 09DH ;ADC control register ;ADC 8-bit result register ;P1 secondary function control register ;/*Define ADC operation const for ADC_CONTR*/ ADC_POWER EQU 80H ADC_FLAG EQU 10H ADC_START EQU 08H ADC_SPEEDLL EQU 00H ADC_SPEEDL EQU 20H ADC_SPEEDH EQU 40H ADC_SPEEDHH EQU 60H ;ADC power control bit ;ADC complete flag ;ADC start control bit ;420 clocks ;280 clocks ;140 clocks ;70 clocks ADCCH ;ADC channel NO. U C M C T S DATA 20H . d e t i m Li ;---------------------------------------- ORG 0000H LJMP MAIN ORG 002BH LJMP ADC_ISR ;---------------------------------------- ORG 0100H MAIN: MOV SP, #3FH MOV ADCCH, #0 LCALL INIT_UART LCALL INIT_ADC MOV IE, #0A0H SJMP $ 290 南通国芯微电子有限公司 ;Init UART, use to show ADC result ;Init ADC sfr ;Enable ADC interrupt and Open master interrupt switch 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;/*---------------------------;ADC interrupt service routine ;----------------------------*/ ADC_ISR: PUSH ACC PUSH PSW ANL MOV LCALL MOV LCALL ADC_CONTR, #NOT ADC_FLAG A, ADCCH SEND_DATA A, ADC_RES SEND_DATA INC MOV ANL MOV ORL MOV POP POP RETI ADCCH A, ADCCH A, #07H ADCCH, A A, #ADC_POWER | ADC_SPEEDLL | ADC_START ADC_CONTR, A ;ADC power-on delay and re-start A/D conversion PSW ACC C T S U C M ;Clear ADC interrupt flag ;Send channel NO. ;Get ADC 8-bit result ;Send to UART . d e t i m Li ;/*---------------------------;Initial ADC sfr ;----------------------------*/ INIT_ADC: MOV P1ASF, #0FFH ;Set all P1 as analog input port MOV ADC_RES, #0 ;Clear previous result MOV A, ADCCH ORL A, #ADC_POWER | ADC_SPEEDLL | ADC_START MOV ADC_CONTR, A ;ADC power-on delay and Start A/D conversion MOV A, #2 LCALL DELAY RET 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 291 STC12C5201AD系列单片机指南 ;/*---------------------------;Initial UART ;----------------------------*/ INIT_UART: MOV SCON, MOV TMOD, MOV A, MOV TH1, MOV TL1, SETB TR1 RET ;/*---------------------------;Send one byte data to PC ;Input: ACC (UART data) ;Output:;----------------------------*/ SEND_DATA: JNB TI, CLR TI MOV SBUF, RET 技术支持网站:www.STCMCU.com #5AH #20H #-5 A A $ A C T S ;/*---------------------------;Software delay function ;----------------------------*/ DELAY: MOV R2, CLR A MOV R0, MOV R1, DELAY1: DJNZ R0, DJNZ R1, DJNZ R2, RET 292 研发顾问:13922809991 ;8 bit data ,no parity bit ;T1 as 8-bit auto reload ;Set Uart baudrate -(18432000/12/32/9600) ;Set T1 reload value ;T1 start running U C M 临时技术支持:13922829991 . d e t i m Li ;Wait for the previous data is sent ;Clear TI flag ;Send current data A A A DELAY1 DELAY1 DELAY1 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.6.2 A/D转换测试程序(ADC查询方式) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" #define FOSC 18432000L #define BAUD 9600 typedef unsigned char typedef unsigned int BYTE; WORD; C T S /*Declare SFR associated with the ADC */ sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD; sfr P1ASF = 0x9D; U C M /*Define ADC operation const for ADC_CONTR*/ #define ADC_POWER 0x80 #define ADC_FLAG 0x10 #define ADC_START 0x08 #define ADC_SPEEDLL 0x00 #define ADC_SPEEDL 0x20 #define ADC_SPEEDH 0x40 #define ADC_SPEEDHH 0x60 . d e t i m Li //ADC control register //ADC high 8-bit result register //P1 secondary function control register //ADC power control bit //ADC complete flag //ADC start control bit //420 clocks //280 clocks //140 clocks //70 clocks void InitUart(); void InitADC(); void SendData(BYTE dat); BYTE GetADCResult(BYTE ch); void Delay(WORD n); void ShowResult(BYTE ch); 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 293 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com void main() { InitUart(); InitADC(); while (1) { ShowResult(0); ShowResult(1); ShowResult(2); ShowResult(3); ShowResult(4); ShowResult(5); ShowResult(6); ShowResult(7); } } /*---------------------------Send ADC result to UART ----------------------------*/ void ShowResult(BYTE ch) { SendData(ch); SendData(GetADCResult(ch)); } C T S 临时技术支持:13922829991 研发顾问:13922809991 //Init UART, use to show ADC result //Init ADC sfr //Show Channel0 //Show Channel1 //Show Channel2 //Show Channel3 //Show Channel4 //Show Channel5 //Show Channel6 //Show Channel7 U C M . d e t i m Li //Show Channel NO. //Show ADC high 8-bit result /*---------------------------Get ADC result ----------------------------*/ BYTE GetADCResult(BYTE ch) { ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); //Must wait before inquiry _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG)); //Wait complete flag ADC_CONTR &= ~ADC_FLAG; //Close ADC return ADC_RES; //Return ADC result } 294 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com /*---------------------------Initial UART ----------------------------*/ void InitUart() { SCON = 0x5a; TMOD = 0x20; TH1 = TL1 = -(FOSC/12/32/BAUD); TR1 = 1; } 临时技术支持:13922829991 研发顾问:13922809991 //8 bit data ,no parity bit //T1 as 8-bit auto reload //Set Uart baudrate //T1 start running /*---------------------------Initial ADC sfr ----------------------------*/ void InitADC() { P1ASF = 0xff; //Open 8 channels ADC function ADC_RES = 0; //Clear previous result ADC_CONTR = ADC_POWER | ADC_SPEEDLL; Delay(2); //ADC power-on and delay } /*---------------------------Send one byte data to PC Input: dat (UART data) Output:----------------------------*/ void SendData(BYTE dat) { while (!TI); TI = 0; SBUF = dat; } C T S U C M . d e t i m Li //Wait for the previous data is sent //Clear TI flag //Send current data /*---------------------------Software delay function ----------------------------*/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 295 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/*Declare SFR associated with the ADC */ ADC_CONTR EQU 0BCH ADC_RES EQU 0BDH P1ASF EQU 09DH U C M ;/*Define ADC operation const for ADC_CONTR*/ ADC_POWER EQU 80H ADC_FLAG EQU 10H ADC_START EQU 08H ADC_SPEEDLL EQU 00H ADC_SPEEDL EQU 20H ADC_SPEEDH EQU 40H ADC_SPEEDHH EQU 60H C T S ;---------------------------------------- ORG 0000H LJMP MAIN ;---------------------------------------- ORG 0100H MAIN: LCALL INIT_UART LCALL INIT_ADC ;------------------------------NEXT: MOV A, #0 LCALL SHOW_RESULT MOV A,#1 LCALL SHOW_RESULT MOV A,#2 LCALL SHOW_RESULT 296 南通国芯微电子有限公司 . d e t i m ;ADC control register ;ADC 8-bit result register ;P1 secondary function control register Li ;ADC power control bit ;ADC complete flag ;ADC start control bit ;420 clocks ;280 clocks ;140 clocks ;70 clocks ;Init UART, use to show ADC result ;Init ADC sfr ;Show channel0 result ;Show channel1 result ;Show channel2 result 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL 技术支持网站:www.STCMCU.com A, #3 SHOW_RESULT A, #4 SHOW_RESULT A, #5 SHOW_RESULT A, #6 SHOW_RESULT A, #7 SHOW_RESULT 临时技术支持:13922829991 ;Show channel3 result ;Show channel4 result ;Show channel5 result ;Show channel6 result ;Show channel7 result 研发顾问:13922809991 SJMP NEXT ;/*---------------------------;Send ADC result to UART ;Input: ACC (ADC channel NO.) ;Output:;----------------------------*/ SHOW_RESULT: LCALL SEND_DATA LCALL GET_ADC_RESULT LCALL SEND_DATA RET C T S U C M . d e t i m Li ;Show Channel NO. ;Get high 8-bit ADC result ;Show result ;/*---------------------------;Read ADC conversion result ;Input: ACC (ADC channel NO.) ;Output:ACC (ADC result) ;----------------------------*/ GET_ADC_RESULT: ORL A, #ADC_POWER | ADC_SPEEDLL | ADC_START MOV ADC_CONTR, A ;Start A/D conversion NOP ;Must wait before inquiry NOP NOP NOP WAIT: MOV A, ADC_CONTR ;Wait complete flag JNB ACC.4, WAIT ;ADC_FLAG(ADC_CONTR.4) ANL ADC_CONTR ,#NOT ADC_FLAG ;Clear ADC_FLAG MOV A, ADC_RES ;Return ADC result RET 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 297 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com ;/*---------------------------;Initial ADC sfr ;----------------------------*/ INIT_ADC: MOV P1ASF, #0FFH MOV ADC_RES, MOV ADC_CONTR, MOV A, #2 LCALL DELAY RET ;/*---------------------------;Initial UART ;----------------------------*/ INIT_UART: MOV SCON, MOV TMOD, MOV A, MOV TH1, MOV TL1, SETB TR1 RET ;/*---------------------------;Send one byte data to PC ;Input: ACC (UART data) ;Output:;----------------------------*/ SEND_DATA: JNB TI,$ CLR TI MOV SBUF, RET #5AH #20H #-5 A A ;/*---------------------------;Software delay function ;----------------------------*/ DELAY: MOV R2, CLR A MOV R0, MOV R1, DELAY1: DJNZ R0, DJNZ R1, DJNZ R2, RET 298 A 研发顾问:13922809991 ;Open 8 channels ADC function #0 ;Clear previous result #ADC_POWER | ADC_SPEEDLL ;ADC power-on and delay U C M C T S 临时技术支持:13922829991 . d e t i m ;8 bit data ,no parity bit ;T1 as 8-bit auto reload ;Set Uart baudrate -(18432000/12/32/9600) ;Set T1 reload value Li ;T1 start running ;Wait for the previous data is sent ;Clear TI flag ;Send current data A A A DELAY1 DELAY1 DELAY1 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第10章 STC12C5201AD系列单片机PCA/PWM应用 STC12C5201AD����������������������������������� 系列单片机集成了两路可编程计数器阵列(PCA)模块,可用于软件定时器、 外部脉冲的捕捉、高速输出以及脉宽调制(PWM)输出。 10.1 与PCA/PWM应用有关的特殊功能寄存器 STC12C5201AD系列 1T 8051单片机 PCA/PWM特殊功能寄存器表 PCA/PWM SFRs 符号 描述 地址 位地址及其符号 复位值 B7 B6 B5 B4 B3 B2 B1 B0 CF CR - - - - CCF1 CCF0 00xx,xx00 - - - CPS0 ECF CCON PCA Control Register D8H CMOD PCA Mode Register D9H CIDL CCAPM0 PCA Module 0 Mode Register DAH - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000 CCAPM1 PCA Module 1 Mode Register DBH - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000 CL PCA Base Timer Low E9H CH PCA Base Timer High F9H . d e t i m CPS2 CPS1 Li U C M 0xxx,0000 0000,0000 0000,0000 CCAP0L PCA Module-0 Capture EAH Register Low CCAP0H PCA Module-0 Capture Register High FAH CCAP1L PCA Module-1 Capture Register Low EBH 0000,0000 CCAP1H PCA Module-1 Capture Register High FBH 0000,0000 PCA_PWM0 PCA PWM Mode Auxiliary Register 0 F2H - - - - - - EPC0H EPC0L xxxx,xx00 PCA_PWM1 PCA PWM Mode Auxiliary Register 1 F3H - - - - - - EPC1H EPC1L xxxx,xx00 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 0000,0000 0000,0000 传真:0513-5501 2969 / 2956 / 2947 299 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1. PCA工作模式寄存器CMOD PCA工作模式寄存器的格式如下: CMOD : PCA工作模式寄存器 SFR name CMOD Address D9H bit name B7 B6 B5 B4 B3 B2 B1 B0 CIDL - - - CPS2 CPS1 CPS0 ECF CIDL:空闲模式下是否停止PCA计数的控制位。 当CIDL=0时,����� 空闲模式下PCA计数器继续工作� ; 当CIDL=1时,����� 空闲模式下PCA计数器停止工作。 CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。PCA计数脉冲选择如下表所示。 CPS2 CPS1 CPS0 0 0 0 0,系统时钟,SYSclk/12 0 0 1 1,系统时钟,SYSclk/2 . d e t i m 选择PCA/PWM时钟源输入 Li 0 1 0 2,定时器0的溢出��������������������� 脉冲。由于定时器0可以工作在1T模式,所以 可以达到计一个时钟就溢出,从而达到最高频率CPU工作时 钟SYSclk。通过改变定时器0的溢出率,��������� 可以实现可调频率的 PWM输出 0 1 1 3,ECI/P1.2(或P4.1)脚输入的外部时钟(最大速率=SYSclk/2) 1 0 0 1 1 1 0 1 1 4,系统时钟,SYSclk 5,系统时钟/4,SYSclk/4 6,系统时钟/6,SYSclk/6 7,系统时钟/8,SYSclk/8 C T S 1 0 1 U C M 例如,CPS2/CPS1/CPS0 = 1/0/0时,PCA/PWM的时钟源是SYSclk,不用����� 定时器�� 0� ,PWM的 频率为SYSclk/256 如果要����� 用���� 系统时钟/3来作为PCA的时钟源,应让T0工作在1T模式,�� 计� 数3个脉冲即产生溢出. 如果此时使用内部RC作为系统时钟(室温情况下,5V单片机为11MHz ~ 15.5MHz),可以 输出14K ~ 19K频率的PWM。用T0的溢出可对系统时钟进行1 ~ 256级分频. ECF:PCA计数溢出中断使能� 位。 当ECF = 0时,禁止寄存器CCON中CF位的中断; 当ECF = 1时,允许寄存器CCON中CF位的中断� 。 300 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. PCA控制寄存器CCON PCA控制寄存器的格式如下: CCON : PCA控制控制寄存器 SFR name CCON Address D8H bit name B7 B6 B5 B4 B3 B2 B1 B0 CF CR - - - - CCF1 CCF0 CF:PCA计数器阵列溢出标志位。当PCA计数����� 器溢出�� 时� ,CF由硬件置位。如果CMOD寄存器 的ECF位置位, � 则CF标志可用来产生中断。CF位可通过硬件或软件置位, 但只可通过 软件清零。 CR:PCA计数器阵列�������������������� 运行控制位。该位通过软件置位, 用来起动PCA计数器阵列计数。该位 通过软件清零, 用来关闭PCA计数器。 . d e t i m CCF1:PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。该位必须通过软件清零。 CCF0:PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。该位必须通过软件清零。 3. PCA比较/捕获寄存器CCAPM0和CCAPM1 PCA模块0的比较/捕获寄存器的格式如下: U C M CCAPM0 : PCA模块0的比较/捕获寄存器 SFR name CCAPM0 Address DAH bit name C T S B7:保留为将来之用。 B7 - B6 B5 ECOM0 CAPP0 Li B4 B3 B2 B1 B0 CAPN0 MAT0 TOG0 PWM0 ECCF0 ECOM0:允许比较器功能控制位� 。 当ECOM0=1时��������� ,允许������ 比较器功能。 CAPP0: 正捕获���� 控制位� 。 当CAPP0=1时��������� ,允许������ 上升沿捕获。 CAPN0:负������ 捕获���� 控制位� 。 当CAPN0=1时��������� ,允许下降���� 沿捕获。 MAT0: 匹配���� 控制位� 。 当MAT0=1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存 器的中断标志位CCF0。 TOG0: 翻转控制位� 。 当TOG0=1时,工作在PCA高速输出模式,PCA计数器的值与模块的比较/捕获寄存 器的值的匹配将使CEX0脚翻转。 (CCP0/PCA0/PWM0/P1.3) PWM0: 脉宽调节模式。 当PWM0=1时,�� 允许CEX0脚用作脉宽调节输出。 (CCP0/PCA0/PWM0/P1.3) ECCF0: 使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0, 用来产生中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 301 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 PCA模块1的比较/捕获寄存器的格式如下: CCAPM1 : PCA模块1的比较/捕获寄存器 SFR name CCAPM1 Address DBH bit name B7 - B6 B5 ECOM1 CAPP1 B4 B3 B2 B1 B0 CAPN1 MAT1 TOG1 PWM1 ECCF1 B7:保留为将来之用。 ECOM1:允许比较器功能控制位� 。 当ECOM1=1时��������� ,允许������ 比较器功能。 CAPP1: 正捕获���� 控制位� 。 当CAPP1=1时��������� ,允许������ 上升沿捕获。 CAPN1:负������ 捕获���� 控制位� 。 当CAPN1=1时��������� ,允许下降���� 沿捕获。 . d e t i m MAT1: 匹配���� 控制位� 。 当MAT1=1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存 器的中断标志位CCF1。 U C M Li TOG1: 翻转控制位� 。 当TOG1=1时,工作在PCA高速输出模式,PCA计数器的值与模块的比较/捕获寄存 器的值的匹配将使CEX1脚翻转。 (CCP1/PCA1/PWM1/P1.4) C T S PWM1: 脉宽调节模式。 当PWM1=1时,�� 允许CEX1脚用作脉宽调节输出。 (CCP1/PCA1/PWM1/P1.4) ECCF1: 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1, 用来产生中断。 PCA模块�������������� 的工作模式设定表如下表所列: PCA模块工作模式��� 设定� (CCAPMn寄存器,n = 0,1) - ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn 模块功能 0 0 0 0 0 0 0 无此操作 1 0 0 0 0 1 0 8位PWM,无中断 1 1 0 0 0 1 1 8位PWM输出,由低变高可产生中断 1 0 1 0 0 1 1 8位PWM输出,由高变低可产生中断 8位PWM输出,由低变高或者由高变低均可 1 1 1 0 0 1 1 产生中断 X 1 0 0 0 0 X 16位捕获模式,由CCPn/PCAn的上升沿触发 X 0 1 0 0 0 X 16位捕获模式,由CCPn/PCAn的下降沿触发 X 1 1 0 0 0 X 16位捕获模式 由CCPn/PCAn的跳变触发 1 0 0 1 0 0 X 16位软件定时器 1 0 0 1 1 0 X 16位高速输出 302 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 4. PCA的16位计数器 — 低8位CL和高8位CH CL和CH地址分别为E9H和F9H,复位值均为00H,用于保存PCA的装载值。 5. PCA捕捉/比较寄存器 — CCAPnL(低位字节)和CCAPnH(高位字节) 当PCA模块用于捕获或比较时,它们用于保存各个模块的16位捕捉计数值;当PCA模块用 于PWM模式时,它们用来控制输出的占空比。其中,n=0、1,分别对应模块0和模块1。复位 值均为00H。它们对应的地址分别为: CCAP0L — EAH、CCAP0H — FAH:模块0的捕捉/比较寄存器。 CCAP1L — EBH、CCAP1H — FBH:模块1的捕捉/比较寄存器。 . d e t i m 6. PCA模块PWM寄存器PCA_PWM0和PCA_PWM1 PCA模块0的PWM寄存器的格式如下: PCA_PWM0 : PCA模块0的PWM寄存器 SFR name PCA_PWM0 Address F2H bit name B7 - B6 B5 - - U C M EPC0H:在PWM模式下,与CCAP0H组成9位数。 Li B3 B2 - - B4 - B1 B0 EPC0H EPC0L EPC0L:在PWM模式下,与CCAP0L组成9位数。 C T S PCA模块1的PWM寄存器的格式如下: PCA_PWM1 : PCA模块1的PWM寄存器 SFR name PCA_PWM1 Address F3H bit name B7 B6 B5 B4 B3 B2 - - - - - - B1 B0 EPC1H EPC1L EPC1H:在PWM模式下,与CCAP1H组成9位数。 EPC1L:在PWM模式下,与CCAP1L组成9位数。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 303 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.2 PCA/PWM模块的结构 STC12C5201AD系列单片机有2路可编程计数器阵列PCA/PWM。 PCA含有一个特殊的16位定时器,有2个16位的捕获/比较模块与之相连������� ,如下图所示。 模块 0 P3.7/CCP0/PCA0/PWM0 模块 1 P3.5/CCP1/PCA1/PWM1 16位PCA 定时器/计数器 . d e t i m PCA模块结构 每个模块可编程工作在4种模式下:上升/下降沿捕获、软件定时器、高速输出或可调制脉 冲输出。 STC12C5201AD系列: 模块0连接到P3.7/CCP0, 模块1连接到P3.5/CCP1。 Li U C M 16位PCA定时器/计数器是2个模块的公共时间基准,其结构如下图所示。 C T S SYSclk/1 SYSclk/2 至PCA模块 SYSclk/4 SYSclk/6 CH CL 16位计数器 SYSclk/8 PCA中断 SYSclk/12 定时器0溢出 外部输入ECI(P1.2) IDLE CMOD CIDL CF - CR - - - CPS2 CPS1 CPS0 - - - ECF CCF1 CCF0 CCON PCA 定时器/计数器结构 304 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 寄存器CH和CL的内容是正在自由递增计数的16位PCA定时器的值。PCA定时器是2个模块的 公共时间基准,可通过编程工作在:1/12��������������������������� 系统时钟����������������������� 、1/8������������������� 系统时钟��������������� 、1/6����������� 系统时钟������� 、1/4��� 系统时 钟����������������������������� 、1/2������������������������� 系统时钟��������������������� 、�������������������� 系统时钟���������������� 、定时器0溢出或ECI脚的输入(STC12C5201AD系列在P3.4口)。 定时器的计数源由CMOD��������������������������������������� 特殊功能寄存器中������������������������������� 的CPS2,CPS1和CPS0位来确定(见CMOD特殊功能寄存 器说明)。 CMOD��������������������������������������� 特殊功能寄存器还有������������������������������ 2����������������������������� 个位与�������������������������� PCA����������������������� 相关。它们分别是:�������������� CIDL���������� ,空闲模式下允许停止 PCA������������������������������������������������� ;������������������������������������������������ ECF��������������������������������������������� ,置位时,使能�������������������������������������� PCA����������������������������������� 中断,当������������������������������� PCA���������������������������� 定时器溢出将���������������������� PCA������������������� 计数溢出标志������������� CF����������� (���������� CCON.7���� )置位。 CCON������������������������������������������ 特殊功能寄存器包含��������������������������������� PCA������������������������������ 的运行控制位(����������������������� CR��������������������� )和������������������� PCA���������������� 定时器标志(���������� CF�������� )以及各个模块的 标志(���������������������������������������������������� CCF1/CCF0������������������������������������������� )。通过软件置位����������������������������������� CR��������������������������������� 位(������������������������������� CCON.6������������������������� )来运行��������������������� PCA������������������ 。����������������� CR��������������� 位被清零时���������� PCA������� 关闭。当��� PCA 计数器溢出时,������������������������������������������� CF����������������������������������������� 位(��������������������������������������� CCON.7��������������������������������� )置位������������������������������ ,����������������������������� 如果��������������������������� CMOD����������������������� 寄存器的������������������� ECF���������������� 位置位������������� ,������������ 就产生中断。������ CF���� 位只可通 过软件清除。����������������������������������������� CCON������������������������������������� 寄存器的位�������������������������������� 0������������������������������� ~������������������������������ 3����������������������������� 是���������������������������� PCA������������������������� 各个模块的标志(位���������������� 0��������������� 对应模块����������� 0���������� ,位�������� 1������� 对应模块��� 1�� ), 当发生匹配或比较时由硬件置位。这些标志也只能通过软件清除。所有模块共用一个中断向 量。������������� PCA���������� 的中断系统如图所示。 . d e t i m Li PCA����������������������������������������� 的每个模块都对应一个特殊功能寄存器。它们分别是:模块��������������� 0�������������� 对应������������ CCAPM0������ ,模块��� 1�� 对应 CCAPM1,����������������������� 特殊功能寄存器包含了相应模块的工作模式控制位。 U C M 当模块发生匹配或比较时,������������������������������������� ECCFn�������������������������������� 位(������������������������������ CCAPMn.0���������������������� ,��������������������� n�������������������� =������������������� 0������������������ ,����������������� 1���������������� 由工作的模块决定)使能����� CCON 特殊功能寄存器的������������ CCFn�������� 标志来产生中断。 C T S PWM��������������������� (�������������������� CCAPMn.1������������ )用来使能脉宽调制模式。 当��������������������������������������������� PCA������������������������������������������ 计数值与模块的捕获��������������������������������� /�������������������������������� 比较寄存器的值相匹配时,如果������������������ TOG��������������� 位(������������� CCAPMn.2����� )置位,模 块的������������ CEXn�������� 输出将发生翻转。 当��������������������������������������������� PCA������������������������������������������ 计数值与模块的捕获��������������������������������� /�������������������������������� 比较寄存器的值相匹配时,如果匹配位��������������� MATn����������� (���������� CCAPMn.3�� )置 位,������������������ CCON�������������� 寄存器的���������� CCFn������ 位将被置位。 CAPNn������������������������������������������������� (������������������������������������������������ CCAPMn.4���������������������������������������� )和�������������������������������������� CAPPn��������������������������������� (�������������������������������� CCAPMn.5������������������������ )用来设置捕获输入的有效沿。���������� CAPNn����� 位使能下降 沿有效,��������������������������������������� CAPPn���������������������������������� 位使能上升沿有效。如果两位都置位,则两种跳变沿都被使能,捕获可在两种 跳变沿产生。 通过置位����������������������������������� CCAPMn����������������������������� 寄存器的������������������������� ECOMn�������������������� 位(������������������ CCAPMn.6���������� )来使能比较器功能。 每个�������������������������������������������� PCA����������������������������������������� 模块还对应另外两个寄存器,���������������������������� CCAPnH���������������������� 和��������������������� CCAPnL��������������� 。当出现捕获或比较时,它们用来 保存����������������������������������������������������� 16��������������������������������������������������� 位的计数值。当�������������������������������������������� PCA����������������������������������������� 模块用在������������������������������������� PWM���������������������������������� 模式中时,它们用来控制输出的占空比。���������������� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 305 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.3 PCA模块的工作模式 10.3.1 捕获模式 PCA��������������������������������������� 模块工作于捕获模式的结构图如下图所示。要使一个���������������� PCA������������� 模块工作在捕获模式,寄存器 CCAPMn��������������������������������������������� 的两位(����������������������������������������� CAPNn������������������������������������ 和����������������������������������� CAPPn������������������������������ )或其中任何一位必须置������������������� 1������������������ 。����������������� PCA�������������� 模块工作于捕获模式时,对模块 的外部������� CEXn��� 输入(CCP0/P3.7,CCP1/P3.5)的跳变进行采样。当采样到有效跳变时,������ PCA��� 硬件就 将������������������������������������������������ PCA��������������������������������������������� 计数器阵列寄存器(������������������������������������ CH���������������������������������� 和��������������������������������� CL������������������������������� )的值装载到模块的捕获寄存器中(��������������� CCAPnL��������� 和�������� CCAPnH�� )。 CF CR CCF1 CCF0 CCON (地址:D8H) . d e t i m PCA中断 Li CH 捕捉 CCPn (CCP0/P3.7, CCP1/P3.5) U C M ECOMn CAPPn CAPNn MATn 0 0 C T S CL CCAPnH CCAPnL TOGn PWMn ECCFn CCAPMn, n=0,1 地址:DAh,DBh 0 0 PCA Capture Mode (PCA捕获模式图) 如果CCON������������������������������������������ 特殊功能寄存器中���������������������������������� 的位CCFn和CCAPMn��������������������� 特殊功能寄存器中������������� 的位ECCFn位被置位,将 产生中断。������������������������������������ 可在中断服务程序中判断哪一个模块产生了中断,并注意中断标志位的软件清零问 题。 306 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.3.2 16位软件定时器模式 16位软件定时器模式结构图如下图所示。 先写 Write to CCAPnL 停止比较 0 后写 Write to CCAPnH 恢复比较 1 CF CCF1 CCF0 CCON CR CCAPnH CCAPnL PCA中断 (To CCFn) 使能 16-Bit comparator CH ECOMn=0,停止比较 ECOMn=1,恢复比较 - 匹配 CL . d e t i m Li ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn CCAPMn U C M 0 0 1 0 0 PCA Software Timer Mode / PCA模块的16位软件定时器模式/PCA比较模式 C T S 通过置位CCAPMn寄存器的ECOM和MAT位,可使PCA模块用作软件定时器(上图)。 PCA定时器的值与模块捕获寄存器的值相比较,当两者相等时,如果位CCFn(在CCON特殊功 能寄存器中)和位ECCFn(在CCAPMn特殊功能寄存器中)都置位,将产生中断。 [CH,CL]每隔一定的时间自动加1,时间间隔取决于选择的时钟源。例如,当选择的时 钟源为SYSclk/12,每12个时钟周期[CH,CL]加1。当[CH,CL]增加到等于[CCAPnH, CCAPnL] 时,CCFn=1,产生中断请求。如果每次PCA模块中断后,在中断服务程序中断给[CCAPnH, CCAPnL]增加一个相同的数值,那么下次中断来临的间隔时间T也是相同的,从而实现了定时 功能。定时时间的长短取决于时钟源的选择以及PCA计数器计数值的设置。下面举例说明PCA 计数器计数值的计算方法。 假设,系统时钟频率SYSclk = 18.432MHz,选择的时钟源为SYSclk/12,定时时间T为5ms,则 PCA计数器计数值为: PCA计数器的计数值 = T / (( 1 / SYSclk )×12 ) = 0.005 / (( 1 / 18432000)×12 ) = 7680 (10进制数) = 1E00H (16进制数) 也就是说,PCA计时器计数1E00H次,定时时间才是5ms,这也就是每次给[CCAPnH, CCAPnL]增加的数值(步长)。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 307 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.3.3 高速输出模式 该模式中(下图),当PCA计数器的计数值与模块捕获寄存器的值相匹配时,PCA模块的CCPn 输出将发生翻转。要激活高速输出模式,CCAPMn�������������������������� 寄存器����������������������� 的TOGn,MATn和ECOMn位必须都置位。 先写 Write to CCAPnL CF 后写 Write to CCAPnH - - CR - - CCF1 CCF0 CCON PCA中断 停止比较 0 恢复比较 1 CCAPnH CCAPnL (To CCFn) 使能 . d e t i m 匹配 16位比较器 Toggle CH ECOMn=0,停止比较 ECOMn=1,恢复比较 - ECOMn U C M CAPPn CAPNn MATn 0 C T S CL 0 1 Li TOGn PWMn ECCFn 1 CCPn 翻转 CCAPMn 0 PCA High-Speed Output Mode / PCA 高速输出模式 CCAPnL的值决定了PCA模块n的输出脉冲频率。当PCA时钟源是SYSclk/2时,输出脉冲的 频率F为: f = SYSclk / ( 4×CCAPnL ) 其中,SYSclk为系统时钟频率。由此,可以得到CCAPnL的值CCAPnL = SYSclk / ( 4����� ×f ). 如果计算出的结果不是整数,则进行四舍五入取整,即 CCAPnL = INT (SYSclk / ( 4×f ) + 0.5 ) 其中,INT( )为取整运算,直接去掉小数。例如,假设SYSclk = 20MHz,要求PCA高速脉 冲输出125kHz的方波,则CCAPnL中的值应为: CCAPnL = INT (20000000 / ( 4×125000 ) + 0.5 ) = INT ( 40 + 0.5 ) = 40 = 28H 308 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.3.4 脉宽调节模式(PWM) 脉宽调制(PWM,Pulse Width Modulation)是一种使用程序来控制波形占空比、周期、相位 波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。STC12C5201AD系列单片机的 PCA模块可以通过程序设定,使其工作于8位PWM模式。PWM模式的结构如下图所示。 EPCnH CPS2/CPS1/CPS0 = 1/0/0 时,PCA/PWM的 时钟源是SYSclk,不用Timer0,PWM的频率 为SYSclk/256,如果要使用系统时钟/3来作为 PCA的时钟源,应让T0工作在1T模式,记数3 个脉冲即产生溢出.此时使用内部RC作为系统 时钟,可以输出14K~19K频率的PWM。 用T0的溢出可对系统时钟进行1~256级分频 CCAPnH EPCnL CCAPnL 输出0 enable C T S Li (0,CL)=(EPCnL,CCPnL) 输出1 CL CL overflow - ECOMn 1 CAPPn 0 CAPNn 0 MATn TOGn PWMn ECCFn 0 0 1 0 CCAPMn, n=0,1 PCA PWM mode / 可调制脉冲宽度输出模式 所有PCA模块都可用作PWM输出(����������� 上���������� 图)。输出频率取决于PCA定时器的时钟源。 由于所有模块共用仅有的PCA定时器,所有它们的输出频率相同。各个模块的输出占空 比是独立变化的,与使用的捕获寄存器[EPCnL,CCAPnL]有关。当��� 寄存器CL的值小于[EPCnL, CCAPnL]时,输出为低�������������� ;������������� 当������������ 寄存器��������� CL的值等于或大于[EPCnL,CCAPnL]时,输出为高。当CL 的值由FF变为00溢出时,[EPCnH,CCAPnH]的内容装载到[EPCnL,CCAPnL]中。这样就可实现 无干扰地更新PWM。要使能PWM模式,模块CCAPMn寄存器的PWMn和ECOMn位必须置位。 由于PWM是8位的,所以� : PWM的频率= PCA时钟输入源频率 256 PCA时钟输入源可以从以下8种中选择一种:SYSclk, SYSclk/2, SYSclk/4,SYSclk/6, SYSclk/8,SYSclk/12,定时器0的溢出,ECI/P3.4输入� 。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 309 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 举例:要求PWM输出频率为38KHz,选SYSclk为PCA/PWM时钟输入源,求出SYSclk的值 由计算公式38000=SYSclk/256 ,得到外部时钟频率SYSclk=38000 x 256 x 1=9,728,000 如果要实现可调频率的PWM输出,可选择定时器0的溢出率或者ECI脚的输入作为PCA/PWM 的时钟输入源 当EPCnL = 0及ECCAPnL = 00H时,PWM固定输出高 当EPCnL = 1及CCAPnL = 0FFH时,PWM固定输出低 当某个I/O口作为PWM使用时������� ,������ 该口的状态� : PWM之前口的状态 PWM输出时口的状态 弱上拉/准双向 强推挽输出/强上拉输出,要加输出限流电阻1K-10K 强推挽输出/强上拉输出 强推挽输出/强上拉输出,要加输出限流电阻1K-10K 仅为输入/高阻 PWM无效 开漏 开漏 限流电阻用10K到1K 普通I/O口 C T S 310 南通国芯微电子有限公司 U C M . d e t i m Li 接负载 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.4 用PCA功能扩展外部中断的示例程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 -----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" typedef unsigned char BYTE; typedef unsigned int WORD; U C M /*Declare SFR associated with the PCA */ sfr CCON = 0xD8; sbit CCF0 = CCON^0; sbit CCF1 = CCON^1; sbit CR = CCON^6; sbit CF = CCON^7; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAPM0 = 0xDA; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM1 = 0xDB; sfr CCAP1L = 0xEB; sfr CCAP1H = 0xFB; sfr PCAPWM0 = 0xf2; sfr PCAPWM1 = 0xf3; C T S sbit PCA_LED = P1^0; void PCA_isr() interrupt 7 using 1 { CCF0 = 0; PCA_LED = !PCA_LED; } 南通国芯微电子有限公司 . d e t i m Li //PCA control register //PCA module-0 interrupt flag //PCA module-1 interrupt flag //PCA timer run control bit //PCA timer overflow flag //PCA mode register //PCA base timer LOW //PCA base timer HIGH //PCA module-0 mode register //PCA module-0 capture register LOW //PCA module-0 capture register HIGH //PCA module-1 mode register //PCA module-1 capture register LOW //PCA module-1 capture register HIGH //PCA test LED //Clear interrupt flag //toggle the test pin while CEX0(P1.3) have a falling edge 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 311 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com void main() { CCON = 0; CL = 0; CH = 0; CMOD = 0x00; CCAPM0 = 0x11; // CCAPM0 = 0x21; // CCAPM0 = 0x31; CR = 1; EA = 1; while (1); } 312 C T S 南通国芯微电子有限公司 临时技术支持:13922829991 研发顾问:13922809991 //Initial PCA control register //PCA timer stop running //Clear CF flag //Clear all module interrupt flag //Reset PCA base timer //Set PCA timer clock source as Fosc/12 //Disable PCA timer overflow interrupt //PCA module-0 capture by a negative tigger on CEX0(P1.3) //and enable PCA interrupt //PCA module-0 capture by a rising edge on CEX0(P1.3) //and enable PCA interrupt //PCA module-0 capture by a transition (falling/rising edge) //on CEX0(P1.3) and enable PCA interrupt //PCA timer start run U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能扩展外部中断 -----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/*Declare SFR associated with the PCA */ CCON EQU 0D8H CCF0 BIT CCON.0 CCF1 BIT CCON.1 CR BIT CCON.6 CF BIT CCON.7 CMOD EQU 0D9H CL EQU 0E9H CH EQU 0F9H CCAPM0 EQU 0DAH CCAP0L EQU 0EAH CCAP0H EQU 0FAH CCAPM1 EQU 0DBH CCAP1L EQU 0EBH CCAP1H EQU 0FBH ;PCA control register ;PCA module-0 interrupt flag ;PCA module-1 interrupt flag ;PCA timer run control bit ;PCA timer overflow flag ;PCA mode register ;PCA base timer LOW ;PCA base timer HIGH ;PCA module-0 mode register ;PCA module-0 capture register LOW ;PCA module-0 capture register HIGH ;PCA module-1 mode register ;PCA module-1 capture register LOW ;PCA module-1 capture register HIGH PCA_LED ;PCA test LED C T S BIT P1.0 U C M . d e t i m Li ;---------------------------------------- ORG 0000H LJMP MAIN ORG 003BH PCA_ISR: CLR CCF0 CPL PCA_LED RETI ;---------------------------------------- ORG 0100H 南通国芯微电子有限公司 ;Clear interrupt flag ;toggle the test pin while CEX0(P1.3) have a falling edge 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 313 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com MAIN: 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 SJMP $ ;---------------------------------------- END C T S 314 南通国芯微电子有限公司 临时技术支持:13922829991 研发顾问:13922809991 ;Initial PCA control register ;PCA timer stop running ;Clear CF flag ;Clear all module interrupt flag ; ;Reset PCA base timer ; ;Set PCA timer clock source as Fosc/12 ;Disable PCA timer overflow interrupt ;PCA module-0 capture by a falling edge on CEX0(P1.3) ;and enable PCA interrupt ;PCA module-0 capture by a rising edge on CEX0(P1.3) ;and enable PCA interrupt ;PCA module-0 capture by a transition (falling/rising edge) ;on CEX0(P1.3) and enable PCA interrupt Li ;PCA timer start run U C M . d e t i m 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.5 用PCA功能实现定时器的示例程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能实现16位定时器 --------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" #define FOSC 18432000L #define T100Hz (FOSC / 12 / 100) typedef unsigned char typedef unsigned int BYTE; WORD; C T S /*Declare SFR associated with the PCA */ sfr CCON = 0xD8; sbit CCF0 = CCON^0; sbit CCF1 = CCON^1; sbit CR = CCON^6; sbit CF = CCON^7; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAPM0 = 0xDA; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM1 = 0xDB; sfr CCAP1L = 0xEB; sfr CCAP1H = 0xFB; sfr PCAPWM0 = 0xf2; sfr PCAPWM1 = 0xf3; sbit PCA_LED = P1^0; U C M . d e t i m Li //PCA control register //PCA module-0 interrupt flag //PCA module-1 interrupt flag //PCA timer run control bit //PCA timer overflow flag //PCA mode register //PCA base timer LOW //PCA base timer HIGH //PCA module-0 mode register //PCA module-0 capture register LOW //PCA module-0 capture register HIGH //PCA module-1 mode register //PCA module-1 capture register LOW //PCA module-1 capture register HIGH //PCA test LED BYTE cnt; WORD value; 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 315 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com void PCA_isr() interrupt 7 using 1 { CCF0 = 0; CCAP0L = value; CCAP0H = value >> 8; value += T100Hz; if (cnt-- == 0) { cnt = 100; PCA_LED = !PCA_LED; } } void main() { CCON = 0; C T S CR = 1; EA = 1; cnt = 0; while (1); 研发顾问:13922809991 //Clear interrupt flag //Update compare value //Count 100 times //Flash once per second . d e t i m Li //Initial PCA control register //PCA timer stop running //Clear CF flag //Clear all module interrupt flag //Reset PCA base timer U C M CL = 0; CH = 0; CMOD = 0x00; value = T100Hz; CCAP0L = value; CCAP0H = value >> 8; value += T100Hz; CCAPM0 = 0x49; 临时技术支持:13922829991 //Set PCA timer clock source as Fosc/12 //Disable PCA timer overflow interrupt //Initial PCA module-0 //PCA module-0 work in 16-bit timer mode //and enable PCA interrupt //PCA timer start run } 316 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 用PCA功能实现16位定时器 --------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ T100Hz EQU 3C00H ;(18432000 / 12 / 100) . d e t i m ;/*Declare SFR associated with the PCA */ CCON EQU 0D8H CCF0 BIT CCON.0 CCF1 BIT CCON.1 CR BIT CCON.6 CF BIT CCON.7 CMOD EQU 0D9H CL EQU 0E9H CH EQU 0F9H CCAPM0 EQU 0DAH CCAP0L EQU 0EAH CCAP0H EQU 0FAH CCAPM1 EQU 0DBH CCAP1L EQU 0EBH CCAP1H EQU 0FBH ;PCA control register ;PCA module-0 interrupt flag ;PCA module-1 interrupt flag ;PCA timer run control bit ;PCA timer overflow flag ;PCA mode register ;PCA base timer LOW ;PCA base timer HIGH ;PCA module-0 mode register ;PCA module-0 capture register LOW ;PCA module-0 capture register HIGH ;PCA module-1 mode register ;PCA module-1 capture register LOW ;PCA module-1 capture register HIGH PCA_LED ;PCA test LED C T S BIT P1.0 U C M Li CNT EQU 20H ;---------------------------------------- ORG 0000H LJMP MAIN ORG 003BH LJMP PCA_ISR ;----------------------------------------- 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 317 STC12C5201AD系列单片机指南 MAIN: 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ORG 0100H MOV SP, #3FH ;Initial stack point MOV CCON, #0 ;Initial PCA control register ;PCA timer stop running ;Clear CF flag ;Clear all module interrupt flag CLR A ; MOV CL, A ;Reset PCA base timer MOV CH, A ; MOV CMOD, #00H ;Set PCA timer clock source as Fosc/12 ;Disable PCA timer overflow interrupt ;------------------------------ MOV CCAP0L, #LOW T100Hz ; MOV CCAP0H,#HIGH T100Hz ;Initial PCA module-0 MOV CCAPM0,#49H ;PCA module-0 work in 16-bit timer mode and enable PCA interrupt ;------------------------------ SETB CR ;PCA timer start run SETB EA MOV CNT, #100 U C M SJMP $ ;----------------------------------------PCA_ISR: PUSH PSW PUSH ACC CLR CCF0 MOV A, CCAP0L ADD A, #LOW T100Hz MOV CCAP0L, A MOV A, CCAP0H ADDC A, #HIGH T100Hz MOV CCAP0H,A DJNZ CNT, PCA_ISR_EXIT MOV CNT, #100 CPL PCA_LED PCA_ISR_EXIT: POP ACC POP PSW RETI ;---------------------------------------- END C T S 318 南通国芯微电子有限公司 . d e t i m Li ;Clear interrupt flag ;Update compare value ;count 100 times ;Flash once per second 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.6 PCA输出高速脉冲的示例程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 PCA输出高速脉冲 --------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" #define FOSC 18432000L #define T100KHz (FOSC / 4 / 100000) typedef unsigned char typedef unsigned int BYTE; WORD; C T S /*Declare SFR associated with the PCA */ sfr CCON = 0xD8; sbit CCF0 = CCON^0; sbit CCF1 = CCON^1; sbit CR = CCON^6; sbit CF = CCON^7; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAPM0 = 0xDA; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM1 = 0xDB; sfr CCAP1L = 0xEB; sfr CCAP1H = 0xFB; sfr PCAPWM0 = 0xf2; sfr PCAPWM1 = 0xf3; sbit PCA_LED = P1^0; U C M . d e t i m Li //PCA control register //PCA module-0 interrupt flag //PCA module-1 interrupt flag //PCA timer run control bit //PCA timer overflow flag //PCA mode register //PCA base timer LOW //PCA base timer HIGH //PCA module-0 mode register //PCA module-0 capture register LOW //PCA module-0 capture register HIGH //PCA module-1 mode register //PCA module-1 capture register LOW //PCA module-1 capture register HIGH //PCA test LED BYTE cnt; WORD value; 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 319 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com void PCA_isr( ) interrupt 7 using 1 { CCF0 = 0; CCAP0L = value; CCAP0H = value >> 8; value += T100KHz; } void main() { CCON = 0; CL = 0; CH = 0; CMOD = 0x02; value = T100KHz; CCAP0L = value; CCAP0H = value >> 8; value += T100KHz; CCAPM0 = 0x4d; CR = 1; EA = 1; cnt = 0; while (1); C T S 临时技术支持:13922829991 研发顾问:13922809991 //Clear interrupt flag //Update compare value //Initial PCA control register //PCA timer stop running //Clear CF flag //Clear all module interrupt flag //Reset PCA base timer . d e t i m Li //Set PCA timer clock source as Fosc/2 //Disable PCA timer overflow interrupt U C M //P1.3 output 100KHz square wave //Initial PCA module-0 //PCA module-0 work in 16-bit timer mode //and enable PCA interrupt, toggle the output pin CEX0(P1.3) //PCA timer start run } 320 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 PCA输出高速脉冲 --------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ T100KHz EQU 2EH ;(18432000 / 4 / 100000) ;/*Declare SFR associated with the PCA */ CCON EQU 0D8H CCF0 BIT CCON.0 CCF1 BIT CCON.1 CR BIT CCON.6 CF BIT CCON.7 CMOD EQU 0D9H CL EQU 0E9H CH EQU 0F9H CCAPM0 EQU 0DAH CCAP0L EQU 0EAH CCAP0H EQU 0FAH CCAPM1 EQU 0DBH CCAP1L EQU 0EBH CCAP1H EQU 0FBH ;---------------------------------------- ORG 0000H LJMP MAIN C T S ORG PCA_ISR: PUSH PUSH CLR MOV ADD MOV CLR ADDC MOV . d e t i m ;PCA control register ;PCA module-0 interrupt flag ;PCA module-1 interrupt flag ;PCA timer run control bit ;PCA timer overflow flag ;PCA mode register ;PCA base timer LOW ;PCA base timer HIGH ;PCA module-0 mode register ;PCA module-0 capture register LOW ;PCA module-0 capture register HIGH ;PCA module-1 mode register ;PCA module-1 capture register LOW ;PCA module-1 capture register HIGH U C M Li 003BH PSW ACC CCF0 A, CCAP0L A, #T100KHz CCAP0L, A A A, CCAP0H CCAP0H,A 南通国芯微电子有限公司 ;Clear interrupt flag ;Update compare value 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 321 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com PCA_ISR_EXIT: POP ACC POP PSW RETI ;---------------------------------------- ORG 0100H MAIN: MOV CCON, #0 CLR A MOV CL, A MOV CH, A MOV CMOD, #02H ;------------------------------ MOV CCAP0L, #T100KHz MOV CCAP0H,#0 MOV CCAPM0,#4dH ;------------------------------ SETB CR SETB EA SJMP $ ;---------------------------------------- END C T S 322 南通国芯微电子有限公司 临时技术支持:13922829991 研发顾问:13922809991 ;Initial PCA control register ;PCA timer stop running ;Clear CF flag ;Clear all module interrupt flag ; ;Reset PCA base timer ; ;Set PCA timer clock source as Fosc/2 ;Disable PCA timer overflow interrupt . d e t i m Li ;P1.3 output 100KHz square wave ;Initial PCA module-0 ;PCA module-0 work in 16-bit timer mode ;and enable PCA interrupt, toggle the output pin CEX0(P1.3) U C M ;PCA timer start run 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.7 PCA输出PWM的示例程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 PCA输出PWM -------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" #define FOSC 18432000L typedef unsigned char typedef unsigned int BYTE; WORD; C T S /*Declare SFR associated with the PCA */ sfr CCON = 0xD8; sbit CCF0 = CCON^0; sbit CCF1 = CCON^1; sbit CR = CCON^6; sbit CF = CCON^7; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAPM0 = 0xDA; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM1 = 0xDB; sfr CCAP1L = 0xEB; sfr CCAP1H = 0xFB; sfr PCAPWM0 = 0xf2; sfr PCAPWM1 = 0xf3; 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li //PCA control register //PCA module-0 interrupt flag //PCA module-1 interrupt flag //PCA timer run control bit //PCA timer overflow flag //PCA mode register //PCA base timer LOW //PCA base timer HIGH //PCA module-0 mode register //PCA module-0 capture register LOW //PCA module-0 capture register HIGH //PCA module-1 mode register //PCA module-1 capture register LOW //PCA module-1 capture register HIGH 传真:0513-5501 2969 / 2956 / 2947 323 STC12C5201AD系列单片机指南 void main() { CCON = 0; 技术支持网站:www.STCMCU.com CR = 1; while (1); } 324 C T S 南通国芯微电子有限公司 研发顾问:13922809991 //Initial PCA control register //PCA timer stop running //Clear CF flag //Clear all module interrupt flag //Reset PCA base timer CL = 0; CH = 0; CMOD = 0x02; CCAP0H = CCAP0L = 0x80; CCAPM0 = 0x42; CCAP1H = CCAP1L = 0xff; PCAPWM1 = 0x03; CCAPM1 = 0x42; 临时技术支持:13922829991 //Set PCA timer clock source as Fosc/2 //Disable PCA timer overflow interrupt //PWM0 port output 50% duty cycle square wave //PCA module-0 work in 8-bit PWM mode //and no PCA interrupt . d e t i m //PWM1 port output 0% duty cycle square wave Li //PCA module-1 work in 8-bit PWM mode //and no PCA interrupt U C M //PCA timer start run 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示 STC 1T 系列单片机 PCA输出PWM -------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/*Declare SFR associated with the PCA */ CCON EQU 0D8H CCF0 BIT CCON.0 CCF1 BIT CCON.1 CR BIT CCON.6 CF BIT CCON.7 CMOD EQU 0D9H CL EQU 0E9H CH EQU 0F9H CCAPM0 EQU 0DAH CCAP0L EQU 0EAH CCAP0H EQU 0FAH CCAPM1 EQU 0DBH CCAP1L EQU 0EBH CCAP1H EQU 0FBH ;---------------------------------------- ORG 0000H LJMP MAIN ;---------------------------------------- ORG 0100H MAIN: MOV CCON, #0 CLR A MOV CL, A MOV CH, A MOV CMOD, #02H ;------------------------------- C T S 南通国芯微电子有限公司 . d e t i m ;PCA control register ;PCA module-0 interrupt flag ;PCA module-1 interrupt flag ;PCA timer run control bit ;PCA timer overflow flag ;PCA mode register ;PCA base timer LOW ;PCA base timer HIGH ;PCA module-0 mode register ;PCA module-0 capture register LOW ;PCA module-0 capture register HIGH ;PCA module-1 mode register ;PCA module-1 capture register LOW ;PCA module-1 capture register HIGH U C M Li ;Initial PCA control register ;PCA timer stop running ;Clear CF flag ;Clear all module interrupt flag ; ;Reset PCA base timer ; ;Set PCA timer clock source as Fosc/2 ;Disable PCA timer overflow interrupt 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 325 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com MOV A, #080H MOV CCAP0H, A MOV CCAP0L, A MOV CCAPM0, #42H ;------------------------------ MOV A, #0C0H MOV CCAP1H,A MOV CCAP1L,A MOV CCAPM1,#42H ;------------------------------ SETB CR 326 南通国芯微电子有限公司 研发顾问:13922809991 ; ;PWM0 port output 50% duty cycle square wave ; ;PCA module-0 work in 8-bit PWM mode and no PCA interrupt ; ;PWM1 port output 25% duty cycle square wave ; ;PCA module-1 work in 8-bit PWM mode and no PCA interrupt ;PCA timer start run SJMP $ ;---------------------------------------- END C T S 临时技术支持:13922829991 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.8 利用PWM实现D/A功能的典型应用线路图 1 32 VDD P2.3 2 31 P2.1 RST 3 30 P2.0 RxD/P3.0 4 29 P1.7/ADC7 TxD/P3.1 5 28 P1.6/ADC6 P0.0 6 27 P1.5/ADC5 XTAL2 7 26 P0.3 XTAL1 8 25 P1.4/ADC4 INT0/P3.2 9 24 P1.3/ADC3 SOP-32 P2.2 P0.1 10 23 P0.2 INT1/P3.3 11 22 P1.2/ADC2/LVD CLKOUT0/ECI/T0/P3.4 12 21 P1.1/ADC1 CLKOUT1/PWM1/T1/P3.5 13 20 P1.0/ADC0 P2.4 14 19 P3.7/PWM0 P2.5 15 18 P2.7 VSS 16 17 P2.6 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 10K 10K 104 D/A 104 传真:0513-5501 2969 / 2956 / 2947 327 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第11章 STC12C5201AD系列EEPROM的应用 STC12C5201AD��������������������������������������� 系列单片机内部集成了的EEPROM是与程序空间是分开的,利用ISP/IAP技术 可将内部Data Flash当EEPROM,擦写次数在10万次以上。EEPROM可分为若干个扇区,每个扇区 包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在 不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。 EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。在用户程序 中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。在工作电压Vcc偏低时,建议不要进 行EEPROM/IAP操作。 需要注意的是:5V单片机在3.7V以上对EEPROM进行操作才有效,3.7V以下对EEPROM进行操 作,MCU不执行此功能,但会继续往下执行程序。3.3V单片机在2.4V以上对EEPROM进行操作才有 效,2.4V以下对EEPROM进行操作,MCU不执行此功能,但会继续往下执行程序.所以建议上电复位 后在初始化程序时加200mS延时�������������������������� 。可通过判断LVDF标志位判断Vcc的电压是否正常。 . d e t i m Li 11.1 IAP及EEPROM新增特殊功能寄存器介绍 符号 IAP_DATA IAP_ADDRH IAP_ADDRL IAP_CMD IAP_TRIG IAP_CONTR PCON 328 描述 C T S ISP/IAP Flash Data Register ISP/IAP Flash Address High ISP/IAP Flash Address Low ISP/IAP Flash Command Register ISP/IAP Flash Command Trigger ISP/IAP Control Register Power Control 南通国芯微电子有限公司 地址 C2H CU M 位地址及符号 MSB LSB 复位值 1111 1111B C3H 0000 0000B C4H 0000 0000B C5H - - - - - - MS1 MS0 C6H xxxx xx00B xxxx xxxxB C7H IAPEN SWBS SWRST CMD_FAIL 87H SMOD SMOD0 LVDF POF 总机:0513-5501 2928 / 2929 / 2966 GF1 - WT2 WT1 GF0 PD WT0 0000 x000B IDL 0011 0000B 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1. ISP/IAP数据寄存器IAP_DATA IAP_DATA : ISP/IAP操作时的数据寄存器。 ISP/IAP 从Flash读出的数据放在此处,向Flash写的数据也需放在此处 2. ISP/IAP地址寄存器IAP_ADDRH和IAP_ADDRL IAP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。������� 该寄存器地址为C3H,复位后值为00H. IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。������� 该寄存器地址为C4H,复位后值为00H. 3. ISP/IAP命令寄存器IAP_CMD ISP/IAP命令寄存器IAP_CMD格式如下: SFR name Address bit B7 B6 B5 B4 B3 IAP_CMD C5H name - - - - - B2 B1 . d e t i m - MS1 MS1 MS0 0 0 命令 / 操作 模式选择 Standby 待机模式,无ISP操作 0 1 从用户的应用程序区对"Data Flash/EEPROM区"进行字节读 1 0 从用户的应用程序区对"Data Flash/EEPROM区"进行字节编程 1 1 从用户的应用程序区对"Data Flash/EEPROM区"进行扇区擦除 U C M B0 MS0 Li 程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除 ,IAP12C5A62S2/IAP12LE5A62S2等����������������������� 除外,这几个型号可在应用程序区修改应用程序区。 C T S 4. ISP/IAP命令触发寄存器IAP_TRIG IAP_TRIG: ISP/IAP 操作时的命令触发寄存器。 在IAPEN(IAP_CONTR.7) = 1 时,对IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP 命令才会生效。 ISP/IAP操作完成后,IAP地址高八位寄存器IAP_ADDRH、IAP地址低八位寄存器IAP_ADDRL 和IAP命令寄存器IAP_CMD的内容不变。如果接下来要对下一个地址的数据进行ISP/IAP操 作,需手动将该地址的高8位和低8位分别写入IAP_ADDRH和IAP_ADDRL寄存器。 每次IAP操作时,都要对IAP_TRIG先写入5AH,再写入A5H,ISP/IAP命令才会生效。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 329 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 5. ISP/IAP命令寄存器IAP_CONTR ISP/IAP控制寄存器IAP_CONTR格式如下: SFR name Address IAP_CONTR C7H B7 bit B6 B5 B4 B3 B2 B1 B0 - WT2 WT2 WT0 name IAPEN SWBS SWRST CMD_FAIL IAPEN: ISP/IAP功能允许位。0:禁止IAP读/写��� /�� 擦除Data Flash/EEPROM 1: 允许IAP读/写��� /�� 擦除Data Flash/EEPROM SWBS: 软件选择从用户应用程序区启动(送0),还是从������������ 系统���������� ISP������� 监控����� 程序区启动(送1)。 要与SWRST直接配合才可以实现 SWRST: 0: 不操作; 1: 产生软件系统复位,硬件自动��� 复位� 。 CMD_FAIL: 如果送了ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败,则为1,需由软件清零 .;在用户应用程序区(AP区)软件复位并从用户应用程序区(AP区)开始执行程序 MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP区), SWRST = 1(软复位) ;在用户应用程序区(AP区)软件复位并从系统ISP监控程序区开始执行程序 MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP区), SWRST = 1(软复位) ;在系统ISP监控程序区软件复位并从用户应用程序区(AP 区)开始执行程序 MOV IAP_CONTR, #00100000B ;SWBS = 0(选择AP 区), SWRST = 1(软复位) ;在系统ISP监控程序区软件复位并从系统ISP监控程序区开始执行程序 MOV IAP_CONTR, #01100000B ;SWBS = 1(选择ISP区), SWRST = 1(软复位) U C M . d e t i m Li 设置等待时间 CPU等待时间(多少个CPU工作时钟 ) Sector Erase Read/读 Program/编程 WT2 WT1 WT0 扇区擦除 (2个时钟) (=55us) (=21ms) 1 1 1 2个时钟 55个时钟 21012个时钟 1 1 0 2个时钟 110个时钟 42024个时钟 1 0 1 2个时钟 165个时钟 63036个时钟 1 0 0 2个时钟 330个时钟 126072个时钟 0 1 1 2个时钟 660个时钟 252144个时钟 0 1 0 2个时钟 1100个时钟 420240个时钟 0 0 1 2个时钟 1320个时钟 504288个时钟 0 0 0 2个时钟 1760个时钟 672384个时钟 C T S Recommended System Clock 跟等待参数对应的推荐系统时钟 ≤ 1MHz ≤ 2MHz ≤ 3MHz ≤ 6MHz ≤ 12MHz ≤ 20MHz ≤ 24MHz ≤ 30MHz 6. 工作电压过低判断,此时不要进行EEPROM/IAP操作 PCON寄存器定义如下: SFR name Address PCON 87H bit B7 B6 B5 B4 B3 B2 B1 B0 name SMOD SMOD0 LVDF POF GF1 GF0 PD IDL LVDF: 低压检测标志位,当工作电压Vcc低于低压检测门槛电压时,该位置1。该位要由软件清0 当低压检测电路发现工作电压Vcc偏低时,不要进行EEPROM/IAP操作。 330 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 利用增加的外部低压检测LVD功能作外部低压检测,判断是否要开始保存数据典型应用线路图 7805 + 470uF 104 VCC R1 ( ( + Gnd P1.2/LVD 单片机/MCU R2 如交流电在220V时,稳压块7805前端的直流电是11V,当交流电降到160V时,稳压块7805前 端的直流电是8.5V,图中的电阻R1和R2将8.5V的电压分压到低于低压检测门槛电压。此时CPU 可以用查询方式查询,推荐使用中断,在中断服务程序里面,将LVDF位清零,再读LVDF位。如 果为0,则认为是电源抖动,如果为1,则认为电源掉电,立即进行保存现场数据的工作。保存 现场完成后,再将LVDF位清零,再读LVDF位的值。如果为0,则认为电源系统恢复正常,此时 CPU可恢复正常工作,如果为1,继续将LVDF位清0,再读LVDF的值,用此方法,等到电源恢复 正常,或电源彻底掉电,CPU进入复位状态。 U C M . d e t i m Li 注意: 为了防止在电压不稳定的情况下对EEPROM的操作失效,可以在对EEPROM内的数据进行操作 前,先行向IAP_DATA寄存器写入一个已知数,然后读取EEPROM某个已知地址单元内的数据,如 果此时IAP_DATA内的数据依然是刚才写入IAP_DATA寄存器的数,此时可再向IAP_DATA寄存器 写入另外一个已知数,再读刚才的已知地址单元的数据,如果此时读出的数据为仍然为刚刚写 入IAP_DATA寄存器的数,则可判断此时电源电压偏低,此时指令执行EEPROM读写操作无效,因 为此时读出的数据并不是EEPROM里面的数据,而是我们刚才给IAP_DATA赋的值。(5V单片机在 3.7V以下禁止操作EEPROM,而单片机在3.3V以上程序仍可正常运行。3.3V单片机在2.4V以下禁 止操作EEPROM,而单片机在2.2V以上程序仍可运行。) C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 331 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 11.2 STC12C5201AD系列单片机EEPROM空间大小及地址 STC12C5201AD系列单片机内部可用Data Flash(EEPROM)的地址(与程序空间是分开的): 如果对应用程序区进行IAP写数据/擦除扇区的动作,则该语句会被单片机忽略,继续执行下一 句。程序在用户应用程序区(AP区)时,仅可以对Data Flash(EEPROM)进行IAP/ISP操作。 STC12C5206AD/12C5206PWM/12LE5206AD/12LE5206PWM除外,这几个型号可在应用程序区修 改应用程序 STC12C5201AD/PWM系列单片机内部EEPROM选型一览表 STC12LE5201AD/PWM系列单片机内部EEPROM选型一览表 EEPROM字节数 扇区数 起始扇区首地址 结束扇区末尾地址 型号 . d e t i m STC12C5201AD/PWM 2K 4 0000h 07FFh STC12C5202AD/PWM 2K 4 0000h 07FFh STC12C5203AD/PWM 2K 4 0000h 07FFh STC12C5204AD/PWM 1K 2 0000h 03FFh STC12C5205AD/PWM 1K 2 0000h 03FFh STC12LE5201AD/PWM 2K 4 0000h 07FFh STC12LE5202AD/PWM 2K 4 0000h 07FFh STC12LE5203AD/PWM 2K 4 0000h 07FFh STC12LE5204AD/PWM 1K 2 0000h 03FFh STC12LE5205AD/PWM 1K 2 0000h 03FFh C T S U C M Li 以下系列特殊,可在用户程序区直接修改程序,单片机可对自身内部应用程序区进行IAP 操作,故所有Flash空间均可当Data Flash(EEPROM)使用 STC12C5206AD/PWM - 12 0000h 17FFh STC12LE5206AD/PWM - 12 0000h 17FFh 332 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 STC12C5201AD/PWM单片机的内部EEPROM地址表 STC12LE5201AD/PWM单片机的内部EEPROM地址表 第一扇区 起始地址 0000h 第二扇区 第三扇区 第四扇区 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 1FFh 200h 3FFh 400h 5FFh 600h 每个扇区 512字节 7FFh 建议同一次 修改的数据 放在同一扇 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 区,不是同 一次修改的 800h 9FFh A00h BFFh C00h DFFh E00h FFFh 数据放在不 第九扇区 第十扇区 第十一扇区 第十二扇区 同的扇区, 不必用满, 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 当然可全用 第五扇区 1000h 11FFh 第六扇区 1200h C T S 南通国芯微电子有限公司 第七扇区 13FFh 1400h 15FFh U C M 总机:0513-5501 2928 / 2929 / 2966 第八扇区 . d e t i m Li 1600h 17FFh 传真:0513-5501 2969 / 2956 / 2947 333 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 11.3 IAP及EEPROM汇编简介 ;用DATA还是EQU声明新增特殊功能寄存器地址要看你用的汇编器/编译器 IAP_DATA DATA 0C2h; IAP_DATA EQU 0C2h IAP_ADDRH DATA 0C3h; 或 IAP_ADDRH EQU 0C3h IAP_ADDRL DATA 0C4h; 或 IAP_ADDRL EQU 0C4h IAP_CMD DATA 0C5h; 或 IAP_CMD EQU 0C5h IAP_TRIG DATA 0C6h; 或 IAP_TRIG EQU 0C6h IAP_CONTR DATA 0C7h; 或 IAP_CONTR EQU 0C7h 或 . d e t i m ;定义ISP/IAP命令及等待时间 ISP_IAP_BYTE_READ EQU 1 ;字节读 ISP_IAP_BYTE_PROGRAM EQU 2 ;字节编程,前提是该字节是空,0FFh ISP_IAP_SECTOR_ERASE EQU 3 ;扇区擦除,要某字节为空,要擦一扇区 WAIT_TIME 0 ;设置等待时间,30MHz以下0,24M以下1, ;20MHz以下2,12M以下3,6M以下4,3M以下5,2M以下6,1M以下7, MOV IAP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节 MOV IAP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节 MOV IAP_CONTR, #WAIT_TIME ;设置等待时间 ORL IAP_CONTR, #10000000B ;允许ISP/IAP操作 MOV IAP_CMD, #ISP_IAP_BYTE_READ C T S ;字节读 U C M EQU Li 地址需要改变时 才需重新送地址 此两句可以合成一句, 并且只送一次就够了 ;送字节读命令,命令不需改变时,不需重新送命令 ����������������������� MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序。 NOP A, ISP_DATA 334 MOV 南通国芯微电子有限公司 ;数据读出到IAP_DATA寄存器后,CPU继续执行程序 ;将读出的数据送往Acc 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为00,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为00,防止误操作 ;字节编程,该字节为FFh/空时,可对其编程,否则不行,要先执行扇区擦除 MOV IAP_DATA, #ONE_DATA ;送字节编程数据到IAP_DATA, ;只有数据改变时才需重新送 MOV IAP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节 MOV IAP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节 MOV IAP_CONTR, #WAIT_TIME ;设置等待时间 ORL IAP_CONTR, #10000000B ;允许ISP/IAP操作 MOV IAP_CMD, #ISP_IAP_BYTE_PROGRAM ;送字节编程命令 MOV IAP_TRIG, #5Ah MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 C T S U C M . d e t i m Li 地址需要改变时 才需重新送地址 此两句可合成 一句,并且只 送一次就够了 ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;字节编程成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FFH,;指向非EEPROM区,防止误操作 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FFH,指向非EEPROM区,防止误操作 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 335 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;扇区擦除,没有字节擦除,只有扇区擦除,512字节/扇区,每个扇区用得越少越方便 ;如果要对某个扇区进行擦除,而其中有些字节的内容需要保留,则需将其先读到单片机 ;内部的RAM中保存,再将该扇区擦除,然后将须保留的数据写回该扇区,所以每个扇区 ;中用的字节数越少越好,操作起来越灵活越快. ;扇区中任意一个字节的地址都是该扇区的地址,无需求出首地址. MOV IAP_ADDRH, #SECTOR_FIRST_BYTE_ADDR_HIGH ;送扇区起始地址高字节 MOV IAP_ADDRL, #SECTOR_FIRST_BYTE_ADDR_LOW ;送扇区起始地址低字节 MOV IAP_CONTR, ORL ;地址需要改变时才需重新送地址 #WAIT_TIME ;设置等待时间 IAP_CONTR, #10000000B ;允许ISP/IAP MOV IAP_CMD, #ISP_IAP_SECTOR_ERASE . d e t i m Li 此两句可以合 成一句,并且只 送一次就够了 ;送扇区擦除命令,命令不需改变时,不需重新送命令 U C M MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV C T S IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;扇区擦除成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FFH,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FFH,防止误操作 336 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 小常识: (STC单片机的Data Flash 当EEPROM功能使用) 3个基本命令----字节读,字节编程,扇区擦除 字节编程:将“1”����������������������������������� 写成“1”或����������������������������� “0”,������������������������� 将������������������������ “0”��������������������� 写成“0”。��������������� 如果������������� 某������������ 字节是FFH,����� 才���� 可��� 对其进 行字节编程。������������������������������������ 如果该字节������������������������������� 不是F F H�������������������������� ,则须先将整个扇区擦除,因为只有“扇区擦除”才可以将 “0”变为“1”。 扇区擦除:只有“扇区擦除”才可能将“0”擦除为“1”。 . d e t i m 大建议: 1.同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区,就不须读出保 护。 Li 2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC单片机的Data Flash比外部EEPROM要 快很多,读一个字节/编程一个字节大概是2��������� 个时钟������ /55uS。 U C M 3.如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则 另外的不需要修改的数据须先读出放在STC单片机的RAM中,然后擦除整个扇区,再将需要保留 的数据和需修改的数据�������������������������������� 按字节逐字节�������������������������� 写回该扇区中(������������������� 只有字节写命令,无连续字节写命令��� )。这 时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。 C T S 常问的问题: 1:IAP指令完成后,地址是否会自动“加1”或“减1”? 答:不会 2:送5A和A5触发后,下一次IAP命令是否还需要送5A和A5触发? 答:是,一定要。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 337 STC12C5201AD系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 11.4 EEPROM测试程序 1. C程序: ;STC12C5201AD系列单片机EEPROM/IAP 功能测试程序演示 /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 EEPROM/IAP功能--------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" #include "intrins.h" typedef unsigned char BYTE; typedef unsigned int WORD; U C M /*Declare SFR associated with the IAP */ sfr IAP_DATA = 0xC2; //Flash data register sfr IAP_ADDRH = 0xC3; //Flash address HIGH sfr IAP_ADDRL = 0xC4; //Flash address LOW sfr IAP_CMD = 0xC5; //Flash command register sfr IAP_TRIG = 0xC6; //Flash command trigger sfr IAP_CONTR = 0xC7; //Flash control register C T S /*Define ISP/IAP/EEPROM command*/ #define CMD_IDLE 0 #define CMD_READ 1 #define CMD_PROGRAM 2 #define CMD_ERASE 3 . d e t i m Li //Stand-By //Byte-Read //Byte-Program //Sector-Erase /*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/ //#define ENABLE_IAP 0x80 //if SYSCLK
STC12C5202AD-35I-SOP20 价格&库存

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

免费人工找货