51单片机内部包含哪些功能模块

51单片机内部包含哪些功能模块,第1张

51单片机内部包含的功能组件及作用主要有:

1、cpu主芯片(内部通过总线连接扩展的设备)

2、时钟电路(为单片机提供震荡脉冲)

3、电源电路(为单片机提供电源)

4、内部数据存储器RAM(包括通用数据寄存器和专用寄存器SFR,主要是数据存储区。)

5、程序存储器ROM(主要是存储程序,51系列有4K内部程序ROM,可以外扩64K。)

6、并行端口4*8位(P0,P1,P2,P3主要是数据交换接口。)

7、串行口(TXD,RXD用于串口通信。)

8、中断系统(外中断0,定时计数T0,外中断1,定时计数T1,串口中断。)

9、定时/计数器(16位用于外部的计数和定时功能。)

扩展资料

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程、仿真、调试、写入、加密等所有过程一气呵成,中间不须任何编译或汇编。

功能特性

1、可以仿真63K程序空间,接近64K 的16位地址空间。

2、可以仿真64Kxdata 空间,全部64K 的16位地址空间。

3、可以真实仿真全部32 条IO脚。

4、完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等 *** 作。

5、可以使用C51语言或者ASM汇编语言进行调试。

6、可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值。

7、可选 使用用户晶振,支持0-40MHZ晶振频率。

8、片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真。

9、可以仿真双DPTR 指针。

10、可以仿真去除ALE 信号输出。

11、自适应300-38400bps 的所有波特率通讯。

12、体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障。

13、仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. 。

14、仿真时监控和用户代码分离,不可能产生不能仿真的软故障。

15、RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。

参考资料百度百科--51单片机

这个应该根据程序的情况来定,你只有一个源文件的话,当然写在C里就可以了。全局变量一般写在程序的最前面,局部变量写在每个函数里。比如这个例子:

#include <stdio.h>

#include <math.h>

#include <intrins.h>

#include <absacc.h>

#include <string.h>

#include "LCD_12864.h"

sbit RESET = P3^3

uchar code LCD_WIDTH = 16

uchar code LCD_HEIGHT = 64

uchar gCurRow,gCurCol

uchar tCurRow,tCurCol

uchar ShowModeSW

uint txthome,grhome

uchar Status_BIT_01()

uchar Status_BIT_3()

uchar LCD_Write_Command(uchar cmd)

uchar LCD_Write_Command_P1(uchar cmd,uchar para1)

uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2)

uchar LCD_Write_Data(uchar dat)

void cls()

uchar LCD_Initialise()

void Set_LCD_POS(uchar row,uchar col)

uchar Status_BIT_01()

{

uchar i

for(i=5i>0i--)

{

if((LCMCW &0x03)==0x03)

break

}

return i

}

uchar Status_BIT_3()

{

uchar i

for(i=5i>0i--)

{

单片机中通过中断的方式来调用定时器

具体的调用方式可以参考通过如下程序:

程序功能:利用定时器进行定时,实现每秒中led闪烁一次

#include<reg52.h>

sbit led = P0^0

unsigned int num

void main(void)

{

TMOD = 0x00 // 工作方式0

TH0 = (8192 - 5000) / 32 // 12M晶振下定时5ms

TL0 = (8192 - 5000) % 32

EA = 1 // 开总中断

ET0 = 1 // 开定时器中断

TR0 = 1 // 启动定时器

while(1)

{

if(num == 200) // 定时1秒钟到

{

num = 0 // 计数器清零

led = ~led // led灯取反,实现1秒闪烁一次

}

}

}

void timer() interrupt 1 // 定时器1工作与方式0

{

TH0 = (8192 - 5000) / 32 // 重装初值

TL0 = (8192 - 5000) % 32

num++ // 计数器加1

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11217486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存