学习内容:单片机入门与走马灯设计
- 单片机为TTL电平
高电平:+5v
低电平:0v
- RS232电平:计算机串口(负逻辑)
高电平:-12v
低电平:+12V
计算机串口与单片机进行通信时,需要电平转换芯片MAX232,现在计算机没有串口,用不着画MAX232。
- 单片机为16位,最多为2的16次方=65536
- 一个机器周期=6个状态周期=12个脉冲周期
- AD:把模拟量十进制转化成数字量二进制。
数字电路中的两种电平特性决定了使用二进制简便。
- 与为串联,或为并联,非为短路,^:按位异或,~:按位取反。
- 单片机是在一片集成电路芯片上集成微处理器,存储器,I/O接口电路,从而构成单芯片微型计算机,简称单片机。
- MSC51单片机指以8051为核心的单片机,统称为MSC51单片机。
- 单片机三大指标:
- FLASH(程序存储空间ROM)掉电非易失性,只读不写。
- RAM(数据存储器)掉电易失性,读写。
- SFR(特殊寄存器)
10.8位单片机构成:8kFLASH,512字节RAM,32个I/O口,3个定时器,1个UART,8个中断源。
11. 特殊功能寄存器声明:
语法:sfr sfr_name = int_constant
例如:sfr P0 = 0x80;
Sfr SCON = 0x98
特殊功能位声明:
例如:sbit CY = PSW^7;
Sbit LED = P1^0;
- SFR寄存器:
高128个单位,离散分布有21个特殊功能寄存器SFR
11个可以进行位寻址(能被8整除,尾数为0,8的可以位寻址)
特别提示:对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可以用寄存器单元地址。
我个人认为比较重要的图:
- I/O接口电路结构
MCS-51系列单片机共有四个8位并行I/O口,分别用P0、P1、P2、P3表示。
每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。
- P0
当P0口作为输出口使用时,内部总线将数据送入锁存器,内部的写脉冲加在锁存器时钟端CP上,锁存数据到Q、端。经过MUX,T2反相后正好是内部总线的数据,送到P0口引脚输出。
当P0口作为输入口使用时,应区分读引脚和读端口两种情况,所谓读引脚,就是读芯片引脚的状态,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。
读端口是指通过上面的缓冲器读锁存器Q端的状态。读端口是为了适应对I/O口进行“读-修改-写”操作语句的需要。例如下面的C51语句:
P0=P0&0xf0; //将P0口的低4位引脚清0输出
除了I/O功能以外,在进行单片机系统扩展时,P0口是作为单片机系统的地址/数据线使用的,一般称为地址/数据分时复用引脚。
当输出地址或数据时,由内部发出控制信号,使“控制”端为高电平,打开与门,并使多路开关MUX处于内部地址/数据线与驱动场效应管栅极反相接通状态。此时,输出驱动电路由于两个FET处于反相,形成推拉式电路结构,使负载能力大为提高。输入数据时,数据信号直接从引脚通过输入缓冲器进入内部总线。
- P1
P1口是准双向口,只能作为通用I/O口使用。
P1口作为输出口使用时,无需再外接上拉电阻。
P1口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止。
- P2
P2口是准双向口,在实际应用中,可以用于为系统提供高8位地址,也能作为通用I/O口使用。
P2口作为通用I/O口的输出口使用时,与P1口一样无需再外接上拉电阻。
P2口作为通用I/O口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”。
- P3
P3口是准双向口,可以作为通用I/O口使用,还可以作为第二功能使用。作为第二功能使用的端口,不能同时当作通用I/O口使用,但其他未被使用的端口仍可作为通用I/O口使用。
P3口作为通用I/O的输出口使用时,不用外接上拉电阻。
P0,P1,P2,P3结构图
程序设计:走马灯
一.实现八个LED灯轮流闪烁的三种方法:
1.
#include
sbit P1_0 = P1^0;
void DelayUs2x(unsigned char n)
{
while(--n);
}
void DelayMs(unsigned char n)
{
while(n--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void main()
{
While(1)
{
P1 = 0xfd;
DelayMs(200);
P1 = 0xfb;
DelayMs(200);
P1 = 0xf7;
DelayMs(200);
P1 = 0xef;
DelayMs(200);
P1 = 0xdf;
DelayMs(200);
P1 = 0xbf;
DelayMs(200);
P1 = 0x7f;
DelayMs(200);
}
}
2.#include
sbit P1_0 = P1^0;
void DelayUs2x(unsigned char n)
{
while(--n);
}
void DelayMs(unsigned char n)
{
while(n--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void main()
{
unsigned char i, w;
while(1)
{
for(i = 0, w = 0x01; i < 7; i++)
{
P1 = ~w;
DelayMs(100);
w <<= 1;
}
}
}
感悟:
今天是单片机入门,由于时间关系,之前在学校学的内容有所忘记,所以今天刚开始有点迷糊和焦虑,不过再复习过程中,罗列知识点之后,我又找回了状态,不在慌张。所以复习的过程很重要。
关于走马灯程序,还是很简单的。
关于花样灯,再有了走马灯的练手后,逐步去写,也写出来了。
总之,学习路上任重道远。