当前位置:文档之家› 义隆单片机 EM78P153_C语言范例

义隆单片机 EM78P153_C语言范例

义隆单片机 EM78P153_C语言范例
义隆单片机 EM78P153_C语言范例

对于刚接触义隆单片机的朋友,这个文档或许对你有帮助。尤其是使用C语言的朋友,这个程序包含了位定义、定时器、中断等。

C语言的编译器可以去义隆单片机的官网下载,https://www.doczj.com/doc/a41342300.html,,编译软件为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 R63

unsigned 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,@0x04

contw //TCC分频比设为1:32

}

TCC=6; //timer=1/4*(256-6)*32*2=4ms

ISR=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) here

if(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 *

* V ersion: v1.0 *

****************************************************/

static unsigned int TCC @0x01:rpage 0;

static unsigned int PC @0x02:rpage 0;

static unsigned int STA TUS @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 Register

static io unsigned int P6CR @0x06:iopage 0;//Port6 Control Register

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

/*======================================================;

; 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 instructions

mTS == 0x20 ; TCC signal source

; "0" : Internal instruction cycle clock

; "1" : Transition on TCC pin

mTE == 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 pin

mPAB == 0x08 ; Prescaler assignment bit

; "1" : TCC assign to WDT

; "0" : TCC assign to TCC

mPSR2 == 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

/* STA TUS bits */

static bit RST @0x03@7:rpage 0; //bit for reset type

static bit GP1 @0x03@6:rpage 0;

static bit GP0 @0x03@5:rpage 0; //general purpose read/write bits

static bit T @0x03@4:rpage 0; //time-out bit

static bit P @0x03@3:rpage 0; //power down bit

static bit Z @0x03@2:rpage 0; ///Zero flag

static bit DC @0x03@1:rpage 0; //Auxiliary carry bit

static 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 flag

static bit ICIF @0x0F@1:rpage 0; //input status changed interrupt flag

static bit TCIF @0x0F@0:rpage 0;//TCC overflowing interrupt flag

下面是仿真器的设置,要特别注意标记的部分,设置错误就会导致调试失败。

51系列单片机

51系列单片机 51系列单片机最早有Intel公司推出,主要有8031系列,8051系列。后来Atmel 公司以8051的内核为基础推出了AT89系列单片机。其中 AT89C51 AT89C52 AT89S51 AT89S52 AT89S8252等单片机完全兼容8051系列单片机,所有的指令功能也是一样的。就是功能上做了一系列的扩展,比如说AT89S系列都支持ISP 功能,AT89S52 AT89S8252增加了内部WDT功能,增加了一个定时器等功能。为了学习简单Atmel也推出了8051指令完全一样的AT89C2051 AT89C4051等单片机,这些单片机可以看成精简型的8051单片机。比较适合初学者的需要。AVR单片机 AVR单片机也是Atmel公司的产品,最早的就是AT90系列单片机,现在很多AT90单片机都转型给了Atmega系列和Attiny系列,AVR单片机最大的特点是精简指令型单片机,执行速度,据我所知是8位MCU中最快的一种单片机了(相同的振荡频率下)。学习AVR单片机当然可以直接就学,但是建议还是从51系列学起。 PIC单片机 PIC单片机是Microchip公司的产品,它也是一种精简指令型的单片机,指令数量比较少,中档的PIC系列仅仅有35条指令而已,低档的仅有33条指令。但是如果使用汇编语言编写PIC单片机的程序有一个致命的弱点就是PIC中低档单片机里有一个翻页的概念,编写程序比较麻烦。但是我个人认为PIC 还是一个不错的8位MCU. 初学单片机一般是选51系列的单片机,比如说Intel公司的8051系列,Atmel 的AT89系列,STC公司的51系列等等都可以算是51系列单片机。这些单片机的指令系统是一样的。外面出的资料也是最多。建议选择Atmel的AT89系列芯片,出的资料最多。如果你自己要做实验,建议选择 AT89S52 AT89S51 AT89S8252等芯片学习,因为这些“S”的芯片全部支持ISP(在线烧录)只要一根下载线就可以了(建议选择AVR的下载线,为了以后能同时下载 AVR的芯片的程序考虑),编译软件可以到https://www.doczj.com/doc/a41342300.html,上下载。烧录软件就选双龙的SLISP就可以了。这样学习的话无需使用昂贵的编程器,只要一根廉价的下载线就可以了。这类也可以同时进行SPI(同步串行扩展接口),和USART(串行方式通用同步/异步收发器)的学习。而且学习 8051类型片除了资料多以外还有一个好处就是它属于CISC(复杂指令集)结构型单片机。指令系统比较完全,利用汇编语言写程序比较简单,易懂。而且它也有keilC51的C编译器。可以利用C语言来写程序。 当然51类单片机还有很多缺点: 1. 运行速度很慢,(因为是CISC(集中指令)结构,而且芯片为了抗干扰采用了12分频的方法) 2. 所有的I/0口都是准双向口,I/0口的驱动能力弱。(但是AT89的灌电流比较大,大概有20mA左右) 3. 芯片里面的P0口没有上拉电阻(P1,P2,P3口有上拉电阻)如果要输出高电

义隆单片机_总结

义隆单片机总结 1.EM78P173N使用外部中断时,需要外部上拉; 2.建议不用BC清除中断标志位; 3.判断某个I/O口的状态前,先执行MOV R,R 4.义隆C语言注意事项: The total parameters passed to a function should be a fixed number.The compiler does not support uncertain 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. Bit 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:1 unsigned int b1:1 unsigned int b2:1 unsigned int b3:1 unsigned int b4:1 unsigned int b5:1 unsigned int b6:1 unsigned 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.程序写法:

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

51单片机中的汇编语言与C语言.

51单片机中的汇编语言与 C 语言 C 语言, 更多的是为了掌握单片机的应用, C 语言是高效的应用程序开发工具, 与汇编语言比却不是开发高效应用程序的工具。就目前而言, 更多的是为了应用单片机, 开发应用程序, 更多的是强调开发效率, 而不是程序的运行效率 (相对而言。再就是应用程序对单片机内部资源的使用效率, 这在过去, 单片机内部资源紧缺的年代, 特别的强调, 现在已经不是特别重要了。所以, 大多数人都认为,只用 C 语言,就可以应对大多数单片机的应用开发了。 其实,汇编语言跟 C 语言在本质上一样的,只是语言形式不同而已,一个接近底层逻辑, 一个接近人类语言, 本质上都是对寄存器或存储器的读写操作而已。 汇编语言中,用 MOV 来回传送数据, C 语言里,用等号表示数据传送。汇编语言中,用 call 转去执行子过程程序, C 语言里,用个函数名调用子程序。汇编语言中,用 JMP 完成分支转移, C 语言里用 if 、 switch 、 while 、 for 来判断跳转。汇编语言跟 C 一样可以给寄存器指定命名,然后对定义的名称进行操作。汇编语言提供了对很多标志位的操作, C51根据需要也进行了改进, C 语言可以通过 #include给存储器命名来简化操作。 我觉得, C 语言是最接近汇编语言的一种高级语言, 要说不同, 也许具有大量函数的函数库,是 C 语言与汇编语言的最大区别,也是 C 语言比汇编语言有更大开发效率的原因。 在应用汇编语言进行应用程序开发时, 如果精心规划好程序结构, 设计好各种数据结构、子程序、中断程序,积累大量的算法程序(相当于函数库,也可以高效率的用汇编语言进行单片机开发。倒是兼容性、可移植性是汇编语言的最大限制,因为不同单片机有不同的指令系统,而 C 语言把这个问题,交给了机器也就是编译器去解决了。其实, 计算机的发展, 就是把尽可能多的事情交个机器去解决。

51单片机汇编语言教程:13课单片机逻辑与或异或指令详解

51单片机汇编语言教程:第13课-单片机逻辑与或异或指令详解

结果11111001 而所有的或指令,就是将与指仿中的ANL换成ORL,而异或指令则是将ANL换成XRL。即或指令: ORL A,Rn;A和Rn中的值按位'或',结果送入A中 ORL A,direct;A和与间址寻址单元@Ri中的值按位'或',结果送入A中 ORL A,#data;A和立direct中的值按位'或',结果送入A中 ORL A,@Ri;A和即数data按位'或',结果送入A中 ORL direct,A;direct中值和A中的值按位'或',结果送入direct中 ORL direct,#data;direct中的值和立即数data按位'或',结果送入direct中。 异或指令: XRL A,Rn;A和Rn中的值按位'异或',结果送入A中 XRL A,direct;A和direct中的值按位'异或',结果送入A中 XRL A,@Ri;A和间址寻址单元@Ri中的值按位'异或',结果送入A中 XRL A,#data;A和立即数data按位'异或',结果送入A中 XRL direct,A;direct中值和A中的值按位'异或',结果送入direct中 XRL direct,#data;direct中的值和立即数data按位'异或',结果送入direct中。 练习: MOV A,#24H MOV R0,#37H ORL A,R0 XRL A,#29H MOV35H,#10H ORL35H,#29H MOV R0,#35H ANL A,@R0 四、控制转移类指令 无条件转移类指令 短转移类指令 AJMP addr11 长转移类指令

单片机控制系统汇编程序

; step motor control ; ASM for MCS51 mode equ 082h contrl equ 08003h ctl equ 08000h ;8255接口芯片PA口的地址值 Astep equ 01h ;对A相通电,PA口的赋值 Bstep equ 02h ;对B相通电,PA口的赋值 Cstep equ 04h ;对C相通电,PA口的赋值 Dstep equ 08h ;对D相通电,PA口的赋值 dly_c equ 10h ;启动初值(加速度)寄存器 sd1 equ 80 ;0--255 加速度初值:值越小,加速越快 sd2 equ 40 ;

51单片机经典编辑流水灯汇编程序

单片机流水灯汇编程序设计 流水灯汇编程序 8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms PUSH PSW ;现场保护指令(有时可以不加) MOV R4,#2 L3: MOV R2 ,#00H L1: MOV R3 ,#00H L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END

51单片机汇编程序集(二) 2008年12月12日星期五 10:27 辛普生积分程序 内部RAM数据排序程序(升序) 外部RAM数据排序程序(升序) 外部RAM浮点数排序程序(升序) BCD小数转换为二进制小数(2位) BCD小数转换为二进制小数(N位) BCD整数转换为二进制整数(1位) BCD整数转换为二进制整数(2位) BCD整数转换为二进制整数(3位) BCD整数转换为二进制整数(N位) 二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码) 二进制整数(M位)转换为十进制整数(组合BCD码) 三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD21 : MOV NCNT,#00H MOV R2,#00H IBD211 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R3 ORL A,R4 JNZ IBD211 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节

义隆单片机指令集

隆单片机指令系统 3.1.EM78指令概述 EM78156 & EM78P156 单片机共有的58 条指令,其宽度为13 位。每一个指令码可分割成两部份,第一部分为标示指令功能的运算码(OPCODE ),第二部份則指出运算时所需之參数,亦即运算码(OPERAND )。而指令的类型大致可分为下列四种: (1)控制型指令(control operation ):如INT...等等。 (2)面向寄存器(字节操作)型指令(register oriented ):如 MOV A, Reg_B ;move Reg_B to A ADD Reg_B, A ;add Reg_B with A, and ;save in Reg_B ... 等等。 (3)位操作型指令(bit oriented ):如 BC,JBS...等等。 (4)常数型指令(constant operation ):如 MOV A, @0x55 ;move 0x55 to A XOR @0xFF ;Xor A with 0xFF 一般而言,EM78 系列八位微控制器除一个指令需两个周期之外,其他的指令只需一个指令周期,除了对PC (Program Counter)做“写”的指令,需二个指令周期,如(MOV PC, A)。 3.2.EMC 汇编语言指令集 符号解说: 1.符号‘R’:代表一般用途寄存器中的其中一个。 2.符号‘B’:代表一般用途寄存器中的某一位。 3.符号‘K’:代表8位或10位的常数或内容。 4.符号‘A’:代表累加寄存器。 3.2.1. 面向寄存器(字节操作)型指令(26条) 助记符号指令动作标志影响指令周期语言描述 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 助记符号指令动作标志影响指令周期语言描述 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 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 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

EM78系列单片机的开发工具及编程器

第六章EM78系列单片机的开发工具及编程器 EM78单片机的开发工具一般包括:(1)宏汇编(交叉汇编)(2)仿真器(3)程序烧写器。单片机的开发过程如下: 1)用编辑软件(如:EDI T、PE2等)输入源程序(扩展名DT) 2)用宏汇编(ASM456/AS M447)对源程序(*。DT)进行汇编。 3)使用仿真器(ICE456/447)进行程序调试。仿真调试正确转向下一步, 不正确则修改源程序再转向“2”开始。 4)将调试完毕的目标码(*.CDS)用烧写器烧入EM78单片机中。 5)将烧好的单片机插入实际电路中检查,若正确则开发完毕,否则修改 程序转向“2”开始。 下面分别介绍上述三种开发工具。 6.1.宏汇编(交叉汇编)与汇编语言格式 6.1.1.宏汇编程序 ASM456是E M78154/156/256/456的汇编程序。 ASM447是E M78247/447的汇编程序。 ASM456/447是台湾义隆电子公司设计的针对E M78单片机的汇编软件,该软件也包含在仿真器(E8-ICE)的集成调试软件中,也可以直接在仿真器软件中汇编,也可以单独使用。对源程序汇编后会产生如下文件:*.dt:源程序 *.st d:提供给程序设计者参考的标准文件 *.cd s:即一般所谓的目标文件(ob jec t文件) .ice:提供给仿真器(E8-IC E)显示使用 *.li n 及*.ad r:提供给仿真器(E8-I CE)的数据库使用 注:*.i ce及*.s td为可读的文本文件,其余为不可读。 若汇编失败,将产生一个*.e rr文件,内为错误信息,以便设计者排错用。 6.1.2.汇编语言格式 以下就该编译器的語法,作一詳盡介紹。 (1)键入格式 本编译器並不对字之大写或小写作区別,如 "MOV", "Mov", "mOV",和 "MoV" 在解释上是不做区別的。 (2)在常数之前请加小鼠标"@",其它如寄存器(r) 及位(b)之前則不加"@"。例如 MOV A, @0x55 ;add"@" before constant 0x55 BC 0x7, 0x4 ;no"@" before both register ;7 and bit4 SUB 0x10,A ;no"@" before register 0x10

单片机汇编语言经典一百例

51单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY:

MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH

DJNZ R1,$ RET END 五、定时器功能实例 5.1 定时1秒报警 程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50个 0.2秒,即50*0.2=1秒 MOV TMOD,#00000001B;定时器0工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05秒,定时 20次则一秒 11 SETB EA ;开总中断

快速入门单片机大全语言

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式:

义隆单片机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复位引脚可以直接作为输入脚使用,充分提高了微处理器端口的利用率,这样硬件应用电路极为简化,节省了硬件成本。 此外,EM78P153S单片机具有休眠模式,在一些不需要微处理器实时工作的应用场合,可以节省用电量,特别是在使用电池供电时,应用此模式可以延长电池的使用时间;另外在休眠模式下避免了微处理器在运行时受到来自外在杂波信号的干扰而导致程序跑飞。1.1 EM78P152/3S特性 EM78P152/3S的性能如表1.1所示。 表1.1 EM78P152/3S特性 产品特性备注 CPU配置? 1K × 13位片内ROM ? 32 × 8位片内寄存器 ? 5级堆栈用于子程序嵌套 ?小于1.5 mA @ 5V/4MHz ?休眠模式下的典型值为1μA 。 I/O 端口配置? 2组双向I/O 端口:P5,P6 ? 11个I/O引脚 ?唤醒端口:P6 ? 6个可编程下拉I/O 引脚? 7个可编程上拉I/O 引脚? 7个可编程漏极开路I/O 引脚?外部中断:P60 工作电压范围? OTP 版本;工作电压范围:2.3V~5.5V 工作频率范围? IRC模式;振荡模式:4MHz,8MHz,1MHz,455KHz 外设配置? 8位实时时钟/ 计数器,可编程选择其信号源、触发边沿,溢出产生中断 三种中断源? TCC 溢出中断 ?输入端口状态改变中断(可使微控制器从休眠模式唤醒)?外部中断 专有特性?省电模式( 休眠模式) ?可选振荡模式 封装类型? 14引脚DIP:EM78P153SP/S/J ? 14引脚SOP:EM78P153SN/S/J ? 10引脚SSOP:EM78P152SN/S/J 其它?具备一个保护寄存器以防止OTP_ROM中的程序代码被窃取

51单片机串行口汇编语言教程

51单片机汇编语言教程:22课:单片机串行口通信程序设计 1.串行口方式0应用编程8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。 <单片机串行口通信程序设计硬件连接图> 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通信之前,都要先对控制寄存器SCON进行初始化。在方式0中将,将00H送SCON 就能了。 -----------------单片机串行口通信程序设计列子-------------------------- ORG 2000H START: MOV SCON,#00H ;置串行口工作方式0 MOV A,#80H ;最高位灯先亮 CLR P1.0 ;关闭并行输出(避象传输过程中,各LED的"暗红"现象) OUT0: MOV SBUF,A ;开始串行输出 OUT1: JNB TI,OUT1 ;输出完否 CLR TI ;完了,清TI标志,以备下次发送 SETB P1.0 ;打开并行口输出 ACALL DELAY ;延时一段时间 RR A ;循环右移 CLR P1.0 ;关闭并行输出 JMP OUT0 ;循环 说明:DELAY延时子程序能用前面我们讲P1口流水灯时用的延时子程序,这里就不给出

51单片机汇编语言教程:28课音乐程序设计

51单片机汇编语言教程:第28课-音乐程序设计

下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样型号的学习机,只需对应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验办法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。 程序清单(略,请参看源程序的说明)。 程序框图如图2所示。 <单片机音乐程序的设计图> 本课由单片机教程网提供,有问题指出. 硬件连接说明: 随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。。。。 音乐程序汇编代码代码1-------------Voice.asm--------------------------ORG0000H

LJMP START ORG000BH INC20H;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH;12M晶振,形成10毫秒中断 RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT;表头地址送DPTR MOV20H,#00H;中断计数器清0 MOV B,#00H;表序号清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR;查表取代码 JZ END0;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR;取节拍代码送R7

单片机分类及汇总大全

经典的: 1、MCS-51系列Intel公司生产 2、61单片机3、A VR单片机4、MSP 430超低功耗单片机德州仪器(TI)公司生产 5、PIC单片机MicroChip公司生产6、飞思卡尔的单片机7、英飞凌的单片机 1.8051 最早由Intel公司推出8051/31类单片机。由于Intel公司将重点放在186,386,奔腾等与PC类兼容的高档芯片开发上。Intel公司将MCS-51系列单片机中的8051内核使用权以专利互换或出让给世界许多著名IC制造厂商,如Philips 、NEC、Atmel、AMD、Dallas、siemens、Fujutsu、OKI、华邦、LG等。 这些公司在保持与8051单片机兼容基础改善了8051的许多特点。扩展了针对满足不同测控对象要求的外围电路,如满足模拟量输入的A/D、满足伺服驱动的PWM、满足高速输入/输出控制的HSL/HSO、满足串行扩展总线I2C、保证程序可靠运行的的WDT、引入使用方便且价廉的Flash ROM等。提高了速度,降低了时钟频率,放宽了电源电压的动态范围,降低了产品价格。 使得以8051为内核的MCU系列单片机在世界上产量最大,应用也最广泛。80C51已成为8位单片机的主流,成了事实上的标准MCU芯片。 51系列单片机是这些厂商以Intel公司MCS-51系列单片机中的8051为基核推出的各种型号的兼容性单片机。Intel公司MCS-51系列单片机中的8051是其中最基础的单片机型号。 2. Atmel公司(美国) Atmel公司是世界上著名的高性能、低功耗、非易失性存储器和数字集成电路的一流半导体制造公司。Atmel 公司最令人注目的是它的EEPROM 电可擦除技术闪速存储器技术和质量高可靠性的生产技术,在CMOS 器件生产领域中Atmel的先进设计水平优秀的生产工艺及封装技术一直处于世界的领先地位。 这些技术用于单片机生产使单片机也具有优秀的品质,Atmel公司的单片机是目前世界上一种独具特色而性能卓越的单片机,在结构性能和功能等方面都有明显的优势,它在计算机外部设备通讯设备自动化工业控制宇航设备仪器仪表和各种消费类产品中都有着广泛的应用前景。 其生产的AT90系列是增强型RISC(精简指令集)内载FLASH单片机,通常称为A VR系列(Advance RISC)。使用哈佛结构。芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。其增强的RISC结构,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力.A VR单片机工作电压为2.7~6.0V,可以实现耗电最优化.A VR的单片机广泛应用于计算机外部设备,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域. AT91M系列是基于ARM7TDMI 嵌入式处理器的,A TMEL 16/32 微处理器系列中的一个新成员,该处理器用高密度的16 位指令集实现了高效的32 位RISC 结构且功耗很低。另外Atmel的增强型51系列(AT89系列)单片机目前在市场上仍然十分流行,其中A T89S51十分活跃。(l)前缀由字母AT组成,表示该器件是ATMEL 公司的产品(2)型号89CXXXX 中C是表示内部含Flash存储器C表示为CMOS产品89LVXXXX 中LV表示低压产品89SXXXX 中S表示含有串行下载Flash存储器 3.Microchip公司(美国) MicroChip单片机的主要产品是PIC 16C系列和17C系列8位单片机,CPU采用RISC结构,分别仅有33,35,58条指令,采用Harvard双总线结构,运行速度快,低工作电压,低功耗,较大的输入输出直接驱动能力,价格低,一次性编程,小体积。以低价位著称,一般单片机价格都在1 美元以下.Microchip 单片机没有掩膜产品,全部都是OTP 器件(现已推出FLASH 型单片机).Microchip 强调节约成本的最优化设计,是使用量大,档次低,价格敏感的产品.在办公自动化设备,消费电子产品,电讯通信,智能仪器仪表,汽车电子,金融电子,工业控制不同领域都有广泛的应用,PIC 系列(PIC16C5X、PIC16CXX、PIC17CXX、PIC18CXXX、PIC16FXXX、PIC17CXXX、PIC18XXXX)单片机在世界单片机市场份额排名中逐年提高,发展非常迅速。 代理商:实达高奇电子科技有限公司: https://www.doczj.com/doc/a41342300.html,/ 4.TI 公司(美国) MSP430 系列单片机是由TI公司开发的16 位单片机。其突出特点是超低功耗,非常适合于各种功率要求低的场合。有多个系列和型号,分别由一些基本功能模块按不同的应用目标组合而成。采用冯-诺依曼架构,通过通用存储器地址总线(MAB)与存储器数据总线(MDB)将16 位RISC CPU、多种外设以及高度灵活的时钟系统进行完美结合。MSP430能够为当前与未来的混合信号应用提供很好的解决方案。所有MSP430 外设都只需最少量的软件服务。例如,模数转换器均具备自动输入通道扫描功能和硬件启动转换触发器,一些也带有

相关主题
文本预览
相关文档 最新文档