义隆单片机指令

合集下载

应用义隆单片机编程时应注意以下几点

应用义隆单片机编程时应注意以下几点

应用义隆单片机编程时应注意以下几点:
1.当程序多于1K时,将出现跳页情况,这时如果有开中断处理程序,在进入中断后,一定要把STATUS的PS0、PS1位复位为0(即回到第0页ROM),否则当遇到有JMP或CALL等跳转指令时,程序将会出错!
2.当程序多于1K而使用跳转指令BS STATUS PS0或BS STATUS,PS1时,将会影响到中断程序的中断时间,期分频系数不预计(即TCON受影响);并且中断自动关闭。

跳转返回后,一定要重新开中断(如ENI)。

3.注意子程序的嵌套级数。

一般硬件所允许的X级堆栈至少减去一个中断程序所用,即子程序最好使用X-1个嵌套;否则将会出错。

4.任何对R2(即PC)进行直接修改的指令,如:ADD R2,A | MOV R2,A | BC R2,x 等都将会使PC的第9位、10位清零,因此产生的跳转只限于一个程序的前256个地址。

TBL指令即除外,不会改变PC的9位、10位;执行TBL==PC+1+A;可以解决以前对R2(即PC)直接修改所产生的后果。

一般查表子程序放于程序最前端,就是为了避开9位、10位清零。

5.八位单片机的高电平一般为4.5~5V,而低电平一般为1V以下;如何让单片机产生一个2.5V电压呢?可以把要输出2.5V电平的I/O口设置为输出状态,并置为高电平;接着把该输出口设置为输入状态,这时将输出一个2.5V电平电压。

6.由于一个中文为两个字节,所以在注释时应当小心注意,避免在程序的注释出现半个中文字的乱码现象;一旦出现这样的问题,可以导致编译出错或功能不。

义隆单片机中断c语言使用

义隆单片机中断c语言使用

义隆单片机中断c语言使用
根据仪陇单片机TINYC 使用手册翻译中断c 语言,关于中断的现场保护,由于英文手册还没有看懂,所以空来没有写出。

低级中断,中断保护程序
中断执行前对一些寄存器进行保护
Void intcall tcc_1(void) @ 0x03:low_int 0
中断服务程序
Void intcall tcc(void) @ int 0
中断向量数,是指MCU 有几个中断向量,用标号将每种中断向量分开。

编译器根据中断向量数将中断保护程序和中断服务程序结合起来
全局中断向量IntVecIdx
先申明全局中断下向量IntVecIdx
Extern int IntVecIdx;// IntVecIdx 将占用地址0x10,用户将不能再在0x10 定义变量,否则将冲突全局中断向量出错,且编译器不会有错误提示。

当硬件中断向量不止一个,根据中断向量跳转到相应的中断服务程序,用户
可以屏蔽没有使用的中断向量。

Extern int IntVecIdx;//占用0x10
Void _intcall allint(void)@ int
{case 0x04:
;break;
Case
}
Void _intcall tcc_1(void) @0x03:low_int 0。

单片机指令大全

单片机指令大全

引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。

本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。

正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。

2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。

3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。

4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。

5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。

二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。

2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。

3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。

4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。

5.逻辑移位指令:将操作数进行逻辑左移或右移。

三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。

2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。

3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。

4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。

5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。

四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。

2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。

3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。

4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。

用义隆单片机编程应注意的几个原则

用义隆单片机编程应注意的几个原则

二、用仿真器带交流电(AC 220V)仿真的话,必须在目标板加上隔离变压器,否则会将仿真器烧坏。因为仿真器用的并口线,并口的“地”跟开关电源的“地”是连通的,如果在目标板连上市电,那么跟仿真器会形成回路,大电流会将仿真器烧毁,所以使用的时候千万注意。至于隔离的原理,可以参考模拟电子,耦合变压器部分的知识,这里就不说了。
四、不要过多的怀疑单片机。在网上听说义隆单片机不好,那么出点什么事就骂单片机烂,而从来不反省是自己的程序问题。见过不少人打电话过来要我们技术支持。最后查处问题,基本上都不是单片机,仿真器的问题,而且程序处理的不好,有些干脆就是写错程序。所以写程序的时候多一点自我检讨,有好处。
用义隆单片机编程应注意的几个原则
作者:admin /分类:单片机技术 /Tag:义隆单片机
字号:L M S
一、如果用旧版的汇编编译器Elan Wice 的话,Wice自带的编辑器是有缺陷的,写程序的过程中会莫明其妙的多删一行程序,或者出现莫明其妙的符号,而且对汉字支持不好。这些都极其容易出现逻辑错误,郁闷的话可能要查半天,应该尽量的避免。新版的 Wice Plus (支持C语言)解决了这些问题,可以不强制要求用外部代码编辑器。
三、不要想当然,E78PXX系列发展到现在,已经有了很多款单片机了。每个单片机都有差别,特别是涉及到编程部分,所以切忌想当然,以为EM78P156的程序,直接放到EM78P447上面就能用,实际上,你想错了,无论是入口地址,中断地址,中断前处理,寄存器设置,都不同,胡乱的做只会让你吃大亏,所以用每个义隆单片机之前必须好好的阅读芯片资料,如果经常需要用几个不同芯片的话,可以像我那样,做好几个“程序框架”直接套,这些在后面章节会说到。

义隆单片机EM78P153使用讲解

义隆单片机EM78P153使用讲解

基于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复位引脚可以直接作为输入脚使用,充分提高了微处理器端口的利用率,这样硬件应用电路极为简化,节省了硬件成本。

义隆单片机指令[终稿]

义隆单片机指令[终稿]

3.2.2. 面向位操作类指令(10条)
3.2.3. 常数操作和控制类指令(22条)
例:MOV A,@0x16 ;将常数0x16送给寄存器A
3.3.2. 直接寻址
若是使用者要存取寄存器的内容,可以在运算码上直接描述。

l 例:将寄存器0X20的内容,COPY到寄存器0X21中。

MOV A, 0X20
MOV 0X21, A
3.3.3. 间接寻址
这种寻址方式是通过寄存器R4来实现的,R4的bit0-5是用来选择寄存器(地址:00-06,0F-3F)
若是使用者所需要存取的寄存器,有位址相邻的特性,使用间接寻址是很方便的。

l 例:写一个程序,將寄存器0X20~0X3F的值都填0。

;设定A = 0X20。

;设定间接寻址寄存器(0X04)
;的內含值为0X20
;清除0X04所指的寄存器。

;递增间接寻址寄存器(0X04)
;设定A=0X04寄存器的值。

;比较间接寻址的位址是否
;以到0X3F。

若是则结束。

;否则在继续。

MOV A, @0X20
MOV 0X04, A
AGAIN:
CLR 0
INC 0X04
MOV A, 0X04
XOR A, 0X3F
JBS 0X03, 2
JMP AGAIN
END:
3.3.
4. 位寻址
这种位寻址是对寄存器中的任一位(bit)进行操作。

例:BS 0x12,2 ;将寄存器0x12的第2位置为“1”。

3.4.EM78指令说明
--> A .--> R。

ELAN义隆系列单片机解密

ELAN义隆系列单片机解密

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产品,具备优越之性价比。

义隆4位单片机红外遥控车原代码

义隆4位单片机红外遥控车原代码

; Program for EM55000 series Assember; Program is IR car; Reference program date : April 23,2003; Programmer : w.m.liu; Project : em_rx_1; Project Leader :; Program Approval by : w.m.liu; Program Check sum :; Customer :; Customer order code :; fequency test: p2.2 p2.3 connet to vdd p3.0 out 14 khz fequency; ir input : p2.0; f/b mottor: p3.0 p3.2; l/r mottor: p3.1 p3.3include "define.inc"poweron:stop2mov rate2,#8287mov a,#0000bmov p2s,amov a,#0000bmov p3s,amov p4s,amov p4,amov p2,amov p3,apage1call clr_rampage0call clr_rammov m2,#1100bmov a,p2and a,m2caje m2,test_modemov m13,#0110bmov m3,#0001b;jmp testend;**************************************test_mode:page0mov m4,#0001bmov a,#0001bmov p3,atest_mode_loop:mov a,#0001b;; 1xor a,m4;; 1mov m4,a;; 1mov p3,a;; 1mov a,p2;; 1and a,m2;; 1caje m2,test_mode_loop;; 3 -> 9 KHz 110usjmp poweron;-------------------------------------------init:call cl_128jmp rx_start_init;mov timer,#0 ;0----->.85ms 1---->1.7ms 2----->3.4ms 3----->6.8ms ;--------------------------------receive_loop:page1mov m4,#0mov m5,#0mov m6,#0mov m7,#0mov m8,#0mov m13,#0mov m12,#0mov m15,#0page0mov a,m1caje #0,rx_endrx_end@:page0call udchkmov a,m8caje #0,rx_endjmp rx_start@rx_end:page1mov m4,#0mov m5,#0mov m6,#0mov m7,#0mov m8,#0mov m13,#0mov m12,#0mov m1,#0mov m15,apage0mov m1,#0mov m9,#0mov m5,#0mov a,#0000bmov p3,amov p2,amov m0,amov m5,#0end ;;;;;;;;;;;;;;;;;;;;;;;;rx_start_init:page0mov m3,#0001bmov a,m1and a,m3caje #0,rx_end@mov a,m15caje #2,rx_startcall udchkmov a,m8caje #1,rx_startmov a,#0000bmov p3,amov p2,amov p4,arx_start:call voice2rx_start@:page1mov m4,#0mov m5,#0mov m6,#0mov m7,#0mov m8,#0mov m13,#0mov m12,#0mov m15,#0mov m3,#0001bnopnopnopmov a,p2and a,m3caje m3,rx_start_init nopnopnopmov a,p2and a,m3caje m3,rx_start_init call get_receivecaje #15,receive_loop;------------------------------------------------get_receive:call cl_128call cl_128mov m4,#0mov m5,#0mov m6,#0mov m7,#0mov m8,#0mov m13,#0mov m12,#0mov a,#1000bmov p3,acall hl_waitcaje #0,no_receivemov a,#0100bmov p3,arx_receive:mov a,m4caje #0000b,receive_15bitcaje #0001b,receive_14bitcaje #0010b,receive_13bitcaje #0011b,receive_12bitcaje #0100b,receive_11bitcaje #0101b,receive_10bitcaje #0110b,receive_9bitcaje #0111b,receive_8bitcaje #1000b,receive_7bitcaje #1001b,receive_6bitcaje #1010b,receive_5bitcaje #1011b,receive_4bitcaje #1100b,receive_3bitcaje #1101b,receive_2bitcaje #1110b,receive_1bitcaje #1111b,receive_0bitreceive_15bit:;call cl_128 ;15 call cl_128mov a,p2and a,m3caje #0,zero15one15:mov a,#1000bor a,m5mov m5,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero15:mov a,#0010b mov p3,acall hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_14bit:call cl_128 ;14 ;call cl_128mov a,#0001bmov p3,amov a,p2and a,m3caje #0,zero14one14:mov a,#0100bor a,m5mov m5,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero14:mov a,#0000bmov p3,amov a,m13caje #0,no_receivejmp comp_increceive_13bit:call cl_128 ;13 ;call cl_128mov a,p2and a,m3caje #0,zero13one13:mov a,#0010bor a,m5mov m5,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero13:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_12bit:call cl_128 ;12;call cl_128mov a,p2and a,m3caje #0,zero12one12:mov a,#0001bor a,m5mov m5,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero12:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_11bit:call cl_128 ;11 ;call cl_128mov a,p2and a,m3caje #0,zero11one11:mov a,#1000bor a,m6mov m6,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero11:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_10bit:call cl_128 ;10 ;call cl_128mov a,p2and a,m3caje #0,zero10one10:mov a,#0100bmov m6,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero10:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_9bit:call cl_128 ;9 ;call cl_128mov a,p2and a,m3caje #0,zero12one9:mov a,#0010bor a,m6mov m6,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero9:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_8bit:call cl_128 ;8 ;call cl_128mov a,p2and a,m3caje #0,zero8one8:mov a,#0001bor a,m6mov m6,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero8:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_7bit:call cl_128 ;7 ;call cl_128mov a,p2and a,m3caje #0,zero7one7:mov a,#1000bor a,m7mov m7,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero7:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_6bit:call cl_128 ;6 ;call cl_128and a,m3caje #0,zero6one6:mov a,#0100bor a,m7mov m7,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero6:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_5bit:call cl_128 ;5 ;call cl_128mov a,p2and a,m3caje #0,zero5one5:mov a,#0010bor a,m7mov m7,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero5:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_4bit:call cl_128 ;4 ;call cl_128mov a,p2and a,m3caje #0,zero4one4:mov a,#0001bor a,m7mov m7,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero4:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_3bit:call cl_128 ;3 ;call cl_128mov a,p2and a,m3caje #0,zero3one3:mov a,#1000bor a,m8mov m8,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero3:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_2bit:call cl_128 ;2 ;call cl_128mov a,p2and a,m3caje #0,zero2one2:mov a,#0100bor a,m8mov m8,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero2:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_1bit:call cl_128 ;1 ;call cl_128mov a,p2and a,m3caje #0,zero1one1:mov a,#0010bor a,m8mov m8,acall l_waitmov a,m12caje #0,no_receivejmp comp_inczero1:call hl_waitmov a,m13caje #0,no_receivejmp comp_increceive_0bit:call cl_128 ;0 ;call cl_128mov a,p2and a,m3caje #0,zero0one0:mov a,#0001bor a,m8mov m8,a;call l_wait;mov a,m12;caje #0,no_receivejmp comp_inczero0:;call hl_wait;mov a,m13;caje #0,no_receivejmp comp_inccomp_inc:mov a,m4add a,#1mov m4,acaje #0,receive_okjmp rx_receivereceive_ok:mov a,#0retno_receive:mov a,#15ret;-----------------------------------l_wait:l_chk:page1mov m12,#0mov m3,#0001bmov level_count,#0 mov noise_count,#0 mov over_count,#0l_chk_loop:nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopmov a,p2and a,m3caje #0,l_chk_endmov noise_count,#0 mov a,level_count incamov level_count,a caje #0,l_chk_flow jmp l_chk_loopl_chk_end:mov a,noise_count incamov noise_count,a caje #1,l_chk_loop ;jmp l_chk_okl_chk_ok:mov m12,#1retl_chk_flow:mov m12,#0ret;=============================== hl_wait:hl_chk:page1mov m13,#0mov m3,#0001bmov level_count,#0 mov noise_count,#0 mov over_count,#0 wait_h_loop:nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopmov a,p2and a,m3caje m3,wait_h_noise mov noise_count,#0 mov a,level_count incamov level_count,a caje #0,hl_chk_flow jmp wait_h_loop wait_h_noise:mov a,noise_count incamov noise_count,a caje #1,wait_h_loop ;jmp wait_l_start wait_l_start:mov level_count,#0 mov noise_count,#0 mov over_count,#0 wait_l_loop:nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopmov a,p2and a,m3caje #0,wait_l_noise mov noise_count,#0 mov a,level_count incamov level_count,a caje #0,hl_chk_flow jmp wait_l_loop wait_l_noise:mov a,noise_count incamov noise_count,a caje #1,wait_l_loop jmp hl_chk_okhl_chk_ok:mov m13,#1rethl_chk_flow:mov m13,#0ret;*******************************page1mov timer,#2rsttfmov m12,#0000bmov m3,#0001bl_wait_cnt:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,l_wait_endmov a,p2and a,m3caje m3,l_wait_cntnopnopnopmov a,p2and a,m3caje m3,l_wait_cntl_wait_ok:mov m12,#0001bretl_wait_end:mov m12,#0000bret;**************************************;;hl_wait:page1rsttfmov timer,#2mov m13,#0000bmov m3,#0001bhl_wait_cnt:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,hl_wait_endmov a,p2and a,m3caje #0,hl_wait_cntnopnopnopmov a,p2and a,m3caje #0,hl_wait_cntll_wait:rsttfmov timer,#2ll_wait_cnt:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,hl_wait_endmov a,p2and a,m3caje m3,ll_wait_cntnopnopnopmov a,p2and a,m3caje m3,ll_wait_cnthl_wait_ok:mov m13,#0001brethl_wait_end:mov m13,#0000bret;================================================== cp_chk:page1mov a,m6 ;-----------------m5,m6 port31 caje m5,cp_next_chkjmp receive_loopcp_next_chk:page1mov a,m8 ;-----------------m7,m8 power caje m7,cp_okjmp receive_loopcp_ok:page1mov a,m7mov m3,#0100band a,m3caje #0100b,tonmov a,m5mov m3,#0100band a,m3caje #0100b,toff;mov a,m7;caje #0,cp_ok_exitjmp motcp_ok_exit:page0mov a,m1page1caje #0001b,receive_loopjmp rx_end;-------------------------------mot:page0mov a,m1caje #0,rx_endpage1mov a,#0000bmov p4,amov a,m7caje #0001b,mot_m1caje #0010b,mot_m2caje #0011b,mot_m3mot_next:page1mov m3,#0011bmov a,m5and a,m3caje #0001b,mot_m4caje #0010b,mot_m5caje #0011b,mot_m6jmp mot_n;--------------------------------mot_m1:mov a,m5caje #0010b,m1_addjmp m1_no_addm1_add:mov a,#0001bmov timer_f,#1000bor a,timer_fmov p4,ajmp mot_v1m1_no_add:mov a,#0001bmov p4,ajmp mot_v1;--------------------------------mot_m2:mov a,m5caje #0001b,m2_addjmp m2_no_addm2_add:mov a,#0010bmov timer_f,#0100bor a,timer_fmov p4,ajmp mot_v1m2_no_add:mov a,#0010bmov p4,ajmp mot_n;---------------------------mot_m3:mov a,#0011bmov p4,ajmp mot_v1;--------------------------- mot_m4:mov a,#0100bmov p4,ajmp mot_v1mot_m5:mov a,#1000bmov p4,ajmp mot_nmot_m6:mov a,#1100bmov p4,ajmp mot_v1mot_v1:page1mov a,m5mov m3,#1000band a,m3caje #1000b,jmp_spk_s page0mov a,m0caje #5,rx_start;caje #5,rx_start_wmov m0,#5stop2jmp rx_startjmp rx_start_Wmot_n:page1mov a,m5mov m3,#1000band a,m3caje #1000b,jmp_spk_spage0mov a,m0caje #8,rx_start;caje #8,rx_start_Wstop2mov m0,#8jmp rx_start;jmp rx_start_Wjmp_spk_s:stop2page0mov m0,#4jmp rx_start;-------------------------------tspk:stop2page0mov a,m1caje #0,rx_endpl_spk:play2 h1.wavspk_w:; cjp spk_w; call2 ply_tailpage0mov m0,#3page1mov a,m15caje #0,rx_startjmp rx_start_wton:stop2page0mov m1,#0001bmov m0,#0001bjmp rx_starttoff:stop2page0mov m1,#0mov m4,#0mov m0,#0mov a,#0000bmov p3,amov p2,amov p4,aend ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; udchk ;;;;;;;;;;;; udchk:page0mov timer,#2rsttfmov m10,#0mov m11,#0mov m8,#0udchk_loop:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,udchk_cntmov m3,#0001bnopnopnopmov a,p2and a,m3caje #0,udchk_okjmp udchk_loopudchk_cnt:rsttfmov a,m10add a,#1mov m10,acaje #0,udchk_cnt@jmp udchk_loopudchk_cnt@:mov a,m11add a,#1mov m11,acaje #3,udchk_endjmp udchk_loopudchk_end:stop2mov m0,#3mov m8,#0000bretudchk_ok:mov m8,#0001bret;**************************************cl_128:page0mov m10,#0mov m11,#0cl_loop:mov a,m10add a,#1mov m10,acaje #5,cl_cntjmp cl_loopcl_cnt:mov m10,#0mov a,m11mov m11,acaje #2,cl_okjmp cl_loopcl_ok:page1ret;*******************************clr_ram:mov m15,#0mov m14,#0mov m13,#0mov m12,#0mov m11,#0mov m10,#0mov m9,#0mov m8,#0mov m7,#0mov m6,#0mov m5,#0mov m4,#0mov m3,#0mov m2,#0mov m1,#0mov m3,#0ret;@@@@@@####################### voice2 start voice2:page0mov vo_temp,#0010bmov a,statusand a,vo_tempcaje #0010b,voice_retpage0mov a,m0caje #0,for_tailcaje #1,for_headcaje #2,for_startcaje #3,for_idlecaje #4,for_spkcaje #5,for_straightcaje #8,for_idle@jmp voice_retfor_head:stop2mov m0,#2mov m15,#2retfor_tail:mov m15,#1retfor_start:play2 wstart.wavmov m0,#3mov m15,#2retfor_idle:play2 widle.wavmov m0,#3mov m15,#2retfor_idle@:play2 widle.wavmov m0,#8mov m15,#3retfor_straight:play2 wstraight.wavmov m0,#5mov m15,#3retfor_spk:play2 h1.wavh1_wait:mov timer_f,#0010band a,timer_fcaje #0010b,h1_waitmov a,m1caje #1,spk_idlejmp spk_tailspk_idle:mov m0,#3mov m15,#3retspk_tail:mov m0,#0mov m15,#2voice_ret:ret;------------------------;d_4ms:mov timer,#3 ;0----->.85ms 1---->1.7ms 2----->3.4ms 3----->6.8ms rsttfd_4ms_wait:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,d_4ms_exitjmp d_4ms_waitd_4ms_exit:ret;===========================rx_delay:page0mov m10,#0mov m11,#0mov timer,#3rsttfrx_delay_loop:mov a,statusmov timer_f,#0100band a,timer_fcaje #0100b,rx_delay_cntjmp rx_delay_looprx_delay_cnt:rsttfmov a,m10add a,#1mov m10,acaje#0,rx_delay_incjmp rx_delay_looprx_delay_inc:mov a,m11add a,#1mov m11,acaje#2,rx_delay_retjmp rx_delay_looprx_delay_ret:ret;-------------------------------------------delay:nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopret;-------------------------------rx_start_w----------rx_start_w:page0mov m10,#0mov m11,#0mov m9,#0mov timer,#2rsttfrx_w_loop:mov a,statusmov timer_f,#0100band a,timer_fcaje timer_f,rx_w_cntmov m3,#0001bmov a,p2and a,m3caje #0,rx_startjmp rx_w_looprx_w_cnt:rsttfmov a,m10incamov m10,acaje #0,rx_w_cnt@jmp rx_w_looprx_w_cnt@:mov a,m11incamov m11,acaje #3,rx_w_endjmp rx_w_looprx_w_end:mov m0,#3mov a,#0000bmov p3,amov p2,amov a,m1caje #0001b,rx_start_initpage0mov m5,#0jmp rx_endtest:mov a,#1111bmov p3,acall cl_128call cl_128mov a,#0000bmov p3,acall d_4mscall d_4msjmp test。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2.3. 常数操作和控制类指令(22条)
助记符号
指令动作
标志影响
指令周期
语言描述
ADD A,K
A+K->A
Z,C,DC
1
ADD
AND A,K
A&K->A
Z
1
AND
CALL K
PC+1->[SP]
(PAGE,K)->PC
1
Subroutine Call
CONTR
CONT->A
1
Move CONT to the A register
R-1->R 结果为零就跳过下一个指令
1
Decrement R,Skip if 0
DJZA R
R-1->A 结果为零就跳过下一个指令
1
Decrement R,Please in A register, Skip if 0
INC R
R+1->R
Z
1
Increment R
INCA R
R+1->A
Z
1
Increment R,Please in A
3.2.EMC 汇编语言指令集
符号解说:
1.符号‘R’:代表一般用途寄存器中的其中一个。
2.符号‘B’:代表一般用途寄存器中的某一位。
3.符号‘K’:代表8位或10位的常数或内容。
4.符号‘A’:代表累加寄存器。
3.2.1. 面向寄存器(字节操作)型指令(26条)
助记符号
指令动作
标志影响
指令周期
语言描述
Z
1
Exclusive OR
XOR R,A
A XOR R->R
Z
1
Exclusive OR
3.2.2. 面向位操作类指令(10条)
助记符号
指令动作
标志影响
指令周期
语言描述
BC R,B
0->R(B)
1
Bit Clear
BS R,B
1->R(B)
1
Bit Set
JBC R,B
如果R(B)=0,则跳过下一个指令
助记符号
指令动作
标志影响
指令周期
语言描述
COMA R
/R->A
Z
1
Complement R,Place in A
DAA
A寄存器调整为BCD值
C
1
Decimal Adjust
DEC R
R-1->R
Z
1
Decrement R
DECA R
R-1->A
Z
1
Decrement R,Place in A
DJZ R
MOV A,@0x0f
MOV 0x10,A ;R10= 00001111
BC 0x10,3 ;R10= 00000111
BS
Bit Set
语 法
BS R,b
编 码
0
101b
bbrr
rrrrr
操作內容
1 --> R(b)
受影响的标志

说 明
R寄存器的位“b” 被设成1。
举例说明
將狀态寄存器的零标志設成1。
ADD A,R
A+R->A
Z,C,DC
1
ADD
ADD R,A
A+R->R
Z,C,DC
1
ADD
AND A,R
A&R->A
Z
1
AND
AND R,A
A&R->R
Z
1
AND
CLR R
0->R
Z
1
Clear Register
CLRA
0->A
Z
1
Clear the A register
COM R
/R->R
Z
1
Complement R
语 法
ADD A, k
编 码
1
1111
kkkk
kkkk
操作內容
K + A --> A
受影响的标志
Z,C,DC﹔零标志﹐进位标志和辅助标志都会受影响
说 明
將A寄存器的內含值加上立即值K﹐並且把结果载入A寄存器中。
举例说明
下两行指令敘述为 A = R11+ R12.
MOV A,0x11
ADD A,0x12 ;A = R11+ R12
R(0)->C
C->A(7)
C
1
Rotate Right R through Carry,Place in the A Register
SWAP R
R(0-3)->R(4-7)
R(4-7)->R(0-3)
1
Swap R
SWAPA R
R(0-3)->A(4-7)
R(4-7)->A(0-3)
1
Swap R
1
Bit Test, Skip if Clear
JBS R,B
如果R(B)=1,则跳过下一个指令
1
Bit Test, Skip if Set
RLC R
R(N)->R(N+1)
R(7)->C
C->R(0)
C
1
Rotate Left R through Carry
RLCA R
R(N)->A(N+1)
R(7)->C
JZ R
R+1->R, 结果为零就跳过下一个指令
1
Increment R,Skip if 0
JZA R
R+1->A, 结果为零就跳过下一个指令
1
Increment R,Place in the A regiser,Skipif 0
MOV R,A
A->R
1
Move Data
MOV A,R
R->A
Z
1
Move Data
受影响的标志
Z,C,DC﹔零标志﹐进位标志和辅助进位标志都会受影响
说 明
將A寄存器的內含值加上R寄存器的內含值﹐並且把结果载入A寄存器中。
语 法
ADD R,A
编 码
0
0011
11rr
rrrrr
操作內容
A + R --> R
受影响的标志
Z,C,DC﹔零标志﹐进位标志和辅助标志都会受影响
说 明
將A寄存器的內含值加上R寄存器的內含值﹐並且把结果载入R寄存器中。
;的內含值为0X20
;清除0X04所指的寄存器。
;递增间接寻址寄存器(0X04)
;设定A=0X04寄存器的值。
;比较间接寻址的位址是否
;以到0X3F。若是则结束。
;否则在继续。
MOV A, @0X20
MOV 0X04, A
AGAIN:
CLR 0
INC 0X04
MOV A, 0X04
XOR A, 0X3F
RETI
[堆栈顶端]->PC,使能中断
1
Return from Interrupt
RETL K
K->A,
[堆栈顶端]->PC
Return Immediate Data tothe A Register
SLEP
0->WDT,振荡器停止振荡
T,P
1
Into Sleep mode
SUB A,K
K-A->A
JBS 0X03, 2
JMP AGAIN
END:
3.3.4. 位寻址
这种位寻址是对寄存器中的任一位(bit)进行操作。
例:BS 0x12,2 ;将寄存器0x12的第2位置为“1”。
3.4.EM78指令说明
ADD
Add
语 法
ADD A,R
编 码
0
0011
10rr
rrrrr
操作內容
A + R --> A
下两行指令敘述为 R10= R11+ R12.
MOV A,0x11
MOV 0x10,A
MOV A,0x12
ADD 0x10,A ;R10= R11+ R12
下两行指令敘述为 A = 0x01 + 0x01.
MOV A,@0x01 ;A = 0x01
ADD A,@0x01 ;A = 0x02
AND
And
举例说明
HERE:
CALL SUBRTN
CONT:
MOV A,@10
执行CALL指令之前
PC = address HERE
执行CALL指令之后
PC = address SUBRTN
[Top of Stack] = address CONT
3.3.3. 间接寻址
这种寻址方式是通过寄存器R4来实现的,R4的bit0-5是用来选择寄存器(地址:00-06,0F-3F)
若是使用者所需要存取的寄存器,有位址相邻的特性,使用间接寻址是很方便的。
l例:写一个程序,將寄存器0X20~0X3F的值都填0。
;设定A = 0X20。
;设定间接寻址寄存器(0X04)
IOW R
A->IOCR
1
Move A to IOCR
JMP K
(PAGE,K)->PC
1
Unconditional Branch
MOV A,K
相关文档
最新文档