文档视界 最新最全的文档下载
当前位置:文档视界 › (完整版)单片机汇编语言经典一百例

(完整版)单片机汇编语言经典一百例

(完整版)单片机汇编语言经典一百例
(完整版)单片机汇编语言经典一百例

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 ;开总中断

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 微秒,即一个高电12

平或低电平的时间为2500 微秒。这样,定时值应设为65535-2500=63035,将它转换为十六进制则为:F63B。具体程序请看f200.asm

频率递增:

200HZ:63035:F63B

250HZ:63535:F82F

300HZ:63868:F97C

5.3 200HZ频率输出

程序介绍:利用定时器定时,在P1.0 口产生200HZ 的频率输出。实际应用例如:传感器前级推动。

程序实例(F200.ASM):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN0

MAIN:

CLR P1.0 ;产生一个低电平,实际上

是从p1.0口产生频率

MOV TMOD,#00010000B ;定时器1工作于方式0

MOV TH1,#0F6H

MOV TL1,#3BH ;频率产生的时间,详细请

见频率公式

SETB EA ;开总中断

13

SETB TR1 ;开定时器1运行

SETB ET1 ;开定时器1允许

LOOP: AJMP LOOP ;无限循环

DIN0: CPL P1.0 ;产生一个高电平,

下次来就是低电平(因为取反),一个高电平和一个低电平形成一个周期

MOV TH1,#0F6H

MOV TL1,#3BH ;重置频率产生时间

RETI ;返回

END

5.4 200——250HZ变化频率输出

程序介绍:利用定时器定时时间的变化,由P1.0 口

产生200——250HZ变化的频率。实际应用例如:传感器

前级推动、频率发生器。

程序实例(F250.ASM):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN1

MAIN:

;定义频率200和300////////////////////////////////// F2H EQU 30H

F2L EQU 31H

F3H EQU 32H

F3L EQU 33H

14

;////////////////////////////////////////////////// ;定义频率保持初值////////////////////////////////// MOV R1,#50

MOV R2,#02H

;////////////////////////////////////////////////// ;频率赋初值//////////////////////////////////////// MOV F2H,#0F6H

MOV F2L,#3BH

MOV F3H,#0F8H

MOV F3L,#2FH

;////////////////////////////////////////////////// CLR P1.0 ;在P1.0口产生一个低

电平,一个脉冲是由一个高电平和一个低电平组成的

MOV TMOD,#00010000B ;定时器工作于方式1

MOV TH1,F2H

MOV TL1,F2L ;200HZ输出

SETB EA ;开总中断

SETB TR1 ;开定时器1运行

SETB ET1 ;开定时器1允许

LOOP: AJMP LOOP

DIN1:

CPL P1.0 ;取反P1.0口,实际

是为了不断的将p1.0的电平关系转换,即产生了频率

;频率保持时间////////////////////////////////////// DJNZ R1,RE

MOV R1,#50

DJNZ R2,RE

MOV R2,#02H

15

;////////////////////////////////////////////////// MOV A,F2H

CJNE A,F3H,XIA ;频率高位到300HZ

的高位了吗?

AJMP JIA ;频率高位没到

300HZ的高位值,直接将低位值加1

XIA: INC F2L

MOV A,F2L

CJNE A,#00H,RE

INC F2H

MOV A,F2H

CJNE A,F3H,RE

;/////////////////////////////////////////////

;频率高位加到300HZ的高位值了,低位加一,到300HZ的低位值了吗,没到出去,到了关定时器

JIA:

INC F2L ;到了将200HZ频率的低位加1

MOV A,F2L

CJNE A,#F3L,RE

CLR TR1

;/////////////////////////////////////////////

RE:

MOV TH1,F2H

MOV TL1,F2L

RETI

END

16

六、数显

0——9999显示

程序介绍:利用S51的串行口功能,实现数码管0—

—9999 的循环显示。实际应用例如:电子计分牌。

程序实例(9999.ASM):

ORG 0000H

MAIN:

GEE EQU 30H

SHI EQU 31H

BEI EQU 32H

QIAN EQU 33H ;定义个十百千

MOV GEE,#00H

MOV SHI,#00H

MOV BEI,#00H

MOV QIAN,#00H ;赋初值

MOV SCON,#00H ;串行口工作于方式

0.同步移位

;显示个,十,百,千////////////////////////////////// DISPLAY:

ACALL DELAY ;延时

MOV DPTR,#SETTAB

MOV A,GEE

MOVC A,@A+DPTR MOV SBUF,A

D1: JNB TI,D1

17

CLR TI

MOV DPTR,#SETTAB MOV A,SHI

MOVC A,@A+DPTR MOV SBUF,A

D2: JNB TI,D2 CLR TI

MOV DPTR,#SETTAB MOV A,BEI

MOVC A,@A+DPTR MOV SBUF,A

D3: JNB TI,D3 CLR TI

MOV DPTR,#SETTAB MOV A,QIAN MOVC A,@A+DPTR MOV SBUF,A

D4: JNB TI,D4

CLR TI

;/////////////////////////////////////////////

;个,十,百,千的依次加一/////////////////////

INC GEE

MOV A,GEE

CJNE A,#0AH,DISPLAY

MOV GEE,#00H

INC SHI

MOV A,SHI

CJNE A,#0AH,DISPLAY

18

MOV SHI,#00H

INC BEI

MOV A,BEI

CJNE A,#0AH,DISPLAY

MOV BEI,#00H

INC QIAN

MOV A,QIAN

CJNE A,#0AH,DISPLAY

MOV QIAN,#00H

AJMP DISPLAY

;//////////////////////////////////////////////////

;延时////////////////////////////////////////////// DELAY: MOV R1,#0FFH

E1: MOV R2,#0FFH

DJNZ R2,$

DJNZ R1,E1

RET

;///////////////////////////////////////////// SETTAB:

DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,

F6H,0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码

END

七、AD 转换

7.1 AD转换(数码显示)

程序介绍:利用ADC0809模拟通道3输入电压,经单片机

19

处理后在数码管上用相对应的16进制数显示出来,0—5V对应为0--0FFH,实际应用例如:数据采集。

程序操作:程序写完上电运行后,用本机配带的专用起微调图15所示电位器,会在数码管上看到随不同电压而变化的对应16进制值。也可以用

万用表实ADC0809IN3脚

电压,来检验所对应显

示的16进制数。

图15

程序实例(ad.asm):

ORG 0000H

MAIN1:

ACALL DELAY ;延时

ACALL AD ;呼叫AD子程序

;将转换的数字量屏蔽高位低位送显//////////////////// MOV 31H,30H

MOV A,30H

ANL A,#0FH

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D1: JNB TI,D1

CLR TI

;////////////////////////////////////////////////// ;将转换的数字量屏蔽低位高位送显//////////////////// MOV A,30H

20

ANL A,#0F0H

SWAP A

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D2: JNB TI,D2

CLR TI

;////////////////////////////////////////////////// AJMP MAIN1 ;返回主程序

AD: MOV DPTR,#7F00H ;指向转换地址

MOV A,#03H ;指向转换口

MOVX @DPTR,A ;转换

MOV R1,#64H

D3: DJNZ R1,D3 ;等100微秒转换完

MOVX A,@DPTR ;转换后的值给A

MOV 30H,A ;转换的值给30H

RET

DELAY: ;延时

MOV R2,#0FFH

D14: MOV R3,#0FFH

D12: DJNZ R3,D12

DJNZ R2,D14

RET

SETTAB:

DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,

0FEH,0F6H

DB 0EEH,3EH,9CH,7AH,9EH,8EH

21

7.2 十六进制两位数加法器(数码显示)

程序介绍:将ADC0809输入的两个不同电压(相同电

压也可相加,只是为举例说明,所以取不同电压)所对应的16进制数相加显示出来。实际应用例如:取代加法运放电路。

程序操作:程序写完上电运行后,用本机配带的钟表

起微调图16所示电位器,输入两个不同电压,数码管会显示两个不同的对应16进制数,随后数码管会显示两个16 进制数相加的值。

程序实例(add2.asm):

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

;赋初值//////////////////////////////////////////// MOV ADDHOLD,#00H

MOV ADDNUMBER,#00H

MOV ADL,#00H

MOV ADH,#00H

MOV DISL,#00H

22

MOV DISH,#00H

MOV ADDJW,#00H

MOV ADDTOTAL,#00H

;////////////////////////////////////////////////// MAIN1:

ACALL AD ;呼叫AD子程序

ACALL DELAY ;延时

ACALL CAIFEN ;呼叫AD值拆分为高

低的程序

ACALL DISPLAY ;呼叫显示子程序

MOV A,ADNUMBER ;取AD值

CJNE A,ADDHOLD,ADD3 ;与上次AD值比

较,不相等,即输入了新的AD值,去AD3执行

AJMP MAIN1 ;是相等的,证

明没有输入新的AD值,回去显示老的AD值

ADD3: MOV A,ADDHOLD

CJNE A,#00H,ADD4

MOV ADDHOLD,ADNUMBER ;有一种情况就

是是第一次进来,AD保持值里面是放的初值00,与取的AD值不同,是这种情况,也返回去

AJM MAIN1

ADD4: MOV ADDNUMBER,ADDHOLD ;是真的输入

了新的AD值,将上次AD值给加数,为调加法程序做准备MOV ADDHOLD,ADNUMBER ;将这次的AD

值也保持起来。准备与上一个AD值相加

;显示这次输入的AD值//////////////////////////////// ACALL DELAY

ACALL CAIFEN

23

ACALL DISPLAY

;////////////////////////////////////////////////// DISPLAY1:

ACALL DELAY ;延时

ACALL ADD1 ;呼叫加法子程序

ACALL DISPLAY ;显示

LOOP: AJMP LOOP ;返回主程序

;///////////////////////////////////////AD转换

AD:

MOV DPTR,#7F00H;指向转换地址

MOV A,#03H ;指向转换口

MOVX @DPTR,A ;转换

MOV R1,#64H

D1: DJNZ R1,D1 ;等100微秒转换完

MOVX A,@DPTR ;转换后的值给A

MOV ADNUMBER,A ;转换的值给30H

RET

;////////////////////////////////////////////////// ;拆分AD值程序////////////////////////////////////// CAIFEN:

MOV A,ADNUMBER

ANL A,#0FH

MOV ADL,A ;取低位

MOV A,ADNUMBER

ANL A,#0F0H

SWAP A

MOV ADH,A ;取高位

24

MOV DISH,ADH ;给显示值

RET

;////////////////////////////////////////////////// ;显示////////////////////////////////////////////// DISPLAY:

MOV A,DISL

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D3: JNB TI,D3

CLR TI

MOV A,DISH

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D4: JNB TI,D4

CLR TI

MOV A,ADDJW

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

(完整版)快速入门单片机汇编语言

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

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单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

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单片机汇编语言

51单片机汇编语言 a)单个与多个LED灯,位操作与字节操作—输出 ORG 0000H START: CLR C MOV P0.0,C MOV P1.1,C MOV P2.2,C MOV P3.3,C CLR A

CPL A MOV P0,A MOV P1,A MOV P2,A MOV P3,A END 程序说明: 可以用7段数码管来代替各端口的8个LED灯,硬件的这种显示方式使得数字表达成为实用。数字显示由数码管的硬件结构与工作原理(7个LED灯的几何变形组合)和数字表达的数据格式确定。 如: 共阳极数码管显示数字3,则有P1口送数据#4FH;MOVP1, #0B0H 共阴极数码管显示数字8,则有P1口送数据#80H;MOVP1, #7F H 用数据表表示则有: TABshuziyang: //阳极管(共阴极管取反即可) DB(数字0~F) C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C 6H,A1H,86H,8EH

TABshuziyin: //阴极管(共阳极管取反即可) DB(数字0~F) 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,3 9H,5EH,79H,71H b)单个与多个LED灯闪烁—延时子程序—注意定时器 前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。但是硬件的响应时间太短,使得效果不佳。虽然可以通过改变单片机的时钟设置来改变效果。但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。延时效果是利用单片机空转来实现的。 ACALLDELAY;调延时子程序 ************************************************* ************************

快速入门单片机汇编语言

快速入门单片机汇编语 言 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为: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口相同。当作为第二功能使用时,每一位功能如下表所示。 P3口第二功能

Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。

单片机控制系统汇编程序

; 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单片机中的汇编语言与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 语言把这个问题,交给了机器也就是编译器去解决了。其实, 计算机的发展, 就是把尽可能多的事情交个机器去解决。

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 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单片机实用程序库 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 ;开总中断

基于汇编语言的单片机led点阵显示(含c)

8X8 LED点阵显示技术 在8X8LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。 电路原理图 图4.24.1 硬件电路连线

(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块” 区域中的“DR1-DR8”端口上; (2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块” 区域中的“DC1-DC8”端口上; 程序设计容 (1).8X8点阵LED工作原理说明 8X8点阵LED结构如下图所示

从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述: 一根竖柱:对应的列置1,而行则采用扫描的方法来实现。 一根横柱:对应的行置0,而列则采用扫描的方法来实现。

汇编源程序 ORG 00H START: NOP MOV R3,#3 LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,A+DPTR MOV P3,A INC R2 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,#7 LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,A+DPTR MOV P3,A DEC R2 LCALL DELAY DJNZ R4,LOP3

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

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

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 MOV LCD_DATA,LCD_DAT

基于单片机的汇编语言入门教程

入门教程2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用

单片机汇编语言实验教程(1).

本文由zaoangy贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 实验一熟悉MCS-51寻址方式及传送类指令 一.实验目的: 1.熟悉uVision2集成调试环境 2.熟悉 MCS-51寻址方式及传送类指令二.uVision2集成调试环境的使用uVision2是德国Keil Software公司用于多种嵌入式微处理器的一个理想、快速、 可靠的程序调试器。此调试器包含一个高速模拟器,能够让你模拟整个8051 系统,包括片上外围.....器件和外部硬件。 1.创建项目uVision2是以项目来管理你的任务,它可以使你的8051应用系统设计变得简单。要创建一个应用,你需要按下列步骤进行操作:①第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:\单片机实验;②启动uVision2,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:直接在桌面上点击uVision2程序图标就可以启动它。要新建一个项目文件,从uVision 2的Project菜单中选择New Project,这将打开一个标准的Windows对话框,此对话框要求你输入项目文件名,例如为实验一新建项目:D:\单片机实验\ex1.vu2。紧接着,Select Device for Target,即为你的项目选择一个CPU。我们选择Gene ric下的8032。 2.新建一个源文件你可以用菜单选项File-New来新建一个源文件。这将打开一个空的编辑窗口让你输入你的源代码。编辑后,我们把我们的实验程序保存为D:\单片机实验\dpj1.asm。 3.将你的源文件加入到你的项目中在你的P roject Workspace窗口双击Target1及Suorce Group1,将你的目标系统一直展开到看到源文件组,如图1(a所示。右击Suorce Group1,出现Add files选项, 选择它可打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件dpj1.asm 。 (a (b

单片机主要使用汇编语言

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

相关文档
相关文档 最新文档