单片机汇编程序实例

合集下载

3-1 MCS-51单片机汇编语言程序设计举例

3-1 MCS-51单片机汇编语言程序设计举例
INC R1 DJNZ R5, SUB1 RET
二、 乘法运算程序
在计算机中, 常将乘法采用移位和加法来实现。 例8 将(R2R3)和(R6R7)中双字节无符号数相乘, 结果存入 R4R5R6R7。 此乘法可以采用部分积右移的方法来实现, 其程序框图 如图 4.6 所示, 程序如下: NMUL: MOV R4, #0 MOV R5, #0 CLR C MOV R0, #16 ; 初始化
MOV HEX, A
RET
ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H
DB 46H
在这个程序中, 查表指令MOVC A, @A+PC到表格首地 址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。
低位字节相加
MOV 20H, A MOV A, 21H ADDC A,R4 MOV 21H, A POP ACC POP PSW RET
结果送20H单元
高位字节相加
3 运算程序
一、 加、 减法程序
例 7 将40H开始存放的 10 个字节的数与 50H开始存放的
10 个字节的数相减(假设被减数大于减数)。
ADD A, R2 ; 表中一个额定值为2个字节 MOV 31H, A MOV DPTR, #TAB ; 表首址
MOVC A, @A+DPTR; 查表读取第一个字节 XCH A, 31H ; 第一个字节内容存入31H INC DPTR MOVC A, @A+DPTR; 查表读取第二个字节 MOV 32H, A ; 第二字节的内容存入32H TAB: DW 1230H, 1450H, ... DW 2230H, 2440H, ... DW 3120H, 3300H, ...

第5章-单片机汇编指令系统应用实例

第5章-单片机汇编指令系统应用实例
3
5.1 LED点阵应用编程
汉字显示屏到处可见,广泛应用于汽车报站器、广告屏等。8*8 LED点阵有单 色点阵(16引脚)与双色点阵(24引脚)之分,实物如图5-1所示。
图5-1 单色点阵实物与引脚排列
4
5.1 LED点阵应用编程 1.单色LED点阵
点阵屏有两个类型,一类为共阴极,另一类则为共阳极,图5-2给出了两种
AJMP
MAIN: SETB CLR SJMP END
MAIN
P0.0 P0.1 MAIN
9
【例5-2】编写程序让LED点阵上的一个点从上到下依次点亮。 ;************************************************************************ ;**************** 延时 0.1S 子函数***************************************** ; 程序功能:让双色 LED 点阵中左上角单独一个 LED灯亮 DELAY: ; 硬件接线:P2口接行线1,P0.0接列线1 MOV R7, #13H ;************************************************************************ DL1: ORG 0000H MOV R6, #14H AJMP MAIN DL0: MAIN: MOV CLR P0.0 R5, #82H MOV R5, A,#01H DJNZ $ LOOP: DJNZ MOV R6, P2,A DL0 DJNZ DL1 LCALL R7, DELAY RET RL A END SJMP LOOP
13
【例5-6】编写程序让LED点阵上一个点从上往下依次循环移动。 ;************************************************************************* ;*********** 延时8ms函数************************************************* MOV ;程序功能:让 LEDA,R0 点阵上的一个点依次从上到下循环移动到最后一个点 DELAY: ;此延时函数为用第1章介绍的单片机小精灵产生 RL A ;让列移动 ;************************************************************************* MOV R7,#13H ORG 0100H MOV R0,A DL1: MAIN: DJNZ R2,LOOP ;列未移动到了最右边 MOV R6,#14H MOV R0,#0FEH ;该数据给P1口,该数据为列初始值 SJMP ROT2 ;列移动到了最右边,则行向下移动一次 DL0: MOV R1,#01H ;该数据给P0口,该数据为行初始值 ;************************************************************************ MOV R2,#08H ;列循环次数 R5,#82H ROT2: MOV R2,#08H ; R2的值 MOV R3,#08H ;第二行移动前需要重新设定 行循环次数 DJNZ R5,$ MOV A,R1 DJNZ R6,DL0 LOOP: RL MOV A, R0 A DJNZ R7,DL1 MOV P1,A ;给P1口赋初始值 MOV R1, A RET MOV A,R1 DJNZ R3,LOOP MOV P2,A ;给P2口赋初始值 END SJMP LCALL MAIN DELAY

单片机的汇编源程序

单片机的汇编源程序

例2.1将数据寄存器DPTR中的字无符号数除以4,商放在DPTR中,余数放到B中。

程序段如下:MOV A,#3 ;取最低2位的逻辑尺03H送AANL A,DPL ;取DPTR的最低2位即余数MOV B,A ;余数送BCLR C ;清进位CYMOV A,DPH ;高8位送ARRC A ;高8位除以2,其最低位移入CY中MOV DPH,A ;高8位除以2的结果送DPHMOV A,DPL ;低8位送ARRC A ;低8位除以2,并将CY 移入A的最高位MOV DPL,A ;低8位除以2的结果送DPLCLR C ;将除以2的结果再除以2MOV A,DPHRRC AMOV DPH,AMOV A,DPLRRC AMOV DPL,A例2.2将R7中的无符号数乘以10,结果放在R6和R7中(R6放高位)。

程序段如下:MOV R6,#0 ;清0 R6CLR C ;清进位MOV A,R7 ;低8位乘以2RLC AMOV R7,A ;存回R7MOV R5,A ;低8位乘以2暂存R5MOV A,R6 ;高8位乘以2RLC AMOV R6,A ;存回R6MOV R4,A ;高8位乘以2暂存R4MOV A,R7 ;乘以4RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R7 ;乘以8RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R7 ;乘以8和乘以2相加ADD A,R5MOV R7,AMOV A,R6ADDC A,R4MOV R6,A仿照例2.1的方法此例的程序段如下: MOV A,#80H ;取R7的最高位的逻辑尺ANL A,R7 ;取R7的最高位RL A ;移至最低位MOV R4,A ;暂存R4MOV A,#0E0H ;取R7的最高3位的逻辑尺ANL A,R7 ;取R7的最高3位 RL A ;移至最低3位RL ARL AMOV R6,A ;暂存R6MOV A,R7 ;低8位乘以8CLR CRLC AMOV R5,A ;暂存低8位乘以2 CLR CRLC ACLR CRLC AADD A,R5 ;乘以8和乘以2相加MOV R7,AMOV A,R6ADDC A,R4MOV R6,A例3.1将内部RAM 40H单元中一压缩BCD数转换为二进制数。

单片机汇编语言设计实例详解

单片机汇编语言设计实例详解

单片机汇编语言设计实例详解引言:单片机是嵌入式系统中常见的控制器,它具有体积小、功耗低、成本低等特点,被广泛应用于家电、汽车、工业控制等领域。

而汇编语言作为单片机的底层语言,直接操作硬件资源,具有高效性和灵活性。

本文将以一个实例,详细讲解如何使用单片机汇编语言进行设计。

实例背景:假设我们要设计一个温度检测系统,要求实时监测环境温度,并在温度超过某个阈值时触发报警。

硬件准备:1. 单片机:我们选择一款常用的8051单片机作为例子。

2. 温度传感器:我们选择一款数字温度传感器,它可以通过串行通信与单片机进行数据交互。

3. 显示屏:为了方便实时显示温度信息,我们选用一款数码管显示屏。

软件准备:1. Keil C51:这是一款常用的单片机开发软件,支持汇编语言的编写和调试。

2. 串口调试助手:用于测试串口通信功能。

设计步骤:1. 硬件连接:将单片机与温度传感器、显示屏连接起来。

注意接线的正确性和稳定性。

2. 编写初始化程序:使用汇编语言编写单片机的初始化程序,包括端口初始化、中断向量表设置、定时器初始化等。

3. 串口通信设置:通过串口与温度传感器进行数据交互,需要设置串口通信的波特率、数据位数、停止位等参数。

4. 温度检测程序:编写汇编语言程序,实时读取温度传感器的数据,并将数据送至显示屏进行显示。

5. 温度报警程序:在温度超过设定阈值时,触发报警程序,可以通过蜂鸣器等外设发出警报信号。

6. 调试与测试:使用Keil C51进行程序调试,通过串口调试助手测试串口通信和温度显示、报警功能。

设计思路:1. 初始化程序设计:先设置端口的输入输出方向,再设置中断向量表,最后初始化定时器。

这样可以确保程序的稳定性和可靠性。

2. 串口通信设置:根据温度传感器的通信协议,设置串口的波特率、数据位数、停止位等参数。

注意要与传感器的通信规范保持一致。

3. 温度检测程序设计:通过串口读取温度传感器的数据,并进行相应的处理。

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

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

单片机汇编语言经典一百例汇编语言是一种底层的程序设计语言,是一种将汇编指令直接翻译成机器指令的语言。

在单片机编程中,掌握汇编语言是非常重要的,因为它可以充分发挥单片机的性能,并且提高程序的运行效率。

本文将介绍一百个经典的单片机汇编语言例子,帮助读者更好地理解汇编语言的使用。

1. 点亮LED灯```ORG 0x0000 ; 程序起始地址MOV P1, #0xAA ; P1口输出高电平,LED灯点亮END ; 程序结束```2. LED流水灯效果```ORG 0x0000 ; 程序起始地址MOV P1, #0x01 ; P1口输出低电平,第一个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x02 ; P1口输出低电平,第二个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x04 ; P1口输出低电平,第三个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x08 ; P1口输出低电平,第四个LED点亮CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```3. 数码管动态扫描显示```ORG 0x0000 ; 程序起始地址CLR P0.0 ; P0.0口输出低电平,选择第一个数码管MOV P2, #0x7E ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.1 ; P0.1口输出低电平,选择第二个数码管MOV P2, #0x30 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.2 ; P0.2口输出低电平,选择第三个数码管MOV P2, #0x6D ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.3 ; P0.3口输出低电平,选择第四个数码管MOV P2, #0x79 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```...通过以上例子,我们可以看到单片机汇编语言的应用非常广泛,可以实现各种各样的功能。

_单片机-汇编语言程序设计例题

_单片机-汇编语言程序设计例题
MOV R1, #03 ; 计数值送R1
MOV R2, #0 ; 存放结果的高位清零 MOV A, @R0
MOV R3, A
LOOP: MOV A, R3 MOV B, #10
MUL AB MOV R3, A ; (R3)×10 的低 8 位送R3
MOV A, B
XCHA, R2 ; (R3)×10的高 8 位暂存R2
SUL2 : RET
程序如下:
SUBF : MOV A,R0 JZ ZERO
JB ACC.7 , NEG MOV R1, #1 SJMP ENDF
ZERO : MOV R1 , #0 SJMP ENDF
NEG : MOV R1 , #0FFH
ENDF : RET
例 4 比较两个无符号数的大小。
CLRA INCDPTR MOVC A, @A+DPTR; 查表得温度值低位字节 MOV23H, A
RET TAB: DW …
7 数制转换
例 16 将一个字节二进制数转换成 3 位非压缩型BCD码。 设一个 字节二进制数在内部RAM 40H单元, 转换结果放入内部 RAM 50H#, 51H, 52H单元中(高位在前), 程序如下:
程序如下: START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移
MOV R1, #00H; 相等, R1← 0
SJMP SUL2
SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; (R0)>0, 则 R1←01H
SJMP SUL2 NEG : MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
MOVX @DPTR, A ; 存大数

单片机 位操作的汇编仿真实例

单片机 位操作的汇编仿真实例

标题:单片机位操作的汇编仿真实例一、概述单片机作为嵌入式系统中重要的组成部分,在各种电子设备中得到了广泛的应用。

位操作是单片机汇编语言中的重要内容,它可以实现对特定位的清零、置位或者取反等操作,对于提高单片机的运算效率和节省资源具有重要意义。

本文将通过一个汇编编程实例,展示位操作在单片机中的应用。

二、位操作的基本概念1. 位操作简介位操作是针对某一变量的某一位进行的操作,包括位的置位、清零、取反、测试和赋值等。

2. 位操作的语法在汇编语言中,位操作使用特定的指令来实现,常见的包括AND、OR、XOR和NOT等指令。

3. 位操作的应用场景位操作常用于处理标志位、控制寄存器和位掩码等,可以实现高效的数据处理和控制。

三、汇编编程实例下面以单片机8051为例,介绍一个位操作的汇编编程实例。

1. 实例背景假设我们需要对单片机的一个控制寄存器的某一位进行操作,具体来说,我们需要将该位置位,即将其从0改为1。

2. 实例代码我们需要定义一个控制寄存器的位置区域,并假设该控制寄存器在内存中的位置区域为0x80。

我们可以编写以下汇编代码来实现位操作:```assemblyORG 0HMOV R0, #0X80 ; 将0x80位置区域处的值加载到R0寄存器ORL R0, #01H ; 将R0寄存器的最低位置位MOV 0X80, R0 ; 将R0寄存器的值写回0x80位置区域处END```3. 实例解析在上面的汇编代码中,首先使用MOV指令将位置区域0x80处的值加载到R0寄存器中,然后使用ORL指令将R0寄存器的最低位置位,最后使用MOV指令将R0寄存器的值写回0x80位置区域处,从而完成了对控制寄存器的位操作。

四、仿真实例1. 软件环境为了验证上述位操作的实例代码,我们可以使用基于8051单片机的仿真软件,如Proteus等。

2. 仿真步骤我们需要在仿真软件中搭建一个基于8051单片机的仿真环境,然后将上述汇编代码加载到单片机中,并设置断点进行调试。

单片机汇编语言入门实例

单片机汇编语言入门实例

一、用单片机控制发光二极管图1为单片机控制发光二极管的实验电路图。

图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。

实例1:用单片机控制LED闪烁发光源程序如下:MAIN:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND程序说明:1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。

2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。

3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。

4、LCALL DELAY:调用延时子程序DELAY。

5、LJMP MAIN:跳转到第1条指令处执行第1条指令。

6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。

7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软件控制的指令称为“伪指令”。

延时程序说明:1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。

2、MOV指令的含义是传递数据。

指令“MOV R7,#250”的含义是:将数据250送到R7中。

250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。

3、DJNZ指令后面有两个符号,一个是R6,一个是D2。

R6是寄存器,D2是标号。

DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。

pic单片机汇编语言程序设计实例

pic单片机汇编语言程序设计实例

pic单片机汇编语言程序设计实例一、前言单片机是现代电子技术中的重要组成部分,而汇编语言则是单片机编程中最基础的语言。

本文将以PIC单片机为例,介绍汇编语言程序设计实例。

二、PIC单片机简介PIC(Peripheral Interface Controller)是一种微控制器,由美国Microchip Technology公司开发。

PIC单片机具有体积小、功耗低、价格便宜等优点,广泛应用于各种电子设备中。

三、汇编语言基础1. 寄存器PIC单片机有许多寄存器,其中最常用的有W寄存器和F寄存器。

W 寄存器是一个8位的通用寄存器,可用于存储临时数据;F寄存器则是一个8位的特殊功能寄存器,可用于控制各种外设。

2. 指令集PIC单片机的指令集非常丰富,涵盖了各种数据操作、逻辑运算、跳转等指令。

例如:- MOVF:将指定地址中的数据移动到W寄存器中;- ADDWF:将指定地址中的数据与W寄存器中的数据相加,并将结果保存到指定地址中;- BTFSS:测试指定地址中某一位是否为0,并跳过下一条指令。

3. 标志位PIC单片机还有一些标志位,用于记录各种状态信息。

其中最常用的有C(进位标志位)、Z(零标志位)和DC(半进位标志位)。

四、汇编语言程序设计实例下面以一个简单的LED闪烁程序为例,介绍PIC单片机汇编语言程序设计。

1. 硬件连接将一个LED连接到PIC单片机的RA0口,通过一个220欧姆电阻限流。

将VDD和VSS分别连接到5V和地。

2. 程序设计首先定义RA0口为输出口,并将其置为低电平。

然后进入一个死循环,在循环中将RA0口置为高电平、延时一段时间、再将RA0口置为低电平、再延时一段时间。

程序如下:LIST P=16F84AINCLUDE "P16F84A.INC"__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON &_HS_OSCORG 0x00GOTO MAINORG 0x04MAIN:MOVLW 0x00 ; 将W寄存器清零TRIS PORTA ; 将PORTA定义为输出口LOOP:BSF PORTA, 0 ; 将PORTA.0置为高电平CALL DELAY ; 延时BCF PORTA, 0 ; 将PORTA.0置为低电平CALL DELAY ; 延时GOTO LOOPDELAY:MOVLW 0x64 ; 将W寄存器设置为100(十进制)DELAY_LOOP:NOP ; 空操作,延时1个指令周期DECFSZ W, F ; 将W寄存器减1,如果不为0则跳转到DELAY_LOOPGOTO DELAY_LOOP ; 否则跳出循环RETURN ; 返回主程序3. 编译和烧录将程序保存为.asm文件,使用MPLAB IDE进行编译和烧录。

5单片机汇编语言及c语言经典实例

5单片机汇编语言及c语言经典实例

51单片机汇编语言及C语言经典实例实验及课程设计一、闪烁灯如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2 秒。

延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平,即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0端口输出高电平,使用CLR P1.0 指令使P1.0 端口输出低电平。

C 语言源程序#include <AT89X51.H>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();}汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2 秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND图2 程序设计流程图图1 单片机原理图二、多路开关状态指示如图 3 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。

51单片机总汇编语言及C语言经典实例

51单片机总汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例实验及课程设计一、闪烁灯如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。

延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为 12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。

C 语言源程序#include <AT89X51.H>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();}汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP START DELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND图2 程序设计流程图图1 单片机原理图二、多路开关状态指示如图 3 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。

单片机汇编实例

单片机汇编实例

单片机汇编实例1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

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

4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#202个2D1:MOV R7,#2482个22+2×248=49820×DJNZ R7,$2个2×248(498DJNZ R6,D12个2×20=4010002因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。

如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY:MOV R5,#20D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(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.26.汇编源程序ORG0START:CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY:MOV R5,#20;延时子程序,延时0.2秒D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7.C语言源程序#include<AT89X51.H>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熄灭。

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

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

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

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

4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个 2D1: MOV R7,#248 2个 2 2+2×248=498 20×DJNZ R7,$ 2个2×248 (498DJNZ R6,D1 2个2×20=4010002因此,上面的延时程序时间为10.002ms。

由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。

如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(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 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>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熄灭。

51单片机 汇编语言经典案例 (理工)

51单片机 汇编语言经典案例 (理工)

5、试编写统计数据区长度的程序,设数据区从内RAM 30H 开始,该数据区以0结束,统计结果送入2FH中。 ORG 0000H MOV R0,#00H MOV R1,#30H NEXT: MOV A,@R1 JZ OVER INC R0 INC R1 LJMP NEXT OVER: MOV 2FH,R0 SJMP $ END
2、试编写程序。找出外RAM 2000H~200FH数据区中的最 小值,并放入R2中。
• • • • • • • • • • • • • • • • • • • ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV R2,A MOV R1,#15 INC DPTR NEXT1: MOVX A,@DPTR MOV B,R2 SUBB A,B JNC LP DAYU0: MOVX A,@DPTR MOV R2,A LP: INC DPTR DJNZ R1,NEXT1 SJMP $ END
8、试编一程序,分别统计在内部RAM的30H~50H单元的数 据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放 在51H和52H单元中。
MOV R1,#30H MOV R0,#20H MOV 51H,#0H MOV 52H,#0H START: MOV A,@R1 INC R1 ANL A,#01H JZ LOOP1 INC 51H SJMP LOOP2 LOOP1: INC 52H LOOP2: DJNZ R0 , START RET
3、编写程序,将外部RAM 2000H~20FFH数据块,传送到 3000H~30FFH区域。
ORG 0000H MOV R1,#0FFH MOV R2,#00H NEXT: MOV DPH,#20H MOV DPL,R2 MOVX A,@DPTR MOV DPH,#30H MOVX @DPTR,A INC R2 DJNZ R1,NEXT SJMP $

MCS-51单片机汇编程序设计举例

MCS-51单片机汇编程序设计举例

符号作为结果符号.如果相的差数为负,则应将其差 数取补,并把被减数的符号取反后作为结果符号.
MCS-51单片机汇编程序设计举例
例1: 假定R2、R3和R4、R5分别存放两个16位的带符号二进 制数,其中R2和R4的最高位为两位数的符号位。请编 写带符号双字节二进制的加减法运算程序。以BSUB为 减法程序入口,以BADD为加法程序入口。以R6、R7保 存运算结果。 对于符号数的减法运算,只要将减数的符号位取反,即 可把减法运算按加法运算原则进行处理. 对于符号数的加法运算,首先要进行两符号数的判定. 如果两数符号相同,应进行加法,并以被加数为结果符 号.如果两个数符号不同,应进行两数相减.如果相减的 差数的差数为正,则该差数即为最后结果,并以被减数
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档