关于c51资料
c51芯片

c51芯片C51芯片是一种经典的8位单片机(Microcontroller),由英特尔(Intel)公司推出。
它是集成电路上的一种特殊的类型,拥有处理器核心、存储器、定时器和输入输出设备等。
下面将对C51芯片进行1000字的介绍。
一、C51芯片的特点1. 8位结构:C51芯片是一种8位单片机,意味着它的数据总线宽度为8个位,可以同时处理8位的数据。
这种结构使得C51芯片比16位或32位的处理器更加经济实惠,适合于嵌入式应用。
2. 简单易用:C51芯片采用指令简洁、结构清晰的汇编语言进行编程,容易上手。
此外,C语言也可以用来进行开发,便于程序员进行高级编程。
3. 低功耗:C51芯片采用低功耗设计,能够在低电压下运行,能够提供较高的能效比。
这使得C51芯片在实际应用中更加节能环保。
4. 多功能:C51芯片具有丰富的外设接口和功能模块,包括通用输入输出引脚(GPIO)、串口通信接口(UART)、模数转换器(ADC)等。
这些功能模块可以与外部设备进行交互,实现更多的应用。
5. 可编程性:C51芯片支持编程和擦写,可以通过编程器重新下载程序。
这使得开发者可以反复测试和调试,并随时更新程序内容。
二、C51芯片的应用领域1. 工控系统:C51芯片具有高度可靠性和稳定性,可以应用于工业控制系统中,如PLC(可编程逻辑控制器)和变频器等。
通过与传感器、执行器等设备的配合,实现自动控制和监控。
2. 电子产品:C51芯片广泛应用于各种电子产品中,如电视、音频设备、移动电话等。
通过C51芯片的高度集成度和低功耗特性,可以实现功能强大、耐用节能的产品。
3. 汽车电子:C51芯片在汽车电子领域也有广泛的应用。
它可以用于车载电子控制单元(ECU)和车身电子系统中,实现车辆的智能化控制和诊断功能。
4. 医疗设备:C51芯片也被广泛应用于医疗设备领域,如心电图仪、血压监测仪等。
其高性能和可靠性使得设备具有更高的准确性和稳定性。
5. 物联网:C51芯片非常适合用于物联网设备的开发。
第五章--C51

查找零的个数C 51程序 ★查找零的个数C-51程序
#include <reg51.h> main ( ) { unsigned char xdata *p=0x2000;/*指针p指向2000H单元*/ *p=0x2000;/*指针p指向2000H单元* ;/*指针 2000H单元 int n=0,i; for(i=0;i<16;i++) 若该单元内容为零, { if(*p==0) n++; /* 若该单元内容为零,则n+1 */ p++; /* 指针指向下一单元 */ } 指针p指向2100H 2100H单元 p=0x2100; /* 指针p指向2100H单元 */ 把个数放在2100H 2100H单元中 *p=n; /* 把个数放在2100H单元中 */ }
51的程序结构 ㈡ C-51的程序结构
与一般C语言的结构相同, main()函数为程序人 与一般C语言的结构相同,以main()函数为程序人 程序体中包含若干语句还可以包含若干函数。 口,程序体中包含若干语句还可以包含若干函数。
51函数的一般格式 C-51函数的一般格式
函数名(参数表) 类型 函数名(参数表) { 数据说明部分 语句执行部分 }
51数据的存储类型 ㈣ C-51数据的存储类型
名 data 存储空间位置 直接寻址片内RAM 直接寻址片内RAM 长度 8位 8位 1位 1位 8位 8位 8位 8位 16位 16位 16位 16位 数据范围 0~255 0/1 0~255 0~255 0~65535 0~65535
可位寻址片内RAM bdata 可位寻址片内RAM 间接寻址片内RAM idata 间接寻址片内RAM 片外页RAM pdata 片外页RAM 片外RAM xdata 片外RAM code 程序ROM 程序ROM
第五章C51程序设计

七、C51构造数据类型
前面讲的字符型(char)、整型(int)、浮点型 (float)、位型(bit)等数据类型,都属于C51 的基本数据类型。C语言还提供了一些扩展数据 类型,它们是由基本数据类型按一定的规则组合 成的数据类型,称之为构造数据类型。
以指针类型说明
1、基于存储器的指针
基于存储器的指针以存储器类型为参量,它在编 译时才被确定。因此,为指针选择存储器的方法 可以省掉,以便这些指针的长度为一个字节 (idata*,data*,pdata*)或2个字节 (code*,xdata*)。
} }
任务二、简易数字钟
/*数码管静态显示0~9的演示程 序,P2口作为段码驱动*/
#include<reg51.h> #define uchar unsigned char uchar dispcode[10]={0x3f, 0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f}; void delay05s(void) {unsigned char i,j,k;
五、MCS-51并行接口的C51定义
sfr P0=0x80; sfr P1=0x90; #include<absacc.h> #define PORTA XBYTE[0xFFC0] absacc.h是C51中绝对地址访问函数的头文件。
六、位变量的C51定义
除了C的数据类型外,C51编译器支持“bit”数据类型
}
任务一 点亮彩灯
/*依次点亮发光二极管的程序*/ #include”reg51.h” #define uchar unsigned char void delay05s(void)//延时0.5S {
单片机原理c51

单片机原理c51C51是英特尔公司推出的一款经典的8位单片机,它以其高性能、低功耗和丰富的外设接口而被广泛应用于各种嵌入式系统中。
C51采用哈佛结构,由CPU 核心、存储器、输入输出端口和时钟等组成。
在这篇文章中,我将从C51的结构、工作原理、指令集和应用方面进行详细介绍。
首先,我们来了解C51的基本结构。
C51的核心是一个8位的中央处理器,它包含一个紧凑的指令集、寻址模式和寄存器集。
C51的存储器主要包括ROM(只读存储器)和RAM(随机存储器)。
ROM用于存储程序代码和常量数据,而RAM用于存储变量和运行时数据。
C51还有一些特殊功能寄存器(SFR),用于控制和配置外设接口。
C51的工作原理是通过时钟信号进行同步操作的。
C51的时钟可以是外部提供的,也可以是内部产生的。
时钟信号按照一定的频率进行周期性的振荡,它驱动着C51的工作节奏。
每当时钟信号发生跳变,C51就执行一条指令。
C51的指令由操作码和操作数组成,操作码表示要执行的操作,而操作数则是操作所需要的数据。
C51的指令集非常丰富,包含多种逻辑运算、算术运算、位操作和数据传输等指令。
C51支持直接寻址、间接寻址和立即寻址等多种寻址模式,可以满足各种不同的应用需求。
C51还具有很强的中断处理能力,它可以响应外部中断和定时器中断,并在中断发生时暂停当前任务,转而执行中断服务程序。
C51的应用非常广泛。
由于其高性能和低功耗的特点,C51常常被用于无线通信系统、工业控制系统、汽车电子系统、医疗设备等领域。
它可以控制各种外设接口,如LED显示、数码管显示、键盘输入、AD/DA转换、串行通信等。
此外,C51还支持多任务操作系统,使得多个任务可以同时运行,提高了系统的并行处理能力。
总之,C51是一款经典的8位单片机,它拥有强大的性能和丰富的外设接口,可以满足各种嵌入式系统的需求。
C51采用哈佛结构,通过时钟信号进行同步操作,具有丰富的指令集和多种寻址模式。
C51的数据类型

C51的数据类型引言概述:C51是一种常用的单片机系列,其数据类型在嵌入式系统开发中具有重要的作用。
本文将详细介绍C51的数据类型及其特点,帮助读者更好地理解和应用C51单片机。
一、基本数据类型1.1 位数据类型C51提供了位数据类型,用于表示单个位的值。
位数据类型可以用于对单个引脚进行操作,如设置或清除引脚的状态。
位数据类型包括bit、sbit和bool,其中bit用于定义全局位变量,sbit用于定义特殊功能寄存器位,bool用于定义逻辑变量。
1.2 字符数据类型C51支持字符数据类型,用于存储单个字符的值。
字符数据类型可以用于处理文本数据,如显示字符、输入字符等。
在C51中,字符数据类型使用关键字char进行定义,可以表示ASCII码字符集中的任意字符。
1.3 整数数据类型C51提供了多种整数数据类型,用于存储整数值。
这些整数数据类型包括有符号整数和无符号整数,分别用于表示带符号和不带符号的整数。
常用的整数数据类型有int、unsigned int、short和unsigned short等。
二、浮点数据类型2.1 单精度浮点数C51支持单精度浮点数数据类型,用于存储小数值。
单精度浮点数可以表示较大范围的小数,并具有一定的精度。
在C51中,单精度浮点数使用关键字float进行定义,可以进行浮点数运算。
2.2 定点数C51还支持定点数数据类型,用于表示固定小数位数的数值。
定点数可以提高计算速度,并且不需要浮点数运算库的支持。
在C51中,定点数使用关键字fixed进行定义,可以进行定点数运算。
2.3 高精度数C51还提供了高精度数数据类型,用于存储较大范围和高精度的数值。
高精度数可以进行精确的计算,并且可以表示较大的数值。
在C51中,高精度数使用关键字long进行定义,可以进行高精度数运算。
三、数组和结构体3.1 数组C51支持数组数据类型,用于存储相同类型的多个数据。
数组可以按照索引访问和操作其中的元素,方便进行批量处理。
C51单片机的基础知识

5、可扩展性:系统应具备良好的扩展性,方便未来进行设备升级或扩容。
三、系统设计方案
1、硬件设备:包括服务器、网络交换机、音源设备、功放设备、扬声器等。 服务器应采用高性能、稳定的品牌服务器,以保证系统的稳定性和可靠性。网络 交换机应选择支持大带宽、低延时的产品,以保证广播信号的传输质量。音源设 备可选用数字音
首先应该从其内部结构及各部件关系入手,清楚其内部资源及怎样使用,然 后通过自己动手制作实践来加深印象,之后通过学习语言来掌握编程方法及技巧。 切记不要一开始就试图记忆太多的内容,这样只会增加你的负担,要知道“贪多 嚼不烂”。
先搞懂最基本的原理后再试着看懂其它扩展资料就会容易多了。之后要付诸 实践进行调试练习。在理解的基础上进行记忆,切勿死记硬背。
二、中断结构
C51单片机的中断系统主要包括以下几个部分:
1、中断源:C51单片机支持多个中断源,包括定时器/计数器,串行通信口, 外部中断等。每个中断源都有相应的中断标志,用于指示该中断源是否产生了中 断。
2、中断控制器:中断控制器是中断系统的核心部件,它负责管理各个中断 源的中断请求,根据优先级判断并处理。
二、系统需求分析
1、稳定性:系统应具备高度的稳定性,能够保证长时间的连续运行,避免 因设备故障或网络问题导致的广播中断。
2、可靠性:系统应具备可靠的备份机制,确保在主设备出现问题时,备份 设备能够迅速接管,保证广播的连续性。
3、易用性:系统应具备良好的用户界面,操作简单易懂,方便管理员进行 配置和管理。
五、C51与8051的区别
C51单片机是指一系列基于8051内核的单片机,各个生产厂商根据需要都会 在其基础上增加一些功能,但这与8051内核是相同的。所以很多人都习惯称其为 8051单片机。现在流行的很多开发板都是基于8051内核的。
第四章 单片机C51简介

五、C51常用运算符
赋值运算符、算数运算符、关系运算符、 逻辑运算符、位运算符、条件运算符….
位运算符 位运算是按位对变量进行运算的,但并不改变参与 运算的变量的值。 C51 中位运算符只能对整数进行操作,不能对浮点 数进行操作。C51中的位运算符有: & 按位与 ︱ 按位或 ∧ 按位异或 ~ 按位取反 << 左移 >> 右移
//声明单个位
2. C51数据存储类型
存储类型 data 与存储空间的对应关系 直接寻址片内数据存储区,访问速度快(128字节) 可位寻址片内数据存储区,允许位与字节混合访问(16字 节) 间接寻址片内数据存储区,可访问片内全部RAM地址空 间(256字节) 分页寻址片外数据存储区(低256字节) 寻址片外数据存储区(64K字节) 寻址代码存储区(64K字节)
bit bdata flags;
float idata x,y,z;
unsigned int pdata dimension; unsigned char xdata vector[10][4][4];
unsigned char code a[]={0x00,0x01};
P78 例4-2、4-3(自行看书)
•sfr16 16位特殊功能寄存器
sfr16占用两个内存单元,值域为 0~65535。sfr16和sfr 一样用于操作特殊功能寄存 器,不同的是它用于操作占两 个字节的寄存器,如定时器T2。 sfr16 T2=0xCC; //定义8052定时器2,低8位地址为
// T2L=CCH,高8位T2H=CDH
指针
当定义一个指针变量时,若未指定它所指向的 对象的存储类型,则该指针变量被认为是一般 指针; 指定了它所指对象的存储类型,则该指针被认 为是基于存储器的指针。
C51概述

格式特点
习惯用小写字母,大小写敏感 不使用行号,无程序行概念 main( ) ) main( { { ………………. 可使用空行和空格 int ……………… i , j , sum; 常用锯齿形书写格式 sum=0;………….. for(i=1; i<10;i++) ………….. 优秀程序员的素质之一: { ……… for(j=1;j<10;j++) ………. 使用TAB缩进 { …………… { }对齐 sum+=i*j ; ……………. 有足够的注释 } ………………. 有合适的空行 } ……………….. }printf(“%d\n”,sum); } • • • •
C51程序特点:
7. 引入一对花括号{},把一串语句括起来而成为复合 句(分程序)在括号内可定义变量. 8. 程序中的任何函数都允许递归,这样对某些算法 实现起来就非常方便. 9. 规模适中,语言简洁,编译程序简单紧凑. C51本身 没提供输入输出工具及并行操作,许多功能通过显 示函数调用来完成.占用存储空间小. 10. C51的可移植性好,是指程序从一个环境不加或 稍加改动就可移植到完全不同的环境中去.汇编不 可移植.某些高级语言如 FORTRAN等编译的程序也 不可移植. 11. 生成的代码质量高,效率高.所以学C51的人越来 越多. Keil C51软件是德国公司的产品,分µ Vision2, µ Vision3, µ Vision4
34种运算符:
算术运算符 关系运算符 逻辑运算符 :+ - * / % ++ -:< <= == > >= != :!(逻辑非) &&(与)||(或)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机教程第一课点亮一盏灯任务:把实验板上的任一盏灯点亮。
目的:入门第一课,了解单片机基本工作原理,对指令控制硬件有初步认识。
今天我们开始51单片机学习的第一课,以后还会陆续学习其它内容,今天我们先从最简单的学起,为了能更直观地了解到指令对硬件的控制,我们会采用汇编语言进行讲解,以使初学者更容易理解,建议大家在看过课程后,都实际自己在实验板进行操作。
这里,我们先假定大家已经清楚KEIL的建立工程项目和进行程序编译的方法,如果有不明白的,可以下载KEIL使用教程,这里就不重复讲述如何使用KEIL。
另外,我们也先假定大家已经清楚如何将编译生成的HEX文件烧录到STC芯片里。
如果有不懂的,可以看看wan1jing版主写的教程。
. 这里讲课不按传统教科书方式进行,而是按实际需要,用到才学。
所以一些基础的知识,以后会逐步在课程里讲述。
本人水平有限,讲述过程中如有错误,欢迎批评指正。
好里,言归正传,开始了。
首先,我们看看实验板的电路图。
由图中可以看出,单片机的P0口8个IO每个均接有一只LED发光管及串有一只电阻到电源正极,而我们的目的就是要把LED点亮,显而易见,只需要把我们的P0口相对应的IO口写成低电平,LED就可以通电工作。
在51单片机里,上电后,芯片复位后其所有引脚均是高电平,因此,正常状态下,通电后,LED是不发光的,因此,我们需要用一个指令,使这个引脚变为低电平,(知识点:数字电路里,只存在二种状态,0和1,一般用高电平表示1,低电平表示0。
)我们在KEIL里建一个项目,写入如下的语句:好了,编译,生成HEX文件,烧进我们的实验,怎么样,灯亮了吧。
这里起作用的就是CLR P0.0这一条语句,它的作用就是把P0.0端口写成低电平,相对应的语句是SETB P0.0,它的作用刚好相反,是把P0.0写成高电平,同理,我们可以很容易知道,如果要控制其它端口,只要更换P0.0为其它端口名即可。
ORG语句在汇编里作用只是用来告诉编译器,定位到某个地址放置跟着的代码。
因为上电复位了,单片机总是从地址0000H开始执行的,所以,在开始地址,我们放上一跳转指令AJMP ,它是无条件跳转到指定的地址,为什么要跳转到100H?这个留在讲中断时再讲。
关于AJMP $,是指跳转到本行,也即是单片机执行到这里,会不停地在本行循环,不会再往下执行,一般放程序后面,使单片机执行到这里就停在这里。
好了,到这里,大家都应该明白怎么把一盏灯点亮了吧。
看似神秘的单片机就是这么简单,它的引脚,要么是高电平,要么低电平(P0口有点特殊,这个留待以后再讲)。
我们要做的,只不过是编个程序,控制引脚在适当的时候按我们的意愿去输出高电平或者低电平。
仅此而已。
本课到这里结束,留个作业,大家尝试一下,把其它的灯也点亮。
第二课闪动的灯任务:使把实验板上的任一盏灯闪动起来。
目的:学习延时程序,对MCU执行时间有个初步概念。
今天,我们来学习第二课——闪动的灯。
上一课,我们已经把实验板上的灯点亮了,同时学习了CLR、SETB语句,同时,我们知道了,只要把端口电平写为低或高,即可使该端口上的LED亮或者灭。
今天,我们就要让这个灯闪起来。
我们在KEIL里建一个项目,写入如下的语句:图1 然后我们编译,烧进实验板,怎么样?灯闪了没有?没有!连亮都没有亮过!为什么呢?这是因为,单片机的执行速度是非常快的,每条指令执行时间需1-4个机器周期不等,而每个机器周期包含12个时钟周期,在12M晶振下,每个时钟周期是1/12000000,所以每个机器周期只有12/12000000=1us。
SETB、CLR指令均是1个机器周期,在1微秒时间内 LED变化,人眼当然是看不到的。
所以,我们要给它加上延时,让它亮了之后,延时一段时间再灭,这样,就能看到变化了。
图2 我们来说说标号,程序里START,DELAY这些红色的字,汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。
书写标号时,规定第一字符必须是字母或半角下划线“_”,它后面可以跟英文和数字字符、制符表等,并可任意组合,以冒号(:)结束。
再有标号不能用操作码助记符和寄存器的代号表示。
标号可单独占一行或写在指令前。
我们加上延时子程序,然后用ACALL指令来调用,我们注意到,在DELAY子程序后,我们加了RET指令,这个RET执行完之后,返回到调用语句指令之后继续执行。
每个被调用的子程序,必须在程序末加上RET。
DELAY子程序里我们用了R7,R6,R5,这些寄存器是在51芯片RAM中,共有4组,每组有8个,从R0~R7。
如何切换这4 组,我们留在以后说。
MOV R7,#5H 是将数值5写进R7之中,我们注意到,对于非0~9开头的数值,我们要在前面加上0,譬如#0C3H,不能写成#C3H。
当然,我们可以写成MOV R5,#255,用十进制表示数值。
这个是单周期指令。
DJNZ R7,D1 的意思是将R7的值减1,然后判断它是不是0,如果不为0就跳转到标号D1处执行,如果是0就往下执行。
这个是双周期指令。
从程序中我们可以看到,首先是R7被写上数值5,R6数值195(16进制的C3),R5数值255(16进制FF),然后不断的执行255次DJNZ R5,$,完成后,把R6减1,判断其是否为0,不为0再把R5写上255,再执行。
如此反复。
因此,在12M晶振下,我们可以计算出这个延时子程序的延时时间是: ((255*2+1)*195+195*2+1)*5+5*2+1=500191us 约为0.5秒。
这样,程序执行完亮灯后,就延时0.5秒再关闭,这样,我们就可以看到灯亮和灯灭。
好了,我们的灯已亮过了,又灭了,如果我们要让它不停的闪动,怎么办呢?图3 我们把它点亮,延时,再关掉,再延时,再点亮,如此反复,就可以了。
我们注意到,在程序末,没有往时的AJMP $,而是用了AJMP START。
呵呵,相信大家都明白了吧,是跳转到开始位置。
这样,就能反复循环执行。
灯,也就闪起来了。
在这里,我们把MOV R7,#5H提出来,放在主程序里,作为入口参数,这样做有什么好处呢?这样,我们可以调节R7的值,使调用的延时子程序延时时间改变,那么,我们就可以做出,亮长一点时间,灭短一点时间的程序来,或者相反。
在这里,只要在延时之前,改变R7的值,再ACALL DELAY就可以了。
这样的程序,有点累赘,大家都注意到了吧,MOV R7,#5H和ACALL DELAY重复了,我们再来把它简化一下。
图4 我们引入一个新的语句CPL P0.0,它的作用就是取反P0.0的状态。
也就是说,如果原来P0.0是高电平,那么,执行后就是低电平,反之亦然。
经过简化,是不是简洁了好多。
呵呵。
在这里,MOV R7,#5H 仍然被写在主程序,这样有好处,就是程序其它地方还可以调用DELAY,只要改变R7的值,就能得到不同的延时时间,通用延时子程序喔。
呵呵。
顺便一提,R7每增加数值1,延时时间会增加0.1秒,也就是说,这个延时子程序延时时间可以从0.1秒到25.5秒。
大家可以试试,改成255(0FFH)看看,是不是要好久才能看到灯闪一下。
^_^ 好了,今天课程到此结束,留个作业,把各个灯闪起来。
试试让闪动、亮、暗的时间不同。
有兴趣还可以想想怎么让不同的灯按不同的频率闪动。
[本帖最后由 sunhm 于 2008-6-9 11:06 编辑]第三课跑马灯任务:用实验板上的8个LED实现多款跑马灯。
目的:学习移位指令,查表指令,比较判断指令。
今天我们来学习跑马灯。
这个几乎是所有51学习的必修课。
一般来说开始就会学习这个,因为考虑到我们论坛里大家的起点水平不同,所以前面增加了二课,以利于大家有个初步的概念。
从前二课课程来看,的确是很有必要。
呵呵好了,言归正传,今天我们学习跑马灯。
最基本的跑马灯就是让P0口上的8个LED逐个点亮。
讲到这里,也许有人就要说了,用上一课的点亮灯加延时就可以,对!原理正是如此,也有同学在第二课帖子里写出这样的程序来。
但今天我们引入一个新的语句,使得实现这一功能的程序大大简化。
先看程序图一累加器A,51系统内一个非常重要,并且要经常用到的东东,呵呵,大部分指令都跟它有关,在51系统里,就数它可以做的东西最多了,不少运算都是必须通过它来完成,如乘法、除法、还有本课要学习的查表都必须通过它来完成,等等。
初学者只要记住它是一个8位,可以位操作的东东就可以了,呵呵,以后学习更多的语句时再来了解它的作用。
RL A ,累加器A内容不带进位向左环移一位,相对应的还有RR A,即是向右移,还有RLC A,RRC A,这两个是带进位位的。
C,进位位,51里一个极重要的东东。
一般用它来实现数据位操作、判断等等,它的地位可以比美累加器A。
大家记住它,它只是一个位,并不象累加器A,R0~R7寄存器那些有8个位。
这里我们了解一下移位指令是怎么工作。
看图,这是累加器A进行移位时的状态。
图二由图我们可以看到,累加器包括8个位,由高位D7至低位D0,这里的图是右移指令,即RR A执行时的情况,每执行一次,最右边的位D0被移出送到D7的位置,其它的移就向右移一位。
下面则是带进位位的右移。
图三由图我们可以看到,当右移时,D0先移到C,C的位就移入D7,其它的顺序右移。
以上是右移,左移的道理一样。
带进位位移位,我们可以理解成共9个位参加操作。
这样就很清楚了,我们先在累加器A里放入数值0FEH(二进制数1111 1110),然后这个数值被送到P0口,则P0口上8个位对应累加器A上8个位,那么,最低位的P0.0上的LED灯被点亮。
点亮后,我们继续调用第二课里用到的延时子程序进行延时,并且,将累加器A进行左移操作,完成后,累加器里的值就变成0FDH(二进制数 1111 1101),再将A的值送到P0口,点亮第二个LED。
如此循环,则P0口上的LED被逐个点亮。
大家可以试试,将RL A变换成RR A,或者RLC A, RRC A,看看情况有什么不同。
领会一下移位,带进位移位的不同之处。
想一想,通过移位,C进位位的数值是如何被移进累加器A的。
这个在以后很多地方都要用到的技巧,希望大家细心领会。
再补充一下,进位位在这里初始值是0的,可以通过CLR C,SETB C来将它改变。
好了,这样的跑马灯相对比较简单,如果我们要做出花式比较多的跑马灯。
我们来学习查表指令。
图四DELAY子程序就沒有写出来了,大家自己补充进去。
DPTR,数据指针,它是16位的,包含DPH,DPL两个8位。
对于51的代码地址,是以16位进行表示的,大家注意到,我们写程序的ORG 0000H,ORG 0100H了吗?MOV DPTR,#TAB1,将TAB1代码的存放地址送入到指针中。