02__51系列单片机基本结构

51系统单片机基本结构
8051系列单片机的内部结构是各种逻辑单元及其之间的互连构成的。其主要由中央处理器cpu,程序存储器ROM、数据存储器Ram、串行接口、并行I/O接口,定时/计数器、中断系统等几大单元,以及数据总线、地址总线和控制总线组成。


我们学单片机就是来控制寄存器。
51系列单片机有各种封装形式,这里均以双列直插DIP形式的封装来进行介绍。
Intel的8051的典型引脚配置,双列直插DIP式结构,
看芯片的引脚,从凹口按逆时针方向从1开始数起。
51单片机作为IO口的时候,读取值的时候先在置1,先把开关断掉。
51单片机进行读状态的时候,先在内部总线上写1.
三态缓冲器


51单片机的P0口,P1口。


一、电源线
1、电源引脚:电源引脚主要负责单片机的供电,有两根引脚
VCC(pin40):电源端。正电源接5V电压。
GND(pin30):接地端
2、外接晶振或外部振荡器引脚:外接晶振或外部振荡器引脚主要为单片机的运行提供时钟振荡器,主要有两根引脚。
XTAL2(pin18):时钟XTAL2,片内振荡电路电路的输出端。
XTAL1(pin19):时钟XTAL2,片内振荡电路电路的输入端。
3、输入输出(I/O)端口引脚:51提供了4 个8位并行I/O端口,基本的功能和其他51系列单片机完全一致,部分引脚有扩展功能
P0口(P0.0~P0.7,pin39~pin32):P0口是一个8位漏极开路的双向端口。在对外存储器进行存取操作的进修作为多项8位地址及数据总线,在程序检验时也作为输出指令字节(需外接上拉电阻),P0能驱动8个LSTTL负载。
4、复位、控制和选通引脚 复位、控制和选通引脚负责单片机程序复位、编程控制及外部程序存储器的选通。
RST(pin9):复位引脚。
实际应用中,一般采用外部复位来电来进行单片机复位。
可以选择高电平复位还是低电平复位的。
选取一个电容Capa,
选一个开关。
电容隔直通交。隔直需要一时间的,只有冲满了才隔直的。


ALE/PROG'(pin30):地址锁存允许输出。在片外数据存储器工作时,ALE为低8位地址锁存允许输出信号。在片外数据存储器没有工作的时候,ALE输出频率为振荡率1/6的固定频率,可以用于外部时钟或外接定时器。但当执行片外数据存取指令的时候,将少一个ALE脉冲。在Flash编程时,该引脚用于输入编程脉冲(PROG').
PSEN(pin29):片外程序存储器读选通信号输出端。
EA'/Vpp(pin33):当EA为高电平时且PC值小于oFFFF(4k)时,CPU执片内程序存储器中的程序;当EA为低电平时,CPU执行片外程序存储器中的程序。因为8031没有片内数据存储器,所以对于8031来说,EA必须接低电平。对于内置了EPROM的单片机,在对EPROM进行编程时,本引脚用于编程允许电压。
二、51单片机特殊功能寄存器地址
我们实现51单片机各种功能主要是操作这些寄存器
寄存器只听令于CPU.
特殊功能寄存器反映了单片机的状态,它们实际就是单片机的状态字和控制字寄存器,这些寄存器大致可以分成两大类,一类与单片机的引脚 有关,另一类是单片机内部功能的控制器。单片机的中断控件就是通过软件在特殊功能寄存器实现的。这使得单片机把I/O口、CPU及存储器集成在一起,完成了完整的计算机功能,这也是单片机的一个特点。
三、单片机C语言程序设计基础
单片机C语言已成为目前最流行的单片机开发语言。能够保证看懂汇编语言。
C51听标识符区分大小写。
C51不仅包含了ANSI C关键字,还有自己的扩展的关键字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IIC通讯是一种常用的数字通信协议,用于在单片机之间或单片机与外围设备之间进行通讯。下面是一个简单的两个单片机IIC通讯程序的示例: 主控单片机代码: ```c #include <reg51.h> #define SDA P2_1 #define SCL P2_0 void delay_us(unsigned int us) { while(us--); } void IIC_Start() { SDA = 1; SCL = 1; delay_us(4); SDA = 0; delay_us(4); SCL = 0; } void IIC_Stop() { SDA = 0; SCL = 1; delay_us(4); SDA = 1; delay_us(4); } void IIC_SendByte(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { SDA = (dat & 0x80) >> 7; dat <<= 1; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } SDA = 1; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } unsigned char IIC_ReceiveByte() { unsigned char i, dat = 0; SDA = 1; for(i=0; i<8; i++) { SCL = 1; delay_us(4); dat = (dat << 1) | SDA; SCL = 0; delay_us(4); } return dat; } void IIC_SendAck(bit ack) { SDA = ack; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } bit IIC_ReceiveAck() { bit ack; SCL = 1; delay_us(4); ack = SDA; SCL = 0; delay_us(4); return ack; } void main() { unsigned char dat; IIC_Start(); IIC_SendByte(0xA0); IIC_ReceiveAck(); IIC_SendByte(0x00); IIC_ReceiveAck(); IIC_Stop(); delay_ms(10); IIC_Start(); IIC_SendByte(0xA1); IIC_ReceiveAck(); dat = IIC_ReceiveByte(); IIC_SendAck(1); IIC_Stop(); while(1); } ``` 从控单片机代码: ```c #include <reg51.h> #define SDA P2_1 #define SCL P2_0 void delay_us(unsigned int us) { while(us--); } void IIC_Start() { SDA = 1; SCL = 1; delay_us(4); SDA = 0; delay_us(4); SCL = 0; } void IIC_Stop() { SDA = 0; SCL = 1; delay_us(4); SDA = 1; delay_us(4); } void IIC_SendByte(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { SDA = (dat & 0x80) >> 7; dat <<= 1; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } SDA = 1; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } unsigned char IIC_ReceiveByte() { unsigned char i, dat = 0; SDA = 1; for(i=0; i<8; i++) { SCL = 1; delay_us(4); dat = (dat << 1) | SDA; SCL = 0; delay_us(4); } return dat; } void IIC_SendAck(bit ack) { SDA = ack; SCL = 1; delay_us(4); SCL = 0; delay_us(4); } bit IIC_ReceiveAck() { bit ack; SCL = 1; delay_us(4); ack = SDA; SCL = 0; delay_us(4); return ack; } void main() { unsigned char dat = 0x55; IIC_Start(); IIC_SendByte(0xA0); IIC_ReceiveAck(); IIC_SendByte(0x00); IIC_ReceiveAck(); IIC_SendByte(dat); IIC_ReceiveAck(); IIC_Stop(); while(1); } ``` 这里的主控单片机向从控单片机发送一个字节,并且从从控单片机接收一个字节。程序的函数和宏定义都是通用的,可以用于其他的IIC通讯。 ### 回答2: 学习单片机需要掌握一定的电子基础知识和编程能力。具体来说,从零学习单片机包括以下几个步骤: 1. 学习电子基础知识:了解基本的电路知识,掌握电子元件的基本原理和使用方法。 2. 学习编程知识:单片机程序通常使用C语言或汇编语言编写,学习这两种语言,熟悉编程基本概念和语法。 3. 选择单片机型号:根据需求选择适合的单片机型号。常见的单片机有Arduino、STM32等,选择一个适合自己的型号。 4. 学习单片机原理:了解单片机的工作原理、寄存、时钟等重要概念。可以通过参考书籍、网络教程等途径进行学习。 5. 学习编写程序:通过各种学习资源,学习如何编写单片机程序。可以从简单的LED控制开始,逐渐扩展到更复杂的功能。 6. 实践项目:通过实践项目来巩固所学知识。可以选择一些简单的实验或小项目,逐渐增加难度和复杂度。 关于两个单片机之间的IIC通信程序,可以按照以下步骤进行: 1. 配置IIC总线:根据所选单片机的手册,配置IIC总线的参数和初始化寄存。 2. 主从模式选择:确定通信主从设备的角色,并相应配置各自的模式。 3. 发送数据:主设备将要发送的数据写入发送缓冲区,通过IIC总线发送给从设备。 4. 接收数据:从设备接收到主设备发送的数据,将其写入接收缓冲区,供主设备读取。 5. 完成通信:主设备通过判断从设备的应答信号,确认通信成功。 6. 错误处理:在通信过程,根据错误码或标志位处理错误信息。 通过以上步骤并结合实际需求,可以编写两个单片机之间的IIC通信程序。刚开始可能会遇到一些困难,但通过坚持学习和实践,逐渐掌握单片机基本原理和编程技巧。 ### 回答3: 要学习单片机,首先需要了解单片机基本原理和基本知识。可以开始学习单片机的原理和基本知识,学习单片机的工作原理、结构、寄存、指令等。 在学习过程,可以选择一款具有良好支持和丰富资料的单片机产品,比如常用的STC系列单片机。可以通过阅读相关的文档和资料,了解该单片机的特性和参数,以及使用该单片机进行开发的相关知识。 学习单片机的编程语言,如C语言,可以通过学习C语言的基本语法和编程方法来理解单片机的编程。可以选择一些经典的单片机编程案例进行实践,不断积累编程经验和技巧。 了解并学习单片机的开发环境,如Keil、IAR等集成开发环境。了解如何配置开发环境、创建工程、进行编译和调试等。 选择一个具体的项目或应用来实践单片机的学习,通过实践不断遇到的问题、解决的方法等,进一步加深对单片机的理解和掌握。 在学习的过程,可以参考相关的教材、网络教程和视频教程,结合实践和理论相结合,加深对单片机的认识和应用。 总之,从零开始学习单片机,需要了解单片机基本原理和知识,并通过实践和学习不断加深对单片机的理解和掌握。通过不断学习和实践,逐步提高自己的单片机应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值