义隆单片机 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 除外)。
对于刚接触义隆单片机的朋友,这个文档或许对你有帮助。
尤其是使用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下面是仿真器的设置,要特别注意标记的部分,设置错误就会导致调试失败。