义隆单片机 EM78P153_C语言范例
- 格式:doc
- 大小:87.50 KB
- 文档页数:6
第四章EM78系列单片机程序设计( 2 )作者:佚名来源:不详录入:Admin更新时间:2008-7-26 20:12:55点击数:2【字体:】5.3.4. 液晶LCD显示驱动程序1.LCD驱动器1621HT1621为128(32×4)段LCD驱动器。
它可设置为1/2或1/3偏置且通过S/W配置设置为2,3或4个共用的LCD驱动器。
这使得HT1621适于多LCD应用。
LCD驱动时钟图5.6 HT1621功能框图从系统时钟内产生,一般为256KHZ。
图5.6为HT1621功能框图2.EM78X56与HT1621接口EM78X56与HT1621接口只须四条线。
CS线用以初始化串行接口电路且终止EM78X56与HT1621的通信。
若CS=1,EM78X56及HT1621间发送的命令首先被禁止即而进行初始化。
在模式命令或模式转换发出前,需要一高电平脉冲以初始化HT1621的串行接口,数据的读/写及命令的写人必须通过数据线。
RD为输入,RAM内的数据在RD信号的下降沿同步送出至数据线上。
这使EM78X56可以在RD信号的升沿及下一个下降沿到来期间读人正确的数据。
WR为写输入,数据线上的数据、地址及命令将在WR 信号上升写入HT1621。
一条可选择的IRQ线也可用作EM78X56及HT1621间的接口。
1.读/写命令时序控制及命令集4. 应用电路图 5.7 HT1621应用框图5. 编程示例R1 EQU 0X01R2 EQU 0X02R3 EQU 0X03IOC5 EQU 0X05IOC6 EQU 0X06PORT5 EQU 0X05PORT6 EQU 0X06IOCB EQU 0X0BIOCC EQU 0X0CIOCD EQU 0X0DIOCE EQU 0X0EIOCF EQU 0X0FS1 EQU 0X10S2 EQU 0X11S3 EQU 0X12S4 EQU 0X13S5 EQU 0X14S6 EQU 0X15S7 EQU 0X16S8 EQU 0X17S8S7 EQU 0X18S9 EQU 0X19S10 EQU 0X1ACOMMAND EQU 0X1BR_LOOP EQU 0X1CS_LOOP EQU 0X1DSEG0 EQU 0X1ESEG1 EQU 0X1FSEG2 EQU 0X20SEG3 EQU 0X21SEG4 EQU 0X22SEG5 EQU 0X23SEG6 EQU 0X24SEG7 EQU 0X25SEG8 EQU 0X26SEG9 EQU 0X27SEG10 EQU 0X28LCD_MAP EQU 0X29LCDRAM EQU 0X2AKEY2 EQU 0X2BKEY7 EQU 0X2CKEY_SX EQU 0X2DLP_CNT0 EQU 0X2ELP_CNT1 EQU 0X2FORG 0X000JMP MAINNOPMAIN: CLRA ;P50-P53 SET TO OUTPUT IOW IOC5IOW IOCEMOV A,@0B11110000 ;P60-P63 SET TO OUTPUT IOW IOC6 ;P64-P67 SET TO INPUTMOV A,@0X0FMOV PORT5,A ;P50-P53 RESET TO 1CLR PORT6 ;P60-P63 RESET TO 0BC PORT5,0 ;RESET 1621 INTERFACEBS PORT5,0BC PORT5,0BS PORT5,0 ;P50 SET TO 1,/CS=1MOV A,@0B11100011 ;COMMAND TNORMAL MOV COMMAND,ACALL C_WRITEMOV A,@0B10000000 ;COMMAND /IRQ DISMOV COMMAND,ACALL C_WRITEMOV A,@0B00010100 ;COMMAND XTAL32KMOV COMMAND,ACALL C_WRITEMOV A,@0B00101001 ;COMMAND BIAS1/3,4 COM MOV COMMAND,ACALL C_WRITEMOV A,@0B00001000 ;COMMAND TONE OFF MOV COMMAND,ACALL C_WRITEMOV A,@0B00000101 ;COMMAND WDT DISMOV COMMAND,ACALL C_WRITEMOV A,@0B00000100 ;COMMAND TIMER DIS MOV COMMAND,ACALL C_WRITEMOV A,@0B00000001 ;COMMAND SYS_ENMOV COMMAND,ACALL C_WRITEMOV A,@0B00000011 ;COMMAND LCD_ONMOV COMMAND,ACALL C_WRITEMOV A,@0X0FF ;LCD MAP SET TO 1MOV SEG0,AMOV SEG2,AMOV SEG3,AMOV SEG4,AMOV SEG5,AMOV SEG6,AMOV SEG7,AMOV SEG8,AMOV SEG9,AMOV SEG10,ACLR LCD_MAP ;FIRST MAP ADD IS 0CALL LCD_WRITE ;DISPLAY ALL SEGS (BREAK):LCD_OFF: CLR COMMAND ;TURN OFF LCD SYSTEM CALL C_WRITEC_WRITE: MOV A,@0X08MOV R_LOOP,ABC PORT5,0 ;/CS=0BC PORT5,2 ;/WR=0BS PORT5,3 ;DATA=1BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0BC PORT5,3 ;DATA=0BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0BC PORT5,3 ;DATA=0BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0C8_C1_WRITE: JBC COMMAND,7 ;COMMAND,7=0 JMP SET_DATA_1BC PORT5,3 ;DATA=0JMP NEXT_1SET_DATA_1: BS PORT5,3 ;DATA=1NEXT_1: RLC COMMANDBS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0DJZ R_LOOPJMP C8_C1_WRITEBC PORT5,3 ;DATA=0BS PORT5,2 ;/WR=1BS PORT5,0 ;/CS=1RETLCD_WRITE: BS PORT5,2 ;/WR=1BC PORT5,0 ;/CS=0BC PORT5,2 ;/WR=0BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0BC PORT5,3 ;DATA=0BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0BS PORT5,3 ;DATA=1BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;WRITE THE LCD MEMORY ADD 00 BC PORT5,3 ;DATA=0, 1BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;DATA=0, 2BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;DATA=0, 3BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;DATA=0, 4BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;DATA=0, 5BS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0;DATA=0, 6BS PORT5,2 ;/WR=1MOV A,SEG0MOV LCDRAM,A ;SEG0CALL LCDDATA_WMOV A,SEG1MOV LCDRAM,A ;SEG1CALL LCDDATA_WMOV A,SEG2MOV LCDRAM,A ;SEG2CALL LCDDATA_WMOV A,SEG3MOV LCDRAM,A ;SEG3CALL LCDDATA_WMOV A,SEG4MOV LCDRAM,A ;SEG4CALL LCDDATA_WMOV A,SEG5MOV LCDRAM,A ;SEG5CALL LCDDATA_WMOV A,SEG6MOV LCDRAM,A ;SEG6CALL LCDDATA_WMOV A,SEG7MOV LCDRAM,A ;SEG7CALL LCDDATA_WMOV A,SEG8MOV LCDRAM,A ;SEG8CALL LCDDATA_WMOV A,SEG9MOV LCDRAM,A ;SEG9 CALL LCDDATA_WMOV A,SEG10MOV LCDRAM,A ;SEG10CALL LCDDATA_WBS PORT5,0 ;/CS=1RETLCDDATA_W: MOV A,@0X04 ;RAM DATA WRITEMOV R_LOOP,ADATA_W JBC LCDRAM,0JMP RAM_SETBC PORT5,3 ;DATA=0JMP NEXT_3RAM_SET: BS PORT5,3 ;DATA=1NEXT_3: RRC LCDRAMBS PORT5,2 ;/WR=1BC PORT5,2 ;/WR=0DJZ R_LOOPJMP DATA_WRETEOP5.3.5. 异步串行通信在EM78系列单片机内部没有异步串行口,所以必须用软件来完成这个工作。
ELAN义隆系列单片机解密由台湾ELAN 设计、制造的EM78系列8位元单片机以它低价为优势,广泛应用于:大小家电类、通讯类、玩具游戏类、计算机及周边类、智能卡类、汽车及防盗类、医用保健类、仪表类、灯光控制类、音响类、手机及周边类等。
ELAN义隆EM78P、EM78系列单片机解密型号:HOLTEK合泰系列单片机解密HOLTEK单片机:台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品. HOLTEK 合泰HT46/47/48/49、HT其它单片机解密型号:MICON麦肯系列单片机解密由台湾MICON 麦肯公司设计的OTP/MASK掩膜型8 位单片机自1997 年推向市场以来深受广大用户欢迎,MDT 系列单片机与PIC 相比最大特点是温度范围为工业级最大工作频率可达到20MHz 不分型号和后缀及售价十分便宜SONIX松翰系列单片机解密应用领域:电子玩具产品:发声玩具、遥控玩具、音乐玩具、早教机、电子词典、电子故事书等小家电产品:电风扇、电暖器、消毒柜、微波炉、电磁炉、电饭煲、电子炖盅等遥控器:电视、空调、VCD、DVD、机顶盒遥控器充电器:锂电、镍氢、镍铬等智能充电器电子称:厨房称、人体称、口袋称、脂肪称松翰(SONIX)SN8P全系列单片机解密型号:PORTEK普泰系列单片机解密普泰半导体凭借着对产业趋势的掌握及卓越技术之极致深耕,在半导体产业界占一席之地。
从各项消费性电子产品的研发设计,兼顾客户多样化不同的需求;普泰提供了长期及稳定的产品,让客户快速进入市场以确保产品竞争优势,更降低了客户生产成本。
普泰(PORTEK)PTK87XX全系列单片机解密型号:TENX十速系列单片机解密八位单片机可兼容PIC/EMC等芯片,其具备相等或更优越抗干扰功能,适用于频道选择器、天线控制系统、功率放大器、智能型芳香机、超声波测距仪、遥控风扇、负离子风扇、遥控器、电卷发器、电动窗帘、按摩器、按摩椅、按摩鞋、按摩棒、雾化器、豆浆机、打蛋机、咖啡壶、小家电、密码锁、定时器等消费产品应用;四位单片机可实现定时、时钟、温度、湿度、倒计时等不同功能及组合,具标准芯片及依客户所需选择最佳性价比之四位单片机母体设计;USB控制芯片可兼容赛普拉斯( Cypress )系列芯片,适用于游戏机、跳舞毯、功夫机、手柄、鼠标、个人音箱等USB产品,具备优越之性价比。
第一章EM78系列单片机简介台湾义隆公司推出的八位EM78系列单片机已有多年,并广泛应用在家用电器、工业控制、仪器等方面,其优良的单片机结构和性能为用户所认同,但与AT89系列、PIC系列、Z86系列、GMS97系列等单片机比较而言,EM78系列单片机进入内地市场稍晚一些,所以一般人并不太了解。
本章将对EM78系列单片机的主要特点作一个概述,供大家参考(以EM78X56为例)。
第一章一、先进的单片机结构EM78系列单片机将众多功能集于一身,这其中包括ALU、ROM、RAM、I/O、堆栈、中断控制器、定时/计数器、看门狗、电压检测器、复位电路、振荡电路等,成为真正意义上的单片机小系统。
第二章二、优越的数据处理性能EM78系列单片机采用RISC结构设计、单周期、单字节及流水线指令、五级堆栈、RAM数量从32~157个,最短指令周期100ns,程序页面为1K(多至4页),与其它一些单片机相比,EM78系列单片机具有更高、更快的运行处理速度。
第三章三、强大的单片机新功能这包括:①①三个中断源:定时器中断、I/O唤醒中断、外部信号输入中断②②R-OPTION功能:如果用户程序有几个版本,希望能放在同一ROM内,则通过R-OPTION功能便可实现此想法,R-OPTION功能设置是在相关I/O上上拉或下拉电阻,通过判断相关I/O的状态来选择执行内部何种版本程序。
③③内置电压检测器:当电源电压掉在一额定值以下时单片机始终处于复位状态,以此提高系统的复位性能。
④④低功耗设计:正常工作电流2mA、休眠状态电流1μA⑤⑤多功能I/O口:可程序设置为I/O上拉、下拉、开路等方式⑥⑥I/O唤醒功能:通过I/O变化唤醒处于休眠状态的单片机⑦⑦内置看门狗定时器:提高单片机抗干扰能力第四章四、灵活的功能选择设计通过软件分别设置:①①指令周期的时钟周期数(2/4)②②特殊指令的指令周期数(1/2)③③振荡方式(内部RC、外部RC、XTAL低频、XTAL高频等)④④R-OPTION功能开/关⑤⑤WDT开/关第五章五、通俗易懂的指令系统EM78系列单片机指令系统采用与大家熟知的MCS-51指令风格设计,共计58条指令,大家通过较短的时间便能掌握运用。
EMC(义隆)8K 烧写器使用手册书 EMC(义隆)烧写器 DWTR 8K 使用手册(V.HUSOON20100817) 前言 我们做过很多义隆(EMC)的芯片解密和破解,样片客户确认正确后,到客户自己 烧写芯片的时候,我们发现很多客户不怎么会使用 EMC 的编程器。
针对 EM78 系 列单片机一次性烧写 (OTP) 芯片, 义隆公司推出了高性能带液晶显示介面的 EM78 全系列烧录器:DWRITER。
它可以烧入目前义隆公司生产的 EM78 系列 OTP 单片 机:EM78P153/156/447/458/459/451 等。
但由于 EMC 的专用烧录器“DWTR 8K” 说明书不详细,并且都是英文的,界面不是很友好,客户使用比较困难,比 5K ,经常会出现一些问题,所以下面我 的还难用(DWTR 5K 使用说明下载地址) 们以图文形式讲解一下 EMC 的 8K 专用烧录器“DWTR 8K”的使用流程. 单片机解密热线:021-******** 56311936 企业 QQ:800015035沪生电子 陈金林 2010.8.18上海沪生电子-单片机解密专家 021-******** 021-******** EMC(义隆)8K 烧写器使用手册书 DWTR 8K 是在 5K 的基础上升级的一款专业用于 EMC 系列单片机烧写的编程 器。
相对于 5K,8K 编程器支持的功能和型号更多,运用更广泛,检测性能更 强大。
目前我们解密 EMC 系列单片机提供的也都是 DWTR 8K 的熔丝配置位 (5K 编程器于 2010 年已经停产) 。
DWTR 8K 分为工规和商规两种规格(工规和商规两种主控芯片不同,通过更换 主芯片来实现工规和商规的变换,不需要换编程器) ,分别用于工业级和商业级 单片机的烧写;商业级和工业级的单片机的区别简单的理解为就是工业级的后 面带有 N 字样,例如:EM78P156E 的是商业级,EM78P156N 就是工业级的。
第五章EM78系列单片机程序设计5.1.EM78 系列八位微控器特色指令用法5.1.1.查表指令与用法EM78 系列八位微控器是利用 (1)―call",(2) 改变PC (或“tbl"),(3)―retl k" 三个步骤来查表的。
其中“retl k" 是将常数 k 的值传至工作寄存器 "A" 中。
步骤 (2) 中若利用“mov 0x2,a",或“add 0x2,a" 等等指令来改变PC,则因为此等指令会將 PC (R2) 的位 8、9 清除 (在 EM78056 只清除位 8),所以查表的内容只能放在程序每个 PAGE 的較低的 256 个位址。
步骤 (2) 中若利用“tbl" 指令来改变PC,则因为此指令不会將PC (R2) 的位 8、9 清除,而保留“tbl" 所在位址的位 8、9,所以查表的内容可以放在程序每个 PAGE 中的任何位址。
例:查表table add 0x02,a ;將相对位置加入 PC 而改变了PCretl @0x19 ;传回常数内容 19h 至 "A"retl @0x74 ;传回常数内容 74h 至 "A"retl @0x2e ;传回常数内容 2eh 至 "A"retl @0x54 ;传回常数内容 54h 至 "A"retl @0x4b ;传回常数内容 4bh 至 "A"inc 0x18mov a,0x18 ;欲查的内容的相对位置放在"A"call table ;查表mov 0x10,a ;查表得到的内容移至 R10 中5.1.2.分 PAGE 的用法1. 程序跳 PAGE 的用法:EM78 系列八位微控器將其 Program Memory (ROM) 分成数个 PAGE,每个 PAGE 的长度是 1K (EM78056 除外)。
基于EM78P153S的应用设计(V1.0)目录第一章EM78P153S的初识 (1)1.1 EM78P152/3S特性 (1)1.2 EM78P152/3S引脚 (2)1.3 功能寄存器 (2)1.3.1 累加器与端口控制寄存器 (2)1.3.2中断状态寄存器与中断使能寄存器 (3)1.3.3 操作寄存器 (4)1.3.4 特殊功能寄存器 (6)1.4 数据存储器的配置 (7)1.5 休眠与唤醒 (7)1.6 分频器 (9)1.7 定时器/计数器TCC (9)第二章EM78系列单片机应用软件的编辑与仿真 (11)2.1 Simulator的下载与安装 (11)2.2 Simulator的使用方法 (11)2.3 Simulator系统常用命令汇总 (14)2.4 Simulator仿真中的常见问题 (15)第三章EM78系列单片机的汇编指令 (17)3.1 寻址方式 (17)3.2 伪指令 (18)3.3 指令速查表 (18)第四章EM78P153S应用软件设计 (20)4.1 外部中断程序 (20)4.2 花样灯程序 (22)4.2.1 设计需求 (22)4.2.2 软件设计 (23)4.2.3 硬件设计 (37)4.2.4 元器件明细表 (38)第五章EM78系列单片机应用程序的烧录 (39)5.1 程序的转换过程 (39)5.2 烧录器与烧录软件 (40)5.3 烧录步骤 (41)第一章 EM78P153S的初识EM78P152/3S是采用低功耗高速CMOS工艺设计开发的8位微控制器,它的内部有一个1024×13位一次性可编程只读存储器(OTP_ROM) ,可见1k的只读存储器(ROM)决定了应用程序不能够太多,否则应用程序机器码将无法烧录到芯片中。
硬件设计中,EM78P152/3S可以通过设置代码选项寄存器使微处理器工作在内部RC 振荡模式(IRC)下,此模式下采用上电复位模式而不需要外接时钟电路;同时利用上电自动复位而不需要外接复位电路,P63复位引脚可以直接作为输入脚使用,充分提高了微处理器端口的利用率,这样硬件应用电路极为简化,节省了硬件成本。
8位微控制器产品规格产品规格书书1.0义隆电子股份有限公司2015.3商标告知:IBM 为一个注册商标,PS/2是IBM 的商标之一。
Windows 是微软公司的商标。
ELAN 和ELAN 标志 是义隆电子股份有限公司的商标。
版权所有 © 2015义隆电子股份有限公司所有权利保留台湾印制本使用说明文件内容如有变动恕不另作通知。
关于该规格书的准确性、适当性或者完整性,义隆电子股份有限公司不承担任何责任。
义隆电子股份有限公司不承诺对本使用说明文件之内容及信息有更新及校正之义务。
本规格书的内容及信息将为符合确认之指示而变更。
在任何情况下,义隆电子股份有限公司对本使用说明文件中的信息或内容的错误、遗漏,或者其它不准确性不承担任何责任。
由于使用本使用说明文件中的信息或内容而导致的直接,间接,特别附随的或结果的损害, 义隆电子股份有限公司没有义务负责。
本规格书中提到的软件(如果有),都是依据授权或保密合约所合法提供的,并且只能在这些合约的许可条件下使用或者复制。
义隆电子股份有限公司的产品不是专门设计来应用于生命维持的用具,装置或者系统。
义隆电子股份有限公司的产品不支持而且禁止在这些方面的应用。
未经义隆电子股份有限公司书面同意,任何个人或公司不得以任何形式或方式对本使用说明文件的内容之任一部分进行复制或传输。
义隆电子股份有限公司总公司:地址:台湾新竹科学园区创新一路12号电话:+886 3 563-9977 传真:+886 3 563-9966 *****************.tw http :// 香港分公司:义隆电子隆电子((香港香港))有限公司 九龙观塘巧明街95号世达中心19楼A 室电话:+852 2723-3376 传真:+852 2723-7780 **************.hkUSA:Elan InformationTechnology Group (USA) P .O. Box 601Cupertino, CA 95015 USATel : +1 408 366-8225 Fax : +1 408 366-8225深圳分公司:义隆电子义隆电子((深圳深圳))有限公司 深圳市南山区高新技术产业园南区高新南六道迈科龙大厦8A邮编:518057电话:+86 755 2601-0565 传真:+86 755 2601-0500******************.cn上海分公司:义隆电子义隆电子((上海上海))有限公司 地址:上海市浦东新区张江高科碧波路5号科苑大楼6楼邮编:201203电话:+86 21 5080-3866 传真:+86 21 5080-0273 ******************.cn目录目录1 综述 (1)2 特性 (1)3 引脚配置 (2)4 引脚描述 (6)5 功能结构图 (11)描述 (12)功能描述6 功能6.1 操作寄存器 (12)6.1.1 R0/IAR (间接寻址寄存器) (12)6.1.2 R1, TCC (定时时钟计数器) (12)6.1.3 R2, PC (程序计数器) (12)6.1.4 R3, SR (状态寄存器) (15)6.1.5 R4, RSR (RAM选择寄存器) (16)6.1.6 Bank0 R5, Port 5 (Port 5 I/O数据和寄存器页面选择) (16)6.1.7 Bank0 R6, Port 6 (Port 6 I/O数据寄存器) (16)6.1.8 Bank0 R7, Port 7 (Port 7 I/O数据寄存器) (17)6.1.9 Bank0 R8, Port 8 (Port 8 I/O数据寄存器) (17)6.1.10 Bank0 R9, LCDCR (LCD控制寄存器) (17)6.1.11 Bank0 RA, LCD_ADDR (LCD地址寄存器) (18)6.1.12 Bank0 RB, LCD_DB (LCD数据缓存器) (18)6.1.13 Bank0 RC, CNTER (计数器使能寄存器) (19)6.1.14 Bank0 RD, SBPCR (系统时钟、驱动频率及PLL频率控制寄存器) (19)6.1.15 Bank0 RE, IRCR (IR&Port 5设置控制寄存器) (22)6.1.16 Bank0 RF, ISR (中断状态寄存器) (23)6.1.17 Bank1 R5, P5HDSCR (Port 5高驱动/下沉控制寄存器) (24)6.1.18 Bank1 R6, P6HDSCR (Port 6高驱动/下沉控制寄存器) (24)6.1.19 Bank1 R7, P78HDSCR (Port 7~8高驱动/下沉控制寄存器) (24)6.1.20 Bank1 R8, ADSR1 (ADC输入选择寄存器1) (24)6.1.21 Bank1 R9, ADSR2 (ADC输入选择寄存器2) (25)6.1.22 Bank1 RA, ADCR (ADC控制寄存器) (26)6.1.23 Bank1 RB, ADISR (ADC输入通道&内部参考选择寄存器) (27)6.1.24 Bank1 RC, ADDL (模数转换数据的低字节) (28)6.1.25 Bank1 RD, ADDH (模数转换数据的高字节) (28)6.1.26 Bank1 RE, IMR2 (中断屏蔽寄存器2) (28)6.1.27 Bank1 RF, SF2 (中断状态寄存器2) (28)6.1.28 Address: 10h~3Fh; R10~R3F (通用目的寄存器) (28)目录6.2 特殊目的寄存器 (29)6.2.1 A (累加器) (29)6.2.2 IOC50, P5CR (Port 5 I/O& Port 7、P8,LCD段控制寄存器) (29)6.2.3 IOC60, P6CR (Port 6 I/O控制寄存器) (30)6.2.4 IOC70, P7CR (Port 7 I/O控制寄存器) (30)6.2.5 IOC80, P8CR (Port 8 I/O控制寄存器) (30)6.2.6 IOC90, RAM_ADDR (128字节RAM地址) (30)6.2.7 IOCA0, RAM_DB (128字节RAM数据缓存器) (31)6.2.8 IOCB0, CNT1PR (计数器1预设值寄存器) (31)6.2.9 IOCC0, CNT2PR (计数器2预设值寄存器) (31)6.2.10 IOCD0, HPWTPR (高电平脉宽定时器预设值寄存器) (32)6.2.11 IOCE0, LPWTPR (低电平脉宽定时器预设值寄存器) (32)6.2.12 IOCF0, IMR (中断屏蔽寄存器) (32)6.2.13 IOC61, WUCR (唤醒和 P57/IROUT灌电流控制寄存器) (33)6.2.14 IOC71, TCCCR (TCC控制寄存器) (33)6.2.15 IOC81, WDTCR (WDT控制寄存器) (34)6.2.16 IOC91, CNT12CR(计数器1、2的控制寄存器) (35)6.2.17 IOCA1, HLPWTCR (高/低电平脉宽定时器控制寄存器) (36)6.2.18 IOCB1, P6PH (Port 6上拉控制寄存器) (37)6.2.19 IOCC1, P6OD (Port 6漏极开路控制寄存器) (37)6.2.20 IOCD1, P8PH (Port 8上拉控制寄存器) (38)6.2.21 IOCE1, P6PL (Port 6下拉控制寄存器) (38)6.3 TCC&WDT预分频器 (38)6.4 I/O端口 (41)6.5 复位与唤醒 (41)6.6 振荡器 (47)6.6.1 振荡器模式 (47)6.6.2 锁相环(PLL模式) (47)6.6.3 晶体振荡器/陶瓷谐振器(晶振) (48)6.6.4 带内部电容的RC振荡模式 (49)6.7 上电参考 (49)6.7.1外部上电复位电路 (50)6.7.2 残余电压保护 (50)6.8 中断 (51)6.9 LCD驱动器 (52)6.9.1 R9/LCDCR (LCD控制寄存器) (52)6.9.2 RA/LCD_ADDR (LCD地址寄存器) (53)6.9.3 RB/LCD_DB (LCD数据缓存器) (53)6.9.4 RD/SBPCR (系统时钟、驱动频率及PLL频率控制寄存器) (54)目录6.10 红外遥控应用/PWM波形的产生 (58)6.11 模数转换器(ADC) (62)6.11.1 ADC控制寄存器 (62)6.11.2 ADC取样时间 (66)6.11.3 AD转换时间 (66)6.11.4 ADC工作在休眠模式 (66)6.11.5 编程过程/注意事项 (67)6.12 代码选项 (68)6.13 指令集 (69)6.13 时序图 (72)7 绝对最大值 (73)8 电气特性 (73)8.1 DC电气特性 (73)8.2 AC电气特性 (75)9 AD转换特性 (76)附录A 订购及制造信息 (77)B 封装类型 (78)C 封装信息 (79)D EM78P516N烧录引脚清单 (85)E 品质保证和可靠性 (86)E.1 地址缺陷检测 (86)目录规格修订历史1.0 初版2015/03/19EM78P516N8位微控制器产品规格书 (V1.0) 03.19.2015 • 11 综述EM78P516N 是采用低功耗高速CMOS 工艺设计开发的8位微控制器。
义隆单片机总结1.EM78P173N 使用外部中断时,需要外部上拉;2.建议不用BC清除中断标志位;3.判断某个I/O口的状态前,先执行MOV R, R4. 义隆C语言注意事项:The total parameters passed to a function should be a fixed number. The compiler does not supportuncertain parameter_list.Recursive functions are not supported in the compiler. (不支持递归)Do not use “struct” or “union” or “bit” as parameter for function.Function pointer is not supported.Bit data type cannot be used as a return value.Bit data type is not supported in the IO control register.Bi t is a reserved word, so DO NOT use it as a name of “struct” or “union”.Only global variable can be declared as “bit” data type.You cannot assign location for Bit data in local field. Otherwise compilation error will occur.For reduced RAM bank wastage, it is suggest that you use global variable in function, instead of using argument.5. Bit data type cannot be used in “struct” and “union.” It is recommended to use“bitfield” instead, such as:union mybit {unsigned int b0:1unsigned int b1:1unsigned int b2:1unsigned int b3:1unsigned int b4:1unsigned int b5:1unsigned int b6:1unsigned int b7:1};6.bit变量推荐使用Struct 定义:struct{uint8_t b0:1;uint8_t b1:1;uint8_t b2:1;uint8_t b3:1;uint8_t b4:1;uint8_t b5:1;uint8_t b6:1;uint8_t b7:1;}7.程序写法:The Compiler allows you to access the C variable in the inline assembly as follows:mov a, %<variable name> //move variable value to ACCmov a, @%<variable name> //move address of variable to ACCeg1:int temp;temp=0x03; //assume temp is at 0x21 of bank 0_asm {mov a, %temp} //move value 0x03 to ACC_asm {mov a, @%temp} //move address 0x21 to ACC6.Eg:asm{// Save procedure of rpage, iopage and bank registermov a,0x3mov %nbuf, amov a, 0x04mov %nbuf+1, abs 0x03, 7bs 0x03, 6 //Switch to other rpages……//Restore procedure of rpage, iopage and bankmov a, % //registermov 0x03, amov a, %nbuf + 1mov 0x04, a}7.eg:#define SetIO(portnum, var)_asm {mov a, @var} \_asm {iow portnum}#define SetReg(reg, 3) _asm {mov a, @3} \_asm {iow portnum}8. Reserved Common Registers OperationCompiler saves the common registers (0x11~0x1F) which the Compiler uses. Note the usage of “reti” instruction in restoring inline assembly in some MCUseg:EM78567: This particular MCU has only one interrupt vector. The hardware does not save nor restore any register and Compiler just can save and restore R3 and R4.void _intcall interrupt(void) @ int{// Write your code (inline assembly or C) here//restore ACC and R5_asm {reti //tell compiler to recover common registers hereSWAPA 0X1EMOV 0X5,ASWAP 0X1FSWAPA 0X1F}}void _intcall interrupt_l(void) @ 0x08:low_int 0{//save ACC and R5_asm {MOV 0X1F,ASWAPA 0X5MOV 0X1E,APAGE @0X0}}8.ELAN C语言程序优化(1)对位变量的取反操作,应该使用变量异或来实现,不能使用“~”,不推荐使用“!”,Eg:对P67取反推荐 PORT6 ^= 0X80;,不推荐 P67 = !P67;(2)尽量不使用复杂运算,如果必须,尽量减少运算次数,可使用临时变量存储计算结果;9.I2C调试总结:(1)通信双方要共地,(如:仿真器与目标板要共地);(2)SDA读取状态时,应设置为输入;10.。
对于刚接触义隆单片机的朋友,这个文档或许对你有帮助。
尤其是使用C语言的朋友,这个程序包含了位定义、定时器、中断等。
C语言的编译器可以去义隆单片机的官网下载,,编译软件为eUIDE。
本程序用以取代原有产品的RS触发器,以及RS输出与另外一个变量进行逻辑与运算的功能,如果逻辑运算结果为1,则两个IO口都要输出高电平,并保持30s和45s。
否则输出低电平。
下面是代码部分。
#include"EM78P153S.H"#define DISI()_asm{disi}#define WDTC()_asm{wdtc}#define NOP()_asm{nop}#define ENI()_asm{eni}#define SLEP()_asm{slep}#define uchar unsigned char#define Trig_s R65//相当于51中的位定义#define Trig_r R64#define ccc R63unsigned int COUNTER;unsigned int temp;bit Trig_q;bit L1;bit flag;bit flag2;void Init(){P6CR=0x38; //PORT6设为输出P6CR=0x38; //PORT6设为输出R60 = 0;R61 = 0;R62 = 0;Trig_q = 0;COUNTER=0;flag = 0;}void main(){WDTC();DISI();//ODCR = 0x30; //漏极开路控制寄存器WDTCR=0; //禁止WDT_asm{mov a,@0x04contw //TCC分频比设为1:32}TCC=6; //timer=1/4*(256-6)*32*2=4msISR=0; //清TCC中断标志位IMR=0x01; //开定时器中断ENI();Init();while(1){Trig_q = (!Trig_s)||(Trig_r&&Trig_q);//RS触发器的方程R60 = Trig_q;L1 = Trig_q&&ccc;//与另外一个变量进行逻辑与运算if(L1 == 1) //如果运算结果为1{R61 = 1;//输出高电平R62 = 1; //输出高电平temp = 0;}else{if(flag == 1 )//30秒标志位{flag = 0;R61 = 0;}if(flag2 == 1)//45秒标志位{flag2 = 0;R62 = 0;}}}}void _intcall interrupt(void) @ int//定时器中断服务程序{// Write your code (inline assembly or C) hereif(TCIF==1){ISR&=0XFE; //清TCC中断标志位TCC=6; //TCC赋初值COUNTER++;if(COUNTER>=25){COUNTER=0;temp++;if(temp >=30){//temp = 0;flag = 1;}if(temp >=45){temp = 0;flag2 = 1;}}}}void _intcall interrupt_l(void) @ 0x08:low_int 0{}下面是EM78P153S.H的代码/***************************************************** Header file for the Elan ** EM78P153E chip ** EM78P153S chip ** Title: EM78X153 include file ** Description: The Definition of EM78x153 ** Registers and Bits ** Company: ELAN MICROELECTRONICS (SZ) LTD. ** Author: HongXi.Tang ** Date: 10/05/2005 ** Version: v1.0 *****************************************************/static unsigned int TCC @0x01:rpage 0;static unsigned int PC @0x02:rpage 0;static unsigned int STATUS @0x03:rpage 0;static unsigned int RSR @0x04:rpage 0;static unsigned int PORT5 @0x05:rpage 0;static unsigned int PORT6 @0x06:rpage 0;static unsigned int ISR @0x0F:rpage 0;static io unsigned int P5CR @0x05:iopage 0;//Port5 Control Registerstatic io unsigned int P6CR @0x06:iopage 0;//Port6 Control Registerstatic io unsigned int PDCR @0x0B:iopage 0; //Push-down Control Registerstatic io unsigned int ODCR @0x0C:iopage 0; //Open-drain Control Registerstatic io unsigned int PHCR @0x0D:iopage 0; //Push-high Control Registerstatic io unsigned int WDTCR @0x0E:iopage 0; //WDT Control Registerstatic io unsigned int IMR @0x0F:iopage 0; //Interrupt Mask Register/*======================================================;; Special Purpose Registers Define ;; ======================================================;;; A: Accumulator; It can't be addressed.;; CONT: Control Register;;{mINT == 0x40 ; Interrupt enable flag; "0" : Masked by DISI or hardware interrupt; "1" : Enabled by ENI/RETI instructionsmTS == 0x20 ; TCC signal source; "0" : Internal instruction cycle clock; "1" : Transition on TCC pinmTE == 0x10 ; TCC signal edge; "0" : Increment if the transition from low to high takes place on TCC pin; "1" : Increment if the transition from high to low takes place on TCC pinmPAB == 0x08 ; Prescaler assignment bit; "1" : TCC assign to WDT; "0" : TCC assign to TCCmPSR2 == 0x04 ;mPSR1 == 0x02 ;mPSR0 == 0x01 ; (PSR0~PSR2): TCC/WDT prescaler Select bits; |------|------|------|----------|----------|; | PSR2 | PSR1 | PSR0 | TCC Rate | WDT Rate |; |------|------|------|----------|----------|; | 0 | 0 | 0 | 1:2 | 1:1 |; | 0 | 0 | 1 | 1:4 | 1:2 |; | 0 | 1 | 0 | 1:8 | 1:4 |; | 0 | 1 | 1 | 1:16 | 1:8 |; | 1 | 0 | 0 | 1:32 | 1:16 |; | 1 | 0 | 1 | 1:64 | 1:32 |; | 1 | 1 | 0 | 1:128 | 1:64 |; | 1 | 1 | 1 | 1:256 | 1:128 |; | -----|------|------|----------|----------|;};*///static io unsigned int P5CR @0x05:iopage 0;//static io unsigned int P6CR @0x06:iopage 0;//static io unsigned int PDCR @0x0B:iopage 0; //Push-down Control Register //static io unsigned int ODCR @0x0C:iopage 0; //Open-drain Control Register //static io unsigned int PHCR @0x0D:iopage 0; //Push-high Control Register //static io unsigned int WDTCR @0x0E:iopage 0; //WDT Control Register//static io unsigned int IMR @0x0F:iopage 0; //Interrupt Mask Register/* STATUS bits */static bit RST @0x03@7:rpage 0; //bit for reset typestatic bit GP1 @0x03@6:rpage 0;static bit GP0 @0x03@5:rpage 0; //general purpose read/write bitsstatic bit T @0x03@4:rpage 0; //time-out bitstatic bit P @0x03@3:rpage 0; //power down bitstatic bit Z @0x03@2:rpage 0; ///Zero flagstatic bit DC @0x03@1:rpage 0; //Auxiliary carry bitstatic bit C @0x03@0:rpage 0; //carry flag/* PORT5 bits */static bit R53 @0x05@3:rpage 0;static bit R52 @0x05@2:rpage 0;static bit R51 @0x05@1:rpage 0;static bit R50 @0x05@0:rpage 0;/* PORT6 bits */static bit R67 @0x06@7:rpage 0;static bit R66 @0x06@6:rpage 0;static bit R65 @0x06@5:rpage 0;static bit R64 @0x06@4:rpage 0;static bit R63 @0x06@3:rpage 0;static bit R62 @0x06@2:rpage 0;static bit R61 @0x06@1:rpage 0;static bit R60 @0x06@0:rpage 0;/* interrupt static register(RF) */static bit EXIF @0x0F@2:rpage 0; //External interrupt flagstatic bit ICIF @0x0F@1:rpage 0; //input status changed interrupt flagstatic bit TCIF @0x0F@0:rpage 0; //TCC overflowing interrupt flag下面是仿真器的设置,要特别注意标记的部分,设置错误就会导致调试失败。