51单片机汇编语言教程:4课第一个单片机小程序

合集下载

51单片机C语言编程入门(详讲版)

51单片机C语言编程入门(详讲版)

中国科学技术大学业余无线电协会编目 录§1 前言 (1)§2 单片机简介 (2)2.1 数字电路简介 (2)2.2 MCS-51单片机简介 (2)2.3 Easy 51 Kit Pro简介 (5)2.4 Easy 51 Kit Pro电路功能分析 (5)§3 MCS-51单片机的C语言编程 (8)3.1 汇编语言 (8)3.2 建立你的第一个C项目 (8)3.3 生成hex文件 (12)3.4 Keil C语言 (14)3.5 单片机I/O (18)3.6 中断 (25)3.7 定时器/计数器 (27)3.8 定时器的应用举例 (29)3.9 外部中断 (34)3.10 串行通信 (38)3.11 定时器2 (43)3.12 看门狗 (47)3.13 空闲模式和掉电模式 (50)§4 MCS-51单片机C语言编程应用进阶 (51)4.1 扫描式键盘 (51)4.2 EEPROM芯片AT93C46的读写 (55)4.3 Keil C的高级使用 (63)§5 编写高质量的单片机C程序 (64)5.1 文件结构 (64)5.2 程序的版式 (66)5.3 单片机程序命名规则与变量选择 (70)5.4 表达式和基本语句 (73)5.5 函数设计 (77)5.6 单片机程序框架 (79)附图:Easy 51 Kit Pro电路图(最小系统板) (80)附图:Easy 51 Kit Pro电路图(学习板) (81)§1 前言什么是单片机,目前还没有一个确切的定义。

普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。

简称为单片微机或单片机。

利用单片机程序,可以实现对硬件系统的小型化的智能控制。

51汇编小程序

51汇编小程序
第5只脚为高电平,在芯片上就是Y5输出高电平,实际看到的是数码管的第5位点亮,同理:
点亮第0位,给P1.2 P1.1 P1.0赋值为000; 程序表示:P1=0x00;
点亮第1位,给P1.2 P1.1 P1.0赋值为001; 程序表示:P1=0x01;
点亮第2位,给P1.2 P1.1 P1.0赋值为010; 程序表示:P1=0x02;
给P2.0口置低即可,其他同理,流水灯的亮灭收到跳线帽DJ6控制,请注意,短接则工作,去掉则灭
点亮第7位,给P1.2 P1.1 P1.0赋值为111; 程序表示:P1=0x07;
如果全亮,就采用动态扫描的方式,利用人眼睛的暂留效应,在很短的时间内点亮一遍全部的数码
管。数码亮灭控制有跳线帽DJ8控制,接通则亮,不接通则灭;
15、流水灯是共阳的,相当于数码管相反,受到数据口P2口控制,比如要点亮第一个流水灯我们就
5、矩阵键盘为单片机的P0口控制,高四位为行,低四位为列控制,请参考程序代码
6、独立按键是有P3.2(INT0) P3.3(INT1) P10 P11端口控制,其中P10 P11需要跳线帽DJ3
DJ4连通才工作,例程中外部中断是以P32(INT0)为例,其他请参考独立按键例程
7、时钟芯片控制端口为P1.3 P1.4 P1.5
详情请参考程序代码和DS1302资料,其中DJ5为外置电源VCC2的连接口,上端为正输入下端为负
淙耄 ぷ髦星屑刹逄 呙保 裨蚧岫搪飞栈貲S1302芯片
8、蜂鸣器控制IO口为P3.4,给低电平三极管开通,蜂鸣器工作,工作中跳线帽DJ7必须短接
9、EEROM控制IO口为P3.6 P3.7,请参考例程代码做试验;
P3.1,该口也是单片机的下载口,可以用配置的USB转串口线或者配置的串口延长线连接到电脑的

单片机课程第4章80C51汇编程序设计精品PPT课件

单片机课程第4章80C51汇编程序设计精品PPT课件

MOV R4,#12H MOV R5,#2BH MOV R0,#33H
NOP ACALL BMUL
MOV @R0,#00h MOV R7,#04
SJMP $
DEC R0
DEC R0
DEC R0
DEC R0
子程序:
BMUL: MOV A,R3 MOV B,R5 MUL AB ACALL RADD MOV A,R3 MOV B,R4 MUL AB INC R0 ACALL RADD MOV A,R2 MOV B,R5 MUL AB INC R0 INC R0 ACALL RADD MOV A,R2 MOV B,R4 MUL AB INC R0 ACALL RADD INC R0
@R0,A ;循环处理
R0
;
R7,LOOP ;循环修改,判结束
$
;结束处理
结束
【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中 起始地址为1000H的存储区域,直到发现‘$ ’字符停止传送。
开始
置初值 Y
循环结束? N 循环处理 循环修改
结束处理
结束
MAIN:MOV MOV
LOOP0:MOV CJNE SJMP
教学重点:
1、 源程序形成目标程序的步骤 2、 伪指令与单片机指令的本质区别 3、 分支、循环、子程序及按键、LED显示程序的设计
教学难点:
程序的设计及实现
4.1.1 汇编语言程序设计过程
汇编语言,生成的目标程序占内存空间少、运行速 度快,具有效率高、实时性强。
高级语言,对系统的功能描述与实现简单,程序阅 读、修改和移植方便,适合于编写复杂的程序。
0000H MAIN 0040H R7,#16 R0,#60H A,#55H @R0,A R0 R7,LOOP $

第4章-80C51单片机汇编语言程序设计(新)PPT优秀课件

第4章-80C51单片机汇编语言程序设计(新)PPT优秀课件

用,DEL3
12
数据地址赋值伪指令 DATA
将表达式的值赋给字符。字符名 DATA 表达式
表达式可以是一个数据或地址,也可以是一个 包含所定义字符名在内的表达式,但不能是一 个汇编符号(如R0~R7)。
MOV 与R0E,QAUD的DR区E别SS: MOV R1E,Q#UA必D须DR先E定S义S 后使用。 ADDRESDSADTAA无T此A 限31制H,所以DATA伪指令可以放在源程序
赋值命令EQU (Equate)
数据地址赋值伪指令DATA
汇编终止命令END (End of assembly)
注意!伪指令仅供汇编程序将源程序翻译成目标程序,本身并 不形成机器码。
2021/6/3
6
汇编起始地址命令
ORG (Origin)
规定程序或数据的起始存放地址。 ORG <地址>
Xn可以是一字节常数;用双引号或者单引号括起来的
【例】 字符或字符串;各个数之间用逗号隔开。 ORG 1000H
o A1:DB
01001010B,23 ,23,78H, (1005H)=31H(1的ASCII码),
A2:DB ‘5’,”12AB”,12D,-2 (1006H)=32H(2的ASCII码),
给数或符号赋给字符 字符名 EQU 数或汇编符号
<赋值项>可以是常数、地址、标号或表达式。
赋值以后的字符既可以作地址使用,也可以作 立即数使用。
【例】CS EQU 0FFFFH
A1 EQU R1 A2 EQU 10H DELAY EQU 0708H
A1可作为寄存器R1来使用,A2可作为8位直接地址或立即数使
机器汇编指由计算机通过汇编程序完成从汇编语言源程序到机器 语言目标程序的“翻译”工作。

单片机课件-第4章 MCS-51汇编语言程序设计

单片机课件-第4章 MCS-51汇编语言程序设计
本章教学要求
第4章 MCS-51汇编语言程序设计
➢ 掌握汇编语言编程的基础知识。 ➢ 熟悉汇编语言程序设计的步骤和方法。 ➢ 了解汇编语言程序特点。 ➢ 掌握MCS-51汇编语言的顺序、分支、循环、查
表及子程序的结构。
12:02
返回目录
1
本章目录
4.1 程序设计概述 4.1.1 汇编语言的组成 4.1.2 程序设计的步骤 4.2 汇编语言程序设计方法 4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 子程序
例如:ORG 1100H TAB: DW 1234H, 0ABH 10
DB、DW伪指令都只对程序存储器 的单元赋值或初始化。
12:02
返回目录
4.1.1 汇编语言的组成
----伪指令DS
(5)定义存储区伪指令DS
格式: [标号:] DS 表达式
功能:从标号地址开始保留表达式指定的字节单元作为 备用存储区,供程序运行使用。 例如: ORG 2000H
中;要求把相加之和存放在50H、
51H和52H单元中,进位存放 在位寻址区的00H位中。
50H 51H 52H
53H 54H 55H
高字节
低字节 + 高字节
低字节
R1→55H 54H 53H
R0→52H 51H 50H
00H 50H 51H 52H CY
20H
内部RAM
低字节
中字节 高字节
加数
低字节
源程序:
Y
位P=1?
N (A)=0? Y
N
P200H P2FFH P2F0H
ORG 0000H
JB P,JISH
JZ
QUAN

51单片机及C语言入门教程

51单片机及C语言入门教程

51单片机及C语言入门教程一、了解51单片机1.硬件介绍2.体系结构3.编程语言二、掌握C语言基础C语言是一种结构化的高级编程语言,易于学习和应用。

以下是C语言的基础知识。

1.数据类型C语言支持多种数据类型,包括整型、浮点型、字符型等。

根据需要选择合适的数据类型进行变量的声明和使用。

2.运算符C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。

熟悉并正确使用这些运算符是进行编程的关键。

3.控制语句控制语句是C语言中用于控制程序流程的重要语法结构。

常见的控制语句有条件语句(if-else)、循环语句(for、while、do-while)等。

4.函数函数是C语言中的基本代码单位,可以实现代码的模块化和复用。

编写函数时,需要明确函数的返回类型、参数列表和函数体。

三、开发环境搭建在进行51单片机和C语言的开发之前,需要准备好相应的开发工具和环境。

1.集成开发环境(IDE)2.单片机编程器3.相关资料在学习和开发过程中,需要查阅相关的资料和教程。

可以通过互联网相关的电子书籍、论坛和博客等。

四、编写第一个程序在搭建好开发环境之后,可以编写并运行第一个C语言程序。

1.创建工程使用IDE创建一个新的工程,并选择适合的目标单片机型号。

2.编写代码在IDE中,创建一个新的C语言源文件,并编写代码。

例如,可以编写一个led闪烁的程序。

```#include<reg51.h>void mainP1=0x00;//设置P1口为输出while(1)P1 = 0xff; // P1口所有引脚输出高电平P1=0x00;//P1口所有引脚输出低电平}```五、进阶知识学习通过掌握51单片机基本知识和C语言基础,可以进行更复杂的开发和项目实践。

1.中断处理中断是一种异步的事件处理机制,在51单片机中具有重要的意义。

学习如何使用中断来处理各种外部事件和信号。

2.存储器扩展3.通信接口总结:本文介绍了51单片机和C语言的入门教程。

51单片机汇编语言教程(精华版本)

51单片机汇编语言教程(精华版本)

30H


第2章 单片机结构及原理
①区共有32个字节单元(00H~ 1FH),分为4组,每组8个单元, 命名为工作寄存器R0~R7)。
任一时刻CPU只能选用一组工作寄
存器为当前工作寄存器组。
30H
当前工作寄存器组通过PSW中 的RS1和RS0标志位(工作寄存 器组指针)进行设置。

PSW7 CY 位7
RAM
作用:存放程序运行结果
字长:8位
30H
数量:256B
第2章 单片机结构及原理
低128B( 00H~7FH )为普通RAM区 高128B (80H~FFH)为特殊功能寄存器区
第2章 单片机结构及原理
(1) 低128字节的区域
①工作寄存器区(00H-1FH)

②可位寻址区(20H-2FH)
③用户RAM区(30H-7FH)
(最后一组不足时左边添0凑齐4位)
记忆: 1010B = 0AH 1011B = 0BH
1100B = 0CH
1101B = 0DH 1110B = 0EH 1111B = 0FH
第1章 单片机基础知识概述
(4)十进制整数转换成二、十六进制整数
转换规则:“除基取余”。十进制整数不断除以转换进制 基数,直至商为0。每除一次取一个余数,从低位排向高位。
第1章 单片机基础知识概述
二进制:0、1 ;规则:逢二进一,后缀为B。 一般表达式为:
N B bn1 • 2n1 bn2 • 2n2 b1 • 21 b0 •20
其中,基数为2,各位加权数为0,1。 例如:
1101B 1 23 1 22 0 21 1 20
第1章 单片机基础知识概述
30H

第4章51单片机的指令系统及汇编语言程序设计的.ppt

第4章51单片机的指令系统及汇编语言程序设计的.ppt
⑵ 内部数据存储器RAM中的128个字节。
⑶ 221个位地址空间。
如:MOV A,70H;(A)←(70H)
分析 执行
ROM
PC
1110 0101 操作码
PC
0111 0000 直接地址
SFR
PC
……
…… ACC 01100110
…… 70H 01100110
……
4.3.4 寄存器间接寻址 指令指定的某一寄存器的内容作为操作数地址。
00110110 60H ……
01100000 R0 ……
4.3.5 变址寻址
基址寄存器(DPTR或PC)的内容与变址寄存器(A)的 内容的和为可寻址单元的地址。
该类寻址方式用于访问程序存储器,对查表访问特 别有用。 注意:A中内容为无符号数。注意与相对寻址的区 别。
如:MOVC A, A+PC;(A)←((A)+(PC)) 设(A)=88H,(PC)=8019H
在51单片机系统中,位寻址的表示可以用以下几种 方式:
①直接位寻址(00H~0FFH)。例如:20H。 ②字节地址带位号。例如:20H.3表示20H单元的3位。 ③特殊功能寄存器名带位号。例如:P0.1表示P0的第1
位。 ④位的符号地址。例如:TR0是定时/计数器T0的启动位。
例如:MOV C,37H
4.3.1 立即寻址
指令中跟在操作码后面的数据就是实际参与运算的 操作数,称为立即数。
其指令码形式为:
PC PC+1
操作码 立即数
一般为一字节 一字节或二字节
如:MOV A, #20H;(A)←20H
即把20H这个数据送入累加器A中,即送入特殊 功能寄存器中地址为E0H的单元。

51单片机汇编语言教程

51单片机汇编语言教程

51单片机汇编语言教程:1课:单片机简叙1、什么是单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。

在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。

而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。

单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。

天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。

不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。

为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。

另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。

既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。

所以8051出来十多年,依然没有被淘汰,还在不断的发展中。

2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,89s51它们之间究竟是什么关系?MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。

51单片机汇编语言程序

51单片机汇编语言程序

如果平方值为两个字节,程序应如何编。
由条件转移指令构成程序判断框部分, 形成分支结构
单分支程序 一个判断决策框,两种分支结 例1 求8位有符号数的绝 构图。 对值。 ORG 0000H 方法:正数不变,负数变 MOV A,R2 补 JNB ACC.7,N ; 为正数? CPL A ;负数 变补

3.5.1
影响条件
条件满足? N 处理段 Y
影响条件 条件满足? N 处理1 Y 处理2
出重量后算出行李运费价格,其秤出的重 量以10kg为1个计价单位G , G已存入40H单 开始 元。计价方法 为50kg以内按3元, 50kg以上 (40H) A (A=G) 3G R2 分段计价: 50kg按3元计价 Y A<=5? ,超过部分按2元计价。 G×3 ;当G≤5 M= N 由此列出算式: ; 当G>5 G×3 + (G-5)×2
ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,@A+DPTR ;查表 MOV 21H,A SJMP $ TAB2: DB 00H,01H,04H,09H,16H,25H END
TAB TAB+1 TAB+2 TAB+3 TAB+4 TAB+5
DPTR A
数据 0 1 4 9 16H 25H

1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3 的内容为0~n,处理程序的入口符号地址分 别为PR0~PRn (n<128)。

分析:将PR0—PRn入口地址列在表格中, 每一项占两个单元,PRn在表中的偏移量 为2n,因此将R3的内容乘2即得PRn在表中 的偏移地址,从偏移地址2n和2n+1两个单 元分别取出PRn的高八位地址和低八位地

第4章 80C51单片机汇编语言程序的设计课件共71页PPT资料

第4章 80C51单片机汇编语言程序的设计课件共71页PPT资料
例:两个8位无符号二进制数比较大小。假设在外部RAM中有 ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1 、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其 中的大数并存入ST3单元中。
课程:单片机技术 教材:单片机基础
解:(1)分析任务:比较两个数的大小 (2)算法:算术运算、控制转移 (3)程序结构:单分支 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:单元地址升序排列 (6)RAM单元安排:外部RAM单元 (7)采用寄存器间接寻址方式(R0、R1或DPTR) (8)程序设计流程框图; (9)程序清单;
(A)=0? N
(A)=1? N
(A)=2?
N
Y 转 向 0分 支
Y 转 向 1分 支
Y 转 向 2分 支
课程:单片机技术 教材:单片机基础
例:已知:127≥X≥-128,求Y。设X,Y分别存放在外部RAM
1000H和2000H单元中。
1
x0
解:(1)分析任务:解方程 (2)算法:控制转移 (3)程序结构:多分支
例:假定三字节无符号数相加,其中一个加数在内部RAM的 50H、51H和52H单元中,另一个加数在内部RAM的53H、54H和55H 单元中,要求把相加之和存放在50H、51H和52H单元中,进位存 放在位寻址区的00H位中。 解:(1)分析任务:求两数之和
(2)算法:加法运算(ADD或ADDC)
课程:单片机技术 教材:单片机基础
2)如果加数N1在内部RAM 50H、51H和52H单元中,而加数N2与
和N3均在外部RAM0053H、0054H和0055H单元中,其它条件不变,
应如何修改程序?
3)如果N1、N2,N3均存放在外部RAM单元,应如何修改程序?

一个单片机小程序编写

一个单片机小程序编写

一个单片机小程序编写单片机在家用电器和工业系统中应用广泛,下面给大家介绍一个单片机小程序的编写。

1、设计任务:如果开关合上,L1亮,开关打开,L1熄灭,如图1所示。

监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态。

2、电路原理图:图13、系统板上硬件连线:如图1所示,图中VCC = +5V。

4、程序设计内容:(1)开关状态的检测过程:开关状态是从单片机的P3.0端口输入信号,当拨开开关K1拨上去(开关断开),即输入高电平;当拨动开关K1拨下去(开关闭合),即输入低电平。

可以采用JB BIT,REL 指令来完成对开关状态的检测即可。

(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、程序框图:如图2所示。

图26、汇编源程序的编写:ORG 00HSTART: JB P3.0,D1CLR P1.0SJMP STARTD1: SETB P1.0SJMP STARTEND7、用“keil软件编”写好汇编程序,然后转换成HEX文件并保存。

8、用“增强型A51编程器”把刚才写好的HEX文件烧写入单片机中。

9、把已写入程序的单片机,装入图1的电路,然后通电。

当拨动开关K1拨下去(开关闭合),发光二极管L1亮;拨开开关K1拨上去(开关断开),发光二极管L1灭。

说明刚才编写的程序达到了我们的设计要求。

51单片机汇编语言教程(精华版本)

51单片机汇编语言教程(精华版本)

2.数制转换
(1) 二进制转换成十进制 转换规则:按进制的表达式展开,然后按照十进制运算求和。
例如: 1011B 1 23 1 21 1 20 11
1111 1111
记忆:
8421
16
32 64 128
举例: 1100B = 12 1001B = 9 1111B = 15 11111111B = 255
RAM
作用:存放程序运行结果
字长:8位
30H
数量:256B
第2章 单片机结构及原理
低128B( 00H~7FH )为普通RAM区 高128B (80H~FFH)为特殊功能寄存器区
第2章 单片机结构及原理
(1) 低128字节的区域
①工作寄存器区(00H-1FH)

②可位寻址区(20H-2FH)
③用户RAM区(30H-7FH)
第2章 单片机结构及原理
2.1 MCS-51单片机结构
2. 1.1 MCS-51单片机的内部结构 2. 1.2 MCS-51引脚及功能
2.2 MCS-51的存储器结构 2.3单片机的复位、时钟与时序 2.4并行I/O口
MCS51单片机信号引脚简介
P1. 0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
第1章 单片机基础知识概述
二进制:0、1 ;规则:逢二进一,后缀为B。 一般表达式为:
N B bn1 • 2n1 bn2 • 2n2 b1 • 21 b0 •20
其中,基数为2,各位加权数为0,1。 例如:
1101B 1 23 1 22 0 21 1 20
第1章 单片机基础知识概述
1、控制器
作用:统一指挥和控制计算机协调工作

单片机汇编小程序

单片机汇编小程序

P1口接8个灯,点亮P1.0ORG 0000HSJMP MAINORG 0030HMAIN:CLR P1.0 /* MOV A,#0FE MOV P1,A*/END/* Eg2:点亮全部小灯ORG 0000HSJMP MAINORG 0030HMAIN:CLR AMOV P1,AEND *//*EG3:点亮小灯,再熄灭小灯ORG 0000HSJMP MAINORG 0030HMAIN: CLR A MOV A,#00HMOV P1,A MOV P1,ACPL A MOV A,#0FFHMOV P1,A MOV P1,AENDEg4:闪烁小灯(点亮小灯,再熄灭小灯)10次ORG 0000HSJMP MAINORG 0030HMAIN: MOV R7,#10LOOP:CLR A MOV A,#00HMOV P1,A MOV P1,ACPL A MOV A,#0FFHMOV P1,A MOV P1,ADJNZ R7,LOOPEND *//*EG3:点亮小灯,再熄灭小灯ORG 0000HSJMP MAINORG 0030HMAIN: CLR A MOV A,#00HMOV P1,A MOV P1,ACPL A MOV A,#0FFHMOV P1,A MOV P1,AENDEg4:闪烁小灯(点亮小灯,再熄灭小灯)10次ORG 0000HSJMP MAINORG 0030HMAIN: MOV R7,#10LOOP:CLR A MOV A,#00HMOV P1,A MOV P1,ACPL A MOV A,#0FFHMOV P1,A MOV P1,ADJNZ R7,LOOPEND*/定时器1工作方式2控制8个灯间隔50ms流水点亮ORG 0HAJMP MAINORG 001BH /*定时器T1入口地址*//*000B定时器T0入口地址*/AJMP T1_SUBMAIN: MOV TMOD, #10H /*设置定时器T1工作方式2*//*#02H设置定时器T0工作方式2*/MOV TH1, #3CH /*设置定时初值3CB0是50ms,B1E0是20ms*/MOV TL1,#0B0HMOV IE,#88H /*等价于开总中断和定时器1中断允许即SETB EA 和SETB ET1*/ /*#82H开总中断和定时器0中断允许*/SETB TR1 /*定时器1开中断*//*TR0定时器T0开中断*/MOV R4,#10MOV A,#0FEH /*设置小灯的初始状态*//*根据题目给定状态输入相应数值*/MOV P1,A /*输入小灯的初始状态给P1口,点亮P1.0*//*可以输入给P0 P2 P3*/SJMP $ORG 0100HT1_SUB: MOV TL1,#0B0HMOV TH1,#3CHDJNZ R4,T1_ENDMOV R4,#10RL A /*左移一位点亮*//*也可以右移*/MOV P1,AT1_END: RETIEND闪烁15次间隔1sORG 0000HSJMP MAINORG 0030HMAIN: MOV R4,#15 /*闪烁的次数*/LOOP: CLR A /*;MOV A,#00H*/MOV P1,A /*;MOV P1,A 8*/ACALL DELAYCPL A /*; MOV A,#0FFH*/MOV P1,A /*; MOV P1,A*/ /*p1口输出*/ACALL DELAYDJNZ R4,LOOPDELAY: MOV R5,#10 /*延时一秒即闪烁间隔*/ L2: MOV R6,#125L1: MOV R7,#200DJNZ R7,$ /*;200*125*10*2=100000us*/DJNZ R6,L1DJNZ R5,L2RETEND四个拨动开关外加一个中断控制8个小灯ORG 0000HSJMP MAINORG 13HSJMP LAMPORG 0030HMAIN: S ETB EASETB EX1SETB IT1SJMP $ORG 0050HLAMP: MOV P1,#0FFHMOV A,P1SWAP AMOV P1,ARETIEND外部中断1低电平触发方式初始化程序ORG 0000HAJMP MAINORG 0013HAJMP PINT1ORG 0100HMAIN: SETB EX1SETB EAHERE: AJMP HEREPINT1: RETIEND外部中断1下降沿P2口控制8个灯4L4M转换ORG 0000H //*外部中断0下降沿触发*/AJMP MAINORG 0013H /*外部中断1入口地址*/ /*0003h*/AJMP PINT1ORG 0100HMAIN: SETB EX1 /*外部中断1开中断*/ /*EX0*/SETB EA /*开总中断*/SETB IT1 /*外部中断1设置下降沿触发*/ /*IT0*/ /*CLR IT1 外部中断1电平触发或CLR IT0外部中断0电平触发*/MOV A,#0FH /*设置灯的初始状态,4亮4灭*/MOV P2,A /*输入小灯状态给P2口,也可以给P0 P1 P3*/ HERE: AJMP HEREPINT1: CPL A /*SWAP A 变换小灯状态,4灭4亮*/MOV P2,ARETIEND闪烁10次间隔0.5sORG 0000HSJMP MAINORG 0030HMAIN: M OV R7,#10LOOP: CLR A /* MOV A,#00H */MOV P1,A /* MOV P1,A*/ACALL DELAYCPL A /*MOV A,#0FFH*/MOV P1,A /*MOV P1,A*/ACALL DELAYDJNZ R7,LOOPDELAY: MOV R5,#5L2: MOV R6,#250L1: MOV R4,#200 ;250*400=100000DJNZ R4,$ ;200*2=400USDJNZ R6,L1DJNZ R5,L2RETEND延时10毫秒DELAY:MOV R6,#100L1: MOV R7,#50DJNZ R7,DELAY ;50*2DJNZ R6,L1RETEND。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机汇编语言教程:第4课-第一个单片机小程序
(基于HJ-1G、HJ-3G实验板)
上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯持续地闪烁,这就有一定的实用价值了,比如能把它当成汽车上的一个信号灯用了。

怎样才能让灯持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10持续地输出高和低电平。

怎样实现这个要求呢?请考虑用下面的指令是否可行:
SETB P10
CLR P10……
这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。

第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也没有机会让灭了。

为了解决这两个问题,我们能做如下设想,第一,在执行完SETB P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了。

第二在执行完第二条指令后,让计算机再去执行第一条指令,持续地在原地兜圈,我们称之为循环,这样就能完成任务了。

以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):
;主程序:
LOOP:SETB P10;(1)
LCALL DELAY;(2)
CLR P10;(3)
LCALL DELAY;(4)
AJMP LOOP;(5)
;以下子程序
DELAY:MOV R7,#250;(6)
D1:MOV R6,#250;(7)
D2:DJNZ R6,D2;(8)
DJNZ R7,D1;(9)
RET;(10)
END;(11)
按上面的设想分析一下前面的五条指令。

第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。

第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们能认识到,它要转到第一条指令处。

这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。

是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,能称它为A,X等等,当然,这个时候,第五条指令LJMP后面的名字也得跟着改了。

第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。

这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则
程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实有RET指令。

在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。

在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。

程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为伪指令。

单片机内部结构分析:为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从R1开始,R1被称之为工作寄存器。

什么是工作寄存器呢?让我们从现实生活中来找找答案。

如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么不难了吧?我们会怎样做呢?如果有张纸,就不难了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。

这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,一般要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中能吗?显然不行,因为计算机要将结果写进去,而ROM是不能写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它能将数据写进去。

特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。

51实验板推荐(点击下面的图片可以进入下载资料链接)
HJ-1G HJ-3G。

相关文档
最新文档