当前位置:文档之家› 单片机35个实例1(汇编)

单片机35个实例1(汇编)

单片机35个实例1(汇编)
单片机35个实例1(汇编)

1.闪烁灯

1.实验任务

如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

2.电路原理图

图4.1.1

3.系统板上硬件连线

把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。

4.程序设计内容

(1).延时程序的设计方法

作为单片机的指令的执行的时间是很短,数量大微秒级,因此,

我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太

大,所以我们在执行某一指令时,插入延时程序,来达到我们

的要求,但这样的延时程序是如何设计呢?下面具体介绍其原

理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒

机器周期微秒

MOV R6,#20 2个 2

D1: MOV R7,#248 2个 2 2+2×248=498 20×

DJNZ R7,$ 2个2×248 (498

DJNZ R6,D1 2个2×20=40

10002

因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7

=248时,延时10ms,以此为基本的计时单位。如本实验要求

0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如

下:

DELAY: MOV R5,#20

D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

(2).输出控制

如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据

发光二极管的单向导电性可知,这时发光二极管L1熄灭;当

P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我

们可以使用SETB P1.0指令使P1.0端口输出高电平,使用

CLR P1.0指令使P1.0端口输出低电平。

5.程序框图

如图4.1.2所示

图4.1.2 6.汇编源程序

ORG 0

START: CLR P1.0

LCALL DELAY

SETB P1.0

LCALL DELAY

LJMP START

DELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

END

7. C语言源程序

#include

sbit L1=P1^0;

void delay02s(void) //延时0.2秒子程序{

unsigned char i,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void main(void)

{

while(1)

{

L1=0;

delay02s(); L1=1;

delay02s(); }

2.模拟开关灯

1.实验任务

如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。

2.电路原理图

图4.2.1

3.系统板上硬件连线

(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;

(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;

4.程序设计内容

(1).开关状态的检测过程

单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端

口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关

K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,

即输入低电平,相当开关闭合。单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。

(2).输出控制

如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。

5.程序框图

图4.2.2

6.汇编源程序 ORG 00H

START: JB P3.0,LIG

CLR P1.0

SJMP START

LIG: SETB P1.0 SJMP START

END

7. C语言源程序

#include sbit K1=P3^0;

sbit L1=P1^0;

void main(void)

{

while(1)

{

if(K1==0)

{

L1=0; //灯亮

}

else

{

L1=1; //灯灭

}

}

}

3.多路开关状态指示

1.实验任务

如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。

2.电路原理图

图4.3.1

3.系统板上硬件连线

(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;

(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;

4.程序设计内容

(1.开关状态检测

对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。

(2.输出控制

根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB 方法一次指示。

5.程序框图

读P1口数据到A CC中

A CC内容右移4次

A CC内容与F0H相或

A CC内容送入P1口

图4.3.2 6.方法一(汇编源程序)

ORG 00H

START: MOV A,P1;P1=1111 0101

ANL A,#0F0H;P1=1111 0000

RR A

RR A

RR A

RR A

ORL A,#0F0H

MOV P1,A

SJMP START

END

MOV A,P1

SWAP A

ORL A,#0F0H;A=11110000 MOV P1,A;P1=0101 1111 END

7.方法一(C语言源程序)#include unsigned char temp;

void main(void)

{

while(1)

{

temp=P1>>4;

temp=temp | 0xf0;

P1=temp;

}

}

8.方法二(汇编源程序)

START: JB P1.4,NEXT1 CLR P1.0

SJMP NEX1

NEXT1: SETB P1.0

NEX1: JB P1.5,NEXT2

CLR P1.1

SJMP NEX2

NEXT2: SETB P1.1

NEX2: JB P1.6,NEXT3

CLR P1.2

SJMP NEX3

NEXT3: SETB P1.2

NEX3: JB P1.7,NEXT4

CLR P1.3

SJMP NEX4

NEXT4: SETB P1.3

NEX4: SJMP START

END

9.方法二(C语言源程序)#include

void main(void) {

while(1)

{

if(P1_4==0) {

P1_0=0;

}

else

{

P1_0=1;

}

if(P1_5==0) {

P1_1=0;

}

else

{

P1_1=1;

}

if(P1_6==0) {

P1_2=0;

}

else

{

P1_2=1;

}

if(P1_7==0)

{

P1_3=0;

}

else

{

P1_3=1;

}

}

}

4.广告灯的左移右移

1.实验任务

做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时

P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

2.电路原理图

图4.4.1

3.系统板上硬件连线

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单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

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字节

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

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

单片机流水灯汇编程序设计 开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 程序A: ;用最直接的方式实现流水灯 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: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 程序B: ;用移位方式实现流水灯

ajmp main ;跳转到主程序 org 0030h ;主程序起始地址 main: mov a,#0feh ;给A赋值成11111110 loop: mov p1,a ;将A送到P1口,发光二极管低电平点亮 lcall delay ;调用延时子程序 rl a ;累加器A循环左移一位 ajmp loop ;重新送P1显示 delay: mov r3,#20 ;最外层循环二十次 d1: mov r4,#80 ;次外层循环八十次 d2: mov r5,#250 ;最内层循环250次 djnz r5,$ ;总共延时2us*250*80*20=0.8S djnz r4,d2 djnz r3,d1 ret end 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。 ORG 0 ;程序从0地址开始 START: MOV A,#0FEH ;让ACC的内容为11111110 LOOP: MOV P2,A ;让P2口输出ACC的内容 RR A ;让ACC的内容左移 CALL DELAY ;调用延时子程序 LJMP LOOP ;跳到LOOP处执行 ;0.1秒延时子程序(12MHz晶振)=================== DELAY: MOV R7,#200 ;R7寄存器加载200次数 D1: MOV R6,#250 ;R6寄存器加载250次数 DJNZ R6,$ ;本行执行R6次 DJNZ R7,D1 ;D1循环执行R7次 RET ;返回主程序

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

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

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 方波输出 程序介绍:口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。

程序实例(): ORG 0000H MAIN: ;直接利用口产生高低电平地形成方波步移位 ;显示个,十,百,千算机的内部计算都是二进 制,而二进制每除一个2,实际上是向右移一次。所以为了计算方便,我们选择取6个数,最后在算除法的时候,只需要用单片机自带的右移位命令移2次就行了。 27 十六进制六位数加法(数码显示) 程序实例: ORG 0000H MAIN: ADNUMBER EQU 30H ;AD转换值 ADDNUMBER EQU 31H ;加数值1

ADL EQU 32H ;// ADH EQU 33H ;ADL转换高低位值 DISL EQU 34H ;// DISH EQU 35H ;显示高低位值 ADDTOTAL EQU 36H ;第一次AD转换值ADDJW EQU 37H ;加法进位数 ADDHOLD EQU 38H ADDFLAG EQU 39H ;加标志 ENDFLAG EQU 40H ;赋初值//////////////////////////////////////////// MOV ADDHOLD,#00H MOV ADDNUMBER,#00H MOV ADL,#00H MOV ADH,#00H MOV DISL,#00H

#第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象和寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列和52子系列,说明MOV A,direct指令和MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 和MOV A.24H (2)MOV A,R0和MOV A,@R0 (3)MOV A,@R0和MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码和执行下列指令后的结果(指各有关寄存器、RAM单元和端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

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

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、指令格式:

LCD1602-51单片机汇编程序.

1602汇编程序, 51单片机汇编程序,仅需修改引脚定义即可。晶振大小 12M ,程序测试完全正确。内部包含写数据、写命令(包括读忙和不读忙、初始化等子函数。调用时先给 LCD_DAT赋值,给出需要写入的数据或命令,然后调用。 ; 端口引脚定义区 LCD_RS BIT P2.4 ;1602数据命令选择端口 LCD_RW BIT P2.5 ;1602读写选择端口 LCD_EN BIT P2.6 ;1602使能端口 LCD_DATA EQU P0 ;1602数据端口 ; 变量声明区 ALL_FLAG EQU 20H ; 标志位 LCD_FLAG EQU ALL_FLAG.7 ;1602读忙标志位 LCD_DAT EQU 30H ;1602数据命令字 DELAYED EQU 31H ; 延时字 /***************************************** 1602读命令函数,高位存至 LCD_LAG中 *****************************************/ LCD_R_DATA: MOV LCD_DATA,#0FFH LCD_BUSY: CLR LCD_RS

SETB L CD_RW NOP SETB L CD_EN NOP MOV Acc,LCD_DATA MOV C,Acc.7 MOV LCD_FLAG,C CLR LCD_EN NOP JB LCD_FLAG,LCD_BUSY RET /***************************************** 1602写数据函数,数据存在 LCD_DAT *****************************************/ LCD_W_DATA: LCALL LCD_R_DATA SETB L CD_RS CLR LCD_RW NOP

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口流水灯时用的延时子程序,这里就不给出

单片机主要使用汇编语言

1.单片机主要使用汇编语言,而编写汇编语言程序设计人员必须精通 (指令系统)和(单片机硬件结构)。 2.CHMOS工艺是(CMOS)工艺和(HMOS)工艺结合,具有(低功 耗)的特点。 3.与8051比较80C51的最大特点是(使用CHMOS工艺)。 4.MCS—51单片机的时钟电路包括2部分,即芯片内的(高增益反相 放大器)和芯片外跨接的(晶体振荡器)与(微调电容)。 5.在MCS—51中,位处理器的数据位存储空间是由(专用寄存器)的 可寻址位和内部RAN为寻址区的(128)个位。 6.MCS—51的4个I/O口中,P0是真正的双向口,而其它的口则为准 双向的,这一区别在口线电路结构中表现在(口的输出缓冲器)的 不同上。 7.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容 不是操作数,而是操作数的(地址)。 8.在直接寻址方式中,只能使用(8)位二进制数作为直接地址,因此 其寻址对象只限于(内部RAM)。 9.在变址寻址方式中,以(累加器A)作变址寄存器,以(DPTR)或 (PC)作基址寄存器。 10.在相对寻址方式中,寻址得到的结果是(程序转移的目的地址)。 11.中断技术是解决资源竞争的有效方法,因此可以说中断技术实质上 是一个资源(共享)技术。 12.中断采样用于判断是否有中断请求信号,但MCS——51中只有(外 中断)才有中断采样的问题。 13.响应中断后,首先把(PC)内容压入堆栈,然后把长指令送(PC), 使程序转向(程序存储器)中的地址区。 14.从单片机的角度看,连接到数据总线的输出口应具有(锁存)功能, 连接到数据总线的输入口应具有(三态缓冲)功能。 15.在MCS—51单片机系统中,采用的编址方式是(统一编址方式)。 16.在查询和中断两种数据输入输出控制方式中,效率较高的是(中断 方式)。 17.输入口扩展是为了实现数据的(缓冲)功能,输出口扩展是为了实 现数据的(锁存)功能。 18.异步串行数据通信侦格式由(起始)位、(数据)位、(奇偶校验) 位和(停止)位组成。 19.串行接口电路的主要功能是(串行)化和(反串行)化,把侦中格 式信息滤除而保留数据位的操作是(反串行)化。 20.MCS—51的串行口在工作方式0下,是把串行口作为(同步移位) 寄存器使用。在串入并出移位下作(并行输出)口使用,在并入串 出移位下作(并行输入)口使用。 21.使用定时器/计数器1设置串行通信波特率时,应把定时器/计数器1 设定为工作方式(2),即(自动重新加载)方式。 22.D/A转换必须设置数据锁存器,这是因为(转换需要一定时间才能 完成,数字量需要稳定一段时间)。 23.对于电流输出的D/A转换器,为了得到电压的转换结果,应使用(运 算放大器)。 24.在脉冲调控法控制电机启动和调节电机转速的控制电路中,可使用 D/A转换器产生(调控脉冲)。 25.使用双缓冲方式的D/A转换器,可以实现多路模拟信号的(同步) 输出。 26.A/D转换器,按转换原理可分为4种,即(计数)式、(双积分)式、 (涿次逼近)式和(并行)式。 27.A/D转换器芯片ADC0809中,可作为查询的状态标志,可作为中断 请求信号使用的(转换结束)信号。28.把数/模转换器转换的数据传送给单片机,可使用的控制方式有(定 时传送)、(查询)和(中断)3中。 29.假定累加器A是内容为30H,执行指令:1000H:MOVC A,·A+PC 后把(1031H)单元送A中。 30.DPTR内容8100H,A内容40H执行MOVC A,·A+DPTR后送入 A的是(8140H)单元的内容。 31.SP=60H,ACC=30H,B=70H,执行PUSH ACC PUSH B后SP 为62H,61H为30H,62H为70H。 32.SP=62H,(61H)=30H,(62H)=70H执行POP DPH POP DPL后 DPTR为7030H,SP为60H。 33.A=50H,B=0A0H执行MUL AB后,B为32H,A为00H,CY为0, OV为1。 34.A=0FBH,B=12H执行DIV AB后,A为0DH,B为11H,CY为0, OV为0。 35.A=83H,R0=17H,(17H)=34H,执行ANL A,#17H ORL 17H, A XRL A,@R0 CPL A 后,A的内容为(CBH)。 1.80C51与87C51的区别在于(内部程序存储器的类型不同)。 2.80C51芯片采用的半导体工艺是(CHMOS)。 3.对程序计数器PC的操作(是自动进行啊)。 4.单片机程序存储器的寻址范围由PC决定,MCS—51的PC为16位, 因此其寻址范围是(64KB)。 5.PC和DPTR的结论中错误的是(它们都具有加“1”功能)。 6.不属于位处理器资源的是(通用寄存器的可寻址位)。 7.在相对寻址方式中,“相对”是指相对于(当前指令的末地址)。 8.对程序存储器的读操作,只能使用(MOVC指令)。 9.执行返回指令时,返回的断点是(调用指令下一条指令的首地址)。 10.可以为访问程序存储器提供和构成地址的有(PC、A、DPTR)。 11.原来寄存器0组为当前寄存器,现要改1组为当前寄存器组,不能 使用指令(MOV PSW。3,1)。 12.不是给程序存储器扩展使用的是(/WR). 13.不是给数据存储器扩展使用的是(/EA). 14.2片INTEL2732(4K×8),除应使用P0的8条外,还至少使用P2口的 口线(5条). 15.中断查询,查询的是(中断标志位). 16.在MCS—51中需要外加电路实现的中断撤除的是(电平方式的外部 中断). 17.执行中断返回指令,要从堆栈弹出断点地址, 从堆栈弹出的断点地址 送给(PC). 18.MCS—51中断优先级叙述中,错误的是(同时同级的多中断请求,将形 成阻塞,系统无法响应). 19.三态缓冲器的输出应具有3种状态,其中不包括(低阻抗状态). 20.在接口电路中的“口”一定的一个(可编址的寄存器). 21.在LED显示中,为了输出位控和段控信号,应使用指令(MOVX). 22.在D/A转换\并分时输入数据应用中,它的2级数据锁存结构可以(保 证各模拟电压能同时输出). 23.把DAC0832连接双缓冲方式数据转换中,错误的是(在程序中使用一 条MOVX指令输出数据). 24.执行MOV SP,#3AH/ MOV A,#20H / MOV B,#30H/ PUSH ACC/ PUSH B/ POP ACC/ POP B后,A和B的内容为(30H 20H) 1.MCS—51单片机的/EA信号有何功能?在使用8031时/EA信 号引脚如何处理? 答:/EA访问程序存储器控制信号,当/EA信号为低电平时,则对RO M的读操作限定在外部程序存储器,而当/EA信号为高电平时,则对RO M的读操作的从内部程序存储器开始,并可延续至外部程序存储器.在 使用8031时/EA信号引脚应接地. 2.内部RAM低128单元划分为哪3个主要部分?说明个部分的 使用特点答:分为寄存器区\位寻址区\用户RAM区 寄存器区:一般有2种使用方法1是以寄存器的形式使用,用寄 存器符号表示,2是以存储单元的形式使用,以单元地址表示. 位寻址区:一种是以位地址的形式,另一种是以存储单元地址加位 的形式表示. 用户RAM区:只能以存储单元的形式使用,其它没有任何规定和 限制. 3.堆栈有哪些功能?堆栈指示器(SP)的作用是什么?在程序设计 时,为什么要对SP重新赋值? 答:堆栈功能:保护断点和保护现场. SP的作用:为了指示栈顶地址所以要设置堆栈指示器(SP) SP的内容一经确定,堆栈的位置也就跟着确定下来,因为堆栈的 位置的浮动的,所以要对SP的初始化赋不同的值. 4.使单片机复位有几种方法?复位后机器的初始状态如何? 答:复位操作有上电自动复位和按键手动复位两重方式.. 复位后单片机 进入初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单 元开始执行程序. 1.把长度为10HD的字符串从内部RAM的输入缓冲区inbuf向设在外部 RAM的输出缓冲区outbuf进行传送,一直进行到遇见回车符CR或整个字 符串传送完毕。 MOV R0,#inbuf/ MOV DPTR,#outbuf/ MOV R,#10H/ LOOP1:MOV A, @R0/ CJNE A,#0DH,LOOP2/ SJMP HERE/ LOOP2:MOVX @DPTR A/ INC R0/ INC DPTR/ DJNZ R1,LOOP1/HERE:SJMP HERE / END 2.内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“— 1”作结束标志。找出最小数。 MOV R0,#list/ LOOP1:MOV A,@R0/ CJNE A,#0FFH,LOOP2/ SJMP HERE/ LOOP2:INC R0/ MOV R1,A/ CLR C/ SUBB A,@R0/ JC LOOP3/ MOV A,@R0/ LOOP3:INC R0/ MOV A,R1/ SJMP L1/ HERE: SJMP HERE/ END 3.搜索一串ASCII码字符中最后一个非空格字符,字符串从外部RAM8100H 单元开始存放,并用一个回车符(0DH)作结束。编程实现搜索并把搜索 到的非格字符的地址存入内部RAM单元40H和41H中,其中高字节放入 41H单元。 MOV DPTR,#8100H/ LOOP1:MOVX A,@DPTR/ INC DPTR/ CJNE A, #0DH,LOOP1/ LOOP2:DEC DPL/ MOVX A,@DPTR/ CLR C/ SUBB A, #20H/ JZ LOOP2/ MOV 41H,DPH/ MOV 40H,DPL/ SJMP $/ END 4.从内部RAM20H单元开始存放一组带符号数,字节个数存在1FH中。请 统计出其中大于0、等于0和小于0的数的数目,并把统计结果分别存入 ONE、TWO、THREE3个单元中。 MOV R0,#20H/ MOV ONE,#00H/ MOV TWO,#00H/ MOV THREE, #00H/ L0:MOV A,@R0/ JNZ L1/ INC TWO/ SJMP L2/ L1:JNB ACC.7, L3/ INC THREE/ SJMP L3/ L3:INC ONE/ L2:INC R0/ DJNZ 1FH, L0/ HERE:SJMP HERE 5.5个双字节数,存放在外部RAM从barf开始的单元中,求它们和,把和 存放在sum单元中,请编程实现。 MOV R0,#barf/ MOV R3,#05H/ MOV R1,#SUM/ MOV R2,#03H/ CLR A/ L1:MOV @R1,A/ DJNZ R2,L1/ L2:CLR C/ MOV R1, #SUM/ MOV A,@R1/ SDDC A,@R0/ MOV @R1,A/ INC R0/ INC R1/ MOV A,@R0/ MOV A,R1,A/ INC R0/ MOV A,#00H/ MOV @R1,A/ INC R0/ DJNZ R3,L2 HERE:SJMP HERE 6.有晶振频率为6MHZ的MCS—51单片机,使用定时器0以定时方法在P1.0 输出周期为400us,占空比为10:1的矩形脉冲,以定时工作方式2编程实现. X1=28-20=236=0ECH X2=28-180=76=4CH ORG 0000H/ AJMP MAIN/ ORG 000BH/ AJMP S1/ ORG 0500H/ MAIN:MOV TMOD,@#02H/ SETB P1.0/ MOV TL0,#0ELH/ MOV TH0,#4CH/ MOV A,#0ECH/ SETB EA/ SETB ET0/ SETB TL0/ HERE:SJMP HERE/ ORG 06OOH/ S1:CPL P1.0/ XCH A,TH0/ RETI 5.什么是指令周期,机器周期和时钟周期?如何计算机器周期的确切时间? 答:指令周期的最大的时序定时单位,执行一条指令所需要的时间称之为指令 周期. 规定一个机器周期的宽度为6个状态,并依次表示为S1~S6.由于一个状态 又包括2个节拍,因此一个机器周期总共有12个节拍,分别记作 S1P1,S1P2,…….S6P2.由于一个机器周期共有12个振荡脉冲周期,因此机 器周期就是振荡脉冲的十二分频.当振荡脉冲频率为12MHZ时,一个机器 周期为1us,当震荡脉冲频率为6MHZ时,一个机器周期为2us. 6.定时的方法有? 答:软件定时;硬件定时;可编程定时器定时. 7.中断响应是有条件的,当存在哪些情况时,中断响应被封锁? 答○1CPU正处在为一个同级或高级的中断服务中;○2查询中断请求的机器 周期不是当前指令的最后一个机器周期;○3当前指令是返回指令(RET,RETI) 或访问IE、IP的指令. 在MCS-51单片机系统中,外接程序存储器和数据存储器共用16位地址线 和8位数据线,为什么不会冲突? 答:指令区分,读外部ROM使用指令“MOVC”读外部RAM使用指令 “MOVX”选通信号,外部ROM的选通信号为PSEN,外部RAM的选 通信号为RD和WR

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