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

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
STC15F204EA-35I-DIP20

STC15F204EA-35I-DIP20

  • 厂商:

    STC(宏晶科技)

  • 封装:

    DIP20_26X6.35MM

  • 描述:

    STC15F204EA DIP20 256B 3.8~5.5V 35MHz

  • 数据手册
  • 价格&库存
STC15F204EA-35I-DIP20 数据手册
STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 STC15F204EA系列单片机器件手册 ---1个时钟/机器周期8051 ---����� 超强加密,第八代加密技术 ---超低功耗,超低价 ---高速,高可靠 ---强抗静电,强抗干扰 STC15F201EA STC15F202EA STC15F203EA STC15F204EA STC15F205EA IAP15F206A C T S U C M . d e t i m STC15F201A STC15F202A STC15F203A STC15F204A STC15F205A Li 全部中国本土独立自主知识产权,请全体中国人民支持,您的 支持是中国本土����������� 力量前进的������ 有力保证. 请同行不要再抄袭我们的规格和管脚排列,再抄袭就很无耻了 STC-ISP:最方便的在线升级软件 封装后,全部175oC八小时高温烘烤,高品质封装保证 采用STC第八代加密技术,现悬赏 10万元人民币请专家帮忙查找加密有无漏洞 Update date: 2011/10/30 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947  目录 第1章 STC15F204EA系列单片机总体介绍............................. 7 1.1 STC15F204EA系列单片机简介..................................7 1.2 STC15F204EA系列单片机的内部结构............................8 1.3 STC15系列单片机管脚图.......................................9 1.3.1 STC15F204EA系列单片机管脚图...................................... 9 1.3.2 STC15F100系列单片机管脚图........................................ 10 1.4 STC15系列单片机选型一览表........................................ 11 1.4.1 STC15F204EA系列单片机选型一览表................................. 11 1.4.2 STC15F100系列单片机选型一览表.................................... 12 1.4.3 STC15S204EA系列单片机选型一览表................................. 13 1.5 1.6 1.7 1.8 STC15F204EA系列单片机最小应用系统............................. 14 STC15F204EA系列在系统可编程(ISP)典型应用线路图............... 15 STC15F204EA系列管脚说明......................................... 16 STC15系列单片机封装尺寸图........................................ 18 1.8.1 STC15F204EA系列封装尺寸图....................................... 18 1.8.2 STC15F101E系列封装尺寸图........................................ 20 1.8.3 STC15S204EA系列封装尺寸图....................................... 22 1.9 STC15系列单片机命名规则.......................................... 24 1.9.1 STC15F204EA系列单片机命名规则................................... 24 1.9.2 STC15F100系列单片机命名规则...................................... 25 1.10 每个单片机具有全球唯一身份证号码(ID号)........................ 26 第2章 STC15F204EA系列的时钟,省电模式及复位................ 30 2.1 STC15F204EA系列单片机的内部可配置时钟......................... 30 2.2 2.1.1 内部时钟分频和分频寄存器......................................... 31 2.1.2 可编程时钟输出................................................... 33 STC15F204EA系列单片机的省电模式................................ 36 2.2.1 低速模式......................................................... 38 2.2.2 空闲模式......................................................... 39 2.2.3 掉电模式/停机模式及测试程序(C程序和汇编程序)..................... 39 2.2.4 掉电模式/停机模式可由内部掉电唤醒专用定时器唤醒(测试程序)........ 45 2.3 复位.................................................................. 49 2.3.1 外部RST引脚复位.................................................. 49 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 软件复位......................................................... 49 掉电复位/上电复位................................................ 50 MAX810专用复位电路复位.......................................... 50 内部低压检测复位................................................. 50 看门狗(WDT)复位.................................................. 54 冷启动复位和热启动复位........................................... 59 第3章 片内存储器和特殊功能寄存器(SFRs)......................... 60 3.1 程序存储器........................................................... 60 3.2 数据存储器(SRAM).................................................. 61 3.3 特殊功能寄存器(SFRs)............................................... 63 第4章 STC15F204EA系列单片机的I/O口结构....................... 67 4.1 I/O口各种不同的工作模式及配置介绍................................ 67 4.2 新增特殊功能寄存器地址声明........................................ 69 4.3 I/O口各种不同的工作模式结构框图.................................. 71 4.3.1 4.3.2 4.3.3 4.3.4 准双向口输出配置................................................. 71 强推挽输出配置................................................... 72 仅为输入(高阻)配置............................................. 72 开漏输出配置(若外加上拉电阻,也可读)............................. 72 4.4 一种典型三极管控制电路............................................ 74 4.5 典型发光二极管控制电路............................................ 74 4.6 混合电压供电系统3V/5V器件I/O口互连.............................. 74 4.7 如何让I/O口上电复位时为低电平.................................... 75 4.8 I/O口直接驱动LED数码管应用线路图................................ 76 4.9 I/O口直接驱动LCD应用线路图....................................... 77 4.10 A/D做按键扫描应用线路图......................................... 78 第5章 指令系统........................................................... 79 5.1 寻址方式............................................................. 79 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 立即寻址......................................................... 79 直接寻址......................................................... 79 间接寻址......................................................... 79 寄存器寻址....................................................... 80 相对寻址......................................................... 80 变址寻址......................................................... 80 位寻址........................................................... 80 5.2 指令系统分类总结.................................................... 81 5.3 传统8051单片机指令定义详解(中文&English)........................ 88 5.3.1 传统8051单片机指令定义详解....................................... 88 5.3.2 Instruction Definitions of Traditional 8051 MCU......................... 128 第6章 中断系统.......................................................... 165 6.1 6.2 6.3 6.4 6.5 6.6 中断结构............................................................167 中断寄存器..........................................................169 中断优先级..........................................................175 中断处理............................................................176 外部中断............................................................177 外部中断的测试程序(C程序和汇编程序)............................178 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 外部中断0(INT0)的测试程序(可支持上升沿或下降沿中断).............. 外部中断1(INT1)的测试程序(可支持上升沿或下降沿中断).............. 外部中断2(INT2)的测试程序(下降沿中断)............................ 外部中断3(INT3)的测试程序(下降沿中断)............................ 外部中断4(INT4)的测试程序(下降沿中断)............................ 178 180 182 184 186 第7章 定时器/计数器................................................... 188 7.1 定时器/计数器的相关寄存器.......................................188 7.2 定时器/计数器0工作模式...........................................193 7.2.1 7.2.2 7.2.3 7.2.4 7.3 模式0(16位自动重装)及测试程序,建议只学习此模式足矣.............. 193 模式1(16位定时器),不建议学习.................................... 197 模式2(8位自动重装模式),不建议学习............................... 198 模式3(两个8位计数器),不建议学习................................. 199 定时器/计数器1工作模式...........................................200 7.3.1 模式0(16位自动重装)及测试程序,建议只学习此模式足矣.............. 200 7.3.2 模式1(16位定时器),不建议学习.................................... 204 7.3.3 模式2(8位自动重装模式),不建议学习............................... 205 7.4 可编程时钟输出.....................................................206 7.5 7.4.1 内部R/C时钟输出的测试程序(C程序和汇编程序)...................... 208 7.4.2 定时器0的可编程时钟输出的测试程序(C程序和汇编程序).............. 210 7.4.3 定时器1的可编程时钟输出的测试程序(C程序和汇编程序).............. 212 古老的Intel 8051单片机定时器0/1应用举例..........................214 第8章 模拟串口的实现程序............................................ 219 8.1 利用定时器0实现模拟串口的测试程序(C程序和汇编程序)..........219 8.2 利用定时器1实现模拟串口的测试程序(C程序和汇编程序)..........228 第9章 STC15F204EA系列单片机的A/D转换器..................... 237 9.1 9.2 9.3 9.4 9.5 9.6 A/D转换器的结构...................................................237 与A/D转换相关的寄存器............................................238 A/D转换典型应用线路..............................................242 A/D做按键扫描应用线路图..........................................243 A/D转换模块的参考电压源..........................................244 A/D转换测试程序(C程序和汇编程序)...............................245 9.6.1 A/D转换测试程序(ADC中断方式)................................... 245 9.6.2 A/D转换测试程序(ADC查询方式)................................... 256 第10章 STC15F204EA系列单片机EEPROM的应用............... 267 10.1 10.2 10.3 10.4 10.5 IAP及EEPROM新增特殊功能寄存器介绍..........................267 STC15F204EA系列单片机EEPROM空间大小及地址...............271 IAP及EEPROM汇编简介...........................................272 EEPROM测试程序(不使用模拟串口)..............................276 EEPROM测试程序(使用模拟串口送出显示).......................284 第11章 STC15系列单片机开发/编程工具说明...................... 298 11.1 在系统可编程(ISP)原理,官方演示工具使用说明..................298 11.1.1 11.1.2 11.1.3 11.1.4 11.1.6 在系统可编程(ISP)原理使用说明................................... 298 STC15F204EA系列在系统可编程(ISP)典型应用线路图................. 299 电脑端的STC-ISP控制软件界面使用说明............................ 301 STC-ISP(最方便的在线升级软件)下载编程工具硬件使用说明.......... 305 若无RS-232转换器,如何用STC的ISP下载板做RS-232通信转换......... 306 编译器/汇编器,编程器,仿真器..................................307 11.2 11.3 自定义下载演示程序(实现不停电下载)............................308 附录A 附录B 附录C 附录D 附录E 附录F 附录G 汇编语言编程.................................................... 311 C语言编程....................................................... 333 STC15F204EA系列单片机电气特性......................... 343 STC15xx系列单片机取代传统8051注意事项............... 344 STC15F204EA系列单片机选型一览表....................... 347 如何采购.......................................................... 348 A版本设计错误特别声明,将在B版本中修正.............. 349 ——B版本将在2012年4月后开始送样,现A版本小批量供货........... 349 G.1 G.2 G.3 G.4 G.5 G.6 A版本的外部中断有时会异常,B版本的外部中断可正常使用.....349 B版本的内部IRC可编程时钟输出修改.........................349 CLKOUT0和CLKOUT1设计错误更正.........................351 内部系统时钟分频设计错误更正.............................352 EEPROM/IAP功能使用注意事项.............................353 A版本的寄存器PCON中无上电复位标志POF位,而B版本中有......354 附录H STC15F204EA系列B版本对指令系统的提升............... 355 附录I STC15F204EA系列B版本新增加了掉电唤醒专用定时器.. 361 附录J:如何利用Keil C软件减少代码长度.......................... 365 附录K:每日更新内容的备忘录....................................... 366 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第1章 STC15F204EA系列单片机总体介绍 1.1 STC15F204EA系列单片机简介 STC15F204EA系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/��� 高可靠 /低功耗���������� /超强抗干扰的新一代8051单片机,��������������������� 采用第八代加密技术,加密性超强,����� 指令代码完 全兼容传统8051,但速度快6-12倍。������� 内部集成高精度R/C时钟,±1%温飘,常温下温飘5‰, 5MHz~35MHz宽范围可设置,可彻底省掉外部昂贵的晶振。8路高速10位A/D转换(30万次/秒), 针对电机控制,强干扰场合。 1. 增强型 8051 CPU,1T,单时钟/机器周期,速度比普通8051快6-12倍 2. 工作电压: STC15F204EA 系列工作电压:5.5V - 3.8V(5V 单片机) STC15L204EA 系列工作电压:3.6V - 2.4V(3V 单片机) 3��. 内部高可靠复位,8级可选复位门槛电压,彻底省掉外部复位电路 ����������������������������� 4 . 内 部 高 精 度 R / C 时 钟 , ± 1 % 温 飘 ( - 4 0 oC ~ + 8 5 oC ) , 常 温 下 温 飘 5 ‰ , 内 部 时 钟 从 5MHz~35MHz可选(5.5296MHz / 11.0592MHz / 22.1184MHz / 33.1776MHz) 5. 工作频率范围:5MHz ~ 35MHz,相当于普通8051的60MHz~420MHz 6��. 低功耗设计:低速模式,空闲模式,掉电模式(可由外部中断唤醒) ������������������������������ 7. 支持掉电唤醒的管脚:INT0/P3.2, INT1/P3.3, INT2, INT3, INT4 8. 1K/2K/3K/4K/5K字节片内Flash������� 程序����� 存储器, 擦写次数10万次以上 ���������� 9. 片上集成 256 字节 RAM 10.有EEPROM 功能����������� ,擦写次数10万次以上 11.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 12.8������������������������������������������ 通道,10位高速ADC,速度可达30万次/秒,2路定时器还可当2路PWM或D/A使用 13.2个16位可重装载定时器,兼容普通8051的定时器T0/T1,并可实现时钟输出和PWM功能 14.可编程时钟输出功能,T0在P3.5输出时钟,T1在P3.4输出时钟,在P0.0口输出内部高精 度R/C时钟IRC_CLK(也可2分频输出IRC_CLK/2)。 15.硬件��� 看门狗(WDT) C T S U C M . d e t i m Li 16.串口功能可由[P3.0/INT4,P3.1]结合定时器实现 17.先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令 18.26��������������������������������������� 个�������������������������������������� 通用I/O口,复位后为: 准双向口/弱上拉(普通8051传统I/O口) 可设置成四种模式:准双向口/弱上拉,����� 强���� 推挽/ 强上拉,仅为输入/ ����������������� 高阻,开漏 每个I/O 口驱动能力均可达到20mA,但整个芯片最大不要超过90mA 19���� .封装:SOP-28, SKDIP-28 20.全部175oC 八小时高温烘烤,高品质制造保证 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947  STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.2 STC15F204EA系列单片机的内部结构 STC15F204EA系列单片机的内部结构框图如下图所示。STC15F204EA系列单片机中包含 中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、I/O口、高速A/D转 换、看门狗、片内高精度R/C振荡时钟及高可靠复位等模块。 RAM 256 字节 B寄存器 ACC . d e t i m 堆栈指针 TMP2 TMP1 Li 定时器/计数器 0 定时器/计数器 1 U C M ALU 内部 高可靠复位 (8级可选复位门槛电压) C T S 控制单元 PSW 看门狗 (WDT) 程序存储器(Flash) 1-6K ISP/IAP 地址生成器 程序计数器(��� PC) Port 0,2,3 锁存器 Port1 锁存器 ADC 内部高精度R/C振荡器, Port 1 驱动器 8 ±1%温飘(-40oC~+85oC), P1.0 ~ P1.7 常温下温飘5‰ P1.0 ~ P1.7 Port 0,2,3 驱动器 P0,P2,P3 STC15F204EA系列内部结构框图  南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.3 STC15系列������ 单片机��� 管脚图 1.3.1 STC15F204EA系列单片机管脚图 中国大陆本土STC姚永平独立创新设计: 请不要再抄袭我们的规格和管脚排列, 再抄袭就很无耻了。 所有封装形式均满足欧盟RoHS要求, 强烈推荐选择SOP-28/20/8贴片封装,传统的插件SKDIP/DIP封装稳定供货 STC15F204EA系列管脚图 STC15F系列B版本将在2012年4月后开始送样. P2.5 27 P2.4 ADC0/P1.0 3 26 P2.3 ADC1/P1.1 4 25 P2.2 ADC2/P1.2 5 24 P2.1 ADC3/P1.3 6 23 P2.0/RSTOUT_LOW ADC4/P1.4 7 22 P3.7/INT3 ADC5/P1.5 8 21 P3.6/INT2 ADC6/P1.6 9 20 P3.5/T1/CLKOUT0 ADC7/P1.7 10 19 P3.4/T0/CLKOUT1 IRC_CLKO/RST/P5.4 11 18 P3.3/INT1 Vcc 12 17 P3.2/INT0 P5.5 13 16 P3.1 Gnd 14 15 P3.0/INT4 ISP/IAP C T S SOP-28/SKDIP-28 ADC2/P1.2 CU i m i ADC0/P1.0 18 P3.7/INT3 17 P3.6/INT2 16 P3.5/T1/CLKOUT0 15 P3.4/T0/CLKOUT1 14 P3.3/INT1 13 P3.2/INT0 9 12 P3.1 10 11 P3.0/INT4 ADC4/P1.4 3 ADC5/P1.5 4 ADC6/P1.6 5 ADC7/P1.7 6 IRC_CLKO/RST/P5.4 7 Vcc 8 P5.5 Gnd L ADC1/P1.1 19 2 M . d te 20 1 ADC3/P1.3 ISP/IAP 28 2 18 I/O Ports 1 P2.7 26 I/O Ports P2.6 SOP-20/DIP-20 以上为STC15F204EA系列B版本管脚图 特别声明:A版本和B版本管脚图中有两个管脚有差别 B版本中为 P5.4/RST/IRC_CLKO P5.5 A版本中为 P0.0/RST/IRC_CLKO P0.1 以下为STC15F204EA系列A版本管脚图 P2.5 27 P2.4 ADC0/P1.0 3 26 P2.3 ADC1/P1.1 4 25 P2.2 ADC2/P1.2 5 24 P2.1 ADC3/P1.3 6 23 P2.0/RSTOUT_LOW ADC4/P1.4 7 22 P3.7/INT3 ADC5/P1.5 8 21 P3.6/INT2 ADC6/P1.6 9 20 P3.5/T1/CLKOUT0 ADC7/P1.7 10 19 P3.4/T0/CLKOUT1 IRC_CLKO/RST/P0.0 11 18 P3.3/INT1 Vcc 12 17 P3.2/INT0 P0.1 13 16 P3.1 Gnd 14 15 P3.0/INT4 ISP/IAP ADC2/P1.2 1 20 ADC1/P1.1 ADC3/P1.3 2 19 ADC0/P1.0 ADC4/P1.4 3 18 P3.7/INT3 ADC5/P1.5 4 17 P3.6/INT2 ADC6/P1.6 5 16 P3.5/T1/CLKOUT0 ADC7/P1.7 6 15 P3.4/T0/CLKOUT1 IRC_CLKO/RST/P0.0 7 14 P3.3/INT1 Vcc 8 13 P3.2/INT0 P0.1 9 12 P3.1 Gnd 10 11 P3.0/INT4 ISP/IAP 28 2 18 I/O Ports 1 P2.7 26 I/O Ports P2.6 SOP-20/DIP-20 SOP-28/SKDIP-28 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947  STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.3.2 STC15F100系列单片机管脚图 中国大陆本土STC姚永平独立创新设计: 请不要再抄袭我们的规格和管脚排列, 再抄袭就很无耻了。 2 INT3/CLKOUT0/T1/P3.5 3 Gnd 4 ISP/IAP 1 Vcc 6 I/O Ports IRC_CLKO/INT2/CLKOUT1/T0/RST/P3.4 8 P3.3/INT1/RSTOUT_LOW 7 P3.2/INT0 6 P3.1 5 P3.0/INT4 SOP-8/DIP-8 STC15F系列B版本将在2012年4月后开始送样. C T S 10 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.4 STC15系列单片机选型一览表 1.4.1 STC15F204EA系列单片机选型一览表 STC15F201A STC15F201EA STC15F202A STC15F202EA STC15F203A STC15F203EA STC15F204A STC15F204EA 内 Flash 部 内部 支持 程序 内 低 工作 定 可选 掉电 A/D 看门狗 置 EEP 压 存储 SRAM 电压 时 复位 唤醒 8路 (WDT) 复 ROM 检 器 字节 (V) 器 门槛 外部 (字节 位 测 电压 中断 byte) 中 断 STC15F204EA系列单片机选型一览 5.5-3.8 1K 256 2 10位 有 有 5 有 8级 5.5-3.8 1K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 2K 256 2 10位 有 有 5 有 8级 5.5-3.8 2K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 3K 256 2 10位 有 有 5 有 8级 5.5-3.8 3K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 4K 256 2 10位 有 有 5 有 8级 5.5-3.8 4K 256 2 10位 有 有 1K 有 8级 5 IAP15F205A 5.5-3.8 STC15L201A STC15L201EA STC15L202A STC15L202EA STC15L203A STC15L203EA STC15L204A STC15L204EA 3.6-2.4 3.6-2.4 3.6-2.4 3.6-2.4 3.6-2.4 3.6-2.4 3.6-2.4 3.6-2.4 IAP15L205A 3.6-2.4 型号 5K 256 掉电 唤醒 专用 定时 SOP-28 SKDIP-28 器 - . d e t i m Li U C M 8级 5 - 1K 1K 2K 2K 3K 3K 4K 4K STC15L204EA系列单片机选型一览表 256 2 10位 有 有 有 8级 256 2 10位 有 有 2K 有 8级 256 2 10位 有 有 有 8级 256 2 10位 有 有 2K 有 8级 256 2 10位 有 有 有 8级 256 2 10位 有 有 2K 有 8级 256 2 10位 有 有 有 8级 256 2 10位 有 有 1K 有 8级 5 5 5 5 5 5 5 5 - 5K 256 5 - C T S 提供客制化IC设计服务 2 10位 封装28-Pin (26个I/O口) 价格(RMB ¥) 2 10位 有 有 有 IAP 有 IAP 有 有 8级 ¥2.35 ¥2.55 ¥2.40 ¥2.60 ¥2.45 ¥2.65 ¥2.50 ¥2.70 用户可在程序区 直接修改程序 ¥2.35 ¥2.55 ¥2.40 ¥2.60 ¥2.45 ¥2.65 ¥2.50 ¥2.70 用户可在程序区 直接修改程序 以上单价为200K起订 量小每片需加0.3元-1元 以上价格运费由客户承担,零售1片起 如对价格不满,可来电要求降价 STC15系列B版本部分型号有内部掉电唤醒专用定时器 因为程序区的最后7个字节单元被强制性的放入全球唯一ID号的内容,所以用 户实际可以使用的程序空间大小要比选型表中的大小少7个字节。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 11 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.4.2 STC15F100系列单片机选型一览表 STC15F100 STC15F101 STC15F101E STC15F102 STC15F102E STC15F103 STC15F103E STC15F104 STC15F104E Flash 程序 内 内部 工作 定 A/D 看门狗 置 EEP 低压 存储 SRAM 电压 时 8路 (WDT) 复 ROM 检测 器 字节 (V) 器 (字节 位 中断 byte) STC15F100系列单片机选型一览 5.5-3.8 512 128 2 有 有 有 5.5-3.8 1K 128 2 有 有 有 5.5-3.8 1K 128 2 有 有 2K 有 5.5-3.8 2K 128 2 有 有 有 5.5-3.8 2K 128 2 有 有 2K 有 5.5-3.8 3K 128 2 有 有 有 5.5-3.8 3K 128 2 有 有 2K 有 5.5-3.8 4K 128 2 有 有 有 5.5-3.8 4K 128 2 有 有 1K 有 IAP15F105 5.5-3.8 5K 128 STC15F102EW 5.5-3.8 STC15F103EW 5.5-3.8 STC15F104EW 5.5-3.8 2K 3K 4K 8级 8级 8级 5 5 5 有 有 有 ¥1.85 ¥1.95 ¥2.05 ¥2.05 ¥2.15 ¥2.25 8级 8级 8级 8级 8级 8级 8级 8级 8级 5 5 5 5 5 5 5 5 5 - ¥0.99 ¥1.20 ¥1.25 ¥1.30 ¥1.35 ¥1.40 ¥1.45 ¥1.50 ¥1.75 ¥1.19 ¥1.40 ¥1.45 ¥1.50 ¥1.55 ¥1.60 ¥1.65 ¥1.70 ¥1.95 型号 2 - 有 U C M 有 支持 掉电 唤醒 外部 中断 8级 8级 8级 8级 8级 8级 8级 8级 8级 5 5 5 5 5 5 5 5 5 - ¥0.99 ¥1.20 ¥1.25 ¥1.30 ¥1.35 ¥1.40 ¥1.45 ¥1.50 ¥1.55 8级 5 - 用户可在程序区 直接修改程序 . d e t i m Li 有 IAP 封装8-Pin 掉电 (6个I/O口) 唤醒 价格(RMB ¥) 专用 定时 SOP-8 DIP-8 器 内部 可选 复位 门槛 电压 ¥1.19 ¥1.40 ¥1.45 ¥1.50 ¥1.55 ¥1.60 ¥1.65 ¥1.70 ¥1.75 STC15L100 STC15L101 STC15L101E STC15L102 STC15L102E STC15L103 STC15L103E STC15L104 STC15L104E 3.6-2.4 512 3.6-2.4 1K 3.6-2.4 1K 3.6-2.4 2K 3.6-2.4 2K 3.6-2.4 3K 3.6-2.4 3K 3.6-2.4 4K 3.6-2.4 4K 128 2 有 有 2K 有 128 2 有 有 2K 有 128 2 有 有 1K 有 STC15L100系列单片机选型一览表 128 2 有 有 有 128 2 有 有 有 128 2 有 有 2K 有 128 2 有 有 有 128 2 有 有 2K 有 128 2 有 有 有 128 2 有 有 2K 有 128 2 有 有 有 128 2 有 有 1K 有 IAP15L105 3.6-2.4 5K 128 2 - 有 有 IAP 有 8级 5 - 用户可在程序区 直接修改程序 STC15L102EW 3.6-2.4 STC15L103EW 3.6-2.4 STC15L104EW 3.6-2.4 2K 3K 4K 128 128 128 2 2 2 - 有 有 有 有 2K 有 2K 有 1K 有 有 有 8级 8级 8级 5 5 5 有 有 有 ¥1.85 ¥1.95 ¥2.05 C T S ¥2.05 ¥2.15 ¥2.25 以上单价为200K起订,量小每片需加0.3元-1元,以上价格运费由客户承担,零售1片起 因为程序区的最后7个字节单元被强制性的放入全球唯一ID号的内容,所以用户实际可以使用 的程序空间大小要比选型表中的大小少7个字节。 12 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.4.3 STC15S204EA系列单片机选型一览表 型号 STC15S201A STC15S201EA STC15S202A STC15S202EA STC15S203A STC15S203EA STC15S204A STC15S204EA STC15S205A STC15S205EA IAP15S206A STC15V201A STC15V201EA STC15V202A STC15V202EA STC15V203A STC15V203EA STC15V204A STC15V204EA STC15V205A STC15V205EA IAP15V206A 内 Flash 部 内部 支持 程序 内 低 工作 定 可选 掉电 A/D 看门狗 置 EEP 压 存储 SRAM 电压 时 复位 唤醒 8路 (WDT) 复 ROM 检 器 字节 (V) 器 门槛 外部 (字节 位 测 电压 中断 byte) 中 断 STC15S204EA系列单片机选型一览 5.5-3.8 1K 256 2 10位 有 有 5 有 8级 5.5-3.8 1K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 2K 256 2 10位 有 有 5 有 8级 5.5-3.8 2K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 3K 256 2 10位 有 有 5 有 8级 5.5-3.8 3K 256 2 10位 有 有 2K 有 8级 5 5.5-3.8 4K 256 2 10位 有 有 5 有 8级 5.5-3.8 4K 256 2 10位 有 有 1K 有 8级 5 5.5-3.8 5K 256 2 10位 有 有 5 有 8级 5.5-3.8 5K 256 2 10位 有 有 1K 有 8级 5 5.5-3.8 6K 256 2 10位 有 有 IAP 有 8级 5 STC15V204EA列单片机选型一览表 3.6-2.4 1K 256 2 10位 有 有 5 有 8级 3.6-2.4 1K 256 2 10位 有 有 2K 有 8级 5 3.6-2.4 2K 256 2 10位 有 有 5 有 8级 3.6-2.4 2K 256 2 10位 有 有 2K 有 8级 5 3.6-2.4 3K 256 2 10位 有 有 5 有 8级 3.6-2.4 3K 256 2 10位 有 有 2K 有 8级 5 3.6-2.4 4K 256 2 10位 有 有 5 有 8级 3.6-2.4 4K 256 2 10位 有 有 1K 有 8级 5 3.6-2.4 5K 256 2 10位 有 有 5 有 8级 3.6-2.4 5K 256 2 10位 有 有 1K 有 8级 5 3.6-2.4 6K 256 2 10位 有 有 IAP 有 8级 5 C T S U C M 提供客制化IC设计服务 封装20-Pin (18个I/O口) 价格(RMB ¥) 掉电 唤醒 专用 定时 SOP-20 器 DIP-20 - . d e t i m Li - 以上单价为200K起订 量小每片需加0.3元-1元 以上价格运费由客户承担,零售1片起 如对价格不满,可来电要求降价 STC15S204EA系列是STC15F204EA系列的特殊版本 因为程序区的最后7个字节单元被强制性的放入全球唯一ID号的内容,所以用 户实际可以使用的程序空间大小要比选型表中的大小少7个字节。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 13 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.5 STC15F204EA系列��������� 单片机最小应用系统 系统电源/5V/3.3V Vin 1 P2.6 P2.5 28 2 P2.7 P2.4 27 3 P1.0/ADC0 P2.3 26 4 P1.0/ADC1 P2.2 25 5 P1.2/ADC2 P2.1 24 6 P1.3/ADC3 RSTOUT_LOW/P2.0 23 INT3/P3.7 22 7 P1.4/ADC4 Power On 8 P1.5/ADC5 INT2/P3.6 21 SW1 9 P1.6/ADC6 CLKOUT0/T1/P3.5 20 10 P1.7/ADC7 CLKOUT1/T0/P3.4 19 Vcc C1 10μF C2 0.1μF C T S 11 P0.0/RST/IRC_CLKO INT1/P3.3 18 12 Vcc INT0/P3.2 17 13 P0.1 P3.1 16 14 Gnd INT4/P3.0 15 U C M . d e t i m Li 内部高可靠复位,不需要外部复位电路 P0.0/RST/IRC_CLKO脚出厂时默认为I/O口,可以通过 STC-ISP 编程器将其设置为RST复位脚. 内部高精度R/C振荡器,温飘±1%(-400C~+850C),常温下温飘5‰, 不需要昂贵的外部晶振 建议加上电容C1(10μF), C2(0.1μF), 可去除电源噪声,提高抗干扰能力 14 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.6 STC15F204EA系列������ 在系统可编程(ISP)典型应用线路图 系统电源/USB +5V(可从电脑USB取电) Vin Power On SW1 Vcc C1 10μF C2 0.1μF 1 P2.6 P2.5 28 2 P2.7 P2.4 27 3 P1.0/ADC0 P2.3 26 4 P1.0/ADC1 P2.2 25 5 P1.2/ADC2 P2.1 24 6 P1.3/ADC3 RSTOUT_LOW/P2.0 23 7 P1.4/ADC4 INT3/P3.7 22 8 P1.5/ADC5 INT2/P3.6 21 9 P1.6/ADC6 CLKOUT0/T1/P3.5 20 10 P1.7/ADC7 CLKOUT1/T0/P3.4 19 11 P0.0/RST/IRC_CLKO INT1/P3.3 18 12 Vcc INT0/P3.2 17 13 P0.1 P3.1 16 14 Gnd INT4/P3.0 15 U C M 此部分与ISP下载无 关,是为了便于无示 波器或万用表等简易 测试设备的用户观察 Vcc . d e t i m Li 1K 1K STC 单片机在线编程线路, STC RS-232 转换器 Vcc USB+5V T1OUT R1IN GND USB1 C T S + 0.1μF STC3232,STC232,MAX232,SP232 1 C1+ Vcc 16 2 V+ Gnd 15 3 C1- T1OUT 14 4 C2+ R1IN 13 5 C2- R1OUT 12 6 V7 T2OUT 8 R2IN T1IN 11 + Vcc Gnd PC_RxD(COM Pin2) PC COM 2 3 5 PC_TxD(COM Pin3) MCU_RxD(P3.0) MCU_TxD(P3.1) T2IN 10 R2OUT 9 U1-P3.2 U1-P3.3 MCU-VCC U1-P3.0 U1-P3.1 Gnd 内部高可靠复位,不需要外部复位电路 P0.0/RST/IRC_CLKO脚出厂时默认为I/O口,可以通过 STC-ISP 编程器将其设置为RST复位脚. 内部高精度R/C振荡器,温飘±1%(-400C~+850C),常温下温飘5‰, 不需要昂贵的外部晶振 建议加上电容C1(10μF), C2(0.1μF), 可去除电源噪声,提高抗干扰能力 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 15 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.7 STC15F204EA系列���� 管脚说明 管脚 管脚编号 P0.0/RST/ IRC_CLKO 11 P0.1 13 P1.0/ADC0 3 P1.1/ADC1 4 P1.2/ADC2 5 P1.3/ADC3 P1.4/ADC4 P1.5/ADC5 P1.6/ADC6 P1.7/ADC7 说明 P0.0 标准I/O口 PORT0[0] RST 复位脚; IRC_CLKO 标准 PORT0[1] P1.0 标准I/O口 PORT1[0] ADC0 ADC 输入通道-0 P1.1 ADC1 P1.2 ADC2 P1.3 6 ADC3 ADC4 C T S 9 10 标准 PORT1[1] ADC 输入通道-1 P1.5 ADC5 P1.6 ADC6 P1.7 ADC7 P2.0 . d e t i m 标准I/O口 PORT1[2] ADC 输入通道-2 Li 标准I/O口 PORT1[3] ADC 输入通道-3 U C M P1.4 7 8 内部R/C振荡时钟输出;输出的频率可为IRC_CLK/1或 IRC_CLK/2 标准I/O口 PORT1[4] ADC 输入通道-4 标准I/O口 PORT1[5] ADC 输入通道-5 标准I/O口 PORT1[6] ADC 输入通道-6 标准I/O口 PORT1[7] ADC 输入通道-7 标准I/O口 PORT2[0] P2.0/ RSTOUT_LOW 23 P2.1 24 标准I/O口 PORT2[1] P2.2 25 标准I/O口 PORT2[2] P2.3 26 标准I/O口 PORT2[3] P2.4 27 标准I/O口 PORT2[4] P2.5 28 标准I/O口 PORT2[5] P2.6 1 标准I/O口 PORT2[6] P2.7 2 标准I/O口 PORT2[7] P3.0 标准I/O口 PORT3[0] 上电后,输出低电平,在复位期间也是输出低电平,用户 RSTOUT_LOW 可用软件将其设置为高电平或低电平,如果要读外部状 态,可将该口先置高后再读 P3.0/INT4 P3.1 16 15 16 南通国芯微电子有限公司 INT4 外部中断4,只能下降沿中断 支持掉电唤醒 标准I/O口 PORT3[1] 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 管脚 P3.2/INT0 P3.3/INT1 技术支持网站:www.STCMCU.com 管脚编号 17 18 研发顾问:13922809991 说明 P3.2 标准I/O口 PORT3[2] INT0 外部中断0,既可上升沿中断也可下降沿中断. 如 果I T 0 ( T CON.0)被置为1 ,INT0管脚仅为下降沿中断。如果 IT0(TCON.0)被清0,INT0管脚既支持上升沿中断也支持下降沿中 断。 INT0支持掉电唤醒。 P3.3 标准I/O口 PORT3[3] INT1 外部中断1,既可上升沿中断也可下降沿中断. 如果IT1(TCON.2)被置为1,INT1管脚仅为下降沿中断。如果 IT1(TCON.2)被清0,INT1管脚既支持上升沿中断也支持下降沿中 断。 INT1支持掉电唤醒。 P3.4 标准I/O口 PORT3[4] T0 定时器/计数器0的外部输入 P3.4/T0/ CLKOUT1 19 P3.5/T1/ CLKOUT0 20 P3.6/INT2 21 P3.7/INT3 22 Vcc 12 电源正极 Gnd 14 电源负极,接地 南通国芯微电子有限公司 临时技术支持:13922829991 . d e t i m Li 定时器/计数器1的时钟输出 CLKOUT1 可通过设置INT_CLKO[1]位/T1CLKO将该管脚配置为CLKOUT1, 也可对T1脚的外部时钟输入进行分频输出 P3.5 标准I/O口 PORT3[5] T1 U C M 定时器/计数器1的外部输入 定时器/计数器0的时钟输出 CLKOUT0 可通过设置INT_CLKO[0]位/T0CLKO将该管脚配置为CLKOUT0, 也可对T0脚的外部时钟输入进行分频输出 P3.6 标准I/O口 PORT3[6] C T S INT2 外部中断2,只能下降沿中断 支持掉电唤醒 P3.7 标准I/O口 PORT3[7] INT3 外部中断3,只能下降沿中断 支持掉电唤醒 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 17 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.8 STC15系列�������� 单片机封装尺寸图 1.8.1 STC15F204EA系列封装尺寸图 SOP-28 封装尺寸图 28-Pin Small Outline Package (SOP-28) Dimensions in Millimeters D b A2 C T S U C M b1 b WITH PLATING c BASE METAL Φ R R1 L2 L L1 18 南通国芯微电子有限公司 A e 1.27mm A1 z E E1 . d e t i m Li 一般尺寸 (测量单位 = MILLMETER / mm) MIN. NOM. MAX. 符号 A A1 A2 b b1 c D E E1 e L L1 L2 R R1 Φ z 总机:0513-5501 2928 / 2929 / 2966 2.465 0.100 2.100 0.356 0.366 17.750 10.100 7.424 0.764 1.303 00 - 2.515 0.150 2.300 0.406 0.426 0.254 17.950 10.300 7.500 1.27 0.864 1.403 0.274 0.200 0.300 0.745 2.565 0.200 2.500 0.456 0.486 18.150 10.500 7.624 0.964 1.503 100 - 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 SKDIP-28 封装尺寸图 28-Pin Plastic Dual-In-line Package (SKDIP-28) Dimensions in Inches E E1 eA θ 0 D A2 A L U C M A1 e 100 mil b b1 C T S . d e t i m Li 符号 A A1 A2 b b1 D E E1 e L θ0 eA 一般尺寸 (测量单位 = INCH) MIN. 0.015 0.125 1.385 0.283 0.115 0 0.330 NOM. 0.13 0.018 0.060 1.390 0.310 0.288 0.100 0.130 7 0.350 MAX. 0.210 0.135 1.40 0.293 0.150 15 0.370 UNIT: INCH, 1 inch = 1000 mil 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 19 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.8.2 STC15F101E系列封装尺寸图 SOP-8 封装尺寸图 8-PIN SMALL OUTLINE PACKAGE (SOP-8) Dimensions in Inches 0.004 max. C T S A b U C M Li 一般尺寸 (测量单位 = INCH) 符号 A A1 b D E E1 e L L1 Φ A1 e 50 mil Φ L1 . d e t i m E E1 D L MIN. 0.053 0.004 0.189 0.228 0.150 0.016 00 NOM. 0.016 0.050 0.008 - MAX. 0.069 0.010 0.196 0.244 0.157 0.050 80 UNIT: INCH, 1 inch = 1000 mil 20 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 DIP-8 封装尺寸图 8-Pin Plastic Dual Inline Package (DIP-8) Dimensions in Inches E E1 eA θ 0 D b 一般尺寸 (测量单位 = INCH) A2 A Li 符号 L A1 e b1 . d e t i m 18 mil 100 mil 60 mil C T S U C M A A1 A2 b b1 D E E1 e L θ0 eA MIN. 0.015 0.125 0.355 0.245 0.115 0 0.335 NOM. 0.130 0.018 0.060 0.365 0.300 0.250 0.100 0.130 7 0.355 MAX. 0.210 0.135 0.400 0.255 0.150 15 0.375 UNIT: INCH, 1 inch = 1000 mil 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 21 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.8.3 STC15S204EA系列封装尺寸图 SOP-20 封装尺寸图 20-Pin Small Outline Package (SOP-20) (for STC15S/V204EA series) Dimensions in Inches and (Millimeters) z e 1.27mm A2 b1 b c WITH PLATING c1 BASE METAL Φ R1 R L2 L L1 22 南通国芯微电子有限公司 . d e t i m Li 一般尺寸 A A1 C T S b U C M E E1 D (测量单位 = MILLMETER/ mm) MIN. NOM. MAX. 符号 A A1 A2 b1 b c c1 D E E1 e L L1 L2 R R1 Φ z 总机:0513-5501 2928 / 2929 / 2966 2.465 0.100 2.100 0.366 0.356 0.234 12.500 10.206 7.450 0.800 1.303 00 - 2.515 0.150 2.300 0.426 0.406 0.254 12.700 10.306 7.500 1.27 0.864 1.403 0.274 0.300 0.200 0.660 2.565 0.200 2.500 0.486 0.456 0.274 12.900 10.406 7.550 0.900 1.503 100 - 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 DIP-20 封装尺寸图 20-Pin Plastic Dual Inline Package (DIP-20) (for STC15S/V204EA series) Dimensions in Inches D θ eA E E1 0 C S 一般尺寸 (测量单位 = INCH) A2 A L U C M A1 e 100 mil . d e t i m 120 mil b b1 C T S 符号 A A1 A2 b b1 C D E E1 e L θ0 eA S Li MIN. 0.015 0.125 0.016 0.058 0.008 1.012 0.290 0.245 0.090 0.120 0 0.355 - NOM. 0.13 0.018 0.060 0.010 1.026 0.300 0.250 0.100 0.130 0.355 - MAX. 0.175 0.135 0.020 0.064 0.11 1.040 0.310 0.255 0.110 0.140 15 0.375 0.075 UNIT: INCH, 1 inch = 1000 mil 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 23 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.9 STC15系列������� 单片机命名规则 1.9.1 STC15F204EA系列单片机命名规则 STC15 x 2 xx xx -- 35 x - xxxx xx 管脚数 如 28 封装类型: 如 SOP, SKDIP 工作温度范围: I : 工业级, -40℃ ~ 85℃ C : 商业级, 0℃ ~ 70℃ . d e t i m 工作频率: 35 : 工作频率可到35MHz Li 有EA字样 : 有内部EEPROM,有A/D转换 仅有A 字样: 无内部EEPROM,有A/D转换 C T S U C M 程序空间大小,如: 01是1K字节, 02是2K字节,03是3K字节, 04是4K字节,05是5K字节等 SRAM空间大小: 128×2 = 256字节 工作电压 F : 5.5V~3.8V L : 2.4V~3.6V STC 1T 8051,同样的工作频率时,速度是普通8051的6~12倍 24 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.9.2 STC15F100系列单片机命名规则 STC15 x 1 xx xxx -- 35 x - xxxx xx 管脚数 如8 封装类型: 如 SOP, DIP 工作温度范围: I : 工业级, -40℃ ~ 85℃ C : 商业级, 0℃ ~ 70℃ 工作频率: 35 : 工作频率可到35MHz . d e t i m 有E字样 : 有内部EEPROM 有W字样 : 有内部掉电唤醒专用定时器 无字样 : 无内部EEPROM C T S Li 程序空间大小,如: 00是512字节(无规律,特殊编号), 01是1K字节,02是2K字节, 03是3K字节, 04是4K字节, 05是5K字节等 U C M SRAM空间大小: 128×1 = 128字节 工作电压 F : 5.5V~3.8V L : 2.4V~3.6V STC 1T 8051,同样的工作频率时,速度是普通8051的6~12倍 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 25 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1.10 每个单片机具有全球唯一身份证号码(ID号) STC最新一代STC15系列每一个单片机出厂时都具有全球唯一身份证号码� (ID号����� )���� ,用户可 以在单片机上电后读取内部RAM单元从F1H - F7H 连续����������������� 7���������������� 个单元的值来获取此单片机的唯一身 份证号码�(ID号���� ),�� 使用“ MOV @Ri” ������ 指令来读取。如果用户需要用全球唯一ID号进行用户自己 的软件加密,建议用户在程序的多个地方有技巧地判断自己的用户程序有无被非法修改,提高 解密的难度,防止解密者修改程序,绕过对全球唯一ID号的判断。 除内部RAM的F1H ~ F7H单元的内容为全球唯一ID号外,最新的STC15系列的程序存储器 的最后7个字节单元的值也是全球唯一ID号,用户不可修改,但IAP15系列整个程序区是开放 的,可以修改,建议利用全球唯一ID号加密时,使用STC15系列,并将EEPROM功能使用上,从 EEPROM起始地址0000H开始使用,有效杜绝对全球唯一ID号的攻击。使用程序区的最后7个字节 的全球唯一ID号比使用RAM单元 F1H - F7H 的全球唯一ID号进行比较更难被攻击。 //读内部ID号的C语言参考程序 U C M . d e t i m Li /* --- STC MCU Limited ------------------------------------------------- */ /* --- STC 姚永平 2009/2/7 V1.0 ---------------------------------- */ /* --- STC15 系列单片机,软件实现自定义下载程序-------------------------- */ /* --- Mobile: 13922805190 ----------------------------------------------- */ /* --- Fax: 0755-82905966 ------------------------------------------------ */ /* --- Tel: 0755-82948409 ------------------------------------------------- */ /* --- Web: www.STCMCU.com ------------------------------------------ */ /* --- 本演示程序在STC-ISP Ver 3.0A.PCB的下载编程工具上测试通过 ----------- */ /* --- 如果要在程序中使用该程序,请在程序中注明使用了STC的资料及程序 - */ /* --- 如果要在文章中引用该程序,请在文章中注明使用了STC的资料及程序-- */ #include #include sfr IAP_CONTR = 0xC7; C T S sbit MCU_Start_Led = P1^7; //unsigned char self_command_array[4] = {0x22,0x33,0x44,0x55}; #define Self_Define_ISP_Download_Command 0x22 #define RELOAD_COUNT 0xfb //18.432MHz,12T,SMOD=0,9600bps void void void void void void 26 serial_port_initial(); send_UART(unsigned char); UART_Interrupt_Receive(void); soft_reset_to_ISP_Monitor(void); delay(void); display_MCU_Start_Led(void); 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 void main(void) { unsigned char i = 0; unsigned char j = 0; unsigned char idata *idata_point; serial_port_initial(); // display_MCU_Start_Led(); // send_UART(0x34); // send_UART(0xa7); idata_point = 0xF1; for(j=0;j 0 or (Rn) < 0 THEN (PC) �� ←������� ������ (PC)+ ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 101 STC15F204EA系列单片机指南 DJNZ 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 direct, rel 指令长度(字节): 3 执行周期: 2 二进制编码: 操作: DJNZ (PC) �� ←��������� �������� (PC) + 2 (direct) ←���������� �� ��������� (direct) ��– �1 IF (direct) > 0 or (direct) < 0 THEN (PC) �� ← ������� (PC) + ��� rel INC . d e t i m 功能: 加1 说明: INC指令将所代表的数据加1。如果原来的值为FFH,则加1后变为00H, 该指令步影响标志位。支持3种寻址模式:寄存器寻址、直接寻址、寄存器间接寻 址。 U C M Li 注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端 口输出数据锁存器中获取的,而不是直接读的引脚。 举例: 假设寄存器0的内容为7EH(0111110B),内部RAM的7E单元和7F单元分别存放着0FFH 和40H,则指令序列 C T S INC @R0 INC R0 INC @R0 执行完毕后,寄存器0的内容变为7FH,而内部RAM的7EH和7FH单元的内容分别变 成00H和41H。 INC A 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 0 1 0 0 操作: INC (A) �� ← ����� (A)+1 INC Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 1 r r r 操作: INC (Rn) ← �� (Rn)+1 ������ 102 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 INC 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 0 0 0 0 1 0 1 direct address 操作: INC (direct)���������� ←��������� (direct) + 1 INC @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 0 1 1 i . d e t i m 操作: INC ((Ri))����������� ←���������� ((Ri)) + 1 INC DPTR U C M 功能: 数据指针加1 说明: Li 该指令实现将DPTR加1功能。需要注意的是,这是16位的递增指令,低位字节 DPL从FFH增加1之后变为00H,同时进位到高位字节DPH。该操作不影响标志位。 C T S 该指令是唯一1条16位寄存器递增指令。 举例: 假设寄存器DPH和DPL的内容分别为12H和0FEH,则指令序列 INC DPTR INC DPTR INC DPTR 执行完毕后,DPH和DPL变成13H和01H 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 1 0 0 0 1 1 操作: INC (DPTR) �� ← �������� (DPTR)+1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 103 STC15F204EA系列单片机指南 JB 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 bit, rel 功能: 若位数据为1则跳转 说明: 如果bit代表的位数据为1,则跳转到rel所指定的地址处去执行;否则,继续执行下 一条指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向下一条指 令的首字节地址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到 PC上去,新的PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数 值,而且该操作不会影响标志位。 举例: 假设端口1的输入数据为11001010B,累加器的值为56H(01010110B)。则指令 JB P1.2, LABEL1 JB ACC.2, LABEL2 将导致程序转到标号LABEL2处去执行 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 1 0 0 0 0 0 bit address 操作: JB (PC) �� ← ������� (PC)+ 3 IF (bit) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel JBC bit, rel C T S U C M . d e t i m Li rel. address 功能: 若位数据为1则跳转并将其清零 说明: 如果bit代表的位数据为1,则将其清零并跳转到rel所指定的地址处去执行。如果 bit代表的位数据为0,则继续执行下一条指令。跳转的目标地址按照如下方式计算: 先增加PC的值,使其指向下一条指令的首字节地址,然后把rel所代表的有符号的相 对偏移量(指令的第3个字节)加到PC上去,新的PC值即为目标地址,而且该操作不 会影响标志位。 注意:如果该指令被用来修改输出引脚上的状态,那么byte所代表的数据是从端 口输出数据锁存器中获取的,而不是直接读取引脚。 举例: 假设累加器的内容为56H(01010110B),则指令序列 JBC ACC.3, LABEL1 JBC ACC.2, LABEL2 将导致程序转到标号LABEL2处去执行,且累加器的内容变为52H(01010010B)。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 1 0 0 0 0 bit address rel. address 操作: JBC (PC) �� ← ������� (PC)+ 3 IF (bit) = 1 THEN (bit) ← �� 0� (PC) �� ←�������� ������� (PC) + ��� rel 104 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 JC 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 rel 功能: 若进位标志为1,则跳转 说明: 如果进位标志为1,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的 指令。跳转的目标地址按照如下方式计算:先增加PC的值,使其指向紧接JC指令的 下一条指令的首地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字节) 加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。 举例: 假设进位标志此时为0,则指令序列 JC LABEL1 CPL C JC LABEL2 执行完毕后,进位标志变成1,并导致程序跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 0 0 0 0 0 0 操作: JC (PC) �� ← ������� (PC)+ 2 IF (C) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel JMP @A+DPTR U C M C T S 功能: 间接跳转。 . d e t i m rel. address Li 说明: 把累加器A中的8位无符号数据和16位的数据指针的值相加,其和作为下一条将要执 行的指令的地址,传送给程序计数器PC。执行16位的加法时,低字节DPL的进位会 传到高字节DPH。累加器A和数据指针DPTR 的内容都不会发生变化。不影响任何标 志位。 举例: 假设累加器A中的值是偶数(从0到6)。下面的指令序列将使得程序跳转到位于跳转 表JMP_TBL 的4条AJMP指令中的某一条去执行: MOV DPTR, #JMP_TBL JMP @A+DPTR JMP-TBL: AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3 如果开始执行上述指令序列时,累加器A中的值为04H,那么程序最终会跳转到标号 LABEL2处去执行。 注意:AJMP是一个2字节指令,因而在跳转表中,各个跳转指令的入口地址依次相 差2个字节。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 1 1 1 0 0 1 1 操作: JMP (PC) �� ← ������������ (A) + (DPTR) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 105 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 JNB bit, rel 功能: 如果bit所代表的位不为1则跳转。 说明: 如果bit所表示的位为0,则转移到rel所代表的地址去执行;否则,继续执行下一条 指令。跳转的目标地址如此计算:先增加PC的值,使其指向下一条指令的首字节地 址,然后把rel所代表的有符号的相对偏移量(指令的第3个字节)加到PC上去,新的 PC值即为目标地址。该指令只是测试相应的位数据,但不会改变其数值,而且该操 作不会影响标志位。 举例: 假设端口1的输入数据为110010108,累加器的值为56H(01010110B)。则指令序列 JNB P1.3, LABEL1 JNB ACC.3, LABEL2 执行后将导致程序转到标号LABEL2处去执行。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 1 1 0 0 0 0 bit address 操作: JNB (PC) �� ← ������� (PC)+ 3 IF (bit) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel JNC C T S rel U C M Li . d e t i m rel. address 功能: 若进位标志非1则跳转 说明: 如果进位标志为0,则程序跳转到rel所代表的地址处去执行;否则,继续执行下面的 指令。跳转的目标地址按照如下方式计算:先增加PC的值加2,使其指向紧接JNC指 令的下一条指令的地址,然后把rel所代表的有符号的相对偏移量(指令的第2个字 节)加到PC上去,新的PC值即为目标地址。该操作不会影响标志位。 举例: 假设进位标志此时为1,则指令序列 JNC LABEL1 CPL C JNC LABEL2 执行完毕后,进位标志变成0,并导致程序跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 0 1 0 0 0 0 rel. address 操作: JNC (PC) �� ← ������� (PC)+ 2 IF (C) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 106 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 JNZ 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 rel 功能: 如果累加器的内容非0则跳转 说明: 如果累加器A的任何一位为1,那么程序跳转到rel所代表的地址处去执行,如果各个 位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增 加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新 的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。 举例: 设累加器的初始值为00H,则指令序列 JNZ INC JNZ LABEL1 A LAEEL2 执行完毕后,累加器的内容变成01H,且程序将跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 1 0 0 0 0 rel. address 操作: JNZ (PC) �� ← ������� (PC)+ 2 IF (A) ≠ 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel JZ C T S rel U C M . d e t i m Li 功能: 若累加器的内容为0则跳转 说明: 如果累加器A的任何一位为0,那么程序跳转到rel所代表的地址处去执行,如果各个 位都为0,继续执行下一条指令。跳转的目标地址按照如下方式计算:先把PC的值增 加2,然后把rel所代表的有符号的相对偏移量(指令的第2个字节)加到PC上去,新 的PC值即为目标地址。操作过程中累加器的值不会发生变化,不会影响标志位。 举例: 设累加器的初始值为01H,则指令序列 JZ DEC JZ LABEL1 A LAEEL2 执行完毕后,累加器的内容变成00H,且程序将跳转到标号LABEL2处去执行。 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 0 0 0 0 0 rel. address 操作: JZ (PC) �� ← ������� (PC)+ 2 IF (A) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 107 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 LCALL addr16 功能: 长调用 说明: LCALL用于调用addr16所指地址处的子例程。首先将PC的值增加3,使得PC指向紧随 LCALL的下一条指令的地址,然后把16位PC的低8位和高8位依次压入栈(低位字节 在先),同时把栈指针加2。然后再把LCALL指令的第2字节和第3字节的数据分别装 入PC的高位字节DPH和低位字节DPL,程序从新的PC所对应的地址处开始执行。因 而子例程可以位于64KB程序存储空间的任何地址处。该操作不影响标志位。 举例: 栈指针的初始值为07H,标号SUBRTN被分配的程序存储器地址为1234H。则执行如 下位于地址0123H的指令后, LCALL SUBRTN 栈指针变成09H,内部RAM的08H和09H单元的内容分别为26H和01H,且PC的当前 值为1234H。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 1 0 0 1 0 C T S LJMP addr16 addr15-addr8 U C M 操作: LCALL (PC) �� ←��������� �������� (PC) + 3 (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC15-8) (PC) �� ←� ���� addr15-0 Li . d e t i m addr7-addr0 功能: 长跳转 说明: LJMP使得CPU无条件跳转到addr16所指的地址处执行程序。把该指令的第2字节和第 3字节分别装入程序计数器PC的高位字节DPH和低位字节DPL。程序从新PC值对应的 地址处开始执行。该16位目标地址可位于64KB程序存储空间的任何地址处。该操作 不影响标志位。 举例: 假设标号JMPADR被分配的程序存储器地址为1234H。则位于地址1234H的指令 LJMP JMPADR 执行完毕后,PC的当前值变为1234H。 指令长度(字节): 3 执行周期: 2 二进制编码: 0 0 0 0 0 0 1 0 addr15-addr8 addr7-addr0 操作: LJMP (PC) �� ←� ���� addr15-0 108 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV , 功能: 传送字节变量 说明: 将第2操作数代表字节变量的内容复制到第1操作数所代表的存储单元中去。该 指令不会改变源操作数,也不会影响其他寄存器和标志位。 MOV指令是迄今为止使用最灵活的指令,源操作数和目的操作数组合起来,寻 址方式可达15种。 举例: 假设内部RAM的30H单元的内容为40H,而40H单元的内容为10H。端口1 的数据为 11001010B(0CAH)。则指令序列 MOV MOV MOV MOV MOV MOV R0, #30H A, @R0 R1, A B, @Rl @Rl, Pl P2, P1 ;R0< = 30H ;A < = 40H ;R1 < = 40H ;B < = 10H ;RAM (40H) < = 0CAH ;P2 #0CAH . d e t i m Li 执行完毕后,寄存器0的内容为30H,累加器和寄存器1的内容都为40H,寄存器B的 内容为10H,RAM中40H单元和P2口的内容均为0CAH。 MOV A,Rn 指令长度(字节): 1 执行周期: 1 二进制编码: U C M C T S 0 1 r r r 1 1 1 0 0 1 0 1 1 1 1 操作: MOV (A) �� ←����� ���� (Rn) *MOV A,direct 指令长度(字节): 2 执行周期: 1 二进制编码: direct address 操作: MOV (A)�� ←��������� �������� (direct) 注意:MOV A, ACC是无效指令。 MOV A,@Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 0 0 1 1 i 操作: MOV (A) �� ←������� ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 109 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 1 1 0 1 0 0 immediate data 操作: MOV (A)�� ←� ����� #data MOV Rn, A 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 1 1 1 r r r 操作: MOV (Rn)���� ←��� (A) MOV Rn,direct 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 操作: MOV (Rn)��������� ←�������� (direct) MOV Rn,#data 指令长度(字节): 2 执行周期: 1 二进制编码: C T S 0 1 1 1 U C M . d e t i m Li 1 r r r direct addr. 1 r r r immediate data 0 1 0 1 direct address 1 r r r direct address 操作: MOV (Rn) ←� �� ����� #data MOV direct, A 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 1 1 操作: MOV (direct) ←���� �� ��� (A) MOV direct, Rn 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 操作: MOV (direct) ←����� �� ���� (Rn) 110 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV direct, direct 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 0 0 0 1 0 1 dir.addr. (src) 操作: MOV (direct)�� ←��������� �������� (direct) MOV direct, @Ri 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 0 1 1 i direct addr. . d e t i m 操作: MOV (direct)������� ←������ ((Ri)) MOV direct,#data 指令长度(字节): 3 执行周期: 2 二进制编码: 0 1 1 1 操作: MOV (direct) ← �� ����� #data MOV @Ri, A 指令长度(字节): 1 执行周期: 1 二进制编码: U C M 0 1 0 1 C T S 1 1 1 1 direct address Li 0 1 1 i 操作: MOV ((Ri)) ←���� �� (A) ��� MOV @Ri, direct 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 0 1 1 i direct addr. 0 1 1 i immediate data 操作: MOV ((Ri)) ←��������� �� (direct) �������� MOV @Ri, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 1 1 操作: MOV ((Ri)) ←� �� ����� #data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 111 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV , 功能: 传送位变量 说明: 将代表的布尔变量复制到所指定的数据单元中去,两个操作数 必须有一个是进位标志,而另外一个是可直接寻址的位。本指令不影响其他寄存器和 标志位。 举例: 假设进位标志C的初值为1,端口P2中的数据是11000101B,端口1的数据被设置为 35H(00110101B)。则指令序列 MOV MOV MOV P1.3, C C, P3.3 P1.2, C 执行后,进位标志被清零,端口1的数据变为39H(00111001B)。 MOV C,bit . d e t i m 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 1 0 0 0 1 操作: MOV (C) �� ←������ ����� (bit) 指令长度(字节): 2 二进制编码: C T S 1 0 0 1 0 bit address U C M MOV bit,C 执行周期: 2 1 0 1 0 Li bit address 操作: MOV (bit)�� ←���� (C) ��� MOV DPTR , #data 16 功能: 将16位的常数存放到数据指针 说明: 该指令将16位常数传递给数据指针DPTR。16位的常数包含在指令的第2字节和 第3字节中。其中DPH中存放的是#data16的高字节,而DPL中存放的是#data16的低字 节。不影响标志位。 该指令是唯一一条能一次性移动��������� 16������� 位数据的指令。 举例: 指令: MOV DPTR, #1234H 将立即数1234H装入数据指针寄存器中。DPH的值为12H,DPL的值为34H。 指令长度(字节): 3 执行周期: 2 二进制编码: 1 0 0 1 0 0 0 0 immediate data 15-8 操作: MOV (DPTR) �� ←� ����� #data15-0 DPH DPL �� ← ����� #data15-8 #data7-0 112 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOVC A , @A+ 功能: 把程序存储器中的代码字节数据(常数数据)转送至累加器A 说明: MOVC指令将程序存储器中的代码字节或常数字节传送到累加器A。被传送的数据字 节的地址是由累加器中的无符号8位数据和16位基址寄存器(DPTR或PC)的数值相 加产生的。如果以PC为基址寄存器,则在累加器内容加到PC之前,PC需要先增加到 指向紧邻MOVC之后的语句的地址;如果是以DPTR为基址寄存器,则没有此问题。 在执行16位的加法时,低8位产生的进位会传递给高8位。本指令不影响标志位。 举例: 假设累加器A的值处于0~4之间,如下子例程将累加器A中的值转换为用DB伪指 令(定义字节)定义的4个值之一。 REL-PC: INC A MOVC A, @A+PC RET DB 66H DB 77H DB 88H DB 99H U C M . d e t i m Li 如果在调用该子例程之前累加器的值为01H,执行完该子例程后,累加器的值 变为77H。MOVC指令之前的INC A指令是为了在查表时越过RET而设置的。如果 MOVC和表格之间被多个代码字节所隔开,那么为了正确地读取表格,必须将相应 的字节数预先加到累加器A上。 C T S MOVC A,@A+DPTR 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 0 1 0 0 1 1 操作: MOVC (A) �� ←������������� ������������ ((A)+(DPTR)) MOVC A,@A+PC 指令长度(字节): 1 执行周期: 2 二进制编码: 1 0 0 0 0 0 1 1 操作: MOVC (PC) �� ← ������ (PC)+1 (A) �� ←����������� ���������� ((A)+(PC)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 113 STC15F204EA系列单片机指南 MOVX 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 , 功能: 外部传送 说明: MOVX指令用于在累加器和外部数据存储器之间传递数据。因此在传送指令 MOV后附加了X。MOVX又分为两种类型,它们之间的区别在于访问外部数据RAM 的间接地址是8位的还是16位的。 对于第1种类型,当前工作寄存器组的R0和R1提供8位地址到复用端口P0。对于 外部I/O扩展译码或者较小的RAM阵列,8位的地址已经够用。若要访问较大的RAM 阵列,可在端口引脚上输出高位的地址信号。此时可在MOVX指令之前添加输出指 令,对这些端口引脚施加控制。 对于第2种类型,通过数据指针DPTR产生16位的地址。当P2端口的输出缓冲器 发送DPH的内容时,P2的特殊功能寄存器保持原来的数据。在访问规模较大的数据 阵列时,这种方式更为有效和快捷,因为不需要额外指令来配置输出端口。 . d e t i m 在某些情况下,可以混合使用两种类型的MOVX指令。在访问大容量的RAM 空间时,既可以用数据指针DP在P2端口上输出地址的高位字节,也可以先用某条 指令,把地址的高位字节从P2端口上输出,再使用通过R0或Rl间址寻址的MOVX指 令。 举例: U C M Li 假设有一个分时复用地址/数据线的外部RAM存储器,容量为256B(如� :Inte1的 8155 RAM / I/O / TIMER),该存储器被连接到8051的端口P0上,端口P3被用于提供 外部RAM所需的控制信号。端口Pl和P2用作通用输入/输出端口。R0和Rl中的数据分 别为12H和34H,外部RAM的34H单元存储的数据为56H,则下面的指令序列: C T S MOVX MOVX A, @R1 @R0, A 将数据56H复制到累加器A以及外部RAM的12H单元中。 MOVX A,@Ri 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 0 0 0 1 i 操作: MOVX (A) �� ←������� ������ ((Ri)) MOVX A,@DPTR 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 0 0 0 0 0 操作: MOVX (A) �� ←��������� �������� ((DPTR)) 114 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 MOVX 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 @Ri, A 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 1 0 0 1 i 操作: MOVX ((Ri))�� ←���� (A) ��� MOVX @DPTR, A 指令长度(字节): 1 执行周期: 2 二进制编码: 1 1 1 1 . d e t i m 0 0 0 0 操作: MOVX (DPTR)���� ←��� (A) U C M MUL AB 功能: 乘法 Li 说明: 该指令可用于实现累加器和寄存器B中的无符号8位整数的乘法。所产生的16位乘积 的低8位存放在累加器中,而高8位存放在寄存器B中。若乘积大于255(0FFH),则置 位溢出标志;否则清零标志位。在执行该指令时,进位标志总是被清零。 C T S 举例: 假设累加器A的初始值为80(50H),寄存器B的初始值为160 (0A0H),则指令� : MUL AB 求得乘积12 800 (3200H),所以寄存器B的值变成32H (00110010B),累加器被清零, 溢出标志被置位,进位标志被清零。 指令长度(字节): 1 执行周期: 4 二进制编码: 1 0 1 0 0 1 0 0 操作: MUL (A)7-0 ←�������� (A)×(B) (B)15-8 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 115 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 NOP 功能: 空操作 说明: 执行本指令后,将继续执行随后的指令。除了PC外,其他寄存器和标志位都不会有 变化。 举例: 假设期望在端口P2的第7号引脚上输出一个长时间的低电平脉冲,该脉冲持续5个机 器周期(精确)。若是仅使用SETB和CLR指令序列,生成的脉冲只能持续1个机器周 期。因而需要设法增加4个额外的机器周期。可以按照如下方式来实现所要求的功能 (假设中断没有被启用): CLR NOP NOP NOP NOP SETB P2.7 P2.7 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 操作: NOP (PC) ←������� (PC)+1 C T S ORL , 0 0 U C M 0 0 . d e t i m Li 功能: 两个字节变量的逻辑或运算 说明: ORL指令将由和所指定的两个字节变量进行逐位逻辑或运 算,结果存放在所代表的数据单元中。该操作不影响标志位。 两个操作数组合起来,支持6种寻址方式。当目的操作数是累加器A时,源操作 数可以采用寄存器寻址、直接寻址、寄存器间接寻址或者立即寻址。当目的操作数 采用直接寻址方式时,源操作数可以是累加器或立即数。 注意:如果该指令被用来修改输出引脚上的状态,那么所代表的数 据是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。 举例: 假设累加器A中数据为0C3H (11000011B),寄存器R0中的数据为55H(01010101) , 则指令� : ORL A, R0 执行后,累加器的内容变成0D7H(11010111B)。当目的操作数是直接寻址数据字节 时,ORL指令可用来把任何RAM单元或者硬件寄存器中的各个位设置为1。究竟哪 些位会被置1由屏蔽字节决定,屏蔽字节既可以是包含在指令中的常数,也可以是 累加器A在运行过程中实时计算出的数值。执行指令� : ORL P1, #00110010B 之后,把1口的第5、4、1位置1。 116 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ORL A,Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 0 0 1 r r r 1 0 1 操作: ORL (A) �� ←���� ��� (A)∨(Rn) ORL A,direct 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 0 direct address 操作: ORL (A)�� ←���� ��� (A)∨(direct) ORL A,@Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 0 0 0 U C M 1 1 i 1 0 0 操作: ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data 指令长度(字节): 2 执行周期: 1 二进制编码: C T S 0 1 0 0 0 . d e t i m Li immediate data 操作: ORL (A)�� ←���� ��� (A)∨ #data ORL direct, A 指令长度(字节): 2 执行周期: 1 二进制编码: 0 1 0 0 0 0 1 0 direct address 1 direct address 操作: ORL (direct)�� ←��������� �������� (direct)∨(A) ORL direct, #data 指令长度(字节): 3 执行周期: 2 二进制编码: 0 1 0 0 0 0 1 immediate data 操作: ORL (direct) ←��������� �� �������� (direct)∨#data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 117 STC15F204EA系列单片机指南 ORL 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 C, 功能: 位变量的逻辑或运算 说明: 如果所表示的位变量为1,则置位进位标志;否则,保持进位标志的当前状 态不变。在汇编语言中,位于源操作数之前的“/”表示将源操作数取反后使用,但 源操作数本身不发生变化。在执行本指令时,不影响其他标志位。 举例: 当执行如下指令序列时,当且仅当P1.0=1或ACC.7=1或OV=0时,置位进位标志C: MOV ORL ORL C, P1.0 C, ACC.7 C, /OV ;LOAD CARRY WITH INPUT PIN P10 ;OR CARRY WITH THE ACC.BIT 7 ;OR CARRY WITH THE INVERSE OF OV ORL C, bit 指令长度(字节): 2 执行周期: 2 二进制编码: 0 1 1 1 0 0 1 0 ORL C, /bit 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 1 0 C T S 0 0 操作: ORL (C) �� ←���� ��� (C)∨(bit) POP direct U C M 0 0 . d e t i m bit address 操作: ORL (C) �� ←���� ��� (C)∨(bit) Li bit address 功能: 出栈 说明: 读取栈指针所指定的内部RAM单元的内容,栈指针减1。然后,将读到的内容传送到 由direct所指示的存储单元(直接寻址方式)中去。该操作不影响标志位。 举例: 设栈指针的初值为32H,内部RAM的30H~32H单元的数据分别为20H、23H和 01H。则执行指令� : POP DPH POP DPL 之后,栈指针的值变成30H,数据指针变为0123H。此时指令 POP SP 将把栈指针变为20H 。 注意:在这种特殊情况下,在写入出栈数据(20H)之前,栈指针先减小到 2FH,然后再随着20H的写入,变成20H。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 1 0 1 0 0 0 0 direct address 操作: POP (diect) ←������� ((SP)) (SP) �� ←������ ����� (SP) ��- �1 118 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 PUSH direct 功能: 压栈 说明: 栈指针首先加1,然后将direct所表示的变量内容复制到由栈指针指定的内部RAM存 储单元中去。该操作不影响标志位。 举例: 设在进入中断服务程序时栈指针的值为09H,数据指针DPTR的值为0123H。则执行如 下指令序列 PUSH PUSH DPL DPH 之后,栈指针变为0BH,并把数据23H和01H分别存入内部RAM的0AH和0BH存储单 元之中。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 1 0 0 0 0 0 操作: PUSH (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←��������� �������� (direct) direct address U C M C T S RET 0 功能: 从子例程返回 . d e t i m Li 说明: 执行RET指令时,首先将PC值的高位字节和低位字节从栈中弹出,栈指针减2。然 后,程序从形成的PC值所对应的地址处开始执行,一般情况下,该指令和ACALL或 LCALL配合使用。改指令的执行不影响标志位。 举例: 设栈指针的初值为0BH,内部RAM的0AH和0BH存储单元中的数据分别为23H和 01H。则指令: RET 执行后,栈指针变为09H。程序将从0123H地址处继续执行。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 0 1 0 0 0 1 0 操作: RET (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 119 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RETI 功能: 中断返回 说明: 执行该指令时,首先从栈中弹出PC值的高位和低位字节,然后恢复中断启用,准备 接受同优先级的其他中断,栈指针减2。其他寄存器不受影响。但程序状态字PSW 不会自动恢复到中断前的状态。程序将继续从新产生的PC值所对应的地址处开始执 行,一般情况下是此次中断入口的下一条指令。在执行RETI指令时,如果有一个优 先级较低的或同优先级的其他中断在等待处理,那么在处理这些等待中的中断之前需 要执行1条指令。 举例: 设栈指针的初值为0BH,结束在地址0123H处的指令执行结束期间产生中断,内部 RAM的0AH和0BH单元的内容分别为23H和01H。则指令� : . d e t i m RETI 执行完毕后,栈指针变成09H,中断返回后程序继续从0123H地址开始执行。 指令长度(字节): 1 执行周期: 2 二进制编码: 0 0 1 1 0 0 操作: RETI (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 RL A C T S U C M 1 0 Li 功能: 将累加器A中的数据位循环左移 说明: 将累加器中的8位数据均左移1位,其中位7移动到位0。该指令的执行不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 RL A 执行后,累加器的内容变成8BH(10001011B),且标志位不受影响。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 0 0 0 1 1 操作: RL (An+1) �� ←����������� ���������� (An) n �� = ��� 0-6 (A0) �� ←����� ���� (A7) 120 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RLC A 功能: 带进位循环左移 说明: 累加器的8位数据和进位标志一起循环左移1位。其中位7移入进位标志,进位标志的 初始状态值移到位0。该指令不影响其他标志位。 举例: 假设累加器A的值为0C5H(11000101B),则指令 RLC A 执行后,将把累加器A的数据变为8BH(10001011B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 1 1 操作: RLC (An+1) �� ←��� �� (An) (A0) ←���� �� (C) ��� (C) ←��� �� (A ��7) RR A 0 0 1 n = 0-6 U C M C T S . d e t i m 1 Li 功能: 将累加器的数据位循环右移 说明: 将累加器的8个数据位均右移1位,位0将被移到位7,即循环右移,该指 令不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 RR A 执行后累加器的内容变成0E2H(11100010B),标志位不受影响。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 0 操作: RR (An) ←��� �� (A ��n+1) (A7) ←��� �� (A ��0) 南通国芯微电子有限公司 0 0 1 1 n=0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 121 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RRC A 功能: 带进位循环右移 说明: 累加器的8位数据和进位标志一起循环右移1位。其中位0移入进位标志,进位标志的 初始状态值移到位7。该指令不影响其他标志位。 举例: 假设累加器的值为0C5H(11000101B),进位标志为0,则指令 RRC A 执行后,将把累加器的数据变为62H(01100010B),进位标志被置位。 指令长度(字节): 1 执行周期: 1 二进制编码: 0 0 0 1 0 操作: RRC (An+1) ←��� �� �� (An) (A7) �� ←���� ��� (C) (C) �� ←��� �� (A0) SETB 0 1 1 n = 0-6 U C M 功能: 置位 . d e t i m Li 说明: SETB指令可将相应的位置1,其操作对象可以是进位标志或其他可直接寻址的位。 该指令不影响其他标志位。 C T S 举例: 设进位标志被清零,端口1的输出状态为34H(00110100B),则指令 SETB C SETB P1.0 执行后,进位标志变为1,端口1的输出状态变成35H(00110101B)。 SETB C 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 1 0 0 1 1 0 0 0 1 0 操作: SETB (C) �� ←�� �1 SETB bit 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 1 bit address 操作: SETB (bit) ←�� �� 1� 122 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 SJMP rel 功能: 短跳转 说明: 程序无条件跳转到rel所示的地址去执行。目标地址按如下方法计算:首先PC值加2, 然后将指令第2字节(即rel)所表示的有符号偏移量加到PC上,得到的新PC值即短 跳转的目标地址。所以,跳转的范围是当前指令(即SJMP)地址的前128字节和后 127字节。 举例: 设标号RELADR对应的指令地址位于程序存储器的0123H地址,则指令: SJMP RELADR 汇编后位于0100H。当执行完该指令后,PC值变成0123H。 注意:在上例中,紧接SJMP的下一条指令的地址是0102H,因此,跳转的偏移 量为0123H-0102H=21H。另外,如果SJMP的偏移量是0FEH,那么构成只有1条指 令的无限循环。 指令长度(字节): 2 执行周期: 2 二进制编码: 1 0 0 0 0 操作: SJMP (PC) �� ←������� ������ (PC)+2 (PC) �� ←��������� �������� (PC)+rel SUBB A, C T S 功能: 带借位的减法 说明: 0 0 0 rel. address U C M . d e t i m Li SUBB指令从累加器中减去所代表的字节变量的数值及进位标志,减 法运算的结果置于累加器中。如果执行减法时第7位需要借位,SUBB将会置位进位 标志(表示借位);否则,清零进位标志。(如果在执行SUBB指令前,进位标志 C已经被置位,这意味着在前面进行多精度的减法运算时,产生了借位。因而在执 行本条指令时,必须把进位连同源操作数一起从累加器中减去。)如果在进行减法 运算的时候,第3位处向上有借位,那么辅助进位标志AC会被置位;如果第6位有借 位;而第7位没有,或是第7位有借位,而第6位没有, 则溢出标志OV被置位。 当进行有符号整数减法运算时,若OV置位,则表示在正数减负数的过程中产生 了负数;或者,在负数减正数的过程中产生了正数。 源操作数支持的寻址方式:寄存器寻址、直接寻址、寄存器间接寻址和立即数 寻址。 举例: 设累加器中的数据为0C9H(11001001B)。寄存器R2的值为54H(01010100B),进 位标志C被置位。则如下指令: SUBB A, R2 执行后,累加器的数据变为74H(01110100B),进位标志C和辅助进位标志AC被清 零,溢出标志C被置位。 注意:0C9H减去54H应该是75H,但在上面的计算中,由于在SUBB指令执行 前,进位标志C已经被置位,因而最终结果还需要减去进位标志,得到74H。因此, 如果在进行单精度或者多精度减法运算前,进位标志C的状态未知,那么应改采用 CLR C 指令把进位标志C清零。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 123 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 SUBB A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 1 0 0 1 1 r r r 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ���� (Rn) SUBB A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 0 1 0 1 0 1 direct address 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- �������� (direct) . d e t i m SUBB A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 0 0 1 0 1 1 i U C M 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ������ ((Ri)) SUBB A, #data C T S 指令长度(字节): 2 执行周期: 1 二进制编码: 1 0 0 1 0 1 0 0 Li immediate data 操作: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ����� #data SWAP A 功能: 交换累加器的高低半字节 说明: SWAP指令把累加器的低4位(位3~位0)和高4位(位7~位4)数据进行交换。实际上 SWAP指令也可视为4位的循环指令。该指令不影响标志位。 举例: 设累加器的内容为0C5H(11000101B),则指令 SWAP A 执行后,累加器的内容变成5CH(01011100B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: SWAP (A3-0) 124 南通国芯微电子有限公司 0 1 0 0 (A7-4) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 XCH A, 功能: 交换累加器和字节变量的内容 说明: XCH指令将所指定的字节变量的内容装载到累加器,同时将累加器的旧内容 写入所指定的字节变量。指令中的源操作数和目的操作数允许的寻址方式:寄 存器寻址、直接寻址和寄存器间接寻址。 举例: 设R0的内容为地址20H,累加器的值为3FH (00111111B)。内部RAM的20H单元的内 容为75H (01110101B)。则指令 XCH A, @R0 执行后,内部RAM的20H单元的数据变为3FH (00111111B),累加器的内容变为 75H(01110101B)。 . d e t i m XCH A, Rn 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: XCH (A) 1 r r r (Rn) XCH A, direct 指令长度(字节): 2 执行周期: 1 二进制编码: 1 1 0 0 C T S 操作: XCH (A) U C M 0 1 0 1 Li direct address (direct) XCH A, @Ri 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 0 操作: XCH (A) 南通国芯微电子有限公司 0 1 1 i ((Ri)) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 125 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 XCHD A, @Ri 功能: 交换累加器和@Ri对应单元中的数据的低4位 说明: XCHD指令将累加器内容的低半字节(位0~3,一般是十六进制数或BCD码)和间接 寻址的内部RAM单元的数据进行交换,各自的高半字(位7~4)节不受影响。另外, 该指令不影响标志位。 举例: 设R0保存了地址20H,累加器的内容为36H (00110110B)。内部RAM的20H单元存储 的数据为75H (011110101B)。则指令: XCHD A, @R0 执行后,内部RAM 20H单元的内容变成76H (01110110B),累加器的内容变为 35H(00110101B)。 指令长度(字节): 1 执行周期: 1 二进制编码: 1 1 0 1 操作: XCHD (A3-0) 0 1 1 i (Ri3-0) XRL , C T S 功能: 字节变量的逻辑异或 说明: U C M . d e t i m Li XRL指令将和所代表的字节变量逐位进行逻辑异或运算, 结果保存在所代表的字节变量里。该指令不影响标志位。 两个操作数组合起来共支持6种寻址方式:当目的操作数为累加器时,源操作数 可以采用寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址;当目的操作数是 可直接寻址的数据时,源操作数可以是累加器或者立即数。 注意:如果该指令被用来修改输出引脚上的状态,那么dest-byte所代表的数据就 是从端口输出数据锁存器中获取的数据,而不是从引脚上读取的数据。 举例: 如果累加器和寄存器0的内容分别为0C3H (11000011B)和0AAH(10101010B),则 指令� : XRL A, R0 执行后,累加器的内容变成69H (01101001B)。 当目的操作数是可直接寻址字节数据时,该指令可把任何RAM单元或者寄存器 中的各个位取反。具体哪些位会被取反,在运行过程当中确定。指令� : XRL P1, #00110001B 执行后,P1口的位5、4、0被取反。 126 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 XRL A, Rn 操作: XRL (A) �� ← ���� (A)� ≮ 指令长度(字节): 1 执行周期: 1 二进制编码: 0 1 1 0 1 r r r (Rn) XRL A, direct 指令长度(字节): 2 执行周期: 1 0 1 1 0 操作: XRL (A) �� ← ���� (A)� 0 1 0 1 ≮ 二进制编码: direct address XRL A, @Ri 指令长度(字节): 1 执行周期: 1 1 操作: XRL (A) �� ← ���� (A)� XRL A, #data 指令长度(字节): 2 执行周期: 1 二进制编码: 0 ≮ 0 1 0 1 1 操作: XRL (A) �� ← ���� (A)� 0 U C M 0 1 1 i ((Ri)) C T S ≮ 二进制编码: . d e t i m (direct) 0 1 0 0 Li immediate data #data XRL direct, A 指令长度(字节): 2 执行周期: 1 0 1 1 0 0 0 1 0 操作: XRL (direct) ← �� ��������� (direct)� ≮ 二进制编码: direct address (A) XRL direct, #dataw 指令长度(字节): 3 执行周期: 2 0 1 1 0 0 0 1 1 操作: XRL (direct) ← �� ��������� (direct)� 南通国芯微电子有限公司 ≮ 二进制编码: direct address immediate data # data 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 127 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 5.3.2 Instruction Definitions of Traditional 8051 MCU ACALL addr 11 Function: Description: Absolute Call ACALL unconditionally calls a subroutine located at the indicated address.The instruction increments the PC twice to obtain the address of the following instruction, then pushes the 16-bit result onto the stack (low-order byte first) and increments the Stack Pointer twice. The destination address is obtained by suceesively concatenating the five high-order bits of the incremented PC opcode bits 7-5,and the second byte of the instruction. The subroutine called must therefore start within the same 2K block of the program memory as the first byte of the instruction following ACALL. No flags are affected. Example: Initially SP equals 07H. The label “SUBRTN” is at program memory location 0345H. After executingthe instruction, . d e t i m ACALL SUBRTN at location 0123H, SP will contain 09H, internal RAM locations 08H and 09H will contain 25H and 01H, respectively, and the PC will contain 0345H. Bytes: 2 Cycles: 2 Encoding: Operation: a10 a9 a8 1 U C M 0 0 1 0 a7 a6 a5 a4 Li a3 a2 a1 a0 ACALL (PC)�� ←�������� ������� (PC)+ 2 (SP)��������� ←�������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP)��������� ←�������� (SP) + 1 ((SP))���� ←��� (PC15-8) (PC10-0)�� ←� page ����� ������� address C T S ADD A, Function: Description: Add ADD adds the byte variable indicated to the Accumulator, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carryout from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates an overflow occured. OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise OV is cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positive operands, or a positive sum from two negative operands. Example: Four source operand addressing modes are allowed: register,direct register-indirect, or immediate. The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B). The instruction, ADD A,R0 will leave 6DH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1. 128 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ADD A,Rn Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 1 0 1 r r r ADD (A)����������� ←���������� (A) + (Rn) ADD A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 0 1 0 0 1 0 1 direct address ADD (A)��������������� ←�������������� (A) + (direct) . d e t i m ADD A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 Operation: 0 2 1 C T S 0 0 1 0 U C M 0 1 1 i ADD (A)������������� ←������������ (A) + ((Ri)) ADD A,#data Bytes: Cycles: Encoding: 1 0 1 0 0 Li immediate data ADD (A)������� ←������ (A) + ����� #data ADDC A, Function: Description: Example: Add with Carry ADDC simultaneously adds the byte variable indicated, the Carry flag and the Accumulator, leaving the result in the Accumulator. The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared otherwise. When adding unsigned integers, the carry flag indicates an overflow occured. OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not out of bit 6; otherwise OV is cleared. When adding signed integers, OV indicates a negative number produced as the sum of two positive operands or a positive sum from two negative operands. Four source operand addressing modes are allowed: register, direct, register-indirect, or immediate. The Accumulator holds 0C3H(11000011B) and register 0 holds 0AAH (10101010B) with the Carry. The instruction, ADDC A,R0 will leave 6EH (01101101B) in the Accumulator with the AC flag cleared and both the carry flag and OV set to 1. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 129 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ADDC A,Rn Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 1 1 1 r r r ADDC (A)����������������� ←���������������� (A) + (C) + (Rn) ADDC A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 0 1 1 0 1 0 1 direct address ADDC (A)��������������������� ←�������������������� (A) + (C) + (direct) ADDC A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 1 U C M 0 1 1 i ADDC (A)������������������� ←������������������ (A) + (C) + ((Ri)) ADDC A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 1 C T S 0 0 1 1 0 1 0 0 . d e t i m Li immediate data ADDC (A)������������� ←������������ (A) + (C) + ����� #data AJMP addr 11 Function: Description: Example: Bytes: Cycles: Encoding: Operation: 130 Absolute Jump AJMP transfers program execution to the indicated address, which is formed at run-time by concatenating the high-order five bits of the PC (after incrementing the PC twice), opcode bits 7-5, and the second byte of the instruction. The destination must therefore be within the same 2K block of program memory as the first byte of the instruction following AJMP. The label “JMPADR” is at program memory location 0123H. The instruction, AJMP JMPADR is at location 0345H and will load the PC with 0123H. 2 2 a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 AJMP (PC)�� ←�������� ������� (PC)+ 2 (PC10-0)�� ←� ����� page ������� address 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ANL , Function: Description: Logical-AND for byte variables ANL performs the bitwise logical-AND operation between the variables indicated and stores the results in the destination variable. No flags are affected. The two operands allow six addressing mode combinations. When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address, the source can be the Accumulator or immediate data. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch not the input pins. Example: If the Accumulator holds 0C3H(11000011B) and register 0 holds 55H (01010101B) then the instruction, . d e t i m ANL A,R0 will leave 41H (01000001B) in the Accumulator. Li When the destination is a directly addressed byte, this instruction will clear combinations of bits in any RAM location or hardware register. The mask byte determining the pattern of bits to be cleared would either be a constant contained in the instruction or a value computed in the Accumulator at run-time. The instruction, ANL Pl, #01110011B U C M will clear bits 7, 3, and 2 of output port 1. ANL A,Rn Bytes: 1 Cycles: 1 Encoding: Operation: C T S 0 1 0 1 1 r r r ANL (A)����� ←���� (A) ∧ (Rn) ANL A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 0 1 direct address ANL (A)����� ←���� (A) ∧ (direct) ANL A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 1 i ANL (A)����� ←���� (A) ∧ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 131 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ANL A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 1 0 0 immediate data ANL (A)����� ←���� (A) ∧ #data ANL direct,A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 1 0 0 1 0 direct address ANL direct,#data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 0 1 U C M 0 0 1 1 Li direct address immediate data ANL (direct)���������� ←��������� (direct) ∧ #data C T S ANL C , Function: Description: . d e t i m ANL (direct)���������� ←��������� (direct) ∧ (A) Logical-AND for bit variables If the Boolean value of the source bit is a logical 0 then clear the carry flag; otherwise leave the carry flag in its current state. A slash (“ / ”) preceding the operand in the assembly language indicates that the logical complement of the addressed bit is used as the source value, but the source bit itself is not affceted. No other flsgs are affected. Only direct addressing is allowed for the source operand. Example: Set the carry flag if, and only if, P1.0 = 1, ACC. 7 = 1, and OV = 0: MOV C, P1.0 ;LOAD CARRY WITH INPUT PIN STATE ANL C, ACC.7 ;AND CARRY WITH ACCUM. BIT.7 ANL C, /OV ;AND WITH INVERSE OF OVERFLOW FLAG ANL C,bit Bytes: 2 Cycles: 2 Encoding: Operation: 132 1 0 0 0 0 0 1 0 bit address ANL (C) �� ← ���� (C) ∧ (bit) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ANL C, /bit Bytes: 2 Cycles: 2 Encoding: 1 0 1 1 Operation: ANL (C)����� ←���� (C) ∧ (bit) 0 0 0 0 bit address CJNE , , rel Function: Description: Compare and Jump if Not Equal CJNE compares the magnitudes of the first two operands, and branches if their values are not equal. The branch destination is computed by adding the signed relative-displacement in the last instruction byte to the PC, after incrementing the PC to the start of the next instruction. The carry flag is set if the unsigned integer value of is less than the unsigned integer value of ; otherwise, the carry is cleared. Neither operand is affected. . d e t i m The first two operands allow four addressing mode combinations: the Accumulator may be compared with any directly addressed byte or immediate data, and any indirect RAM location or working register can be compared with an immediate constant. Example: U C M Li The Accumulator contains 34H. Register 7 contains 56H. The first instruction in the sequence CJNE ... JC ... ; NOT_EQ: ; C T S R7,#60H, NOT-EQ ...... REQ_LOW ..... ; R7 = 60H. ; IF R7 < 60H. ; R7 > 60H. sets the carry flag and branches to the instruction at label NOT-EQ. By testing the carry flag, this instruction determines whether R7 is greater or less than 60H. If the data being presented to Port 1 is also 34H, then the instruction, WAIT: CJNE A,P1,WAIT clears the carry flag and continues with the next instruction in sequence, since the Accumulator does equal the data read from P1. (If some other value was being input on Pl, the program will loop at this point until the P1 data changes to 34H.) CJNE A,direct,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 0 1 0 1 direct address rel. address (PC) �� ←��������� �������� (PC) + 3 IF (A) < > (direct) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (direct) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 133 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 CJNE A,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 0 1 0 1 immediata data (PC) �� ←��������� �������� (PC) + 3 IF (A) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (A) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 rel. address . d e t i m CJNE Rn,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 1 1 U C M 1 r r r (PC) �� ←��������� �������� (PC) + 3 IF (Rn) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF (Rn) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 C T S Li immediata data rel. address CJNE @Ri,#data,rel Bytes: 3 Cycles: 2 Encoding: Operation: 134 1 0 1 1 0 1 1 i immediate data rel. address (PC) �� ←��������� �������� (PC) + 3 IF ((Ri)) < > (data) THEN (PC) �� ←�������� ������� (PC) + relative offset IF ((Ri)) < (data) THEN (C) �� ←�� �1 ELSE (C) �� ←�� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 CLR A Function: Description: Example: Clear Accumulator The Aecunmlator is cleared (all bits set on zero). No flags are affected. The Accumulator contains 5CH (01011100B). The instruction, CLR A will leave the Accumulator set to 00H (00000000B). Bytes: 1 Cycles: 1 Encoding: Operation: 1 1 1 0 0 1 0 0 CLR (A)�� ←�� �0 . d e t i m CLR bit Function: Description: Example: Clear bit The indicated bit is cleared (reset to zero). No other flags are affected. CLR can operate on the carry flag or any directly addressable bit. Li Port 1 has previously been written with 5DH (01011101B). The instruction, CLR P1.2 U C M will leave the port set to 59H (01011001B). CLR C Bytes: 1 Cycles: 1 C T S Encoding: 1 1 Operation: CLR (C) �� ←�� �0 0 0 0 0 1 1 CLR bit Bytes: 2 Cycles: 1 Encoding: Operation: 1 1 0 0 0 0 1 0 bit address CLR (bit) ← �� �0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 135 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 CPL A Function: Description: Example: Complement Accumulator Each bit of the Accumulator is logically complemented (one’s complement). Bits which previously contained a one are changed to a zero and vice-versa. No flags are affected. The Accumulator contains 5CH(01011100B). The instruction, CPL A will leave the Accumulator set to 0A3H (101000011B). Bytes: 1 Cycles: 1 Encoding: Operation: 1 1 1 1 0 1 0 0 CPL bit Function: Description: Example: . d e t i m CPL (A)�� ←� (A) Li Complement bit The bit variable specified is complemented. A bit which had been a one is changed to zero and vice-versa. No other flags are affected. CLR can operate on the carry or any directly addressable bit. U C M Note:When this instruction is used to modify an output pin, the value used as the original data will be read from the output data latch, not the input pin. Port 1 has previously been written with 5DH (01011101B). The instruction, C T S CLR P1.1 CLR P1.2 will leave the port set to 59H (01011001B). CPL C Bytes: 1 Cycles: 1 Encoding: Operation: CPL bit 1 0 Bytes: 2 1 Operation: 1 0 0 1 1 CPL (C) �� ←� (C) Cycles: Encoding: 1 1 0 1 1 0 0 1 0 bit address CPL (bit) ← �� (bit) 136 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 DA 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 A Function: Description: Decimal-adjust Accumulator for Addition DA A adjusts the eight-bit value in the Accumulator resulting from the earlier addition of two variables (each in packed-BCD format), producing two four-bit digits.Any ADD or ADDC instruction may have been used to perform the addition. If Accumulator bits 3-0 are greater than nine (xxxx1010-xxxx1111), or if the AC flag is one, six is added to the Accumulator producing the proper BCD digit in the low-order nibble. This internal addition would set the carry flag if a carry-out of the low-order four-bit field propagated through all high-order bits, but it would not clear the carry flag otherwise. If the carry flag is now set or if the four high-order bits now exceed nine(1010xxxx111xxxx), these high-order bits are incremented by six, producing the proper BCD digit in the high-order nibble. Again, this would set the carry flag if there was a carry-out of the high-order bits, but wouldn’t clear the carry. The carry flag thus indicates if the sum of the original two BCD variables is greater than 100, allowing multiple precision decimal addition. OV is not affected. . d e t i m Li All of this occurs during the one instruction cycle. Essentially, this instruction performs the decimal conversion by adding 00H, 06H, 60H, or 66H to the Accumulator, depending on initial Accumulator and PSW conditions. U C M Note: DA A cannot simply convert a hexadecimal number in the Accumulator to BCD notation, nor does DA A apply to decimal subtraction. Example: C T S The Accumulator holds the value 56H(01010110B) representing the packed BCD digits of the decimal number 56. Register 3 contains the value 67H (01100111B) representing the packed BCD digits of the decimal number 67.The carry flag is set. The instruction sequence. ADDC A,R3 DA A will first perform a standard twos-complement binary addition, resulting in the value 0BEH (10111110) in the Accumulator. The carry and auxiliary carry flags will be cleared. The Decimal Adjust instruction will then alter the Accumulator to the value 24H (00100100B), indicating the packed BCD digits of the decimal number 24, the low-order two digits of the decimal sum of 56,67, and the carry-in. The carry flag will be set by the Decimal Adjust instruction, indicating that a decimal overflow occurred. The true sum 56, 67, and 1 is 124. BCD variables can be incremented or decremented by adding 01H or 99H. If the Accumulator initially holds 30H (representing the digits of 30 decimal), then the instruction sequence, ADD DA A,#99H A will leave the carry set and 29H in the Accumulator, since 30+99=129. The low-order byte of the sum can be interpreted to mean 30 – 1 = 29. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 137 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 Bytes: 1 Cycles: 1 Encoding: 1 1 0 1 0 1 0 0 Operation: DA -contents of Accumulator are BCD IF [[(A3-0) > 9] V [(AC) = 1]] THEN(A3-0) �� ←��� �� (A3-0) + 6 AND IF [[(A7-4) > 9] V [(C) = 1]] THEN (A7-4) �� ←��� �� (A7-4) + 6 DEC byte Function: Description: Example: Decrement The variable indicated is decremented by 1. An original value of 00H will underflow to 0FFH. No flags are affected. Four operand addressing modes are allowed: accumulator, register, direct, or register-indirect. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. U C M . d e t i m Li Register 0 contains 7FH (01111111B). Internal RAM locations 7EH and 7FH contain 00H and 40H, respectively. The instruction sequence, C T S DEC @R0 DEC R0 DEC @R0 will leave register 0 set to 7EH and internal RAM locations 7EH and 7FH set to 0FFH and 3FH. DEC A Bytes: 1 Cycles: 1 Encoding: Operation: DEC 138 0 0 0 1 0 1 0 0 DEC (A)����� ←���� (A) -1 Rn Bytes: 1 Cycles: 1 Encoding: 0 0 0 1 Operation: DEC (Rn)������ ←����� (Rn) ��- �1 南通国芯微电子有限公司 1 r r r 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 DEC 临时技术支持:13922829991 研发顾问:13922809991 direct Bytes: 2 Cycles: 1 Encoding: Operation: DEC 技术支持网站:www.STCMCU.com 0 0 0 1 0 1 0 1 direct address DEC (direct)���������� ←��������� (direct) -1 @Ri Bytes: 1 Cycles: 1 Encoding: 0 0 0 1 Operation: DEC ((Ri))�������� ←������� ((Ri)) ��- �1 0 1 1 i DIV AB Function: Description: . d e t i m Li Divide DIV AB divides the unsigned eight-bit integer in the Accumulator by the unsigned eight-bit integer in register B. The Accumulator receives the integer part of the quotient; register B receives the integer remainder. The carry and OV flags will be cleared. U C M Exception: if B had originally contained 00H, the values returned in the Accumulator and B-register will be undefined and the overflow flag will be set. The carry flag is cleared in any case. Example: DIV Bytes: Cycles: Encoding: Operation: C T S The Accumulator contains 251(OFBH or 11111011B) and B contains 18(12H or 00010010B). The instruction, AB will leave 13 in the Accumulator (0DH or 00001101B) and the value 17 (11H or 00010010B) in B, since 251 = (13×18) + 17. Carry and OV will both be cleared. 1 4 1 0 0 0 0 1 0 0 DIV (A)15-8 (A)/(B) (B)7-0 ←�������� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 139 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 DJNZ , Function: Description: Decrement and Jump if Not Zero DJNZ decrements the location indicated by 1, and branches to the address indicated by the second operand if the resulting value is not zero. An original value of 00H will underflow to 0FFH. No flags are afected. The branch destination would be computed by adding the signed relative-displacement value in the last instruction byte to the PC, after incrementing the PC to the first byte of the following instruction. The location decremented may be a register or directly addressed byte. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: Internal RAM locations 40H, 50H, and 60H contain the values 01H, 70H, and 15H, respectively. The instruction sequence, DJNZ 40H, LABEL_1 DJNZ 50H, LABEL_2 DJNZ 60H, LABEL_3 . d e t i m Li will cause a jump to the instruction at label LABEL_2 with the values 00H, 6FH, and 15H in the three RAM locations. The first jump was not taken because the result was zero. This instruction provides a simple way of executing a program loop a given number of times, or for adding a moderate time delay (from 2 to 512 machine cycles) with a single instruction The instruction sequence, MOV CPL DJNZ C T S TOOOLE: U C M R2,#8 P1.7 R2, TOOGLE will toggle P1.7 eight times, causing four output pulses to appear at bit 7 of output Port 1. Each pulse will last three machine cycles; two for DJNZ and one to alter the pin. DJNZ Rn,rel Bytes: 2 Cycles: 2 Encoding: Operation: DJNZ 1 r r r rel. address DJNZ (PC) �� ← �������� (PC) + 2 (Rn) �� ← ����� (Rn) ��– �1 IF (Rn) > 0 or (Rn) < 0 THEN (PC) �� ←������� ������ (PC)+ ��� rel direct, rel Bytes: 3 Cycles: 2 Encoding: 140 1 1 0 1 1 1 0 1 南通国芯微电子有限公司 0 1 0 1 direct address 总机:0513-5501 2928 / 2929 / 2966 rel. address 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 Operation: INC 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 DJNZ (PC) �� ←��������� �������� (PC) + 2 (direct) ←���������� �� ��������� (direct) ��– �1 IF (direct) > 0 or (direct) < 0 THEN (PC) �� ← ������� (PC) + ��� rel Function: Description: Increment INC increments the indicated variable by 1. An original value of 0FFH will overflow to 00H.No flags are affected. Three addressing modes are allowed: register, direct, or registerindirect. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: INC INC INC INC A Bytes: 1 Cycles: 1 Operation: C T S 0 0 U C M Li 0 0 0 1 0 0 INC (A) �� ← ����� (A)+1 Rn Bytes: 1 Cycles: 1 Encoding: Operation: INC @R0 R0 @R0 will leave register 0 set to 7FH and internal RAM locations 7EH and 7FH holding (respectively) 00H and 41H. Encoding: INC . d e t i m Register 0 contains 7EH (011111110B). Internal RAM locations 7EH and 7FH contain 0FFH and 40H, respectively. The instruction sequence, 0 0 0 0 1 r r r INC (Rn) �� ← ������ (Rn)+1 direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 0 0 0 0 1 0 1 direct address INC (direct)���������� ←��������� (direct) + 1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 141 STC15F204EA系列单片机指南 INC Bytes: 1 Cycles: 1 Operation: Example: 0 0 0 0 0 1 1 i INC ((Ri))����������� ←���������� ((Ri)) + 1 Increment Data Pointer Increment the 16-bit data pointer by 1. A 16-bit increment (modulo 216) is performed; an overflow of the low-order byte of the data pointer (DPL) from 0FFH to 00H will increment the high-order-byte (DPH). No flags are affected. This is the only 16-bit register which can be incremented. Bytes: 1 Cycles: 2 Operation: C T S 1 0 Example: U C M 0 0 1 1 The data present at input port 1 is 11001010B. The Accumulator holds 56 (01010110B). The instruction sequence, JB P1.2, LABEL1 JB ACC.2, LABEL2 will cause program execution to branch to the instruction at label LABEL2. Bytes: 3 2 Operation: 0 Li Jump if Bit set If the indicated bit is a one, jump to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. The bit tested is not modified. No flags are affected. Cycles: Encoding: 1 INC (DPTR) �� ← �������� (DPTR)+1 bit, rel Function: Description: . d e t i m Register DPH and DPL contains 12H and 0FEH,respectively. The instruction sequence, INC DPTR INC DPTR INC DPTR will change DPH and DPL to 13H and 01H. Encoding: 142 研发顾问:13922809991 DPTR Function: Description: JB 临时技术支持:13922829991 @Ri Encoding: INC 技术支持网站:www.STCMCU.com 0 0 1 0 0 0 0 0 bit address rel. address JB (PC) �� ← ������� (PC)+ 3 IF (bit) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 JBC 临时技术支持:13922829991 研发顾问:13922809991 bit, rel Function: Description: Example: Jump if Bit is set and Clear bit If the indicated bit is one,branch to the address indicated;otherwise proceed with the next instruction.The bit wili not be cleared if it is already a zero. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. No flags are affected. Note: When this instruction is used to test an output pin, the value used as the original data will be read from the output data latch, not the input pin. The Accumulator holds 56H (01010110B). The instruction sequence, JBC JBC Bytes: Cycles: Operation: 2 0 0 0 1 Example: Bytes: C T S U C M . d e t i m Li rel. address The carry flag is cleared. The instruction sequence, LABEL1 C LABEL2s will set the carry and cause program execution to continue at the instruction identified by the label LABEL2. 2 2 Encoding: Operation: bit address Jump if Carry is set If the carry flag is set, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the second instruction byte to the PC, after incrementing the PC twice.No flags are affected. JC CPL JC Cycles: 0 0 0 0 JBC (PC) �� ← ������� (PC)+ 3 IF (bit) = 1 THEN (bit) ← �� 0� (PC) �� ←�������� ������� (PC) + ��� rel rel Function: Description: ACC.3, LABEL1 ACC.2, LABEL2 will cause program execution to continue at the instruction identified by the label LABEL2, with the Accumulator modified to 52H (01010010B). 3 Encoding: JC 技术支持网站:www.STCMCU.com 0 1 0 0 0 0 0 0 rel. address JC (PC) �� ← ������� (PC)+ 2 IF (C) = 1 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 143 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 JMP @A+DPTR Function: Description: Example: Jump indirect Add the eight-bit unsigned contents of the Accumulator with the sixteen-bit data pointer, and load the resulting sum to the program counter. This will be the address for subsequent instruction fetches. Sixteen-bit addition is performed (modulo 216): a carry-out from the loworder eight bits propagates through the higher-order bits. Neither the Accumulator nor the Data Pointer is altered. No flags are affected. An even number from 0 to 6 is in the Accumulator. The following sequence of instructions will branch to one of four AJMP instructions in a jump table starting at JMP_TBL: JMP-TBL: MOV JMP AJMP AJMP AJMP AJMP DPTR, #JMP_TBL @A+DPTR LABEL0 LABEL1 LABEL2 LABEL3 . d e t i m If the Accumulator equals 04H when starting this sequence, execution will jump to label LABEL2. Remember that AJMP is a two-byte instruction, so the jump instructions start at every other address. Bytes: 1 Cycles: 2 Encoding: Operation: 0 1 1 1 JMP (PC) �� ← ������������ (A) + (DPTR) C T S JNB bit, rel Function: Description: Example: U C M 0 0 1 1 Li Jump if Bit is not set If the indicated bit is a zero, branch to the indicated address; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the third instruction byte to the PC, after incrementing the PC to the first byte of the next instruction. The bit tested is not modified. No flags are affected. The data present at input port 1 is 11001010B. The Accumulator holds 56H (01010110B). The instruction sequence, JNB JNB P1.3, LABEL1 ACC.3, LABEL2 will cause program execution to continue at the instruction at label LABEL2 Bytes: 3 Cycles: 2 Encoding: Operation: 144 0 0 1 1 0 0 0 0 bit address rel. address JNB (PC) �� ← ������� (PC)+ 3 IF (bit) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 JNC 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 rel Function: Description: Example: Jump if Carry not set If the carry flag is a zero, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relative-displacement in the second instruction byte to the PC, after incrementing the PC twice to point to the next instruction. The carry flag is not modified The carry flag is set. The instruction sequence, JNC LABEL1 CPL C JNC LABEL2 will clear the carry and cause program execution to continue at the instruction identified by the label LABEL2. Bytes: 2 Cycles: 2 Encoding: Operation: JNZ 0 1 0 1 Description: Example: rel. address JNC (PC) �� ← ������� (PC)+ 2 IF (C) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel C T S rel Function: 0 0 0 0 U C M . d e t i m Li Jump if Accumulator Not Zero If any bit of the Accumulator is a one, branch to the indicated address; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The Accumulator is not modified. No flags are affected. The Accumulator originally holds 00H. The instruction sequence, JNZ INC JNZ LABEL1 A LAEEL2 will set the Accumulator to 01H and continue at label LABEL2. Bytes: 2 Cycles: 2 Encoding: Operation: 0 1 1 1 0 0 0 0 rel. address JNZ (PC) �� ← ������� (PC)+ 2 IF (A) ≠ 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 145 STC15F204EA系列单片机指南 JZ 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 rel Function: Description: Example: Bytes: Cycles: Jump if Accumulator Zero If all bits of the Accumulator are zero, branch to the address indicated; otherwise proceed with the next instruction. The branch destination is computed by adding the signed relativedisplacement in the second instruction byte to the PC, after incrementing the PC twice. The Accumulator is not modified. No flags are affected. The Accumulator originally contains 01H. The instruction sequence, JZ LABEL1 DEC A JZ LAEEL2 will change the Accumulator to 00H and cause program execution to continue at the instruction identified by the label LABEL2. 2 Encoding: Operation: . d e t i m 2 0 1 1 0 0 0 0 0 rel. address JZ (PC) �� ← ������� (PC)+ 2 IF (A) = 0 THEN (PC) �� ←�������� ������� (PC) + ��� rel U C M LCALL addr16 Li Function: Description: Long call LCALL calls a subroutine loated at the indicated address. The instruction adds three to the program counter to generate the address of the next instruction and then pushes the 16-bit result onto the stack (low byte first), incrementing the Stack Pointer by two. The high-order and low-order bytes of the PC are then loaded, respectively, with the second and third bytes of the LCALL instruction. Program execution continues with the instruction at this address. The subroutine may therefore begin anywhere in the full 64K-byte program memory address space. No flags are affected. Example: Initially the Stack Pointer equals 07H. The label “SUBRTN” is assigned to program memory location 1234H. After executing the instruction, C T S LCALL SUBRTN Bytes: Cycles: Encoding: Operation: 146 at location 0123H, the Stack Pointer will contain 09H, internal RAM locations 08H and 09H will contain 26H and 01H, and the PC will contain 1234H. 3 2 0 0 0 1 0 0 1 0 addr15-addr8 addr7-addr0 LCALL (PC) �� ←��������� �������� (PC) + 3 (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC7-0) (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←���� ��� (PC15-8) (PC) �� ←� ���� addr15-0 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 LJMP addr16 Function: Description: Example: Long Jump LJMP causes an unconditional branch to the indicated address, by loading the high-order and low-order bytes of the PC (respectively) with the second and third instruction bytes. The destination may therefore be anywhere in the full 64K program memory address space. No flags are affected. The label “JMPADR” is assigned to the instruction at program memory location 1234H. The instruction, LJMP JMPADR at location 0123H will load the program counter with 1234H. Bytes: 3 Cycles: 2 Encoding: 0 0 0 0 Operation: LJMP (PC) �� ←� ���� addr15-0 0 0 1 0 MOV , Function: Description: addr15-addr8 U C M . d e t i m Li addr7-addr0 Move byte variable The byte variable indicated by the second operand is copied into the location specified by the first operand. The source byte is not affected. No other register or flag is affected. C T S This is by far the most flexible operation. Fifteen combinations of source and destination addressing modes are allowed. Example: Internal RAM location 30H holds 40H. The value of RAM location 40H is 10H. The data present at input port 1 is 11001010B (0CAH). MOV R0, #30H ;R0< = 30H MOV A, @R0 ;A < = 40H MOV R1, A ;R1 < = 40H MOV B, @Rl ;B < = 10H MOV @Rl, Pl ;RAM (40H) < = 0CAH MOV P2, P1 ;P2 #0CAH leaves the value 30H in register 0,40H in both the Accumulator and register 1,10H in register B, and 0CAH(11001010B) both in RAM location 40H and output on port 2. MOV A,Rn Bytes: 1 Cycles: 1 Encoding: Operation: 1 1 1 0 1 r r r MOV (A) �� ←����� ���� (Rn) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 147 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 *MOV A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 1 1 1 0 0 1 0 1 direct address MOV (A)�� ←��������� �������� (direct) *MOV A, ACC is not a valid instruction MOV A,@Ri Bytes: 1 Cycles: 1 Encoding: Operation: 1 1 1 0 0 1 1 i MOV A,#data Bytes: 2 Cycles: 1 Encoding: 0 1 1 1 Operation: MOV (A)�� ←� ����� #data MOV Rn, A Bytes: 1 Cycles: 1 Encoding: Operation: . d e t i m MOV (A) �� ←������� ������ ((Ri)) C T S 1 1 1 1 U C M 0 1 0 0 immediate data Li 1 r r r MOV (Rn)���� ←��� (A) MOV Rn,direct Bytes: 2 Cycles: 2 Encoding: Operation: 1 0 1 0 1 r r r direct addr. 1 r r r immediate data MOV (Rn)��������� ←�������� (direct) MOV Rn,#data Bytes: 2 Cycles: 1 Encoding: Operation: 148 0 1 1 1 MOV (Rn) �� ←� ����� #data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV direct, A Bytes: 2 Cycles: 1 Encoding: 1 1 1 1 Operation: MOV (direct) ←���� �� ��� (A) MOV direct, Rn Bytes: 2 Cycles: 2 Encoding: 1 0 0 0 Operation: MOV (direct) ←����� �� ���� (Rn) 0 1 0 1 direct address 1 r r r direct address MOV direct, direct Bytes: 3 Cycles: 2 Encoding: Operation: 1 0 0 0 MOV (direct)�� ←��������� �������� (direct) C T S MOV direct, @Ri Bytes: 2 Cycles: 2 Encoding: 1 0 0 0 Operation: MOV (direct)������� ←������ ((Ri)) U C M 0 1 0 1 0 1 1 i dir.addr. (src) . d e t i m Li direct addr. MOV direct,#data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 1 1 0 1 0 1 direct address MOV (direct) ← �� ����� #data MOV @Ri, A Bytes: 1 Cycles: 1 Encoding: 1 1 1 1 Operation: MOV ((Ri)) ←���� �� (A) ��� 南通国芯微电子有限公司 0 1 1 i 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 149 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV @Ri, direct Bytes: 2 Cycles: 2 Encoding: 1 0 1 0 0 1 1 i direct addr. 0 1 1 i immediate data Operation: MOV ((Ri)) ←��������� �� (direct) �������� MOV @Ri, #data Bytes: 2 Cycles: 1 Encoding: 0 1 1 1 Operation: MOV ((Ri)) ←� �� ����� #data MOV , Function: Description: Example: . d e t i m Li Move bit data The Boolean variable indicated by the second operand is copied into the location specified by the first operand. One of the operands must be the carry flag; the other may be any directly addressable bit. No other register or flag is affected. U C M The carry flag is originally set. The data present at input Port 3 is 11000101B. The data previously written to output Port 1 is 35H (00110101B). C T S MOV MOV MOV P1.3, C C, P3.3 P1.2, C will leave the carry cleared and change Port 1 to 39H (00111001B). MOV C,bit Bytes: 2 Cycles: 1 Encoding: Operation: 1 0 1 0 0 0 1 1 bit address 1 0 0 1 0 bit address MOV (C) �� ←������ ����� (bit) MOV bit,C Bytes: 2 Cycles: 2 Encoding: Operation: 150 1 0 0 MOV (bit)�� ←���� (C) ��� 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOV DPTR , #data 16 Function: Description: Example: Bytes: Cycles: Encoding: Operation: Load Data Pointer with a 16-bit constant The Data Pointer is loaded with the 16-bit constant indicated.The 16-bit constant is loaded into the second and third bytes of the instruction. The second byte (DPH) is the high-order byte, while the third byte (DPL) holds the low-order byte. No flags are affected. This is the only instruction which moves 16 bits of data at once. The instruction, MOV DPTR, #1234H will load the value 1234H into the Data Pointer: DPH will hold 12H and DPL will hold 34H. 3 2 1 0 0 1 0 0 0 0 immediate data 15-8 MOV (DPTR) �� ←� ����� #data15-0 DPH DPL �� ← ����� #data15-8 #data7-0 MOVC A , @A+ Function: Description: Example: . d e t i m Li Move Code byte The MOVC instructions load the Accumulator with a code byte, or constant from program memory. The address of the byte fetched is the sum of the original unsigned eight-bit. Accumulator contents and the contents of a sixteen-bit base register, which may be either the Data Pointer or the PC. In the latter case, the PC is incremented to the address of the following instruction before being added with the Accumulator; otherwise the base register is not altered. Sixteen-bit addition is performed so a carry-out from the low-order eight bits may propagate through higher-order bits. No flags are affected. C T S U C M A value between 0 and 3 is in the Accumulator. The following instructions will translate the value in the Accumulator to one of four values defimed by the DB (define byte) directive. REL-PC: INC A MOVC A, @A+PC RET DB 66H DB 77H DB 88H DB 99H If the subroutine is called with the Accumulator equal to 01H, it will return with 77H in the Accumulator. The INC A before the MOVC instruction is needed to “get around” the RET instruction above the table. If several bytes of code separated the MOVC from the table, the corresponding number would be added to the Accumulator instead. MOVC A,@A+DPTR Bytes: 1 Cycles: 2 Encoding: Operation: 1 0 0 1 0 0 1 1 MOVC (A) �� ←������������� ������������ ((A)+(DPTR)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 151 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOVC A,@A+PC Bytes: 1 Cycles: 2 Encoding: Operation: MOVX 1 0 0 0 0 0 1 1 MOVC (PC) �� ← ������ (PC)+1 (A) �� ←����������� ���������� ((A)+(PC)) , Function: Description: Move External The MOVX instructions transfer data between the Accumulator and a byte of external data memory, hence the “X” appended to MOV. There are two types of instructions, differing in whether they provide an eight-bit or sixteen-bit indirect address to the external data RAM. . d e t i m In the first type, the contents of R0 or R1 in the current register bank provide an eight-bit address multiplexed with data on P0. Eight bits are sufficient for external I/O expansion decoding or for a relatively small RAM array. For somewhat larger arrays, any output port pins can be used to output higher-order address bits. These pins would be controlled by an output instruction preceding the MOVX. U C M Li In the second type of MOVX instruction, the Data Pointer generates a sixteen-bit address. P2 outputs the high-order eight address bits (the contents of DPH) while P0 multiplexes the low-order eight bits (DPL) with data. The P2 Special Function Register retains its previous contents while the P2 output buffers are emitting the contents of DPH. This form is faster and more efficient when accessing very large data arrays (up to 64K bytes), since no additional instructions are needed to set up the output ports. C T S It is possible in some situations to mix the two MOVX types. A large RAM array with its high-order address lines driven by P2 can be addressed via the Data Pointer, or with code to output high-order address bits to P2 followed by a MOVX instruction using R0 or R1. Example: An external 256 byte RAM using multiplexed address/data lines (e.g., an Intel 8155 RAM/ I/O/Timer) is connected to the 8051 Port 0. Port 3 provides control lines for the external RAM. Ports 1 and 2 are used for normal I/O. Registers 0 and 1 contain 12H and 34H. Location 34H of the external RAM holds the value 56H. The instruction sequence, MOVX MOVX A, @R1 @R0, A copies the value 56H into both the Accumulator and external RAM location 12H. MOVX A,@Ri Bytes: 1 Cycles: 2 Encoding: Operation: 152 1 1 1 0 0 0 1 i MOVX (A) �� ←������� ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 MOVX A,@DPTR Bytes: 1 Cycles: 2 Encoding: 1 1 1 0 Operation: MOVX (A) �� ←��������� �������� ((DPTR)) MOVX 0 0 0 0 @Ri, A Bytes: 1 Cycles: 2 Encoding: 1 1 1 1 Operation: MOVX ((Ri))�� ←���� (A) ��� MOVX 0 0 1 i @DPTR, A Bytes: 1 Cycles: 2 Encoding: Operation: 1 1 1 1 MOVX (DPTR)���� ←��� (A) C T S MUL AB Function: Description: Example: U C M 0 0 0 0 . d e t i m Li Multiply MUL AB multiplies the unsigned eight-bit integers in the Accumulator and register B. The low-order byte of the sixteen-bit product is left in the Accumulator, and the high-order byte in B. If the product is greater than 255 (0FFH) the overflow flag is set; otherwise it is cleared. The carry flag is always cleared Originally the Accumulator holds the value 80 (50H). Register B holds the value 160 (0A0H). The instruction, MUL AB will give the product 12,800 (3200H), so B is changed to 32H (00110010B) and the Accumulator is cleared. The overflow flag is set, carry is cleared. Bytes: 1 Cycles: 4 Encoding: Operation: 1 0 1 0 0 1 0 0 MUL (A)7-0 ←�������� (A)×(B) (B)15-8 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 153 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 NOP Function: Description: Example: No Operation Execution continues at the following instruction. Other than the PC, no registers or flags are affected. It is desired to produce a low-going output pulse on bit 7 of Port 2 lasting exactly 5 cycles. A simple SETB/CLR sequence would generate a one-cycle pulse, so four additional cycles must be inserted. This may be done (assuming no interrupts are enabled) with the instruction sequence. CLR NOP NOP NOP NOP SETB Bytes: 1 Cycles: 1 Encoding: Operation: 0 0 P2.7 0 0 NOP (PC) ←������� (PC)+1 ORL , Function: Description: . d e t i m P2.7 C T S 0 0 0 0 U C M Li Logical-OR for byte variables ORL performs the bitwise logical-OR operation between the indicated variables, storing the results in the destination byte. No flags are affected. The two operands allow six addressing mode combinations. When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address, the source can be the Accumulator or immediate data. Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins. Example: If the Accumulator holds 0C3H (11000011B) and R0 holds 55H (01010101B) then the instruction, ORL A, R0 will leave the Accumulator holding the value 0D7H (11010111B). When the destination is a directly addressed byte, the instruction can set combinations of bits in any RAM location or hardware register. The pattern of bits to be set is determined by a mask byte, which may be either a constant data value in the instruction or a variable computed in the Accumulator at run-time.The instruction, ORL P1, #00110010B will set bits 5,4, and 1of output Port 1. 154 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ORL A,Rn Bytes: 1 Cycles: 1 Encoding: Operation: 0 1 0 0 1 r r r 1 0 1 ORL (A) �� ←���� ��� (A)∨(Rn) ORL A,direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 0 0 direct address ORL (A)�� ←���� ��� (A)∨(direct) ORL A,@Ri Bytes: Cycles: 1 1 Encoding: Operation: 0 0 0 0 1 1 1 0 ORL (A)�� ←���� ��� (A)∨((Ri)) ORL A,#data Bytes: 2 Cycles: 1 Encoding: Operation: 1 0 C T S 1 0 0 0 U C M i 0 . d e t i m Li immediate data ORL (A)�� ←���� ��� (A)∨ #data ORL direct, A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 0 0 0 0 1 0 direct address 1 direct address ORL (direct)�� ←��������� �������� (direct)∨(A) ORL direct, #data Bytes: 3 Cycles: 2 Encoding: Operation: 0 1 0 0 0 0 1 immediate data ORL (direct) ←��������� �� �������� (direct)∨#data 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 155 STC15F204EA系列单片机指南 ORL 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 C, Function: Description: Example: Logical-OR for bit variables Set the carry flag if the Boolean value is a logical 1; leave the carry in its current state otherwise. A slash (“ / ”) preceding the operand in the assembly language indicates that the logical complement of the addressed bit is used as the source value, but the source bit itself is not affected. No other flags are affected. Set the carry flag if and only if P1.0 = 1, ACC. 7 = 1, or OV = 0: MOV C, P1.0 ;LOAD CARRY WITH INPUT PIN P10 ORL C, ACC.7 ;OR CARRY WITH THE ACC.BIT 7 ORL C, /OV ;OR CARRY WITH THE INVERSE OF OV ORL C, bit Bytes: 2 Cycles: 2 Encoding: Operation: 0 2 Cycles: 2 Encoding: 1 Function: Example: Bytes: Cycles: Encoding: Operation: 156 1 0 0 0 1 0 C T S 0 1 0 0 ORL (C) �� ←���� ��� (C)∨(bit) POP direct Description: 1 1 0 U C M 0 0 . d e t i m bit address ORL (C) �� ←���� ��� (C)∨(bit) ORL C, /bit Bytes: Operation: 1 Li bit address Pop from stack The contents of the internal RAM location addressed by the Stack Pointer is read, and the Stack Pointer is decremented by one. The value read is then transferred to the directly addressed byte indicated. No flags are affected. The Stack Pointer originally contains the value 32H, and internal RAM locations 30H through 32H contain the values 20H, 23H, and 01H, respectively. The instruction sequence, POP DPH POP DPL will leave the Stack Pointer equal to the value 30H and the Data Pointer set to 0123H. At this point the instruction, POP SP will leave the Stack Pointer set to 20H. Note that in this special case the Stack Pointer was decremented to 2FH before being loaded with the value popped (20H). 2 2 1 0 1 0 0 0 direct address POP (diect) ←������� ((SP)) (SP) �� ←������ ����� (SP) ��- �1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 PUSH direct Function: Description: Example: Push onto stack The Stack Pointer is incremented by one. The contents of the indicated variableis then copied into the internal RAM location addressed by the Stack Pointer. Otherwise no flags are affected. On entering interrupt routine the Stack Pointer contains 09H. The Data Pointer holds the value 0123H. The instruction sequence, PUSH PUSH DPL DPH will leave the Stack Pointer set to 0BH and store 23H and 01H in internal RAM locations 0AH and 0BH, respectively. Bytes: 2 Cycles: Encoding: 2 Operation: 1 1 0 0 0 0 0 PUSH (SP) �� ←��������� �������� (SP) + 1 ((SP)) �� ←��������� �������� (direct) RET Function: Return from subroutine C T S 0 direct address U C M . d e t i m Li Description: RET pops the high-and low-order bytes of the PC successively from the stack, decrementing the Stack Pointer by two. Program execution continues at the resulting address, generally the instruction immediately following an ACALL or LCALL. No flags are affected. Example: The Stack Pointer originally contains the value 0BH. Internal RAM locations 0AH and 0BH contain the values 23H and 01H, respectively. The instruction, RET will leave the Stack Pointer equal to the value 09H. Program execution will continue at location 0123H. Bytes: 1 Cycles: Encoding: 2 Operation: 0 0 1 0 0 0 1 0 RET (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 157 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RETI Function: Description: Example: Return from interrupt RETI pops the high- and low-order bytes of the PC successively from the stack, and restores the interrupt logic to accept additional interrupts at the same priority level as the one just processed. The Stack Pointer is left decremented by two. No other registers are affected; the PSW is not automatically restored to its pre-interrupt status. Program execution continues at the resulting address, which is generally the instruction immediately after the point at which the interrupt request was detected. If a lower- or same-level interrupt had been pending when the RETI instruction is executed, that one instruction will be executed before the pending interrupt is processed. The Stack Pointer originally contains the value 0BH. An interrupt was detected during the instruction ending at location 0122H. Internal RAM locations 0AH and 0BH contain the values 23H and 01H, respectively. The instruction, . d e t i m RETI will leave the Stack Pointer equal to 09H and return program execution to location 0123H. Bytes: 1 Cycles: Encoding: 2 Operation: 0 Function: Example: 1 1 0 U C M 0 1 RETI (PC15-8) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 (PC7-0) �� ←������� ������ ((SP)) (SP) �� ←�������� ������� (SP) -1 C T S RL A Description: 0 0 Li Rotate Accumulator Left The eight bits in the Accumulator are rotated one bit to the left. Bit 7 is rotated into the bit 0 position. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, RL A leaves the Accumulator holding the value 8BH (10001011B) with the carry unaffected. Bytes: 1 Cycles: Encoding: 1 Operation: 158 0 0 1 0 RL (An+1) �� ←��� �� (An) (A0) ←��� �� (A ��7) 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 RLC A Function: Description: Example: Bytes: Cycles: Rotate Accumulator Left through the Carry flag The eight bits in the Accumulator and the carry flag are together rotated one bit to the left. Bit 7 moves into the carry flag; the original state of the carry flag moves into the bit 0 position. No other flags are affected. The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction, RLC A leaves the Accumulator holding the value 8BH (10001011B) with the carry set. 1 1 Encoding: Operation: 0 0 1 1 0 RLC (An+1) �� ←��� �� (An) (A0) �� ←���� ��� (C) (C) �� ←��� �� (A7) 0 1 1 RR A Function: Description: Example: Bytes: Cycles: Encoding: Operation: RRC A Function: Description: Example: Bytes: Cycles: Rotate Accumulator Right Li The eight bits in the Accumulator are rotated one bit to the right. Bit 0 is rotated into the bit 7 position. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, RR A leaves the Accumulator holding the value 0E2H (11100010B) with the carry unaffected. 1 1 0 U C M C T S 0 0 0 RR (An) �� ←��� �� (An+1) (A7) �� ←��� �� (A0) 0 0 1 1 n=0-6 Rotate Accumulator Right through the Carry flag The eight bits in the Accumulator and the carry flag are together rotated one bit to the right. Bit 0 moves into the carry flag; the original value of the carry flag moves into the bit 7 position.No other flags are affected. The Accumulator holds the value 0C5H (11000101B), and the carry is zero. The instruction, RRC A leaves the Accumulator holding the value 62H (01100010B) with the carry set. 1 1 Encoding: Operation: . d e t i m n = 0-6 0 0 0 1 RRC (An+1) �� ←��� �� (An) (A7) �� ←���� ��� (C) (C) �� ←��� �� (A0) 南通国芯微电子有限公司 0 0 1 1 n = 0-6 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 159 STC15F204EA系列单片机指南 SETB Function: Example: SETB sets the indicated bit to one. SETB can operate on the carry flag or any directly addressable bit. No other flags are affected The carry flag is cleared. Output Port 1 has been written with the value 34H (00110100B). The instructions, SETB C SETB P1.0 will leave the carry flag set to 1 and change the data output on Port 1 to 35H (00110101B). 1 Cycles: 1 Encoding: 1 2 Cycles: 1 Encoding: 0 1 0 0 1 1 0 1 0 0 SETB (bit) ←�� �� 1� C T S SJMP rel Function: 1 1 U C M 1 . d e t i m 1 SETB (C) �� ←�� �1 bit Bytes: Operation: 0 bit address Li Short Jump Description: Program control branches unconditionally to the address indicated. The branch destination is computed by adding the signed displacement in the second instruction byte to the PC, after incrementing the PC twice. Therefore, the range of destinations allowed is from 128bytes preceding this instruction to 127 bytes following it. Example: The label “RELADR” is assigned to an instruction at program memory location 0123H. The instruction, SJMP RELADR will assemble into location 0100H. After the instruction is executed, the PC will contain the value 0123H. (Note: Under the above conditions the instruction following SJMP will be at 102H.Therefore, the displacement byte of the instruction will be the relative offset (0123H - 0102H) = 21H. Put another way, an SJMP with a displacement of 0FEH would be an one-instruction infinite loop). Bytes: 2 Cycles: 2 Encoding: Operation: 160 研发顾问:13922809991 Set bit C Bytes: Operation: SETB 临时技术支持:13922829991 Description: SETB 技术支持网站:www.STCMCU.com 1 0 0 0 0 0 0 0 rel. address SJMP (PC) �� ←������� ������ (PC)+2 (PC) �� ←��������� �������� (PC)+rel 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 SUBB A, Function: Description: Subtract with borrow SUBB subtracts the indicated variable and the carry flag together from the Accumulator, leaving the result in the Accumulator. SUBB sets the carry (borrow)flag if a borrow is needed for bit 7, and clears C otherwise.(If C was set before executing a SUBB instruction, this indicates that a borrow was needed for the previous step in a multiple precision subtraction, so the carry is subtracted from the Accumulator along with the source operand).AC is set if a borrow is needed for bit 3, and cleared otherwise. OV is set if a borrow is needed into bit 6, but not into bit 7, or into bit 7, but not bit 6. When subtracting signed integers OV indicates a negative number produced when a negative value is subtracted from a positive value, or a positive result when a positive number is subtracted from a negative number. The source operand allows four addressing modes: register, direct, register-indirect, or immediate. Example: . d e t i m The Accumulator holds 0C9H (11001001B), register 2 holds 54H (01010100B), and the carry flag is set. The instruction, SUBB A, R2 U C M Li will leave the value 74H (01110100B) in the accumulator, with the carry flag and AC cleared but OV set. Notice that 0C9H minus 54H is 75H. The difference between this and the above result is due to the carry (borrow) flag being set before the operation. If the state of the carry is not known before starting a single or multiple-precision subtraction, it should be explicitly cleared by a CLR C instruction. C T S SUBB A, Rn Bytes: Cycles: Encoding: Operation: 1 1 1 0 0 1 1 r r r SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ���� (Rn) SUBB A, direct Bytes: 2 Cycles: 1 Encoding: 1 0 0 1 0 1 0 1 Operation: SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- �������� (direct) direct address SUBB A, @Ri Bytes: Cycles: Encoding: Operation: 1 1 1 0 0 1 0 1 1 i SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ������ ((Ri)) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 161 STC15F204EA系列单片机指南 SUBB A, #data Bytes: Cycles: Encoding: Operation: 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2 1 1 0 0 1 0 1 0 0 immediate data SUBB (A) �� ←����� ���� (A) ��- ���� (C) ��- ����� #data SWAP A Function: Description: Example: Swap nibbles within the Accumulator SWAP A interchanges the low- and high-order nibbles (four-bit fields) of the Accumulator (bits 3-0 and bits 7-4). The operation can also be thought of as a four-bit rotate instruction. No flags are affected. The Accumulator holds the value 0C5H (11000101B). The instruction, SWAP Bytes: Cycles: 1 Encoding: 1 Operation: SWAP (A3-0) XCH A, 1 0 0 0 (A7-4) C T S 1 0 0 U C M Li Function: Description: Exchange Accumulator with byte variable XCH loads the Accumulator with the contents of the indicated variable, at the same time writing the original Accumulator contents to the indicated variable. The source/destination operand can use register, direct, or register-indirect addressing. Example: R0 contains the address 20H. The Accumulator holds the value 3FH (00111111B). Internal RAM location 20H holds the value 75H (01110101B). The instruction, XCH XCH A, Rn Bytes: Cycles: Encoding: Operation: XCH A, direct Bytes: Cycles: Encoding: Operation: 162 . d e t i m A leaves the Accumulator holding the value 5CH (01011100B). 1 A, @R0 will leave RAM location 20H holding the values 3FH (00111111B) and 75H (01110101B) in the accumulator. 1 1 1 1 XCH (A) 0 0 1 r r r (Rn) 2 1 1 1 0 0 XCH (A) 0 1 0 1 direct address (direct) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 XCH A, @Ri Bytes: Cycles: Encoding: Operation: 1 1 1 1 0 0 XCH (A) 0 1 1 i ((Ri)) XCHD A, @Ri Function: Description: Example: Exchange Digit XCHD exchanges the low-order nibble of the Accumulator (bits 3-0), generally representing a hexadecimal or BCD digit, with that of the internal RAM location indirectly addressed by the specified register. The high-order nibbles (bits 7-4) of each register are not affected. No flags are affected. . d e t i m R0 contains the address 20H. The Accumulator holds the value 36H (00110110B). Internal RAM location 20H holds the value 75H (01110101B). The instruction, XCHD A, @R0 Li will leave RAM location 20H holding the value 76H (01110110B) and 35H (00110101B) in the accumulator. Bytes: Cycles: Encoding: Operation: 1 1 1 1 0 1 0 1 1 i C T S XCHD (A3-0) (Ri3-0) U C M XRL , Function: Description: Logical Exclusive-OR for byte variables XRL performs the bitwise logical Exclusive-OR operation between the indicated variables, storing the results in the destination. No flags are affected. The two operands allow six addressing mode combinations.When the destination is the Accumulator, the source can use register, direct, register-indirect, or immediate addressing; when the destination is a direct address,the source can be the Accumulator or immediate data. (Note: When this instruction is used to modify an output port, the value used as the original port data will be read from the output data latch, not the input pins.) Example: If the Accumulator holds 0C3H (11000011B) and register 0 holds 0AAH (10101010B) then the instruction, XRL A, R0 will leave the Accumulator holding the vatue 69H (01101001B). When the destination is a directly addressed byte, this instruction can complement combinnation of bits in any RAM location or hardware register. The pattern of bits to be complemented is then determined by a mask byte, either a constant contained in the instruction or a variable computed in the Accumulator at run-time. The instruction, XRL P1, #00110001B will complement bits 5,4 and 0 of outpue Port 1. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 163 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 XRL A, Rn Bytes: Cycles: Encoding: Operation: 1 1 0 1 1 0 XRL (A) �� ← ���� (A)� 1 r r r (Rn) XRL A, direct Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 1 0 0 1 0 1 XRL (A) �� ← ���� (A)� direct address . d e t i m (direct) XRL A, @Ri Bytes: 1 Cycles: 1 Encoding: Operation: 0 1 0 XRL (A) �� ← ���� (A)� XRL A, #data Bytes: 2 Cycles: 1 Encoding: Operation: 1 0 1 1 i ((Ri)) C T S 0 1 1 0 XRL (A) �� ← ���� (A)� U C M 0 1 0 0 Li immediate data #data XRL direct, A Bytes: 2 Cycles: 1 Encoding: Operation: 0 1 1 0 0 0 1 0 XRL (direct) ← �� ��������� (direct)� direct address (A) XRL direct, #data Bytes: 3 Cycles: 2 Encoding: Operation: 164 0 1 1 0 0 0 1 1 XRL (direct) ← �� ��������� (direct)� 南通国芯微电子有限公司 direct address immediate data # data 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第6章 中断系统 中断系统是为使CPU具有对外界���������������� 紧急�������������� 事件的����������� 实时��������� 处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的 工作,转而去处理这个紧急事件��������������������������� ,�������������������������� 处理完以后,再回到原来被中断的地方,继续原来的工作, 这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断 源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服 务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排 队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响 应������������ 优先���������� 级别最高的中断请求。 当CPU正在处理一个中断源请求的时候(执行相应的���������������� 中断�������������� 服务程序),发生了另外一个优 先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的������������� 服务����������� 程序,转而去处理优先级 更高的中断请求源,处理完以后,再回到原低级中断������������������ 服务���������������� 程序,这样的过程称为中断嵌套。这 样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。 . d e t i m Li STC15F204EA系列单片机提供了9个中断请求源,它们分别是:外部中断0(INT0)、定时 器0中断、外部中断1(INT1)、定时器1中断、A/D转换中断、低压检测(LVD)中断、外部中断2( U C M INT2)、外部中断3(INT3)以及外部中断4(INT4)。除外部中断2(INT2)、外部中断3(INT3)及 外部中断4(INT4)固定是最低优先级中断外,其它的中断都具有两个中断优先级,可实现两级 中断服务程序嵌套。用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中 断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请;每一个中断源可以用 软件独立地控制为开中断或关中断状态;部分中断的优先级别均可用软件设置。高优先级的中 断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当 两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。 C T S STC15F204EA系列单片机的各个中断查询次序如下表6-1所示: 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 165 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 表6-1 中断查询次序 中断向 相同优先级内的 中断优先 中断优 中断请求标 量地址 查询次序 级设置 先级 志位 中断源 INT0 (外部中断 0) Timer 0 INT1 (外部中断1) Timer1 No S1(UART1) ADC LVD No PCA No S2(UART2) No SPI 中断允许 控制位 0003H 0 (highest) PX0 0/1 IE0 EX0/EA 000BH 1 PT0 0/1 TF0 ET0/EA 0013H 2 PX1 0/1 IE1 EX1/EA 001BH 0023B 002BH 0033H 003BH 0043H 004BH 3 4 5 6 7 8 9 PT1 0/1 TF1 ET1/EA PADC PLVD 0/1 0/1 ADC_FLAG LVDF EADC/EA ELVD/EA INT2 (外部中断2) 0053H 10 INT3 (外部中断3) 005BH No BRT_INT System Reserved System Reserved 0063H 006BH 0073H 007BH INT4 (外部中断4) 0083H C T S Li 0 U C M 11 . d e t i m 0 EX2/EA EX3/EA 12 13 14 15 16�������� (lowest) 0 EX4/EA 如果使用C语言编程,中断查询次序号就是中断号,例如: 166 void void void void void void void void void Int0_Routine(void) Timer0_Rountine(void) Int1_Routine(void) Timer1_Rountine(void) ADC_Routine(void) LVD_Routine(void) Int2_Routine(void) Int3_Routine(void) Int4_Routine(void) 南通国芯微电子有限公司 interrupt 0; interrupt 1; interrupt 2; interrupt 3; interrupt 5; interrupt 6; interrupt 10; interrupt 11; interrupt 16; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.1 中断结构 STC15F204EA系列单片机的中断系统结构示意图如图6-1所示 上升沿和 下降沿均 可中断 中断允许控制 寄存器 中断优先级 控制寄存器 高优先级中断 IE, INT_CLKO 寄存器 TCON.0/IT0=0 INT0 EA EX0 IE0 IP 寄存器 PX0 低优先级中断 '1' '0' high . d e t i m TCON.0/IT0=1 ET0 Timer0 / TF0 TCON.2/IT1=0 INT1 EX1 IE1 TCON.2/IT1=1 LVDF INT2 INT3 INT4 PX1 U C M ET1 Timer1 / TF1 ADC_FLAG PT0 C T S PT1 EADC ELVD PADC PLVD EX2 '1' '0' '1' '0' '1' '0' Li 中断 查询 次序 '1' '0' '1' '0' 无中断优先级控制位, 中断优先级固定为0级 EX3 无中断优先级控制位, 中断优先级固定为0级 EX4 无中断优先级控制位, 中断优先级固定为0级 low EA Global Enable EA 图6-1 STC15F204EA系列中断系统结构图 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 167 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 外部中断0(INT0)和外部中断1(INT1)既可上升沿触发,又可下降沿触发。请求两个外部中 断的标志位是位于寄存器TCON中的IE0/TCON.1和IE1/TCON.3。当外部中断服务程序被响应 后,中断标志位IE0和IE1会自动被清0。TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外 部中断0和1是上升沿触发还是下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探 测到上升沿或下降沿后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探 测下降沿后才可产生外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉 电模式唤醒。 定时器0和1的中断请求标志位是TF0和TF1。当定时器寄存器THx/TLx(x = 0,1)溢出时,溢 出标志位TFx(x = 0,1)会被置位,定时器中断发生。当单片机转去执行该定时器中断时,定时器 的溢出标志位TFx(x = 0,1)会被硬件清除。 A/D转换的中断是由ADC_FLAG/ADC_CONTR.4请求产生的。该位需用软件清除。 . d e t i m 低压检测(LVD)中断是由LVDF/PCON.5请求产生的。该位也需用软件清除。 外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中 断2~4的中断请求标志位被隐藏起来了,对用户不可见。当相应的中断服务程序执行后或 Li EXn=0(n=2,3,4),这些中断请求标志位会自动地被清0。外部中断2(INT2)、外部中断3(INT3) 及外部中断4(INT4)也可以用于将单片机从掉电模式唤醒。 U C M 各个中断触发行为总结如下表6-2所示: 中断源 INT0 (外部中断0) Timer 0 INT1 (外部中断1) Timer1 ADC LVD INT2 (外部中断2) INT3 (外部中断3) INT4 (外部中断4) 168 C T S 表6-2 中断触发 触发行为 (IT0 = 1): 下降沿; (IT0 = 0): 上升沿和下降沿均可 定时器0溢出 (IT1 = 1): 下降沿; (IT1 = 0): 上升沿和下降沿均可 定时器1溢出 A/D转换完成 电源电压下降到低于LVD检测电压 下降沿 下降沿 下降沿 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.2 中断寄存器 符号 描述 位地址及符号 地址 MSB IE Interrupt Enable A8H EA IP Interrupt Priority Low B8H - TCON Timer Control register 88H PCON Power Control register 87H External Interrupt enable INT_CLKO 8FH and Clock output register ADC_CONTR ADC control register BCH LSB ELVD EADC PADC TF1 TR1 TF0 - - - EX4 ET1 EX1 ET0 EX0 000x 0000B - PT1 PX1 PT0 PX0 x00x 0000B TR0 IE1 IT1 IE0 IT0 0000 0000B GF1 GF0 - PLVD LVDF EX3 复位值 - EX2 - - PD IDL xx1x 0000B T1CLKO T0CLKO ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHIS0 x000 xx00B 0000 0000B . d e t i m 上表中列出了与STC15F204EA系列单片机中断相关的所有寄存器,下面逐一地对这些寄 存器进行介绍。 1. 中断允许寄存器IE和INT_CLKO Li STC15F204EA系列单片机CPU对中断源的开放或屏蔽,每一个中断源是否被允许中断, 是由内部的中断允许寄存器IE(IE为特殊功能寄存器,它的字节地址为A8H)控制的,其格式 如下: IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name C T S B7 EA U C M B6 ELVD B5 EADC B4 - B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。 EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。 ET1 : 定时/计数器T1的溢出中断允许位,ET1=1,允许T1中断,ET1=0,禁止T1中断。 EX1 : 外部中断1中断允许位,EX1=1,允许外部中断1中断,EX1=0,禁止外部中断1中断。 ET0 : T0的溢出中断允许位,ET0=1允许T0中断,ET0=0禁止T0中断。 EX0 : 外部中断0中断允许位,EX0=1允许中断,EX0=0禁止中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 169 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INT_CLKO是STC15F204EA系列单片机新增寄存器,地址是8FH,INT_CLKO格式如下: INT_CLKO : 外部中断允许和时钟输出寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 INT_CLKO 8FH name - EX4 EX3 EX2 - - B1 B0 T1CLKO T0CLKO EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只 能下降沿触发。 EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也 只能下降沿触发。 EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同 样只能下降沿触发。 . d e t i m T1CLKO,T0CLKO与中断无关,在此不作介绍。 STC15F204EA系列单片机复位以后,IE和INT_CLKO被清0,由用户程序置“1”或清“0”IE 和INT_CLKO的相应位,实现允许或禁止各中断源的中断申请,若使某一个中断源允许中断必 须同时使CPU开放中断。更新IE的内容可由位操作指令来实现(SETB BIT;CLR BIT),也可 用字节操作指令实现(即MOV IE,#DATA,ANL IE,#DATA;ORL IE,#DATA;MOV IE, A等)。更新INT_CLKO(不可位寻址)的内容可用MOV INT_CLKO, #DATA指令来解决。 C T S 170 南通国芯微电子有限公司 U C M Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 中断优先级控制寄存器IP STC15F204EA系列单片机部分中断设有两个中断优先级,除外部中断2(INT2)、外部中断 3(INT3)及外部中断4(INT4)外,所有中断请求源可编程为高优先级中断或低优先级中断,可 实现二级中断嵌套。一个正在执行的低优先级中断能被高优先级中断所中断,但不能被另一个 低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令 才能响应新的中断申请。以上所述可归纳为下面两条基本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断 STC15F204EA系列单片机的片内有一个优先级寄存器IP,其字节地址为B8H,只要用程序 改变其内容,即可进行各中断源中断级别的设置,IP寄存器格式: IP : 中断优先级控制寄存器 (可位寻址) SFR name IP Address B8H bit name B7 - B6 PLVD B5 PADC B4 - . d e t i m B3 PT1 Li B2 PX1 B1 PT0 B0 PX0 PLVD : 低压检测中断优先级控制位。PLVD=1,低压检测中断定义为高优先级中断; PLVD=0,低压检测中断定义为低优先级中断。 U C M PADC : A/D转换中断优先级控制位。PADC=1,A/D转换中断定义为高优先级中断; PADC=0,A/D转换中断定义为低优先级中断。 PT1:定时器T1中断优先级控制位。PT1=1,定时器T1中断定义为高优先级中断;PT1=0,定 时器T1中断定义为低优先级中断。 PX1:外部中断1中断优先级控制位。PX1=1,外部中断1定义为高优先级中断;PX1=0,外部 中断1定义为低优先级中断。 PT0:定时器T0中断优先级控制位。PT0=1,定时器T0定义为高优先级中断;PT0=0,定时器 T0定义为低优先级中断。 PX0:外部中断0中断优先级控制位。PX0=1,外部中断0定义为高优先级中断;PX0=0,外部 中断0定义为低优先级中断。 中断优先级控制寄存器IP的各位都由用户程序置"1"和清"0",可用位操作指令或字节操 作指令更新IP的内容。以改变各中断源的中断优先级。STC15F204EA系列单片机复位后IP为 00H,各个中断源均为低优先级中断。 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 171 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 3. 定时器/计数器控制寄存器TCON TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求 中断源等,TCON格式如下: TCON : 定时器/计数器中断控制寄存器 (可位寻址) SFR name TCON Address 88H bit name B7 TF1 B6 TR1 B5 TF0 B4 TR0 B3 IE1 B2 IT1 B1 IE0 B0 IT0 TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置 “1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由 查询软件清“0”)。 TR1: 定时器1的运行控制位。 . d e t i m TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置 “1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询 软件清0)。 TR0: 定时器0的运行控制位。 Li IE1:外部中断1(INT1/P3.3)中断请求标志。IE1=1,外部中断向CPU请求中断,当CPU响应 该中断时由硬件清“0”IE1。 U C M IT1:外部中断1中断源类型选择位。IT1=0,INT1/P3.3引脚上的上升沿或下降沿信号均可触发 外部中断1。IT1=1,外部中断1为下降沿触发方式。 C T S IE0:外部中断0(INT0/P3.2)中断请求标志。IE0=1,外部中断0向CPU请求中断,当CPU响 应外部中断时,由硬件清“0”IE0。 IT0:外部中断0中断源类型选择位。IT0=0,INT0/P3.2引脚上的上升沿或下降沿均可触发外部 中断0。IT0=1,外部中断0为下降沿触发方式。 172 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 4. 低压检测中断相关寄存器:电源控制寄存器PCON PCON为电源控制寄存器,PCON格式如下: PCON : 电源控制寄存器 SFR name Address PCON 87H bit B7 B6 B5 B4 B3 B2 B1 B0 name - - LVDF - GF1 GF0 PD IDL LVDF : 低压检测标志位,同时也是低压检测中断请求标志位。 在正常工作和空闲工作状态时,如果内部工作电压Vcc低于低压检测门槛电压,该位自 动置1,与低压检测中断是否被允许无关。即在内部工作电压Vcc低于低压检测门槛电 压时,不管有没有允许低压检测中断,该位都自动为1。该位要用软件清0,清0后,如 内部工作电压Vcc继续低于低压检测门槛电压,该位又被自动设置为1。 在进入掉电工作状态前,如果低压检测电路未被允许可产生中断,则在进入掉电模式 后,该低压检测电路不工作以降低功耗。如果被允许可产生低压检测中断,则在进入 掉电模式后,该低压检测电路继续工作,在内部工作电压Vcc低于低压检测门槛电压 后,产生低压检测中断,可将MCU从掉电状态唤醒。 . d e t i m Li 电源控制寄存器PCON中的其他位与低压检测中断无关,在此不作介绍。 U C M 在中断允许寄存器IE中,低压检测中断相应的允许位是ELVD/IE.6 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name C T S B7 EA B6 ELVD B5 EADC B4 - B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 ELVD : 低压检测中断允许位,ELVD=1,允许低压检测中断,ELVD=0,禁止低压检测中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 173 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 5. A/D转换控制寄存器ADC_CONTR ADC_CONTR为A/D转换控制寄存器,ADC_CONTR格式如下: ADC_CONTR : A/D转换控制寄存器 SFR name ADC_CONTR Address bit BCH name B7 B6 B5 B4 B3 B2 B1 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 B0 CHS0 ADC_POWER : ADC电源控制位。当ADC_POWER=0时,关闭ADC电源; 当ADC_PWOER=1时,打开ADC电源。 ADC_FLAG: ADC转换结束标志位,可用于请求A/D转换的中断。当A/D转换完成后, ADC_FLAG= 1,要用软件清0。不管是 A/D转换完成后由该位申请产生中 断 , 还 是 由 软 件 查 询 该 标 志 位 A / D 转 换 是 否 结 束 , 当 A / D 转 换 完成 后 , ADC_FLAG=1,一定要软件清0。 ADC_START: ADC转换启动控制位,设置为“1”时,开始转换,转换结束后为0。 A/D转换控制寄存器ADC_CONTR中的其他位与中断无关,在此不作介绍。 Li . d e t i m 在中断允许寄存器IE中,A/D转换器的中断允许位是EADC/IE.5 IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA U C M B6 ELVD B5 EADC B4 - 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转换中断。 174 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.3 中断优先级 除外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)外,STC15F204EA系列单片 机的所有的中断都具有两个中断优先级,对于这些中断请求源可编程为高优先级中断或低优先 级中断,可实现两级中断服务程序嵌套。����������������������� 一个正在执行的低优先级中断能被高优先级中断所中 断,但不能被另一个低优先级中断所中断,一直执行到结束,遇到返回指令RETI,返回主程 序后再执行一条指令才能响应新的中断申请。以上所述可归纳为下面两条基本规则: ⒈ 低优先级中断可被高优先级中断所中断,反之不能。 ⒉ 任何一种中断(不管是高级还是低级),一旦得到响应,不能被它的同级中断所中 断。 当同时收到几个同一优先级的中断要求时,哪一个要求得到服务,取决于内部的查询次 序。这相当于在每个优先级内,还同时存在另一个辅助优先级结构,STC15F204EA系列单片 机各中断优先查询次序如下: 中断源 0. INT0 1. Timer 0 2. INT1 3. Timer 1 4. 5. ADC interrupt 6. LVD 7. 8. 9. 10. INT2 11. INT3 12. 13. 14. 15. 16. INT4 查询次序 (highest) C T S U C M . d e t i m Li (lowest) 如果使用C 语言编程,中断查询次序号就是中断号,例如: void Int0_Routine(void) interrupt 0; void Timer0_Rountine(void) interrupt 1; void Int1_Routine(void) interrupt 2; void Timer1_Rountine(void) interrupt 3; void ADC_Routine(void) interrupt 5; void LVD_Routine(void) interrupt 6; void Int2_Routine(void) interrupt 10; void Int3_Routine(void) interrupt 11; void Int4_Routine(void) interrupt 16; 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 175 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.4 中断处理 当某中断产生而且被CPU响应,主程序被中断,接下来将执行如下操作: 1. 当前正被执行的指令全部执行完毕; 2. PC值被压入栈; 3. 现场保护; 4. 阻止同级别其他中断; 5. 将中断向量地址装载到程序计数器PC; 6. 执行相应的中断服务程序。 中断服务程序ISR完成和该中断相应的一些操作。中断服务程序ISR以RETI(中断返回)指令 结束,将PC值从栈中取回,并恢复原来的中断设置,之后从主程序的断点处继续执行。 . d e t i m 当某中断被响应时,被装载到程序计数器PC中的数值称为中断向量,是该中断源相对应的 中断服务程序的起始地址。各中断源服务程序的入口地址(即中断向量)为: C T S 中断源 中断向量 External Interrupt 0 Timer 0 External Interrupt 1 Timer 1 / ADC interrupt LVD / / / External Interrupt 2 External Interrupt 3 / / / / External Interrupt 4 0003H 000BH 0013H 001BH 0023H 002BH 0033H 003BH 0043H 004BH 0053H 005BH 0063H 006BH 0073H 007BH 0083H U C M Li 当“转去执行中断”时,引起外部中断INT0/INT1/INT2/INT3/INT4请求标志位和定时器/计数 器0、定时器/计数器1的中断请求标志位将被硬件自动清零,其它中断的中断请求标志位需软 件清"0"。由于中断向量入口地址位于程序存储器的开始部分,所以主程序的第1条指令通常为 跳转指令,越过中断向量区(LJMP MAIN)。 注意:不能用RET指令代替RETI指令 RET指令虽然也能控制PC返回到原来中断的地方,但RET指令没有清零中断优先级状态触 发器的功能,中断控制系统会认为中断仍在进行,其后果是与此同级或低级的中断请求将不被 响应。 若用户在中断服务程序中进行了入栈操作,则在RETI指令执行前应进行相应的出栈操 作,即在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点。 176 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.5 外部中断 外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,上升沿或下降沿均可触发方式 和仅下降沿触发方式。 TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是上升沿和下降沿均可触 发还是仅下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探测到上升沿或下降沿 后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探测下降沿后才可产生 外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉电模式唤醒。 外部中断2(INT2)、外部中断3(INT3)及外部中断4(INT4)都只能下降沿触发。外部中断 2~4的中断请求标志位被隐藏起来了,对用户不可见,故也无需用户清"0"。当相应的中断服务 程序执行后或EXn=0(n=2,3,4),这些中断请求标志位会自动地被清0。这些中断请求标志位也 . d e t i m 可以通过软件禁止相应的中断允许控制位将其清“0”(特殊应用)。外部中断2(INT2)、外部 中断3(INT3)及外部中断4(INT4)也可以用于将单片机从掉电模式唤醒。 Li 由于系统每个时钟对外部中断引脚采样1次,所以为了确保被检测到,输入信号应该至少 维持2个时钟。如果外部中断是仅下降沿触发,要求必须在相应的引脚维持高电平至少1个时 钟,而且低电平也要持续至少一个时钟,才能确保该下降沿被CPU检测到。同样,如果外部中 断是上升沿、下降沿均可触发,则要求必须在相应的引脚维持低电平或高电平至少1个时钟, 而且高电平或低电平也要持续至少一个时钟,这样才能确保CPU能够检测到该上升沿或下降 沿。 C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 177 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.6 外部中断的测试程序(C程序和汇编程序) 6.6.1 外部中断0(INT0)的测试程序(可支持上升沿或下降沿中断) C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断0�(上升沿/下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" bit FLAG; . d e t i m Li //1:上升沿中断 0:下降沿中断 //External interrupt0 service routine void exint0() interrupt 0 //中断0 (向量地址 0003H) { FLAG = INT0; //读 INT0(P3.2)管脚的状态, INT0=0(下降沿Falling ); INT0=1(上升沿Rising) } void main() { IT0 = 0; EX0 = 1; EA = 1; while (1); } 178 C T S 南通国芯微电子有限公司 U C M //设置 INT0 的中断触发方式 (1:Falling only 0:Rising & Falling) //允许INT0 中断 //开总中断 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断0�(上升沿/下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -------------------------------------------- --*/ /* 如果要在程序中使用或在文章中引用该程序, ----------------------*/ /* 请在程序中或文章中注明使用了STC的资料及程序 ----------*/ /*------------------------------------------------------------------------------------*/ FLAG BIT 20H.0 ;1:上升沿中断 0:下降沿中断 . d e t i m ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 0003H LJMP EXINT0 U C M ;---------------------------------------- MAIN: ORG C T S 0100H MOV SP, CLR IT0 SETB EX0 SETB EA SJMP $ #7FH Li ;中断0 (向量地址 0003H) ;初始化堆栈指针SP ;设置 INT0 的中断触发方式 (1:Falling only 0:Rising & Falling) ;允许INT0 中断 ;开总中断 ;----------------------------------------;External interrupt0 service routine EXINT0: PUSH PSW MOV C, INT0 MOV FLAG, C POP PSW RETI ;读 INT0(P3.2)管脚的状态, ;INT0=0(下降沿Falling ); INT0=1(上升沿Rising) ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 179 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.6.2 外部中断1(INT1)的测试程序(可支持上升沿或下降沿中断) C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断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" bit FLAG; //1:rising edge interrupt 0:falling edge int Li //External interrupt1 service routine void exint1() interrupt 2 /INT1, interrupt 2 (location at 0013H) { FLAG = INT1; //read INT1(P3.3) port status, INT1=0(Falling); INT1=1(Rising) } void main() { IT1 = 0; EX1 = 1; EA = 1; C T S U C M //set INT1 interrupt type (1:Falling only 0:Rising & Falling) //enable INT1 interrupt //open global interrupt switch while (1); } 180 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断1�(上升沿/下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ FLAG BIT 20H.0 ;1:rising edge interrupt 0:falling edge int . d e t i m ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 0013H LJMP EXINT1 C T S ;---------------------------------------- MAIN: ORG 0100H MOV SP, CLR IT1 SETB EX1 SETB EA SJMP $ #7FH U C M Li ;INT1, interrupt 2 (location at 0013H) ;initial SP ;set INT1 interrupt type (1:Falling only 0:Rising & Falling) ;enable INT1 interrupt ;open global interrupt switch ;----------------------------------------;External interrupt1 service routine EXINT1: PUSH PSW MOV C, INT1 MOV FLAG, C POP PSW RETI ;read INT1(P3.3) port status ;INT1=0(Falling); INT1=1(Rising) ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 181 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.6.3 外部中断2(INT2)的测试程序(下降沿中断) C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" sfr INT_CLKO = 0x8f; //External interrupt2 service routine void exint2() interrupt 10 { } void main() { C T S INT_CLKO |= 0x10; EA = 1; while (1); Li //- EX4 EX3 EX2 - - T1CLKO T0CLKO U C M //INT2, interrupt 10 (location at 0053H) //(EX2 = 1)enable INT2 interrupt //open global interrupt switch } 182 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断2 (INT2) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ INT_CLKO DATA 08FH ;- EX4 EX3 EX2 - - T1CLKO T0CLKO ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 0053H LJMP EXINT2 C T S ;---------------------------------------- MAIN: ORG 0100H MOV SP, #7FH ORL INT_CLKO, SETB EA SJMP $ #10H U C M . d e t i m Li ;INT2, interrupt 10 (location at 0053H) ;initial SP ;(EX2 = 1)enable INT2 interrupt ;open global interrupt switch ;----------------------------------------;External interrupt2 service routine EXINT2: RETI ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 183 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.6.4 外部中断3(INT3)的测试程序(下降沿中断) C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" sfr INT_CLKO = 0x8f; //External interrupt3 service routine void exint3() interrupt 11 { } void main() { C T S INT_CLKO |= 0x20; EA = 1; while (1); Li //- EX4 EX3 EX2 - - T1CLKO T0CLKO U C M //INT3, interrupt 11 (location at 005BH) //(EX3 = 1)enable INT3 interrupt //open global interrupt switch } 184 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断3 (INT3) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ INT_CLKO DATA 08FH ;- EX4 EX3 EX2 - - T1CLKO T0CLKO ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 005BH LJMP EXINT3 ;----------------------------------------- U C M MAIN: ORG . d e t i m Li ;INT3, interrupt 11 (location at 005BH) C T S 0100H MOV SP, #7FH ORL INT_CLKO, SETB EA SJMP $ #20H ;initial SP ;(EX3 = 1)enable INT3 interrupt ;open global interrupt switch ;----------------------------------------;External interrupt 3 service routine EXINT3: RETI ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 185 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6.6.5 外部中断4(INT4)的测试程序(下降沿中断) C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" sfr INT_CLKO = 0x8f; //External interrupt4 service routine void exint4() interrupt 16 { } void main() { C T S INT_CLKO |= 0x40; EA = 1; while (1); Li //- EX4 EX3 EX2 - - T1CLKO T0CLKO U C M //INT4, interrupt 16 (location at 0083H) //(EX4 = 1)enable INT4 interrupt //open global interrupt switch } 186 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机外部中断4 (INT4) (下降沿) -------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ INT_CLKO DATA 08FH ;- EX4 EX3 EX2 - - T1CLKO T0CLKO ;----------------------------------------;interrupt vector table ORG 0000H LJMP MAIN ORG 0083H LJMP EXINT4 MAIN: C T S ORG 0100H MOV SP, #7FH ORL INT_CLKO, SETB EA SJMP $ Li M ;INT4, interrupt 16 (location at 0083H) ;initial SP ;----------------------------------------- CU . d e t i m #40H ;(EX4 = 1) enable INT4 interrupt ;open global interrupt switch ;----------------------------------------;External interrupt4 service routine EXINT4: RETI ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 187 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第7章 定时器/计数器 STC15Fxx系列������������������������������������ 单片机内部设置了两个16位定时器/计数器T0和T1,它们都具有计数方式和 定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一 控制位— C/T来选择T0或T1为定时器还是计数器。定时器/计数器的核心部件是一个加法计数 器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定 时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1;如果 计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个脉冲加1。 当定时器/计数器工作在定时模式时,特殊功能寄存器AUXR中的T0x12和T1x12分别决定是 系统时钟/12还是系统时钟/1(不分频)后让T0和T1进行计数。当定时器/计数器工作在计数模式 时,对外部脉冲计数不分频。 . d e t i m 定时器/计数器0有4种工作模式:模式0(16位自动重装模式),模式1(16位定时器/计数器模 式),模式2(8位自动重装模式),模式3(两个8位定时器/计数器)。定时器/计数器1除模式3外, 其他工作模式与定时器/计数器0相同,T1在模式3时无效,停止计数。 Li U C M 7.1 定时器/计数器的相关寄存器 C T S 符号 描述 地址 TCON Timer Control 88H TMOD TL0 TL1 TH0 TH1 AUXR Timer Mode Timer Low 0 Timer Low 1 Timer High 0 Timer High 1 Auxiliary register External interrupt INT_CLKO enable and Clock Output register 188 南通国芯微电子有限公司 89H 8AH 8BH 8CH 8DH 8EH 8FH 位地址及其符号 MSB LSB 复位值 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0000 0000B GATE C/T M1 M0 GATE C/T M1 M0 - - - - - - 0000 0000B 0000 0000B 0000 0000B 0000 0000B 0000 0000B 00xx xxxxB T0x12 T1x12 - EX4 EX3 EX2 - 总机:0513-5501 2928 / 2929 / 2966 - T1CLKO T0CLKO x000 xx00B 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1. 定时器/计数器控制寄存器TCON TCON为定时器/计数器T0、T1的控制寄存器,同时也锁存T0、T1溢出中断源和外部请求 中断源等,TCON格式如下: TCON : 定时器/计数器中断控制寄存器 (可位寻址) SFR name TCON Address 88H bit name B7 TF1 B6 TR1 B5 TF0 B4 TR0 B3 IE1 B2 IT1 B1 IE0 B0 IT0 TF1: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置 “1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”(也可由 查询软件清“0”)。 TR1: 定时器T1的运行控制位。该位由软件置位和清零。当GATE(TMOD.7)=0,TR1=1时就 允许T1开始计数,TR1=0时禁止T1计数。当GATE(TMOD.7)=1,TR1=1且INT1输入 高电平时,才允许T1计数。 . d e t i m TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置 “1”TF0,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0(也可由查询 软件清0)。 U C M Li TR0: 定时器T0的运行控制位。该位由软件置位和清零。当GATE(TMOD.3)=0,TR0=1时就 允许T0开始计数,TR0=0时禁止T0计数。当GATE(TMOD.3)=1,TR1=0且INT0输入 高电平时,才允许T0计数。 C T S IE1:外部中断1请求源(INT1/P3.3)标志。IE1=1,外部中断向CPU请求中断,当CPU响应该 中断时由硬件清“0”IE1。 IT1:外部中断源1触发控制位。IT1=0,上升沿或下降沿均可触发外部中断1。IT1=1,外部中 断1程控为下降沿触发方式。 IE0:外部中断0请求源(INT0/P3.2)标志。IE0=1外部中断0向CPU请求中断,当CPU响应外 部中断时,由硬件清“0”IE0(边沿触发方式)。 IT0:外部中断源0触发控制位。IT0=0,上升沿或下降沿均可触发外部中断0。IT0=1,外部中 断0程控为下降沿触发方式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 189 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 定时器����������� /���������� 计数器工作模式寄存器TMOD 定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,TMOD寄存器的各位信 息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2个 定时/计数器的模式0、1和2都相同,模式3不同,各模式下的功能如下所述。 寄存器TMOD各位的功能描述 TMOD 地址:89H 不可位寻址 7 复位值:00H 6 GATE 5 C/T M1 4 3 M0 GATE C/T M1 0 M0 . d e t i m 定时器0 定时器1 位 2 1 符号 GATE 功能 TMOD.7控制定时器1,置1时只有在INT1脚为高及TR1控制位置1 时才可打开定时器/计数器1。 TMOD.3/ GATE TMOD.3控制定时器0,置1时只有在INT0脚为高及TR0控制位置1 时才可打开定时器/计数器0。 TMOD.6/ C/T TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器 (从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入) TMOD.7/ C T S TMOD.2/ C/T TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器 (从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入) TMOD.5/TMOD.4 M1、M0 0 0 0 1 1 0 1 1 TMOD.1/TMOD.0 M1、M0 0 190 0 0 1 1 0 1 1 U C M Li 南通国芯微电子有限公司 定时器定时器/计数器1模式选择 16位自动重装定时器,当溢出时将RL_TH1和RL_TL1存放的值自 动重装入TH1和TL1中。 16位定时器/计数器,TL1、TH1全用 8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1 定时器/计数器1此时无效(停止计数)。 定时器/计数器0模式选择 16位自动重装定时器,当溢出时将RL_TH0和RL_TL0存放的值自 动重装入TH0和TL0中。 16位定时器/计数器,TL0、TH0全用 8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0 定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时 器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个 8位定时器,由定时器1的控制位控制。 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 3. 辅助寄存器AUXR STC15F204EA系列���� 单片机� 是 1T 的8051单片机,为兼容传统8051,定时器0和定时器1复位 后是传统8051的速度,即12分频,这是为了兼容传统8051。但也可不进行12分频,通过设置新 增加的特殊功能寄存器AUXR,将T0,T1设置为1T。普通111条机器指令����������� 执行速度������� 是固定的,快3 到24倍,无法改变。 AUXR格式如下: AUXR : 辅助寄存器 SFR name AUXR Address 8EH bit name B7 T0x12 B6 T1x12 B5 - B4 - B3 - B2 - B1 - B0 - . d e t i m T0x12: 0, 定时器0是传统8051速度,12分频;1, 定时器0的速度是传统8051的12倍,不分频 T1x12: 0, 定时器1是传统8051速度,12分频;1, 定时器1的速度是传统8051的12倍,不分频 C T S U C M Li 4. T0和T1的时钟输出寄存器和外部中断允许INT_CLKO CLKOUT0/P3.5和CLKOUT1/P3.4的时钟输出控制由INT_CLKO寄存器的T0CLKO位和 T1CLKO位控制� 。CLKOUT0的输出时钟频率由定时器0控制,CLKOUT1的输出时钟频率由定时 器1控制,相应的定时器需要工作在定时器的�������������������������� 模式������������������������ 0(16�������������������� 位自动重装模式������������� )������������ 或����������� 模式2(8位自动重装载 模式),不要允许相应的定时器中断,免得CPU反复进中断. 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 191 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 INT_CLKO格式如下: INT_CLKO : 外部中断允许和时钟输出寄存器 SFR name Address bit B7 B6 B5 B4 B3 B2 INT_CLKO 8FH name - EX4 EX3 EX2 - - B1 B0 T1CLKO T0CLKO T1CLKO : 1,� 将P3.4/T0管脚配置为定时器1的时钟输出CLKOUT1,输出时钟频率= T1溢出� 率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 若定时器/计数器T1工作在模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: . d e t i m T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 Li 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 0,不允许P3.4/T0管脚被配置为定时器1的时钟输出 U C M T0CLKO : 1,���������������������� 将��������������������� P3.5����������������� /T1管脚配置为定时器0的时钟输出CLKOUT0,输出时钟频率 = T0溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 C T S T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 若定时器/计数器T0工作在定时器模式2(8位自动重装模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 0,不允许P3.5/T1管脚被配置为定时器0的时钟输出 EX4 : 外部中断4(INT4)中断允许位,EX4=1允许中断,EX4=0禁止中断。外部中断4(INT4)只 能下降沿触发。 EX3 : 外部中断3(INT3)中断允许位,EX3=1允许中断,EX3=0禁止中断。外部中断3(INT3)也 只能下降沿触发。 EX2 : 外部中断2(INT2)中断允许位,EX2=1允许中断,EX2=0禁止中断。外部中断2(INT2)同 样只能下降沿触发。 192 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.2 定时器/计数器0工作模式 通过对寄存器TMOD中的M1(TMOD.1)、M0(TMOD.0)的设置,定时器/计数器0有4种不同的 工作模式 7.2.1 模式0(16位自动重装)及测试程序,建议只学习此模式足矣 此模式下定时器��������������������������� /�������������������������� 计数器����������������������� 0���������������������� 作为可自动重装载的������������� 16����������� 位计数器,如下图所示。 AUXR.7/T0x12=0 ÷12 TF0 SYSclk ÷1 AUXR.7/T0x12=1 C/T=0 TL0 (8 bits) C/T=1 T0 Pin TR0 GATE Toggle TH0 (8 bits) . d e t i m control CLKOUT0 P3.5 RL_TL0 (8 bits) INT0 Interrupt RL_TH0 (8 bits) Li T0CLKO 定时器/计数器0的模式 0: 16位自动重装 U C M 当������� GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定 时器0,这样可实现脉宽测量。TR0为TCON 寄存器内的控制位,TCON寄存器各位的具体功能描 述�������������� 见上节����������� TCON寄存器���� 的介绍� 。 C T S 当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。 STC15F204EA������������������������������������ 系列单片机的定时器有两种计数速率:一种是���������������� 12T������������� 模式,每��������� 12������� 个时钟加��� 1�� ,与 传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T0������������������������������������������������� 的速率由特殊功能寄存器�������������������������������������� AUXR���������������������������������� 中的�������������������������������� T0x12��������������������������� 决定,如果���������������������� T0x12=0��������������� ,�������������� T0������������ 则工作在�������� 12T����� 模式;如果 T0x12=1������������ ,����������� T0��������� 则工作在����� 1T��� 模式。 定时器0有�������� 2������� 个隐藏的寄存器RL_TH0和RL_TL0。RL_TH0与����������� TH0�������� 共有同一个地址,RL_TL0 与TL0共有同一个地址。当TR0=0即定时器/计数器0被禁止工作时,对TL0写入的内容会同时 写入RL_TL0,对TH0写入的内容也会同时写入RL_TH0。当TR0=1即定时器/计数器0被允许工作 时,,对TL0写入的内容不会写入RL_TL0,对TH0写入的内容不会写入RL_TH0。这样可以巧妙地 实现16位重装载定时器。 当定时器������ 0����� 工作在模式0(TMOD[1:0]/[M1,M0]=00B)时,���������������� [TL0,TH0]������� 的溢出不仅置位TF0,而 且会自动将[RL_TL0,RL_TH0]的内容重新装入[TL0,TH0]。 当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器0的时钟输出CLKOUT0。 输出时钟频率 = T0 溢出率/2 如果C/T=0,定时器/计数器T0对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出���� 时钟�� 频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH0, RL_TL0])/2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 193 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 定时器0的16位自动重装模式的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器0的16位自动重装模式 ----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; //----------------------------------------------/* define constants */ #define SYSclk 18432000L #define MODE1T C T S U C M Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE1T #define T1MS (65536-SYSclk/1000) //1ms timer calculation method in 1T mode #else #define T1MS (65536-SYSclk/12/1000) //1ms timer calculation method in 12T mode #endif /* define SFR */ sfr AUXR = 0x8e; sbit TEST_LED = P0^0; /* define variables */ WORD count; //Auxiliary register //work LED, flash once per second //1000 times counter //----------------------------------------------/* Timer0 interrupt routine */ void tm0_isr() interrupt 1 using 1 { if (count-- == 0) { count = 1000; TEST_LED = ! TEST_LED; } } 194 南通国芯微电子有限公司 //1ms * 1000 -> 1s //reset counter //work LED flash 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //----------------------------------------------/* main program */ void main() { #ifdef MODE1T AUXR = 0x80; #endif TMOD = 0x00; TL0 = T1MS; TH0 = T1MS >> 8; TR0 = 1; ET0 = 1; EA = 1; count = 0; } while (1); //timer0 work in 1T mode //set timer0 as mode0 (16-bit auto-reload) //initial timer0 low byte //initial timer0 high byte //timer0 start running //enable timer0 interrupt //open global interrupt switch //initial counter . d e t i m //loop 2. 汇编程序: U C M Li /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器0的16位自动重装模式 ----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ C T S ;/* define constants */ #define MODE1T #ifdef MODE1T T1MS EQU 0B800H #else T1MS EQU 0FA00H #endif ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode ;1ms timer calculation method in 1T mode is (65536-18432000/1000) ;1ms timer calculation method in 12T mode is (65536-18432000/12/1000) ;/* define SFR */ AUXR DATA 8EH TEST_LED BIT P1.0 ;Auxiliary register ;work LED, flash once per second ;/* define variables */ COUNT DATA 20H ;1000 times counter (2 bytes) 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 195 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;---------------------------------------------- ORG LJMP ORG LJMP 0000H MAIN 000BH TM0_ISR ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #80H #endif MOV TMOD, #00H MOV TL0, #LOW T1MS MOV TH0, #HIGH T1MS SETB TR0 SETB ET0 SETB EA CLR A MOV COUNT, A MOV COUNT+1, A SJMP $ C T S ;timer0 work in 1T mode ;set timer0 as mode0 (16-bit auto-reload) ;initial timer0 low byte ;initial timer0 high byte ;timer0 start running ;enable timer0 interrupt ;open global interrupt switch U C M ;----------------------------------------------;/* Timer0 interrupt routine */ TM0_ISR: PUSH ACC PUSH PSW 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 . d e t i m Li ;initial counter ;check whether count(2byte) is equal to 0 ;1ms * 1000 -> 1s ;work LED flash ;count-- ;---------------------------------------------- END 196 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.2.2 模式1(16位定时器),不建议学习 此模式下定时器�������������������� /������������������� 计数器���������������� 0��������������� 作为������������� 16����������� 位定时器,如下图所示。 ÷12 AUXR.7/T0x12=0 SYSclk ÷1 AUXR.7/T0x12=1 C/T=0 C/T=1 T0 Pin TR0 TL0 TH0 (8 Bits) (8 bits) TF0 Interrupt control GATE INT0 . d e t i m 定时器/计数器0的模式 1: 16位定时器 此模式下,定时器0配置为���������������������������������� 16�������������������������������� 位的计数器,由������������������������� TL0���������������������� 的��������������������� 8�������������������� 位和������������������ TH0��������������� 的�������������� 8������������� 位所构成。�������� TL0����� 的8位溢出 向������������������������������ TH0��������������������������� 进位,������������������������ TH0��������������������� 计数溢出置位��������������� TCON����������� 中的溢出标志位���� TF0� 。 Li 当������� GATE=0(TMOD.3)时,如TR0=1,则定时器计数。GATE=1时,允许由外部输入INT0控制定 时器0,这样可实现脉宽测量。TR0为TCON寄存器内的控制位,TCON寄存器各位的具体功能描述 见上节����������� TCON寄存器���� 的介绍� 。 U C M 当C/T=0时,多路开关连接到系统时钟的分频输出,T0对内部系统时钟计数,T0工作在定 时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。 C T S STC15F204EA系列单片机的定时器有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T0������������������������������������������������� 的速率由特殊功能寄存器�������������������������������������� AUXR���������������������������������� 中的�������������������������������� T0x12��������������������������� 决定,如果���������������������� T0x12=0��������������� ,�������������� T0������������ 则工作在�������� 12T����� 模式;如果 T0x12=1������������ ,����������� T0��������� 则工作在����� 1T��� 模式。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 197 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.2.3 模式2(8位自动重装模式),不建议学习 此模式下定时器�������������������������� /������������������������� 计数器���������������������� 0��������������������� 作为可自动重装载的������������ 8����������� 位计数器,如下图所示。 AUXR.7/T0x12=0 ÷12 Interrupt TF0 SYSclk ÷1 AUXR.7/T0x12=1 Toggle C/T=0 TL0 (8 Bits) C/T=1 T0 Pin TR0 CLKOUT0 control GATE P3.5 TH0 (8 Bits) T0CLKO INT0 . d e t i m 定时器/计数器0的模式 2: 8位自动重装 Li TL0��������������������������������������������� 的溢出不仅置位�������������������������������������� TF0����������������������������������� ,而且将������������������������������� TH0���������������������������� 内容重新装入���������������������� TL0������������������� ,������������������ TH0��������������� 内容由软件预置,重装时���� TH0� 内 容不变。 U C M 当T0CLKO/INT_CLKO.0=1时,P3.5/T1管脚配置为定时器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 198 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站: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 SYSclk C T S ÷1 TH0 (8 Bits) AUXR.7/T0x12=0 TR1 TF1 Interrupt control 定时/计数器0 模式3: 两个8位计数器 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 199 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.3 定时器/计数器1工作模式 通过对寄存器TMOD中的M1(TMOD.5)、M0(TMOD.4)的设置,定时器/计数器1有3种不同的 工作模式 7.3.1 模式0(16位自动重装)及测试程序,建议只学习此模式足矣 此模式下定时器��������������������������� /�������������������������� 计数器����������������������� 1���������������������� 作为可自动重装载的������������� 16����������� 位计数器,如下图所示。 AUXR.6/T1x12=0 ÷12 TF1 SYSclk ÷1 AUXR.6/T1x12=1 C/T=0 TL1 (8 bits) C/T=1 T1 Pin TR1 GATE Toggle TH1 (8 bits) . d e t i m control CLKOUT1 P3.4 RL_TL1 (8 bits) INT1 Interrupt Li RL_TH1 (8 bits) T1CLKO 定时器/计数器1的模式 0: 16位自动重装 U C M 当������� 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工作在计数方式。 STC15F204EA系列单片机的定时器有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T1������������������������������������������������� 的速率由特殊功能寄存器�������������������������������������� AUXR���������������������������������� 中的�������������������������������� T1x12��������������������������� 决定,如果���������������������� T1x12=0��������������� ,�������������� T1������������ 则工作在�������� 12T����� 模式;如果 T1x12=1������������ ,����������� T1��������� 则工作在����� 1T��� 模式。 定时器1有�������� 2������� 个隐藏的寄存器RL_TH1和RL_TL1。RL_TH1与����������� TH1�������� 共有同一个地址,RL_TL1 与TL1共有同一个地址。当TR1=0即定时器/计数器1被禁止工作时,对TL1写入的内容会同时 写入RL_TL1,对TH1写入的内容也会同时写入RL_TH1。当TR1=1即定时器/计数器1被允许工作 时,,对TL1写入的内容不会写入RL_TL1,对TH1写入的内容不会写入RL_TH1。这样可以巧妙地 实现16位重装载定时器。 当定时器������ 1����� 工作在模式0(TMOD[5:4]/[M1,M0]=00B)时,���������������� [TL1,TH1]������� 的溢出不仅置位TF1,而 且会自动将[RL_TL1,RL_TH1]的内容重新装入[TL1,TH1]。 当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出CLKOUT1。 输出时钟频率 = T1 溢出率/2 如果C/T=0,定时器/计数器T1对内部系统时钟计数,则 T1工作在1T模式(AUXR.6/T1x12=1)时的输出���� 时钟�� 频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出���� 时钟�� 频率=(SYSclk)/12/(65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 200 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 定时器1的16位自动重装模式的测试程序 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的16位自动重装模式 ----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m #include "reg51.h" typedef unsigned char BYTE; typedef unsigned int WORD; //----------------------------------------------/* define constants */ #define SYSclk 18432000L #define MODE1T //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode C T S #ifdef MODE1T #define T1MS (65536-SYSclk/1000) #else #define T1MS (65536-SYSclk/12/1000) #endif /* define SFR */ sfr AUXR = 0x8e; sbit TEST_LED = P0^0; /* define variables */ WORD count; U C M Li //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 //----------------------------------------------/* Timer1 interrupt routine */ void tm1_isr() interrupt 3 using 1 { if (count-- == 0) { count = 1000; TEST_LED = ! TEST_LED; } } 南通国芯微电子有限公司 //1ms * 1000 -> 1s //reset counter //work LED flash 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 201 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //----------------------------------------------/* main program */ void main() { #ifdef MODE1T AUXR = 0x40; #endif TMOD = 0x00; TL1 = T1MS; TH1 = T1MS >> 8; TR1 = 1; ET1 = 1; EA = 1; count = 0; } while (1); //timer1 work in 1T mode //set timer1 as mode0 (16-bit auto-reload) //initial timer1 low byte //initial timer1 high byte //timer1 start running //enable timer1 interrupt //open global interrupt switch //initial counter . d e t i m //loop 2. 汇编程序: U C M Li /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的16位自动重装模式 ----------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ C T S ;/* define constants */ #define MODE1T #ifdef MODE1T T1MS EQU 0B800H #else T1MS EQU 0FA00H #endif ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode ;1ms timer calculation method in 1T mode is (65536-18432000/1000) ;1ms timer calculation method in 12T mode is (65536-18432000/12/1000) ;/* define SFR */ AUXR DATA 8EH TEST_LED BIT P1.0 ;Auxiliary register ;work LED, flash once per second ;/* define variables */ COUNT DATA 20H ;1000 times counter (2 bytes) 202 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;---------------------------------------------- ORG 0000H LJMP MAIN ORG 001BH LJMP TM1_ISR ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #40H #endif MOV TMOD, #00H MOV TL1, #LOW T1MS MOV TH1, #HIGH T1MS SETB TR1 SETB ET1 SETB EA CLR A MOV COUNT, A MOV COUNT+1, A SJMP $ ;----------------------------------------------- C T S ;timer1 work in 1T mode U C M ;/* Timer1 interrupt routine */ TM1_ISR: PUSH ACC PUSH PSW 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 ;---------------------------------------------- ;set timer1 as mode0 (16-bit auto-reload) ;initial timer1 low byte ;initial timer1 high byte ;timer1 start running ;enable timer1 interrupt ;open global interrupt switch . d e t i m Li ;initial counter ;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 203 STC15F204EA系列单片机指南 技术支持网站: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工作在计数方式。 STC15F204EA系列单片机的定时器有两种计数速率:一种是��������������� 12T������������ 模式,每�������� 12������ 个时钟加�� 1� , 与传统�������������������������������������������� 8051���������������������������������������� 单片机相同;另外一种是����������������������������� 1T��������������������������� 模式,每个时钟加������������������� 1������������������ ,速度是传统������������ 8051�������� 单片机的���� 12�� 倍。 T1������������������������������������������������� 的速率由特殊功能寄存器�������������������������������������� AUXR���������������������������������� 中的�������������������������������� T1x12��������������������������� 决定,如果���������������������� T1x12=0��������������� ,�������������� T1������������ 则工作在�������� 12T����� 模式;如果 T1x12=1������������ ,����������� T1��������� 则工作在����� 1T��� 模式。 204 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.3.3 模式2(8位自动重装模式),不建议学习 此模式下定时器�������������������������� /������������������������� 计数器���������������������� 1��������������������� 作为可自动重装载的������������ 8����������� 位计数器,如下图所示。 AUXR.6/T1x12=0 ÷12 TF1 Interrupt SYSclk ÷1 AUXR.6/T1x12=1 Toggle C/T=0 TL1 (8 Bits) C/T=1 T1 Pin TR1 CLKOUT1 control GATE P3.4 T1CLKO TH1 (8 Bits) INT1 . d e t i m 定时器/计数器1的模式 2: 8位自动重装 Li TL1��������������������������������������������� 的溢出不仅置位�������������������������������������� TF1����������������������������������� ,而且将������������������������������� TH1���������������������������� 内容重新装入���������������������� TL1������������������� ,������������������ TH1��������������� 内容由软件预置,重装时���� TH1� 内 容不变。 U C M 当T1CLKO/INT_CLKO.1=1时,P3.4/T0管脚配置为定时器1的时钟输出CLKOUT1。 ������ 输出时钟频率 = 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 205 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4 可编程时钟输出 STC15F204EA系列有3路可编程时钟输出:IRC_CLKO/P0.0,CLKOUT0/P3.5,CLKOUT1/P3.4 只有内部R/C时钟频率为12MHz以下时,现版本才能正常输出。 IRC_CLKO : Internal R/C clock output register SFR Name SFR Address bit B7 B6 B5 B4 B3 B2 B1 B0 IRC_CLKO BBH name EN_IRCO - - - DIVIRCO - - - 如何利用IRC_CLKO/P0.0管脚输出时钟 IRC_CLKO/P0.0的时钟输出控制由IRC_CLKO寄存器的EN_IRCO位控制。设置EN_IRCO (IRC_CLKO.7)可将IRC_CLKO/P0.0管脚配置为内部R/C振荡时钟输出。通过设置DIVIRCO (IRC_CLKO.3)位可以设置内部R/C振荡时钟的输出频率是IRC_CLK/2还是IRC_CLK/1(不分频) 新增加的特殊功能寄存器: IRC_CLKO (地址:0xBB) B7 - EN_IRCO : 1,� 将IRC_CLKO/P0.0管脚配置为内部R/C振荡时钟输出 0,不允许IRC_CLKO/P0.0管脚配置为内部R/C振荡时钟输出 B3 - DIVIRCO : 1,�� 内部R/C振荡时钟的输出频率被2分频�������� ,输出时钟频率 = IRC_CLK/2 0,�� 内部R/C振荡时钟的输出频率不被分频,输出时钟频率 = IRC_CLK/1 IRC_CLKO指内部R/C振荡时钟输出;IRC_CLK指内部R/C振荡时钟频率。 C T S . d e t i m Li U C M INT_CLKO : External Interrupt Enable and Clock Output register SFR Name SFR Address bit B7 B6 B5 B4 B3 B2 INT_CLKO 8FH name - EX4 EX3 EX2 - - B1 B0 T1CLKO T0CLKO 如何利用CLKOUT0/P3.5和CLKOUT1/P3.4管脚输出时钟 如何利用CLKOUT0/P3.5和CLKOUT1/P3.4管脚输出时钟 CLKOUT0/P3.5管脚是否����� 输出时钟由INT_CLKO寄存器的T0CLKO位控制 B0 - T0CLKO : 1,������ 允许时钟输出 0,������ 禁止时钟输出 CLKOUT1/P3.4管脚是否����� 输出时钟由INT_CLKO寄存器的T1CLKO位控制 B1 - T1CLKO : 1,������ 允许时钟输出 0,������ 禁止时钟输出 CLKOUT0的输出时钟频率由定时器0控制,CLKOUT1的输出时钟频率由定时器1控制,相应的 定时器需要工作在定时器的���������������������������������� 模式0(16位自动重装模式)或������������������� 模式2(8位自动重装载模式),不要允许 相应的定时器中断,免得CPU反复进中断. 新增加的特殊功能寄存器: INT_CLKO (地址:0x8F) B6 - EX4 : �������� 允许外部中断4(INT4)� 。 B5 - EX3 : �������� 允许外部中断3(INT3)� 。 B4 - EX2 : �������� 允许外部中断2(INT2)� 。 206 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 B1 - T1CLKO : 1,� 将P3.4/T0管脚配置为定时器1的时钟输出CLKOUT1,输出时钟频率= T1溢出� 率/2 若定时器/计数器T1工作在定时器模式0(16位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH1, RL_TL1])/2 T1工作在12T模式(AUXR.6/T1x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH1, RL_TL1])/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (65536-[RL_TH1, RL_TL1])/2 若定时器/计数器T1工作在模式2(8位自动重装模式), 如果C/T=0,定时器/计数器T1是对内部系统时钟计数,则: T1工作在1T模式(AUXR.6/T1x12=1)时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在12T模式���������������������� (AUXR.6/T1x12=0)������ 时的输出频率 = (SYSclk)/12/(256-TH1)/2 如果C/T=1,定时器/计数器T1是对外部脉冲输入(P3.5/T1)计数,则: 输出���� 时钟�� 频率 = (T1_Pin_CLK) / (256-TH1) / 2 0,不允许P3.4/T0管脚被配置为定时器1的时钟输出 . d e t i m Li B0 - T0CLKO : 1,���������������������� 将��������������������� P3.5����������������� /T1管脚配置为定时器0的时钟输出CLKOUT0,输出时钟频率 = T0溢出率/2 若定时器/计数器T0工作在定时器模式0(16位自动重装模式)时, 如果C/T=0,定时器/计数器T0是对内部系统时钟计数,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk)/(65536-[RL_TH0, RL_TL0])/2 U C M T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) /12/ (65536-[RL_TH0, RL_TL0])/2 C T S 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (65536-[RL_TH0, RL_TL0])/2 若定时器/计数器T0工作在定时器模式2(8位自动重装模式),如果C/T=0,则: T0工作在1T模式(AUXR.7/T0x12=1)时的输出频率 = (SYSclk) / (256-TH0) / 2 T0工作在12T模式(AUXR.7/T0x12=0)时的输出频率 = (SYSclk) / 12 / (256-TH0) / 2 如果C/T=1,定时器/计数器T0是对外部脉冲输入(P3.4/T0)计数,则: 输出���� 时钟�� 频率 = (T0_Pin_CLK) / (256-TH0) / 2 0,不允许P3.5/T1管脚被配置为定时器0的时钟输出 AUXR : Auxiliary register SFR Name SFR Address AUXR 8EH bit name B7 T0x12 B6 T1x12 B5 - B4 - B3 - B2 - B1 - B0 - AUXR (地址:0x8E) T0x12: 0, 定时器0是传统8051速度,12分频; 1, 定时器0的速度是传统8051的12倍,不分频 T1x12: 0, 定时器1是传统8051速度,12分频; 1, 定时器1的速度是传统8051的12倍,不分频 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 207 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 特殊功能寄存器IRC_CLKO/INT_CLKO/AUXR的C语言声明: sfr IRC_CLKO = 0xBB; ������������� //新增加的特殊功能寄存器IRC_CLKO的地址声明 sfr INT_CLKO = 0x8F; //����������� 新增加的特殊功能寄存器INT_CLKO的地址声明 sfr AUXR = 0x8E; //������� 特殊功能寄存器AUXR的地址声明 特殊功能寄存器IRC_CLKO/INT_CLKO/AUXR的汇编语言声明: IRC_CLKO EQU 0BBH ;新增加的特殊功能寄存器IRC_CLKO的地址声明 INT_CLKO EQU 8FH ;新增加的特殊功能寄存器INT_CLKO的地址声明 AUXR EQU 8EH ;特殊功能寄存器AUXR的地址声明 . d e t i m 7.4.1 内部R/C时钟输出的测试程序(C程序和汇编程序) 1. C程序: Li /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机的内部R/C时钟输出 ----------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ C T S sfr IRC_CLKO = 0xbb; U C M //EN_IRCO - - - DIVIRCO - - - //----------------------------------------void main() { IRC_CLKO = 0x80; // IRC_CLKO = 0x88; } 208 //1000,0000 P0.0 output clock signal which frequency is SYSclk //1000,1000 P0.0 output clock signal which frequency is SYSclk/2 while (1); 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机的内部R/C时钟输出 ----------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ IRC_CLKO DATA 0BBH ;----------------------------------------;interrupt vector table . d e t i m ;EN_IRCO - - - DIVIRCO - - - ORG 0000H LJMP MAIN ;----------------------------------------- C T S ORG 0100H MAIN: MOV SP,#7FH MOV IRC_CLKO, #80H ; MOV IRC_CLKO,#88H SJMP $ U C M Li ;initial SP ;1000,0000 P0.0 output clock signal which frequency is SYSclk ;1000,1000 ;P0.0 output clock signal which frequency is SYSclk/2 ;---------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 209 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4.2 定时器0的可编程时钟输出的测试程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器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 SYSclk 18432000L //#define MODE1T Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode U C M #ifdef MODE1T #define F38_4KHz (65536-SYSclk/2/38400) //38.4KHz frequency calculation method of 1T mode #else #define F38_4KHz (65536-SYSclk/2/12/38400) //38.4KHz frequency calculation method of 12T mode #endif C T S /* define SFR */ sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; sbit T0CLKO = P3^5; //Auxiliary register //External interrupt enable and clock output control register //timer0 clock output pin //----------------------------------------------/* main program */ void main() { #ifdef MODE1T AUXR = 0x80; #endif TMOD = 0x00; TL0 = F38_4KHz; TH0 = F38_4KHz >> 8; TR0 = 1; INT_CLKO = 0x01; while (1); } 210 南通国芯微电子有限公司 //timer0 work in 1T mode //set timer0 as mode0 (16-bit auto-reload) //initial timer0 low byte //initial timer0 high byte //timer0 start running //enable timer0 clock output //loop 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器0的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/* define constants */ #define MODE1T ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode . d e t i m #ifdef MODE1T F38_4KHz EQU 0FF10H ;38.4KHz frequency calculation method of 1T mode is (65536-18432000/2/38400) #else F38_4KHz EQU 0FFECH ;38.4KHz frequency calculation method of 12T mode(65536-18432000/2/12/38400) #endif ;/* define SFR */ AUXR INT_CLKO T0CLKO DATA 08EH DATA 08FH BIT P3.5 C T S U C M Li ;Auxiliary register ;External interrupt enable and clock output control register ;timer0 clock output pin ;---------------------------------------------- ORG 0000H LJMP MAIN ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #80H #endif MOV TMOD, #00H MOV TL0, #LOW F38_4KHz MOV TH0, #HIGH F38_4KHz SETB TR0 MOV INT_CLKO, #01H ;timer0 work in 1T mode ;set timer0 as mode0 (16-bit auto-reload) ;initial timer0 low byte ;initial timer0 high byte ;enable timer0 clock output SJMP $ ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 211 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.4.3 定时器1的可编程时钟输出的测试程序(C程序和汇编程序) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器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 SYSclk 18432000L //#define MODE1T U C M Li //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE1T #define F38_4KHz (65536-SYSclk/2/38400) //38.4KHz frequency calculation method of 1T mode #else #define F38_4KHz (65536-SYSclk/2/12/38400) //38.4KHz frequency calculation method of 12T mode #endif C T S /* define SFR */ sfr AUXR = 0x8e; sfr INT_CLKO = 0x8f; sbit T1CLKO = P3^4; //Auxiliary register //External interrupt enable and clock output control register //timer1 clock output pin //----------------------------------------------/* main program */ void main() { #ifdef MODE1T AUXR = 0x40; #endif TMOD = 0x00; TL1 = F38_4KHz; TH1 = F38_4KHz >> 8; TR1 = 1; INT_CLKO = 0x02; } while (1); 212 南通国芯微电子有限公司 //timer1 work in 1T mode //set timer1 as mode0 (16-bit auto-reload) //initial timer1 low byte //initial timer1 high byte //timer1 start running //enable timer1 clock output //loop 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机定时器1的可编程时钟输-----------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;/* define constants */ #define MODE1T ;Timer clock mode, comment this line is 12T mode, uncomment is 1T mode #ifdef MODE1T F38_4KHz EQU 0FF10H #else F38_4KHz EQU 0FFECH 2/38400) #endif ;/* define SFR */ AUXR INT_CLKO T1CLKO . d e t i m ;38.4KHz frequency calculation method of 1T mode is (65536-18432000/2/38400) Li ;38.4KHz frequency calculation method of 12T mode (65536-18432000/2/1 DATA 08EH DATA 08FH BIT P3.4 C T S U C M ;Auxiliary register ;External interrupt enable and clock output control register ;timer1 clock output pin ;---------------------------------------------- ORG 0000H LJMP MAIN ;----------------------------------------------;/* main program */ MAIN: #ifdef MODE1T MOV AUXR, #40H #endif MOV TMOD, #00H MOV TL1, #LOW F38_4KHz MOV TH1, #HIGH F38_4KHz SETB TR1 MOV INT_CLKO, #02H ;timer1 work in 1T mode ;set timer1 as mode0 (16-bit auto-reload) ;initial timer1 low byte ;initial timer1 high byte ;enable timer1 clock output SJMP $ ;---------------------------------------------- END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 213 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 7.5 古老的Intel 8051单片机定时器0/1应用举例 【例1】 定时/计数器应用编程,设某应用系统,选择定时/计数器1定时模式,定时时间Tc = 10ms,主频频率为12MHz,每10ms向主机请求处理。选定工作方式1。计算得计数初值:低8 位初值为F0H,高8位初值为D8H。 (1)初始化程序 … 所谓初始化,一般在主程序中根据应用要求对定时/计数器进行功能选择及参数设定等预置 程序,本例初始化程序如下: START: ;���� 主程序段 MOV SP,#60H ;设置堆栈区域 MOV TMOD,#10H ;选择T1、定时模式,工作方式1 MOV TH1,#0D8H ;设置高字节计数初值 MOV TL1,#0F0H ;设置低字节计数初值 SETB EA SETB ET1 C T S SETB TR1 (2)中断服务程序 INTT1: PUSH L}i ; ; 开中断 � ;其他初始化程序 ;启动T1开始计时 ;������ 继续主程序 … U C M … . d e t i m A ; PUSH DPL PUSH DPH MOV TL1,#0F0H MOV TH1,#0D8H POP DPH POP DPL POP A } RETI ;返回 } ; 现场保护 … … ; 214 南通国芯微电子有限公司 ; } ; 重新置初值 ;中断处理主体程序 ; ; 现场恢复 ; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 这里展示了中断服务子程序的基本格式。STC15F204EA系列单片机的中断属于矢量中断, 每一个矢量中断源只留有8个字节单元,一般是不够用的,常需用转移指令转到真正的中断服 务子程序区去执行。 【例2】 利用定时/计数器0或定时/计数器1的Tx端口改造成外部中断源输入端口的应用设计。 在某些应用系统中常会出现原有的两个外部中断源INT0和INT1不够用,而定时/计数器有 多余,则可将Tx用于增加的外部中断源。现选择定时/计数器1为对外部事件计数模式工作方式 2(自动再装入),设置计数初值为FFH,则T1端口输入一个负跳变脉冲,计数器即回0溢出, 置位对应的中断请求标志位TF1为1,向主机请求中断处理,从而达到了增加一个外部中断源的 目的。应用定时/计数器1(T1)的中断矢量转入中断服务程序处理。其程序示例如下: . d e t i m (1)主程序段: ORG 0000H AJMP MAIN ORG 001BH LJMP INTER ORG … C T S 0100 … MAIN: … ;转主程序 U C M Li ;转T1中断服务程序 ;主程序入口 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 215 STC15F204EA系列单片机指南 技术支持网站: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 ;启动 216 … … 38H。 南通国芯微电子有限公司 ; 开中断 ; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站: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 217 STC15F204EA系列单片机指南 技术支持网站: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中 218 … 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第8章 模拟串口的实现程序 8.1 利用定时器0实现模拟串口的测试程序(C程序和汇编程序) ----定时器0工作在16位自动重装模式 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机利用定时器0实现模拟串口功能--------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" U C M . d e t i m Li //define baudrate const //BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (SYSclk/3/BAUDRATE) must be greater than 98, (RECOMMEND GREATER THAN 110) C T S //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFFA0 // 1200bps @ 11.0592MHz // 2400bps @ 11.0592MHz // 4800bps @ 11.0592MHz // 9600bps @ 11.0592MHz //19200bps @ 11.0592MHz //38400bps @ 11.0592MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD #define BAUD 0xEC00 0xF600 0xFB00 0xFD80 0xFEC0 0xFF60 // 1200bps @ 18.432MHz // 2400bps @ 18.432MHz // 4800bps @ 18.432MHz // 9600bps @ 18.432MHz //19200bps @ 18.432MHz //38400bps @ 18.432MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xE800 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFF80 // 1200bps @ 22.1184MHz // 2400bps @ 22.1184MHz // 4800bps @ 22.1184MHz // 9600bps @ 22.1184MHz //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 219 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com sfr AUXR = 0x8E; sbit RXB = P3^0; sbit TXB = P3^1; 临时技术支持:13922829991 研发顾问:13922809991 //define UART TX/RX port typedef bit BOOL; typedef unsigned char BYTE; typedef unsigned int WORD; BYTE TBUF,RBUF; BYTE TDAT,RDAT; BYTE TCNT,RCNT; BYTE TBIT,RBIT; BOOL TING,RING; BOOL TEND,REND; void UART_INIT(); BYTE t, r; BYTE buf[16]; void main() { TMOD = 0x00; AUXR = 0x80; TL0 = BAUD; TH0 = BAUD>>8; TR0 = 1; ET0 = 1; PT0 = 1; EA = 1; C T S U C M . d e t i m Li //timer0 in 16-bit auto reload mode //timer0 working at 1T mode //initial timer0 and set reload value //tiemr0 start running //enable timer0 interrupt //improve timer0 interrupt priority //open global interrupt switch UART_INIT(); } while (1) { //user's function if (REND) { REND = 0; buf[r++ & 0x0f] = RBUF; } if (TEND) { if (t != r) { TEND = 0; TBUF = buf[t++ & 0x0f]; TING = 1; } } } 220 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //----------------------------------------//Timer interrupt routine for UART void tm0() interrupt 1 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //reset send baudrate counter if (--RBIT == 0) { RBUF = RDAT; //save the data to RBUF RING = 0; //stop receive REND = 1; //set receive completed flag } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //shift RX data to RX buffer } } } else if (!RXB) { RING = 1; //set start receive flag RCNT = 4; //initial receive baudrate counter RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } C T S U C M . d e t i m Li if (--TCNT == 0) { TCNT = 3; //reset send baudrate counter if (TING) //judge whether sending { if (TBIT == 0) { TXB = 0; //send start bit TDAT = TBUF; //load data from TBUF to TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 221 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 else { TDAT >>= 1; //shift data to CY if (--TBIT == 0) { TXB = 1; TING = 0; //stop send TEND = 1; //set send completed flag } else { TXB = CY; //write CY to TX port } } } } } //----------------------------------------//initial UART module variable void UART_INIT() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } 222 C T S 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机利用定时器0实现模拟串口功能--------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;----------------------------------------;define baudrate const ;BAUD = 65536 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) ;NOTE: (SYSclk/3/BAUDRATE) must be greater than 75, (RECOMMEND GREATER THAN 100) ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU EQU EQU EQU EQU EQU EQU 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FFA0H 0FFC0H ; 1200bps @ 11.0592MHz ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;57600bps @ 11.0592MHz ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU BAUD EQU 0EC00H 0F600H 0FB00H 0FD80H 0FEC0H 0FF60H 0FF95H ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD 0E800H 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FF80H ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz EQU EQU EQU EQU EQU EQU EQU C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 223 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;----------------------------------------;define UART TX/RX port RXB TXB BIT BIT P3.0 P3.1 ;----------------------------------------;define SFR AUXR DATA 8EH ;----------------------------------------;define UART module variable TBUF RBUF TDAT RDAT TCNT RCNT TBIT RBIT DATA DATA DATA DATA DATA DATA DATA DATA TING BIT MODULE) RING BIT TEND BIT REND BIT 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH . d e t i m ;(R0) ready send data buffer (USER WRITE ONLY) ;(R1) received data buffer (UAER READ ONLY) ;(R2) sending data buffer (RESERVED FOR UART MODULE) ;(R3) receiving data buffer (RESERVED FOR UART MODULE) ;(R4) send baudrate counter (RESERVED FOR UART MODULE) ;(R5) receive baudrate counter (RESERVED FOR UART MODULE) ;(R6) send bit counter (RESERVED FOR UART MODULE) ;(R7) receive bit counter (RESERVED FOR UART MODULE) U C M Li 20H.0 ; sending flag (USER WRITE "1" TO TRIGGER SEND DATA, CLEAR BY 20H.1 20H.2 20H.3 ; receiving flag (RESERVED FOR UART MODULE) ; sent flag (SET BY MODULE AND SHOULD USER CLEAR) ; received flag (SET BY MODULE AND SHOULD USER CLEAR) C T S RPTR DATA 21H WPTR DATA 22H BUFFER DATA 23H ;circular queue read pointer ;circular queue write pointer ;circular queue buffer (16 bytes) ;----------------------------------------ORG 0000H LJMP RESET ;----------------------------------------;Timer0 interrupt routine for UART ORG 000BH PUSH ACC PUSH PSW MOV PSW, #08H L_UARTSTART: ;------------------- 224 南通国芯微电子有限公司 ;4 save ACC ;4 save PSW ;3 using register group 1 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com JB RING, L_RING JB RXB, L_REND L_RSTART: SETB RING MOV R5, #4 MOV R7, #9 SJMP L_REND L_RING: DJNZ R5, L_REND MOV R5, #3 L_RBIT: MOV C, RXB MOV A, R3 RRC A MOV R3, A DJNZ R7, L_REND L_RSTOP: RLC A MOV R1, A CLR RING SETB REND L_REND: ;------------------L_TING: DJNZ R4, L_TEND MOV R4, #3 JNB TING, L_TEND MOV A, R6 JNZ L_TBIT L_TSTART: CLR TXB MOV TDAT, R0 MOV R6, #9 JMP L_TEND L_TBIT: MOV A, R2 SETB C RRC A MOV R2, A MOV TXB, C DJNZ R6, L_TEND L_TSTOP: CLR TING SETB TEND L_TEND: ;------------------L_UARTEND: POP PSW POP ACC RETI C T S 南通国芯微电子有限公司 临时技术支持:13922829991 研发顾问:13922809991 ;4 judge whether receiving ; check start signal ; ; ; ; set start receive flag initial receive baudrate counter initial receive bit number (8 data bits + 1 stop bit) end this time slice ;4 judge whether sending ;2 reset send baudrate counter ;3 read RX port data ;1 and shift it to RX buffer ;1 ;2 ;4 judge whether the data have receive completed ; ; ; ; . d e t i m shift out stop bit save the data to RBUF stop receive set receive completed flag U C M Li ;4 check send baudrate counter ;2 reset it ;4 judge whether sending ;1 detect the sent bits ;3 "0" means start bit not sent ; ; ; ; send start bit load data from TBUF to TDAT initial send bit number (8 data bits + 1 stop bit) end this time slice ;1 read data in TDAT ;1 shift in stop bit ;1 shift data to CY ;2 update TDAT ;4 write CY to TX port ;4 judge whether the data have send completed ; stop send ; set send completed flag ;3 restore PSW ;3 restore ACC ;4 (69) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 225 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;----------------------------------------;initial UART module variable UART_INIT: CLR CLR SETB CLR CLR MOV MOV RET TING RING TEND REND A TCNT, A RCNT, A . d e t i m ;----------------------------------------;main program entry RESET: MOV R0, #7FH CLR A MOV @R0, A DJNZ R0, $-1 MOV SP, #7FH ;------------------;system initial MOV TMOD, #00H MOV AUXR, #80H MOV TL0, #LOW BAUD MOV TH0, #HIGH BAUD SETB TR0 SETB ET0 SETB PT0 SETB EA LCALL UART_INIT ;----------------------------------------MAIN: JNB REND, CHECKREND CLR REND MOV A, RPTR INC RPTR ANL A, #0FH ADD A, #BUFFER MOV R0, A MOV @R0, RBUF C T S 226 南通国芯微电子有限公司 Li ;clear RAM U C M ;initial SP ;timer0 in 16-bit auto reload mode ;timer0 working at 1T mode ;initial timer0 and ;set reload value ;tiemr0 start running ;enable timer0 interrupt ;improve timer0 interrupt priority ;open global interrupt switch ;if (REND) ;{ ; REND = 0; ; BUFFER[RPTR++ & 0xf] = RBUF; ;} ; ; ; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 CHECKREND: JNB TEND, MOV A, XRL A, JZ MAIN CLR TEND MOV A, INC WPTR ANL A, ADD A, MOV R0, MOV TBUF, SETB TING SJMP MAIN 技术支持网站:www.STCMCU.com MAIN RPTR WPTR ;if (TEND) ;{ ; if (WPTR != REND) ; { ; TEND = 0; WPTR ; TBUF = BUFFER[WPTR++ & 0xf]; ; TING = 1; #0FH ; } #BUFFER ;} A ; @R0 ; ; END C T S 南通国芯微电子有限公司 研发顾问:13922809991 ;---------------------------------------- 临时技术支持:13922829991 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 227 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 8.2 利用定时器1实现模拟串口的测试程序(C程序和汇编程序) ----定时器1工作在16位自动重装模式 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机利用定时器1实现模拟串口功能--------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ #include "reg51.h" . d e t i m Li //define baudrate const //BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (SYSclk/3/BAUDRATE) must be greater than 98, (RECOMMEND GREATER THAN 110) U C M //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFFA0 // 1200bps @ 11.0592MHz // 2400bps @ 11.0592MHz // 4800bps @ 11.0592MHz // 9600bps @ 11.0592MHz //19200bps @ 11.0592MHz //38400bps @ 11.0592MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD #define BAUD 0xEC00 0xF600 0xFB00 0xFD80 0xFEC0 0xFF60 // 1200bps @ 18.432MHz // 2400bps @ 18.432MHz // 4800bps @ 18.432MHz // 9600bps @ 18.432MHz //19200bps @ 18.432MHz //38400bps @ 18.432MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xE800 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFF80 // 1200bps @ 22.1184MHz // 2400bps @ 22.1184MHz // 4800bps @ 22.1184MHz // 9600bps @ 22.1184MHz //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz 228 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 sfr AUXR = 0x8E; sbit RXB = P3^0; sbit TXB = P3^1; 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //define UART TX/RX port typedef bit BOOL; typedef unsigned char BYTE; typedef unsigned int WORD; BYTE TBUF,RBUF; BYTE TDAT,RDAT; BYTE TCNT,RCNT; BYTE TBIT,RBIT; BOOL TING,RING; BOOL TEND,REND; void UART_INIT(); BYTE t, r; BYTE buf[16]; void main() { TMOD = 0x00; AUXR = 0x40; TL1 = BAUD; TH1 = BAUD>>8; TR1 = 1; ET1 = 1; PT1 = 1; EA = 1; C T S . d e t i m Li //timer1 in 16-bit auto reload mode //timer1 working at 1T mode U C M //initial timer1 and set reload value //tiemr1 start running //enable timer1 interrupt //improve timer1 interrupt priority //open global interrupt switch UART_INIT(); while (1) { //user's function if (REND) { REND = 0; buf[r++ & 0x0f] = RBUF; } if (TEND) { if (t != r) { TEND = 0; TBUF = buf[t++ & 0x0f]; TING = 1; } } } } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 229 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //----------------------------------------//Timer interrupt routine for UART void tm1() interrupt 3 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //reset send baudrate counter if (--RBIT == 0) { RBUF = RDAT; //save the data to RBUF RING = 0; //stop receive REND = 1; //set receive completed flag } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //shift RX data to RX buffer } } } else if (!RXB) { RING = 1; //set start receive flag RCNT = 4; //initial receive baudrate counter RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } C T S 230 U C M . d e t i m Li if (--TCNT == 0) { TCNT = 3; //reset send baudrate counter if (TING) //judge whether sending { if (TBIT == 0) { TXB = 0; //send start bit TDAT = TBUF; //load data from TBUF to TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 else { TDAT >>= 1; //shift data to CY if (--TBIT == 0) { TXB = 1; TING = 0; //stop send TEND = 1; //set send completed flag } else { TXB = CY; //write CY to TX port } } } } } //----------------------------------------//initial UART module variable void UART_INIT() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } 南通国芯微电子有限公司 C T S U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 231 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机利用定时器1实现模拟串口功能--------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;----------------------------------------;define baudrate const ;BAUD = 65536 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) ;NOTE: (SYSclk/3/BAUDRATE) must be greater than 75, (RECOMMEND GREATER THEN 100) ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU EQU EQU EQU EQU EQU EQU 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FFA0H 0FFC0H ; 1200bps @ 11.0592MHz ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;57600bps @ 11.0592MHz ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU ;BAUD EQU BAUD EQU 0EC00H 0F600H 0FB00H 0FD80H 0FEC0H 0FF60H 0FF95H ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD 0E800H 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FF80H ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz 232 EQU EQU EQU EQU EQU EQU EQU C T S 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;----------------------------------------;define UART TX/RX port RXB TXB BIT BIT P3.0 P3.1 ;----------------------------------------;define SFR AUXR DATA 8EH ;----------------------------------------;define UART module variable TBUF RBUF TDAT RDAT TCNT RCNT TBIT RBIT DATA DATA DATA DATA DATA DATA DATA DATA 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH TING BIT 20H.0 ULE) RING BIT 20H.1 TEND BIT 20H.2 REND BIT 20H.3 RPTR DATA 21H WPTR DATA 22H BUFFER DATA 23H ;(R0) ready send data buffer (USER WRITE ONLY) ;(R1) received data buffer (UAER READ ONLY) ;(R2) sending data buffer (RESERVED FOR UART MODULE) ;(R3) receiving data buffer (RESERVED FOR UART MODULE) ;(R4) send baudrate counter (RESERVED FOR UART MODULE) ;(R5) receive baudrate counter (RESERVED FOR UART MODULE) ;(R6) send bit counter (RESERVED FOR UART MODULE) ;(R7) receive bit counter (RESERVED FOR UART MODULE) U C M . d e t i m Li ;sending flag(USER WRITE"1"TO TRIGGER SEND DATA,CLEAR BY MOD- C T S ; receiving flag (RESERVED FOR UART MODULE) ; sent flag (SET BY MODULE AND SHOULD USER CLEAR) ; received flag (SET BY MODULE AND SHOULD USER CLEAR) ;circular queue read pointer ;circular queue write pointer ;circular queue buffer (16 bytes) ;---------------------------------------- ORG 0000H LJMP RESET ;----------------------------------------;Timer1 interrupt routine for UART ORG 001BH PUSH ACC PUSH PSW MOV PSW, L_UARTSTART: ;------------------ JB RING, JB RXB, 南通国芯微电子有限公司 #08H L_RING L_REND ;4 save ACC ;4 save PSW ;3 using register group 1 ;4 judge whether receiving ; check start signal 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 233 STC15F204EA系列单片机指南 L_RSTART: SETB MOV MOV SJMP L_RING: DJNZ MOV L_RBIT: MOV MOV RRC MOV DJNZ L_RSTOP: RLC MOV CLR SETB L_REND: ;------------------L_TING: DJNZ MOV JNB MOV JNZ L_TSTART: CLR MOV MOV JMP L_TBIT: MOV SETB RRC MOV MOV DJNZ L_TSTOP: CLR SETB L_TEND: ;------------------L_UARTEND: POP POP RETI 234 技术支持网站:www.STCMCU.com RING R5, #4 R7, #9 L_REND R5, R5, L_REND #3 C, A, A R3, R7, RXB R3 A R1, RING REND R4, R4, TING, A, L_TBIT 研发顾问:13922809991 set start receive flag initial receive baudrate counter initial receive bit number (8 data bits + 1 stop bit) end this time slice ;4 judge whether sending ;2 reset send baudrate counter ;3 read RX port data ;1 and shift it to RX buffer ;1 A ;2 L_REND ;4 judge whether the data have receive completed A ; ; ; ; TXB TDAT, R0 R6, #9 L_TEND R2 PSW ACC 南通国芯微电子有限公司 ; ; ; ; Li ;4 check send baudrate counter ;2 reset it ;4 judge whether sending ;1 detect the sent bits ;3 "0" means start bit not sent A C L_TEND TING TEND . d e t i m shift out stop bit save the data to RBUF stop receive set receive completed flag U C M L_TEND #3 L_TEND R6 C T S A, C A R2, TXB, R6, ; ; ; ; 临时技术支持:13922829991 send start bit load data from TBUF to TDAT initial send bit number (8 data bits + 1 stop bit) end this time slice ;1 read data in TDAT ;1 shift in stop bit ;1 shift data to CY ;2 update TDAT ;4 write CY to TX port ;4 judge whether the data have send completed ; stop send ; set send completed flag ;3 restore PSW ;3 restore ACC ;4 (69) 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;----------------------------------------;initial UART module variable UART_INIT: CLR CLR SETB CLR CLR MOV MOV RET TING RING TEND REND A TCNT,A RCNT,A . d e t i m ;----------------------------------------;main program entry RESET: MOV R0, #7FH ;clear RAM CLR A MOV @R0, A DJNZ R0, $-1 MOV SP, #7FH ;initial SP ;------------------;system initial MOV TMOD, #00H MOV AUXR, #40H MOV TL1, #LOW BAUD MOV TH1, #HIGH BAUD SETB TR1 SETB ET1 SETB PT1 SETB EA LCALL UART_INIT ;----------------------------------------MAIN: JNB REND, CHECKREND CLR REND MOV A, RPTR INC RPTR ANL A, #0FH ADD A, #BUFFER MOV R0, A MOV @R0, RBUF C T S 南通国芯微电子有限公司 U C M Li ;timer1 in 16-bit auto reload mode ;timer1 working at 1T mode ;initial timer1 and ;set reload value ;tiemr1 start running ;enable timer1 interrupt ;improve timer1 interrupt priority ;open global interrupt switch ;if (REND) ;{ ; REND = 0; ; BUFFER[RPTR++ & 0xf] = RBUF; ;} ; ; ; 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 235 STC15F204EA系列单片机指南 CHECKREND: JNB TEND, MOV A, XRL A, JZ MAIN CLR TEND MOV A, INC WPTR ANL A, ADD A, MOV R0, MOV TBUF, SETB TING SJMP MAIN 技术支持网站:www.STCMCU.com MAIN RPTR WPTR WPTR 临时技术支持:13922829991 #0FH #BUFFER A @R0 ;if (TEND) ;{ ; if (WPTR != REND) ; { ; TEND = 0; ; TBUF = BUFFER[WPTR++ & 0xf]; ; TING = 1; ; } ;} ; ; ; . d e t i m ;---------------------------------------- END C T S 236 南通国芯微电子有限公司 研发顾问:13922809991 U C M Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第9章 STC15F204EA系列单片机的A/D转换器 9.1 A/D转换器的结构 STC15F204EA系列单片机ADC(A/D转换器)的结构如下图所示。 ADC_CONTR Register ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 模拟输入信号通道选择 开关CHS2/CHS1/CHS0 A/D转换结果寄存器: ADC_ RES[7:0] and ADC_RESL[1:0] . d e t i m ADC7/P1.7 ADC6/P1.6 ADC5/P1.5 ADC4/P1.4 逐次比较 寄存器 + ADC3/P1.3 U C M ADC2/P1.2 - ADC1/P1.1 比较器 ADC0/P1.0 C T S Li 10-bit DAC ADC_RES[7:0] ADC_B9 ADC_B8 ADC_B7 ADC_B6 ADC_B5 ADC_B4 ADC_B3 ADC_B2 - - - - - - ADC_B1 ADC_B0 ADC_RESL[1:0] STC15F204EA系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10位DAC、转 换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。 STC15F204EA系列单片机的ADC是逐次比较型ADC。逐次比较型ADC由一个比较器和D/A转 换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器 输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。逐次比较型 A/D转换器具有速度高,功耗低等优点。 从上图可以看出,通过模拟多路开关,将通过ADC0~7的模拟量输入送给比较器。用数 /模转换器(DAC)转换的模拟量与输入的模拟量通过比较器进行比较,将比较结果保存到逐次 比较寄存器,并通过逐次比较寄存器输出转换结果。A/D转换结束后,最终的转换结果保存到 ADC转换结果寄存器ADC_RES和ADC_RESL,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换 结束标志位ADC_FLAG,以供程序查询或发出中断申请。模拟通道的选择控制由ADC控制寄存器 ADC_CONTR中的CHS2~CHS0确定。ADC的转换速度由ADC控制寄存器中的SPEED1和SPEED0确定。 在使用ADC之前,应先给ADC上电,也就是置位ADC控制寄存器中的ADC_POWER位。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 237 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 如果取完整的10位结果,按下面公式计算: 10-bit A/D Conversion Result:(ADC_RES[7:0], ADC_RESL[1:0]) = 1024 x Vin Vcc 如果只取高8位结果,按下面公式计算: 8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x Vin Vcc 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为 模拟参考电压。 U C M . d e t i m Li 9.2 与A/D转换相关的寄存器 C T S 与STC15F204EA系列单片机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 ADC_RES ADC_RESL IE BDH BEH A8H IP 238 ADC Result high ADC Result low Interrupt Enable Interrupt Priority Low 南通国芯微电子有限公司 B8H MSB EA - LSB ELVD EADC PLVD PADC - - 总机:0513-5501 2928 / 2929 / 2966 复位值 0000 0000B 0000 0000B 000x 0000B ET1 EX1 ET0 EX0 PT1 PX1 PT0 PX0 x00x 0000B 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 1. P1口模拟功能控制寄存器P1ASF STC15F204EA系列单片机的������������������������������������� A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器, 速度可达到300KHz(30万次/秒)。8路电压输入型A/D,可做温度检测、电池电压检测、按键扫 描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何 一路设置为A/D转换,不需作为A/D使用的P1口可继续作为I/O口使用(����������� 建议只作为输入���� )。需作 为A/D使用的口需先将P1ASF特殊功能寄存器中的相应位置为‘1’,将相应的口设置为模拟功 能。�������������� P1ASF寄存器的格式如下: 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 P1ASF[7:0] P1.x的功能 P1ASF.0 = 1 P1.0口作为模拟功能A/D使用 P1ASF.1 = 1 P1.1口作为模拟功能A/D使用 P1ASF.2 = 1 P1.2口作为模拟功能A/D使用 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使用 . d e t i m 其中P1ASF寄存器地址为:[9DH](不能够进行位寻址) U C M C T S Li 2. ADC控制寄存器ADC_CONTR ADC_CONTR寄存器的格式如下: ADC_CONTR : ADC控制寄存器 SFR name Address ADC_CONTR BCH bit B7 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:关闭ADC 电源; 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 转换,�������������������� 如能将定时器/串行口/中断系统关闭更好。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 239 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 SPEED1,SPEED0:模数转换器转换速度控制位 SPEED1 SPEED0 A/D转换所需时间 1 1 90个时钟周期转换一次,CPU工作频率21MHz时, A/D转换速度约300KHz 1 0 180个时钟周期转换一次 0 1 360个时钟周期转换一次 0 0 540个时钟周期转换一次 ADC_FLAG: 模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG = 1,要由软件清0。 不管是A/D 转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是 否结束,当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。 . d e t i m ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。 CHS2/CHS1/CHS0:模拟输入通道选择,CHS2/CHS1/CHS0 CHS2 240 CHS1 CHS0 Li Analog Channel Select (模拟输入通道选择) U C M 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输入来用 C T S 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 3. A/D转换结果寄存器ADC_RES、ADC_RESL 特殊功能寄存器ADC_RES和ADC_RESL寄存器用于保存A/D转换结果,其格式如下: Mnemonic Add Name B7 ADC_RES BDh A/D转换结果 寄存器高8位 ADC_RESL BEh A/D转换结果 寄存器低2位 B6 B5 B4 B3 B2 B1 B0 ADC_RES9 ADC_RES8 ADC_RES7 ADC_RES6 ADC_RES5 ADC_RES4 ADC_RES3 ADC_RES2 - - - - - - ADC_RES1 ADC_RES0 STC15F204EA系列单片机的�������������������������������� 10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在 ADC_RESL的低2位中� 。 如果用户需取完整10位结果,按下面公式计算: . d te i m Li 10-bit A/D Conversion Result:(ADC_RES[7:0], ADC_RESL[1:0]) = 1024 x 如果用户只需取高8位结果,按下面公式计算: U C M 8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x C T S Vin Vcc Vin Vcc 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为 模拟参考电压。 4. 中断允许寄存器IE IE : 中断允许寄存器 (可位寻址) SFR name IE Address A8H bit name B7 EA B6 ELVD B5 EADC B4 - B3 ET1 B2 EX1 B1 ET0 B0 EX0 EA : CPU的中断开放标志,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。 EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。 EADC : A/D转换中断允许位,EADC=1,允许A/D转换中断,EADC=0,禁止A/D转换中断。 5. 中断优先级控制寄存器IP IP : 中断优先级控制寄存器 (可位寻址) SFR name IP Address B8H bit name B7 - B6 PLVD B5 PADC B4 - B3 PT1 B2 PX1 B1 PT0 B0 PX0 PADC : A/D转换中断优先级控制位。PADC=1,A/D转换中断定义为高优先级中断; PADC=0,A/D转换中断定义为低优先级中断。 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 241 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.3 A/D转换典型应用线路 1 28 P2.5 P2.7 2 27 P2.4 ADC0/P1.0 3 26 P2.3 ADC1/P1.1 4 25 P2.2 ADC2/P1.2 5 24 P2.1 ADC3/P1.3 6 23 P2.0/RSTOUT_LOW ADC4/P1.4 7 22 P3.7/INT3 ADC5/P1.5 8 21 P3.6/INT2 ADC6/P1.6 9 20 P3.5/T1/CLKOUT0 ADC7/P1.7 10 19 P3.4/T0/CLKOUT1 IRC_CLKO/RST/P0.0 11 18 P3.3/INT1 Vcc 12 17 P3.2/INT0 P0.1 13 16 P3.1 Gnd 14 15 P3.0/INT4 SOP-28/SKDIP-28 P2.6 47pF以上 A/D转换在P1口,P1.0 - P1.7共8路 C T S 242 南通国芯微电子有限公司 U C M 1K 信号源 . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.4 A/D做按键扫描应用线路图 Vcc 1 28 P2.5 P2.7 2 27 P2.4 ADC0/P1.0 3 26 P2.3 ADC1/P1.1 4 25 P2.2 ADC2/P1.2 5 24 P2.1 ADC3/P1.3 6 23 P2.0/RSTOUT_LOW ADC4/P1.4 7 22 P3.7/INT3 ADC5/P1.5 8 21 P3.6/INT2 ADC6/P1.6 9 20 P3.5/T1/CLKOUT0 19 P3.4/T0/CLKOUT1 18 P3.3/INT1 ADC7/P1.7 10 IRC_CLKO/RST/P0.0 11 SOP-28/SKDIP-28 P2.6 47pF以上 Vcc 12 17 P3.2/INT0 13 16 P3.1 Gnd 14 15 P3.0/INT4 2/3 Vcc 10K 3/4 Vcc 10K 28 P2.5 2 27 P2.4 3 26 P2.3 4 25 P2.2 ADC0/P1.0 ADC2/P1.2 ADC3/P1.3 ADC4/P1.4 ADC5/P1.5 ADC6/P1.6 C T S 5 6 7 8 9 ADC7/P1.7 10 IRC_CLKO/RST/P0.0 11 P2.1 23 P2.0/RSTOUT_LOW 22 P3.7/INT3 21 P3.6/INT2 20 P3.5/T1/CLKOUT0 19 P3.4/T0/CLKOUT1 18 P3.3/INT1 Vcc 12 17 P3.2/INT0 13 16 P3.1 Gnd 14 15 P3.0/INT4 +5V R1 520Ω sw1 Li +5V R1 10KΩ ADCx 24 P0.1 R0 ADCx 10KΩ 47pF SOP-28/SKDIP-28 ADC1/P1.1 . d e t i m 5/4 Vcc CU M 1 1/2 Vcc 10K A/D转换在P1口,P1.0 - P1.7共8路 P2.7 0V 10K P0.1 P2.6 10K 1K 47pF sw1 R2 520Ω R3 1.8KΩ R4 R5 R6 3.3KΩ 5.4KΩ 8.2KΩ sw2 sw3 sw4 0`0.5 0 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 243 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.5 A/D转换模块的参考电压源 STC15F204EA系列单片机的参考电压源是输入工作电压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 244 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.6 A/D转换测试程序(C程序和汇编程序) 9.6.1 A/D转换测试程序(ADC中断方式) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ /*使用了软件模拟串口输出*/ #include "reg51.h" #include "intrins.h" typedef bit BOOL; typedef unsigned char BYTE; typedef unsigned int WORD; C T S U C M . d e t i m Li //define baudrate const //BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (SYSclk/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110) //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFFA0 // 1200bps @ 11.0592MHz // 2400bps @ 11.0592MHz // 4800bps @ 11.0592MHz // 9600bps @ 11.0592MHz //19200bps @ 11.0592MHz //38400bps @ 11.0592MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD #define BAUD 0xEC00 0xF600 0xFB00 0xFD80 0xFEC0 0xFF60 // 1200bps @ 18.432MHz // 2400bps @ 18.432MHz // 4800bps @ 18.432MHz // 9600bps @ 18.432MHz //19200bps @ 18.432MHz //38400bps @ 18.432MHz 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 245 STC15F204EA系列单片机指南 //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 技术支持网站:www.STCMCU.com 0xE800 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFF80 临时技术支持:13922829991 研发顾问:13922809991 // 1200bps @ 22.1184MHz // 2400bps @ 22.1184MHz // 4800bps @ 22.1184MHz // 9600bps @ 22.1184MHz //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz sfr AUXR = 0x8E; sbit RXB = P3^0; sbit TXB = P3^1; //define UART TX/RX port /*Declare SFR associated with the ADC */ sfr ADC_CONTR = 0xBC; //ADC control register sfr ADC_RES = 0xBD; //ADC hight 8-bit result register sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register sfr P1ASF = 0x9D; //P1 secondary function control register U C M Li /*Define ADC operation const for ADC_CONTR*/ #define ADC_POWER 0x80 //ADC power control bit #define ADC_FLAG 0x10 //ADC complete flag #define ADC_START 0x08 //ADC start control bit #define ADC_SPEEDLL 0x00 //540 clocks #define ADC_SPEEDL 0x20 //360 clocks #define ADC_SPEEDH 0x40 //180 clocks #define ADC_SPEEDHH 0x60 //90 clocks C T S . d e t i m void InitUart(); void SendData(BYTE dat); void Delay(WORD n); void InitADC(); BYTE TBUF,RBUF; BYTE TDAT,RDAT; BYTE TCNT,RCNT; BYTE TBIT,RBIT; BOOL TING,RING; BOOL TEND,REND; BYTE ch = 0; 246 南通国芯微电子有限公司 //ADC channel NO. 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com void main() { InitUart(); InitADC(); TMOD = 0x00; AUXR = 0x80; TL0 = BAUD; TH0 = BAUD>>8; TR0 = 1; IE = 0xa0; ET0 = 1; PT0 = 1; while (1); } //initial timer0 and set reload value //tiemr0 start running //Enable ADC interrupt and Open master interrupt switch //enable timer0 interrupt //improve timer0 interrupt priority //Start A/D conversion C T S SendData(ch); SendData(ADC_RES); 研发顾问:13922809991 //Init UART, use to show ADC result //Init ADC sfr //timer0 in 16-bit auto reload mode //timer0 working at 1T mode /*---------------------------ADC interrupt service routine ----------------------------*/ void adc_isr() interrupt 5 using 1 { ADC_CONTR &= !ADC_FLAG; 临时技术支持:13922829991 U C M . d e t i m Li //Clear ADC interrupt flag //Show Channel NO. //Get ADC high 8-bit result and Send to UART //if you want show 10-bit result, uncomment next line // SendData(ADC_LOW2); //Show ADC low 2-bit result if (++ch > 7) ch = 0; //switch to next channel ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch; } /*---------------------------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 } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 247 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 /*---------------------------Software delay function ----------------------------*/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } //----------------------------------------//Timer interrupt routine for UART . d e t i m Li void tm0() interrupt 1 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //reset send baudrate counter if (--RBIT == 0) { RBUF = RDAT; //save the data to RBUF RING = 0; //stop receive REND = 1; //set receive completed flag } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //shift RX data to RX buffer } } } else if (!RXB) { RING = 1; //set start receive flag RCNT = 4; //initial receive baudrate counter RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } C T S 248 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 } 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 if (--TCNT == 0) { TCNT = 3; //reset send baudrate counter if (TING) //judge whether sending { if (TBIT == 0) { TXB = 0; //send start bit TDAT = TBUF; //load data from TBUF to TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } else { TDAT >>= 1; //shift data to CY if (--TBIT == 0) { TXB = 1; TING = 0; //stop send TEND = 1; //set send completed flag } else { TXB = CY; //write CY to TX port } } } } C T S U C M . d e t i m Li //----------------------------------------//initial UART module variable void InitUart() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } //----------------------------------------//initial UART module variable void SendData(BYTE dat) { while (!TEND); TEND = 0; TBUF = dat; TING = 1; } 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 249 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;使用了软件模拟串口输出 . d e t i m ;define baudrate const ;BAUD = 65536 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) ;NOTE: (SYSclk/3/BAUDRATE) must be greater then 75, (RECOMMEND GREATER THEN 100) ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FFA0H 0FFC0H 0EC00H 0F600H 0FB00H 0FD80H 0FEC0H 0FF60H 0FF95H 0E800H 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FF80H ; 1200bps @ 11.0592MHz ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;57600bps @ 11.0592MHz ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz C T S U C M Li ;define UART TX/RX port RXB BIT P3.0 TXB BIT P3.1 ;define SFR AUXR DATA 8EH 250 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;define UART module variable TBUF DATA 08H ;(R0) ready send data buffer (USER WRITE ONLY) RBUF DATA 09H ;(R1) received data buffer (UAER READ ONLY) TDAT DATA 0AH ;(R2) sending data buffer (RESERVED FOR UART MODULE) RDAT DATA 0BH ;(R3) receiving data buffer (RESERVED FOR UART MODULE) TCNT DATA 0CH ;(R4) send baudrate counter (RESERVED FOR UART MODULE) RCNT DATA 0DH ;(R5) receive baudrate counter (RESERVED FOR UART MODULE) TBIT DATA 0EH ;(R6) send bit counter (RESERVED FOR UART MODULE) RBIT DATA 0FH ;(R7) receive bit counter (RESERVED FOR UART MODULE) TING RING TEND REND BIT BIT BIT BIT 20H.0 20H.1 20H.2 20H.3 ;sending flag(USER WRITE"1"TO TRIGGER SEND DATA,CLEAR BY MODULE) ; receiving flag (RESERVED FOR UART MODULE) ; sent flag (SET BY MODULE AND SHOULD USER CLEAR) ; received flag (SET BY MODULE AND SHOULD USER CLEAR) . d e t i m ;/*Declare SFR associated with the ADC */ ADC_CONTR EQU 0BCH ;ADC control register ADC_RES EQU 0BDH ;ADC high 8-bit result register ADC_LOW2 EQU 0BEH ;ADC low 2-bit result register P1ASF EQU 09DH ;P1 secondary function control register U C M Li ;/*Define ADC operation const for ADC_CONTR*/ ADC_POWER EQU 80H ;ADC power control bit ADC_FLAG EQU 10H ;ADC complete flag ADC_START EQU 08H ;ADC start control bit ADC_SPEEDLL EQU 00H ;540 clocks ADC_SPEEDL EQU 20H ;360 clocks ADC_SPEEDH EQU 40H ;180 clocks ADC_SPEEDHH EQU 60H ;90 clocks C T S ADCCH DATA 21H ;ADC channel NO. ;----------------------------------------ORG 0000H LJMP MAIN ORG 000BH LJMP TM0_ISR ORG 002BH LJMP ADC_ISR ;----------------------------------------- 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 251 STC15F204EA系列单片机指南 MAIN: ORG 技术支持网站:www.STCMCU.com MOV SP, #7FH MOV ADCCH, #0 LCALL INIT_UART ;Init UART, use to show ADC result LCALL INIT_ADC ;Init ADC sfr MOV TMOD, #00H ;timer0 in 16-bit auto reload mode MOV AUXR, #80H ;timer0 working at 1T mode MOV TL0, #LOW BAUD ;initial timer0 and MOV TH0, #HIGH BAUD ;set reload value SETB TR0 ;tiemr0 start running MOV IE, #0A0H ;Enable ADC interrupt and Open master interrupt switch SETB ET0 ;enable timer0 interrupt SETB PT0 ;improve timer0 interrupt priority SJMP $ C T S U C M ANL ADC_CONTR, #NOT ADC_FLAG MOV A, ADCCH LCALL SEND_DATA MOV A, ADC_RES LCALL SEND_DATA ;//if you want show 10-bit result, uncomment next 2 lines ; MOV A, ADC_LOW2 ; LCALL SEND_DATA 252 研发顾问:13922809991 0100H ;/*---------------------------;ADC interrupt service routine ;----------------------------*/ ADC_ISR: PUSH ACC PUSH PSW 临时技术支持:13922829991 INC MOV ANL MOV ORL MOV POP POP RETI . d e t i m Li ;Clear ADC interrupt flag ;Send channel NO. ;Get ADC high 8-bit result ;Send to UART ;Get ADC low 2-bit result ;Send to UART 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 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;/*---------------------------;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 ;/*---------------------------;Software delay function ;----------------------------*/ DELAY: MOV R2, A CLR A MOV R0, A MOV R1, A DELAY1: DJNZ R0, DELAY1 DJNZ R1, DELAY1 DJNZ R2, DELAY1 RET ;/*---------------------------;Initial UART ;----------------------------*/ INIT_UART: CLR TING CLR RING SETB TEND CLR REND CLR A MOV TCNT, A MOV RCNT, A RET ;/*---------------------------;Send one byte data to PC ;Input: ACC (UART data) ;Output:;----------------------------*/ SEND_DATA: JNB TEND, $ CLR TEND MOV TBUF, A SETB TING RET C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 253 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;----------------------------------------;Timer0 interrupt routine for UART TM0_ISR: PUSH ACC ;4 save ACC PUSH PSW ;4 save PSW MOV PSW, #08H ;3 using register group 1 L_UARTSTART: ;------------------ JB RING, L_RING ;4 judge whether receiving JB RXB, L_REND ; check start signal L_RSTART: SETB RING ; set start receive flag MOV R5, #4 ; initial receive baudrate counter MOV R7, #9 ; initial receive bit number (8 data bits + 1 stop bit) SJMP L_REND ; end this time slice L_RING: DJNZ R5, L_REND ;4 judge whether sending MOV R5, #3 ;2 reset send baudrate counter L_RBIT: MOV C, RXB ;3 read RX port data MOV A, R3 ;1 and shift it to RX buffer RRC A ;1 MOV R3, A ;2 DJNZ R7, L_REND ;4 judge whether the data have receive completed L_RSTOP: RLC A ; shift out stop bit MOV R1, A ; save the data to RBUF CLR RING ; stop receive SETB REND ; set receive completed flag L_REND: ;----------------L_TING: DJNZ R4, L_TEND ;4 check send baudrate counter MOV R4, #3 ;2 reset it JNB TING, L_TEND ;4 judge whether sending MOV A, R6 ;1 detect the sent bits JNZ L_TBIT ;3 "0" means start bit not sent L_TSTART: CLR TXB ; send start bit MOV TDAT, R0 ; load data from TBUF to TDAT MOV R6, #9 ; initial send bit number (8 data bits + 1 stop bit) JMP L_TEND ; end this time slice L_TBIT: MOV A, R2 ;1 read data in TDAT SETB C ;1 shift in stop bit RRC A ;1 shift data to CY MOV R2, A ;2 update TDAT MOV TXB, C ;4 write CY to TX port DJNZ R6, L_TEND ;4 judge whether the data have send completed C T S 254 南通国芯微电子有限公司 U C M . d e t i m Li 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 L_TSTOP: CLR SETB L_TEND: ;------------------L_UARTEND: POP POP RETI TING TEND 技术支持网站:www.STCMCU.com PSW ACC 临时技术支持:13922829991 ; stop send ; set send completed flag ;3 restore PSW ;3 restore ACC ;4 (69) 研发顾问:13922809991 ;---------------------------------------- END C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li 传真:0513-5501 2969 / 2956 / 2947 255 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 9.6.2 A/D转换测试程序(ADC查询方式) 1. C程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ . d e t i m /*使用了软件模拟串口输出*/ #include "reg51.h" #include "intrins.h" typedef bit BOOL; typedef unsigned char BYTE; typedef unsigned int WORD; U C M Li //define baudrate const //BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (SYSclk/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110) C T S //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFFA0 // 1200bps @ 11.0592MHz // 2400bps @ 11.0592MHz // 4800bps @ 11.0592MHz // 9600bps @ 11.0592MHz //19200bps @ 11.0592MHz //38400bps @ 11.0592MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD #define BAUD 0xEC00 0xF600 0xFB00 0xFD80 0xFEC0 0xFF60 // 1200bps @ 18.432MHz // 2400bps @ 18.432MHz // 4800bps @ 18.432MHz // 9600bps @ 18.432MHz //19200bps @ 18.432MHz //38400bps @ 18.432MHz //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD //#define BAUD 0xE800 0xF400 0xFA00 0xFD00 0xFE80 0xFF40 0xFF80 // 1200bps @ 22.1184MHz // 2400bps @ 22.1184MHz // 4800bps @ 22.1184MHz // 9600bps @ 22.1184MHz //19200bps @ 22.1184MHz //38400bps @ 22.1184MHz //57600bps @ 22.1184MHz 256 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 sfr AUXR = 0x8E; sbit RXB = P3^0; sbit TXB = P3^1; 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 //define UART TX/RX port /*Declare SFR associated with the ADC */ sfr ADC_CONTR = 0xBC; //ADC control register sfr ADC_RES = 0xBD; //ADC high 8-bit result register sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register sfr P1ASF = 0x9D; //P1 secondary function control register /*Define ADC operation const for ADC_CONTR*/ #define ADC_POWER 0x80 //ADC power control bit #define ADC_FLAG 0x10 //ADC complete flag #define ADC_START 0x08 //ADC start control bit #define ADC_SPEEDLL 0x00 //540 clocks #define ADC_SPEEDL 0x20 //360 clocks #define ADC_SPEEDH 0x40 //180 clocks #define ADC_SPEEDHH 0x60 //90 clocks BYTE TBUF,RBUF; BYTE TDAT,RDAT; BYTE TCNT,RCNT; BYTE TBIT,RBIT; BOOL TING,RING; BOOL TEND,REND; C T S void InitUart(); void InitADC(); void SendData(BYTE dat); BYTE GetADCResult(BYTE ch); void Delay(WORD n); void ShowResult(BYTE ch); void main() { TMOD = 0x00; AUXR = 0x80; TL0 = BAUD; TH0 = BAUD>>8; TR0 = 1; ET0 = 1; PT0 = 1; EA = 1; InitUart(); InitADC(); 南通国芯微电子有限公司 U C M . d e t i m Li //timer0 in 16-bit auto reload mode //timer0 working at 1T mode //initial timer0 and set reload value //tiemr0 start running //enable timer0 interrupt //improve timer0 interrupt priority //open global interrupt switch //Init UART, use to show ADC result //Init ADC sfr 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 257 STC15F204EA系列单片机指南 } while (1) { } 技术支持网站:www.STCMCU.com ShowResult(0); ShowResult(1); ShowResult(2); ShowResult(3); ShowResult(4); ShowResult(5); ShowResult(6); ShowResult(7); 临时技术支持:13922829991 研发顾问:13922809991 //Show Channel0 //Show Channel1 //Show Channel2 //Show Channel3 //Show Channel4 //Show Channel5 //Show Channel6 //Show Channel7 /*---------------------------Send ADC result to UART ----------------------------*/ void ShowResult(BYTE ch) { SendData(ch); SendData(GetADCResult(ch)); . d e t i m //Show Channel NO. //Show ADC high 8-bit result //if you want show 10-bit result, uncomment next line // SendData(ADC_LOW2); //Show ADC low 2-bit result } U C M Li /*---------------------------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 C T S } return ADC_RES; /*---------------------------Initial ADC sfr ----------------------------*/ void InitADC() { P1ASF = 0xff; ADC_RES = 0; ADC_CONTR = ADC_POWER | ADC_SPEEDLL; Delay(2); } 258 南通国芯微电子有限公司 //Return ADC result //Open 8 channels ADC function //Clear previous result //ADC power-on and delay 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 /*---------------------------Software delay function ----------------------------*/ void Delay(WORD n) { WORD x; while (n--) { x = 5000; while (x--); } } //----------------------------------------//Timer interrupt routine for UART . d e t i m Li void tm0() interrupt 1 using 1 { if (RING) { if (--RCNT == 0) { RCNT = 3; //reset send baudrate counter if (--RBIT == 0) { RBUF = RDAT; //save the data to RBUF RING = 0; //stop receive REND = 1; //set receive completed flag } else { RDAT >>= 1; if (RXB) RDAT |= 0x80; //shift RX data to RX buffer } } } else if (!RXB) { RING = 1; //set start receive flag RCNT = 4; //initial receive baudrate counter RBIT = 9; //initial receive bit number (8 data bits + 1 stop bit) } C T S 南通国芯微电子有限公司 U C M 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 259 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 if (--TCNT == 0) { TCNT = 3; //reset send baudrate counter if (TING) //judge whether sending { if (TBIT == 0) { TXB = 0; //send start bit TDAT = TBUF; //load data from TBUF to TDAT TBIT = 9; //initial send bit number (8 data bits + 1 stop bit) } else { TDAT >>= 1; //shift data to CY if (--TBIT == 0) { TXB = 1; TING = 0; //stop send TEND = 1; //set send completed flag } else { TXB = CY; //write CY to TX port } } } } C T S U C M . d e t i m Li } //----------------------------------------//initial UART module variable void InitUart() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } //----------------------------------------//initial UART module variable void SendData(BYTE dat) { while (!TEND); TEND = 0; TBUF = dat; TING = 1; } 260 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 2. 汇编程序: /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机 A/D转换功能------------------------------*/ /* --- Mobile: (86)13922805190 -----------------------------------------------*/ /* --- Fax: 86-755-82905966 ---------------------------------------------------*/ /* --- Tel: 86-755-82948412 ----------------------------------------------------*/ /* --- Web: www.STCMCU.com -----------------------------------------------*/ /* 如果要在程序中使用或在文章中引用该程序, -------------------- ---*/ /* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/ /*-------------------------------------------------------------------------------------*/ ;使用了软件模拟串口输出 . d e t i m ;define baudrate const ;BAUD = 65536 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12) ;NOTE: (SYSclk/3/BAUDRATE) must be greater then 75, (RECOMMEND GREATER THEN 100) ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD ;BAUD EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FFA0H 0FFC0H 0EC00H 0F600H 0FB00H 0FD80H 0FEC0H 0FF60H 0FF95H 0E800H 0F400H 0FA00H 0FD00H 0FE80H 0FF40H 0FF80H C T S ; 1200bps @ 11.0592MHz ; 2400bps @ 11.0592MHz ; 4800bps @ 11.0592MHz ; 9600bps @ 11.0592MHz ;19200bps @ 11.0592MHz ;38400bps @ 11.0592MHz ;57600bps @ 11.0592MHz ; 1200bps @ 18.432MHz ; 2400bps @ 18.432MHz ; 4800bps @ 18.432MHz ; 9600bps @ 18.432MHz ;19200bps @ 18.432MHz ;38400bps @ 18.432MHz ;57600bps @ 18.432MHz ; 1200bps @ 22.1184MHz ; 2400bps @ 22.1184MHz ; 4800bps @ 22.1184MHz ; 9600bps @ 22.1184MHz ;19200bps @ 22.1184MHz ;38400bps @ 22.1184MHz ;57600bps @ 22.1184MHz U C M Li ;define UART TX/RX port RXB BIT P3.0 TXB BIT P3.1 ;define SFR AUXR DATA 8EH 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 261 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;define UART module variable TBUF DATA 08H ;(R0) ready send data buffer (USER WRITE ONLY) RBUF DATA 09H ;(R1) received data buffer (UAER READ ONLY) TDAT DATA 0AH ;(R2) sending data buffer (RESERVED FOR UART MODULE) RDAT DATA 0BH ;(R3) receiving data buffer (RESERVED FOR UART MODULE) TCNT DATA 0CH ;(R4) send baudrate counter (RESERVED FOR UART MODULE) RCNT DATA 0DH ;(R5) receive baudrate counter (RESERVED FOR UART MODULE) TBIT DATA 0EH ;(R6) send bit counter (RESERVED FOR UART MODULE) RBIT DATA 0FH ;(R7) receive bit counter (RESERVED FOR UART MODULE) TING BIT RING BIT TEND BIT REND BIT 20H.0 20H.1 20H.2 20H.3 ;sending flag(USER WRITE"1"TO TRIGGER SEND DATA,CLEAR BY MODULE) ; receiving flag (RESERVED FOR UART MODULE) ; sent flag (SET BY MODULE AND SHOULD USER CLEAR) ; received flag (SET BY MODULE AND SHOULD USER CLEAR) ;/*Declare SFR associated with the ADC */ ADC_CONTR EQU 0BCH ADC_RES EQU 0BDH ADC_LOW2 EQU 0BEH P1ASF EQU 09DH . d e t i m ;ADC control register ;ADC high 8-bit result register ;ADC low 2-bit result register ;P1 secondary function control register U C M Li ;/*Define ADC operation const for ADC_CONTR*/ ADC_POWER EQU 80H ;ADC power control bit ADC_FLAG EQU 10H ;ADC complete flag ADC_START EQU 08H ;ADC start control bit ADC_SPEEDLL EQU 00H ;540 clocks ADC_SPEEDL EQU 20H ;360 clocks ADC_SPEEDH EQU 40H ;180 clocks ADC_SPEEDHH EQU 60H ;90 clocks ;---------------------------------------- ORG 0000H LJMP MAIN ORG 000BH LJMP TM0_ISR ;----------------------------------------MAIN: MOV SP, #7FH MOV TMOD, #00H ;timer0 in 16-bit auto reload mode MOV AUXR, #80H ;timer0 working at 1T mode MOV TL0, #LOW BAUD ;initial timer0 and MOV TH0, #HIGH BAUD ;set reload value SETB TR0 ;tiemr0 start running SETB ET0 ;enable timer0 interrupt SETB PT0 ;improve timer0 interrupt priority SETB EA ;open global interrupt switch C T S 262 LCALL INIT_UART LCALL INIT_ADC 南通国芯微电子有限公司 ;Init UART, use to show ADC result ;Init ADC sfr 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com ;------------------------------ MOV A, #55H LCALL SEND_DATA MOV A, #66H LCALL SEND_DATA NEXT: MOV A, #0 LCALL SHOW_RESULT MOV A, #1 LCALL SHOW_RESULT MOV A, #2 LCALL SHOW_RESULT MOV A, #3 LCALL SHOW_RESULT MOV A, #4 LCALL SHOW_RESULT MOV A, #5 LCALL SHOW_RESULT MOV A, #6 LCALL SHOW_RESULT MOV A, #7 LCALL SHOW_RESULT C T S 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 临时技术支持:13922829991 研发顾问:13922809991 ;Show result ;Show result ;Show channel0 result ;Show channel1 result ;Show channel2 result . d e t i m ;Show channel3 result ;Show channel4 result ;Show channel5 result U C M ;Show channel6 result Li ;Show channel7 result ;Show Channel NO. ;Get high 8-bit ADC result ;Show result ;//if you want show 10-bit result, uncomment next 2 lines ; MOV A, ADC_LOW2 ;Get low 2-bit ADC result ; LCALL SEND_DATA ;Show result RET 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 263 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;/*---------------------------;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 U C M . d e t i m Li ;/*---------------------------;Initial ADC sfr ;----------------------------*/ INIT_ADC: MOV P1ASF, #0FFH ;Open 8 channels ADC function MOV ADC_RES, #0 ;Clear previous result MOV ADC_CONTR, #ADC_POWER | ADC_SPEEDLL MOV A, #2 ;ADC power-on and delay LCALL DELAY RET C T S ;/*---------------------------;Initial UART ;----------------------------*/ INIT_UART: CLR TING CLR RING SETB TEND CLR REND CLR A MOV TCNT, A MOV RCNT, A RET 264 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 ;/*---------------------------;Send one byte data to PC ;Input: ACC (UART data) ;Output:;----------------------------*/ SEND_DATA: JNB TEND, $ CLR TEND MOV TBUF, A SETB TING RET ;/*---------------------------;Software delay function ;----------------------------*/ DELAY: MOV R2, A CLR A MOV R0, A MOV R1, A DELAY1: DJNZ R0, DELAY1 DJNZ R1, DELAY1 DJNZ R2, DELAY1 RET ;----------------------------------------;Timer0 interrupt routine for UART U C M C T S TM0_ISR: PUSH PUSH MOV L_UARTSTART: ;------------------ JB JB L_RSTART: SETB MOV MOV SJMP L_RING: DJNZ MOV ACC PSW PSW, RING, RXB, #08H R5, R5, 南通国芯微电子有限公司 ;4 judge whether receiving ;check start signal L_REND #3 Li ;4 save ACC ;4 save PSW ;3 using register group 1 L_RING L_REND RING R5, #4 R7, #9 L_REND . d e t i m ; ; ; ; set start receive flag initial receive baudrate counter initial receive bit number (8 data bits + 1 stop bit) end this time slice ;4 judge whether sending ;2 reset send baudrate counter 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 265 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 L_RBIT: MOV C, RXB ;3 read RX port data MOV A, R3 ;1 and shift it to RX buffer RRC A ;1 MOV R3, A ;2 DJNZ R7, L_REND ;4 judge whether the data have receive completed L_RSTOP: RLC A ; shift out stop bit MOV R1, A ; save the data to RBUF CLR RING ; stop receive SETB REND ; set receive completed flag L_REND: ;----------------L_TING: DJNZ R4, L_TEND ;4 check send baudrate counter MOV R4, #3 ;2 reset it JNB TING, L_TEND ;4 judge whether sending MOV A, R6 ;1 detect the sent bits JNZ L_TBIT ;3 "0" means start bit not sent L_TSTART: CLR TXB ; send start bit MOV TDAT, R0 ; load data from TBUF to TDAT MOV R6, #9 ; initial send bit number (8 data bits + 1 stop bit) JMP L_TEND ; end this time slice L_TBIT: MOV A, R2 ;1 read data in TDAT SETB C ;1 shift in stop bit RRC A ;1 shift data to CY MOV R2, A ;2 update TDAT MOV TXB, C ;4 write CY to TX port DJNZ R6, L_TEND ;4 judge whether the data have send completed L_TSTOP: CLR TING ; stop send SETB TEND ; set send completed flag L_TEND: ;------------------L_UARTEND: POP PSW ;3 restore PSW POP ACC ;3 restore ACC RETI ;4 (69) C T S U C M . d e t i m Li ;---------------------------------------- 266 END 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 第10章 STC15F204EA系列单片机EEPROM的应用 STC15F204EA系列单片机内部集成了1KB/2KB的EEPROM,其与程序空间是分开的。地址 范围是0000H~03FFH(1KB)/0000H~07FFH(2KB)。1KB的EEPROM分为2个扇区,2KB的EEPROM分为 4个扇区,每个扇区包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一 次修改的数据放在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。 EEPROM的擦写次数在10万次以上,可用于保存一些需要在应用过程中修改并且掉电不丢失 的参数数据。在用户程序中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。 在工作电压Vcc偏低时,建议不要进行EEPROM/IAP操作。 10.1 IAP及EEPROM新增特殊功能寄存器介绍 符号 IAP_DATA IAP_ADDRH IAP_ADDRL IAP_CMD IAP_TRIG IAP_CONTR PCON 描述 地址 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 南通国芯微电子有限公司 C T S C4H C5H Li MSB C2H C3H . d e t i m 位地址及符号 CU M - - - LSB 87H 1111 1111B 0000 0000B 0000 0000B - - - MS1 MS0 C6H C7H 复位值 xxxx x000B xxxx xxxxB IAPEN SWBS SWRST CMD_FAIL - - LVDF 总机:0513-5501 2928 / 2929 / 2966 - GF1 - WT2 WT1 GF0 PD WT0 0000 x000B IDL xx1x 0000B 传真:0513-5501 2969 / 2956 / 2947 267 STC15F204EA系列单片机指南 技术支持网站: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 操作时的地址寄存器高八位。 IAP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。 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)进行字节读/字节编程/扇区擦除 ,IAP15F205A/IAP15L205A除外,IAP15F205A/IAP15L205A可在�������������� 用户������������ 应用程序区修改����� 用户��� 应用程 序区。 特别声明:EEPROM也可以用MOVC指令读(MOVC访问的是程序存储器),但起始地址不再是0000H, 而是程序存储空间结束地址的下一个地址。 C T S 4. ISP/IAP命令触发寄存器IAP_TRIG IAP_TRIG: ISP/IAP操作时的命令触发寄存器。 在IAPEN(IAP_CONTR.7) = 1 时,对IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP命令才会生效。 ISP/IAP��������������������������������������������������� 操作完成后,IAP地址高八位寄存器IAP_ADDRH、IAP地址低八位寄存器IAP_ADDRL和IAP 命令寄存器IAP_CMD的内容不变。如果接下来要对下一个地址的数据进行ISP/IAP操作,需手动 将该地址的高8位和低8位分别写入IAP_ADDRH和IAP_ADDRL寄存器。 每次IAP操作时,都要对IAP_TRIG先写入5AH,再写入A5H,ISP/IAP命令才会生效。 现有A版本在每次触发前,需重新送字节读/字节编程/扇区擦除命令,以后的B版本在命令 不需改变时,不需重新送命令 268 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 5. ISP/IAP命令寄存器IAP_CONTR ISP/IAP控制寄存器IAP_CONTR格式如下: SFR name Address IAP_CONTR C7H bit B7 B6 B5 B4 name IAPEN SWBS SWRST CMD_FAIL B3 B2 B1 B0 - WT2 WT2 WT0 IAPEN: ISP/IAP功能允许位。0:禁止IAP读/写��� /�� 擦除Data Flash/EEPROM 1: 允许IAP读/写��� /�� 擦除Data Flash/EEPROM SWBS: 软件选择从用户应用程序区启动(送0),还是从������������ 系统���������� 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(软复位) C T S U C M 设置等待时间 CPU等待时间(多少个CPU工作时钟 ) Sector Erase Read/读 Program/编程 WT2 WT1 WT0 扇区擦除 (2个时钟) (=55us) (=21us) 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个时钟 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 . d e t i m Li Recommended System Clock 跟等待参数对应的推荐系统时钟 ≤ 1MHz ≤ 2MHz ≤ 3MHz ≤ 6MHz ≤ 12MHz ≤ 20MHz ≤ 24MHz ≤ 30MHz 传真:0513-5501 2969 / 2956 / 2947 269 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 6. 工作电压过低判断,此时不要进行EEPROM/IAP操作 PCON : 电源控制寄存器 SFR name Address PCON 87H bit B7 B6 B5 B4 B3 B2 B1 B0 name - - LVDF - GF1 GF0 PD IDL LVDF: 低压检测标志位,当工作电压Vcc低于低压检测门槛电压时,该位置1。该位要由软件清0 当低压检测电路发现工作电压Vcc偏低时,不要进行EEPROM/IAP操作。 5V单片机的低压检测门槛电压: -40 0C 25 0C 85 0C 4.74 4.64 4.60 4.41 4.32 4.27 4.14 4.05 4.00 3.90 3.82 3.77 3.69 3.61 3.56 3.51 3.43 3.38 3.36 3.28 3.23 3.21 3.14 3.09 U C M 3.3V单片机的低压检测门槛电压: -40 0C 3.11 2.85 2.63 2.44 2.29 2.14 2.01 1.90 C T S 270 南通国芯微电子有限公司 25 0C 3.08 2.82 2.61 2.42 2.26 2.12 2.00 1.89 . d e t i m Li 85 0C 3.09 2.83 2.61 2.43 2.26 2.12 2.00 1.89 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.2 STC15F204EA系列单片机EEPROM空间大小及地址 STC15F204EA系列单片机内部EEPROM选型一览表 STC15L204EA系列单片机内部EEPROM选型一览表 型号 用IAP字 用IAP字 扇 节读时 节读时 EEPROM 区 EEPROM EEPROM 字节数 数 起始扇区 结束扇区 首地址 末尾地址 用MOVC 指令读时 EEPROM 起始扇区 首地址 用MOVC 指令读时 EEPROM 结束扇区 末尾地址 0BFFh STC15F201EA/ STC15L201EA 2K 4 0000h 07FFh 0400h STC15F202EA/ STC15L202EA 2K 4 0000h 07FFh 0800h 0FFFh STC15F203EA/ STC15L203EA 2K 4 0000h 07FFh 0C00h 13FFh STC15F204EA/ STC15L204EA 1K 2 0000h 03FFh 1000h 13FFh U C M STC15F204EA 系列单片机内 部EEPROM还 可以用MOVC 指令读,但此 时首地址不再 是0000H,而 是程序存储空 间结束地址的 下一个地址 . d e t i m Li 以下系列特殊,可在用户程序区直接修改程序,所有Flash空间均可作EEPROM修改 IAP15F205A/ IAP15L205A 第一扇区 - 10 C T S 0000h 第二扇区 13FFh 第三扇区 第四扇区 每个扇区512 字节,共4个 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 扇区。 0000h 01FFh 0200h 03FFh 0400h 05FFh 0600h 07FFh 建 议 同 一 次 修改的数据 第五扇区 第六扇区 第七扇区 第八扇区 放在同一个 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 起始地址 结束地址 扇区,不是同 一次修改的 0800h 09FFh 0A00h 0BFFh 0C00h 0DFFh 0E00h 0FFFh 数据放在不 第九扇区 第十扇区 同的扇区, 不必用满, 起始地址 结束地址 起始地址 结束地址 当然可全用 1000h 11FFh 1200h 13FFh 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 271 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.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, U C M EQU Li ;20MHz以下2,12M以下3,6M以下4,3M以下5,2M以下6,1M以下7, C T S ;字节读,���������������������������� 也可以用MOVC指令读,但起始地址不再是0000H,而是程序存储空间结束地址的下一个地址 MOV IAP_ADDRH, #BYTE_ADDR_HIGH ;送地址高字节 MOV IAP_ADDRL, #BYTE_ADDR_LOW ;送地址低字节 MOV IAP_CONTR, #WAIT_TIME ;设置等待时间 ORL IAP_CONTR, #10000000B ;允许ISP/IAP操作 MOV IAP_CMD, #ISP_IAP_BYTE_READ ;送字节读命令,����������������� ������������������������� 现有A版本每次触发前需重新送命令。 ;以后的B版本在��������������� 命令不需改变时,不需重新送命令 地址需要改变时 才需重新送地址 此两句可以合成一句, 并且只送一次就够了 MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序。 NOP A, ISP_DATA 272 MOV 南通国芯微电子有限公司 ;数据读出到IAP_DATA寄存器后,CPU继续执行程序 ;将读出的数据送往Acc 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站: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 ;送地址高字节单元为FFH,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FFH,防止误操作 ;字节编程,该字节为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 ;送字节编程命令,现有A版本每次触发前需重新送命令。 ;以后的B版本在��������������� 命令不需改变时,不需重新送命令 C T S U C M . d e t i m Li 地址需要改变时 才需重新送地址 此两句可合成 一句,并且只 送一次就够了 MOV IAP_TRIG, #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 MOV IAP_TRIG, #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;字节编程成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FFH,;指向非EEPROM区,防止误操作 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FFH,指向非EEPROM区,防止误操作 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 273 STC15F204EA系列单片机指南 技术支持网站: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 ;送扇区擦除命令,����������������� 现有A版本每次触发前需重新送命令。 ;以后的B版本在��������������� 命令不需改变时,不需重新送命令 MOV IAP_TRIG, MOV C T S IAP_TRIG, U C M . d e t i m Li 此两句可以合 成一句,并且只 送一次就够了 #5Ah ;先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此 #0A5h ;送完A5h后,ISP/IAP命令立即被触发起动 ;CPU等待IAP动作完成后,才会继续执行程序. NOP ;扇区擦除成功后,CPU继续执行程序 ;以下语句可不用,只是出于安全考虑而已 MOV IAP_CONTR, #00000000B ;禁止ISP/IAP操作 MOV IAP_CMD, #00000000B ;去除ISP/IAP命令 ;MOV IAP_TRIG, #00000000B ;防止ISP/IAP命令误触发 ;MOV IAP_ADDRH, #0FFh ;送地址高字节单元为FFH,指向非EEPROM区 ;MOV IAP_ADDRL, #0FFh ;送地址低字节单元为FFH,防止误操作 274 南通国芯微电子有限公司 总机:0513-5501 2928 / 2929 / 2966 传真:0513-5501 2969 / 2956 / 2947 STC15F204EA系列单片机指南 技术支持网站: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 275 STC15F204EA系列单片机指南 技术支持网站:www.STCMCU.com 临时技术支持:13922829991 研发顾问:13922809991 10.4 EEPROM测试程序(不使用模拟串口) 1. C程序: ;STC15F204EA系列单片机EEPROM/IAP 功能测试程序演示 /*------------------------------------------------------------------------------------*/ /* --- STC MCU International Limited ---------------------------------------*/ /* --- 演示STC 15 系列单片机 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
STC15F204EA-35I-DIP20 价格&库存

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

免费人工找货