产品概述

单片机原理及c51编程 解析51单片机的工作原理

小编 2024-11-24 产品概述 23 0

解析51单片机的工作原理

解析51单片机的工作原理

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。

51单片机与许多单片机的工作原理是一样的它们都遵循冯诺依曼架构,简单来说就是数据区和代码区是区分开来的。在单片机中的具体表现就是数据RAM区和程序ROM区。

我们就要比较广泛的51单片机为例来了解单片机的工作原理。

一、微处理器

主要包括算数逻辑运算单元和控制部件。

先来说ALU,它执行的是单片机的算数工作。逻辑运算单元执行单片机的逻辑运算(如:与、或、非、==、!、!=、同或、异或、||、&&等等)。实际上C语言也是在执行以上这些逻辑运算和数学运算。

至于控制部件,它是控制单片机的程序计数器PC向程序存储器获取指令和操作数的主要部件,在取得操作数之后经过译码和控制电路把相应的指令转换成不同的电控制信号,让ALU、SFR、外设GPIO、ADC、定时器、中断等这些外设能够正常运作。

二、数据存储区

数据存储区是运行系统栈SP和程序局部变量、数组等数据的区域。

上图所示的程序是51单片机毫秒延时函数,局部变量j、i在RAM中的r3和r5寄存器中,入参n在r7寄存器中,R0-R7寄存器组在RAM中,其实左边调试栏中的寄存器均在RAM中运行。总之,RAM是运行数据的地方,而代码(指令)则是存放在ROM区的。

三、程序存储区

程序存储区是存储常量和代码的区域。

如下图所示:在.m51文件中标红箭头处最左边的“C:”的地方表示的是代码在ROM中,“D:”表示数据在RAM中,“B:”则表示位。

从中我们也可以看出main以及Delay_ms这些函数的地址都是存在ROM中的,也就是我们的所说的代码区。总之,C语言编译成机器码后,其指令和常数全局变量等就存储于ROM中了(PS:掉电不丢失的地方)。

四、中断系统

中断就是当中断管脚有外部信号输入的时候(中断管脚可以设置上升沿、下降沿、高电平或者低电平作为触发中断的条件),微控制器接收到这个控制信号后正在执行的任务会暂时停止,去处理中断里面的任务,处理完成中断任务后又继续从原先中断停止的地方继续执行。

本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!

C语言知识并不难,没有任何编程基础的人都能够学

C语言知识并不难,没有任何编程基础的人都能够学

单片机属于数字电路,其概念、术语、硬件构造和原理都源自数字电路,假如数字电路根底扎实,对复杂的单片机硬件构造和原理就能容易了解,就能轻松地迈开进修的第一步,自自信心也会树立起来。

一般是先进修模拟电路再去进修数字电路。扎实的模拟电路根底不仅让你容易看懂他人设计的电路,而且让你的设计的电路更可靠,提高产品质量。

C语言知识并不难,没有任何编程根底的人都能够学,在我看来,初中生、高中生、中专生、大学生都能学会。当然,数学根底好、逻辑思维好的人学起来相对轻松一些。

文章相对比较长,字数比较多,大家可以先打开头像关注我,之后慢慢看,///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像左下角黑色字体加我也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

当根底打好以后,你会感觉到单片机不再难学了,而且越学越起劲。

当单片机乖乖的依照你的逻辑思维和算法去执行指令,达到预期控制效果的时候,成就感会让你自信心十足、夜以继日、废寝忘食的投入到单片机的世界里。

能够这么说,扎实的电子技术根底和C语言根底能增强进修单片机自信心,快速掌握单片机技术。

假如是电子专业,和单片机相关的主要是电路分析,数电,模电。

一初始的时候,师兄带着我学C语言,那时候我记住和明白的独有C的语法,数字电路师兄也没有讲,毕竟C语言不像汇编,不用控制寄存器,只有明白有关的宏定义是什么意思,如P1=0x00就是把LED灯全部点亮(在明白LED灯的工作原理的情况下),那时候也根本不知道什么弱上拉,推挽、开漏等GPIO状态,更看不懂数据手册上的工作框图,也不知道怎么看数据手册。

其实没有硬件根底,有c的根底,也能够直接来的。买个板子,依葫芦画瓢,上手了,再回去进修根底知识。

单片机基本原理

C51程序设计

C51的指令规则;C51编程语句及规则;

C51表达式和运算符;

顺序程序、分支程序及循环程序设计;

C51的函数;

中断函数。

例:

程序的基本结构有顺序、选择、循环 。

2.C51的存储器模式有small 、 compact 、 large 。

3.C51中int型变量的长度为8bit ,其值域为0-255 ;unsigned char型变量的长度为8位,其值域为 -128-127 。

C51中关键字sfr的作用访问特殊功能寄存器 ,sbit的作用 位寻址 。

函数定义由 函数名 和 函数体 两部分组成。

C51的表达式由运算符和操作数 组成。C51表达式语句由表达式和分号 组成。

若局部变量未初始化,其初值为 0 。

C51中“!”运算符的作用是 逻辑非 ;运算符”~”的作用是 取反 。

若函数无返回值,用 void 关键字指定。

在C51中,语句while(1){循环体语句}的含义是 如果没有break语句则一直循环执行循环体中语句,否则执行到break跳出。

C51中,用于定义变量片内数据存储器类型的关键字是 small 。

程序设计题

1、电路如图所示,要求编程实现一个流水灯。

#include

#define led P2

Int mian()

{

Led = 0xFE;

While(1){

Led=(led<

}

Return 0;

}

2、电路如图所示,要求编程实现:数码管显示0~9,循环显示。

#include

#define digital P2

Void delay(int xx)

{

While(0<>

}

Int main()

{

Digital=0;

While(1){

If(digital

Digital+=1;

Delay(5000);

}

Else

Digital=0;

}

Return 0;

}

中断系统

1、 中断的定义;

2、 中断源及其优先级;

3、 中断过程及中断应用编程。

例:

一、 填空题

1.MCS-51单片机有 5 个中断源。上电复位时,同级中断的自然优先级从高至低依次为 外中断0,定时器0,外中断1,定时器1,串口中断,若IP=00010100B,优先级别最高者为外部中断1 、最低者为定时器1 。

外部中断请求有 电平 触发和 边沿 触发两种触发方式。

MCS-51单片机5个中断源的中断入口地址为:外部0 0003H,;定时0000B;外部1 0013H;定时1 001BH;串口中断 002BH; 。

中断向量是中断服务程序的 识别标志,用于生成中断服务程序入口地址(入口地址指示器) 。

5.当定时器/计数器1申请中断时,TF1为1 ,当中断响应后,TF1为0 。

当串口完成一帧字符接收时,RI为1 ,当中断响应后,RI为1 ,需要软件清零。

6.在MCS-51单片机的中断系统中,中断优先级共分为 2 级。

MCS-51 单片机定时器T0 的中断类型号是 1 。

二、 简答题

MCS-51单片机有几个中断源?各中断标志是如何产生的?如何撤销的?各中断源的中断矢量分别是什么?

5个中断源;中断标志在TCON寄存器中设定的对应的触发条件达成时由硬件置位;除串口中断外,进入处理函数前由硬件撤销中断标志;串口中断标志由软件清除;中断向量分别为:0003;000B;0013;001B;0023;

简述MCS-51中断过程。

程序执行过程中中断条件达成,当前执行空间的参量入栈保存后跳转到对应的中断服务函数,执行完后将先前的参量出栈继续执行前一过程;如果有多个中断同时被触发,先执行高优先级的中断服务函数;如果有同优先级中断,按照自然优先级顺序执行;

MCS-51 单片机有哪几个中断源?它们的中断类型号分别是什么?自然优先级由高到低依次是什么?

外部0 0;计时0 1;外部1 2;计时1 3;串口中断 4;

程序设计题

没有外部中断时,七段数码管显示8,当有外部中断时,七段数码管上显示的8连续闪烁8次,然后继续显示8。要求编写程序实现上述功能。

#include

Int0_srv() interrupt 0

{

For(int i=0;i

P2=0x00;

Delay();

P2=0xff;

}

}

Int main()

{

While(1){

P1=0xff;

}

Return 0;

}

2、没有中断发生时,发光二极管亮,有中断发生时,有外部中断时,在8个发光LED上按从上到下点亮一遍,然后再从下向上点亮一遍,每次点亮一个发光二极管。要求编写程序实现上述功能。

#include

Void int0_srv() interrupt 0

{

P2=0xff;

P2=0xfe;

Delay();

For(int i=0;i

P2=(P2<

For(int i=0;i

P2=(P2>>1)|(~P2);

}

Int main()

{

While(1){

P2=0x00;

}

Return 0;

}

对单片机感兴趣的朋友可以找我 我录制了一些关于单片机的入门教程 有需要的童鞋找我拿就行 免费的 私信我“林老师”就可以拿 点击打开我的头像就能领取

相关问答

c51单片机编程 ?

南邻更可念,布破冬未赎。白毛浮绿水,红掌拨清波。窗含西岭千秋雪,门泊东吴万里船。月下飞天镜,云生结海楼。月出惊山鸟,时鸣春涧中.千山鸟飞绝,万径人...

c51编程 开发步骤?

第一步:新建工程点击【project】----点击【newproject】1、起名称,选择保存路径2、选择单片机型号【Atmel】----【at89c51】第二步:新建文件点击【file....

单片机 如何用C程序 编程 ?

单片机支持汇编编程的C51编程。1、汇编编程,传统的汇编代码。缺点:可读性不强,优点:代码精简2、C51编程,使用专用C语言编程。缺点:代码不精简,优点:可...

单片机C51 的汇编语言 编程

pragma只是用于之间潜入asm代码,不是变了相的混合编程技术,它不能直接调用其他文件(注意是文件)中的函数。真正意义上的多模块编程,每个模块之间都...

keil c51 集成开发环境 原理 ?

原理:KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而...

keil c51编程 的基本步骤和方法?

KeilC51是一种针对51系列单片机的集成开发环境。以下是基本的KeilC51编程步骤和方法:1.准备工作:安装KeilC51软件并注册,选择合适的单片机型号,准备好要...

单片机 keil51 编程 方法?

1.先安装KeilC51并破解,再安装MDK5并破解。2.分别打开KeilC51和MDK5的安装目录。将KeilC51安装目录下的C51文件夹复制到MDK5的安装目录文件夹下。3.分别...

用c++怎么编写51 单片机 程序,可以这么样编写吗?

可以的。在51单片机的嵌入式C语言中,指针同样是被支持的。所以在单片机上一样可以使用指针操作,具体使用方法,与标准C语言并没有不同。不过需要注意的是,使用...

开发51 单片机 用什么软件 编程 ?

51单片机采用keilC51编写程序。51单片机采用keilC51编写程序。

c51单片机编程 中如何改变p1g的输入输出状态?

通常作输入时,要选置1,但单片机上电后,默认的是置1的,只要你不是做出其它用,再做输入,就不用置1了。但为保险起见,多置一次1,没有关系。作输出时,不用管...通...

猜你喜欢