[size=+1] AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
[size=+1]1.主要特性:[size=+1] · 8031 CPU与MCS-51 兼容 · 4K字节可编程FLASH存储器(寿命:1000写/擦循环) · 全静态工作:0Hz-24KHz · 三级程序存储器保密锁定 · 128*8位内部RAM · 32条可编程I/O线 · 两个16位定时器/计数器 · 6个中断源 · 可编程串行通道 · 低功耗的闲置和掉电模式 · 片内振荡器和时钟电路 [size=+1]2.管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 |
读引脚时也就是把端口作为外部输入线时首先要通过外部指令把端口锁存器置
1然后再实行读引脚操作否则就可能读入出错为什么看上面的图如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1若先执行置1操作则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入由于在输入操作时还必须附加一个准备动作所以这类I/O口被称为准双向口89C51的P0/P1/P2/P3口作为输入时都是准双向口接下来让我们再看另一个问题从图中可以看出这四个端口还有一个差别除了P1口外P0P2P3口都还有其他的功能一单片机
I/O口的输出实验1
实验程序程序如下
ORG 0000H
AJMP LOOP
LOOP:MOV SP,#65H;//保护堆栈,养成习惯
MOV P1,#0FFH ;
LCALL DELAY ;
MOV P1,#00H ;
LCALL DELAY ;
LJMP LOOP ;
DELAY:MOV R7,#250 ;
D1:MOV R6,#250 ;
D2JNZ R6,D2 ;
DJNZ R7,D1 ;
RET ;
END
将以上写入MEDWIN编译软件,源代码编译生成HEX文件,烧写到实验板看到了什么
8只LED灯都在闪烁2
程序分析
这段程序和教程里的程序比较有两处不同第
1条原来是SETB P1.0现在改为MOV P1#0FFH第3条原来是CLR P1现在改为MOV P1#00H为什么这样改了之后就变成了8只LED灯同时闪烁了原来P1代表了P1.7-P1.0的全部我们把它当作一个存储器单元即一个字节不过对一个存储器单元送数就应该用MOV指令了在这里P1P1.7-P1.0接的是LED灯也就是负载它起到了一个输出端的作用那如果把P1改为P0或P2或P3行不行呢答案是肯定的为什么我们稍后再谈接着看第2个实验二单片机
I/O口的输入实验1
实验程序程序如下
MAIN:MOV P3,#0FFH ;
LOOP:MOV A,P3 ;
MOV P1,A ;
LJMP LOOP ;
END.
同样的方法把程序搞到单片机实验板上按下第
1个按钮有一个LED灯亮了按下第2个按钮另一个LED灯亮了松开按钮相应的灯就灭了是不是有点象工业控制中的点动控制原理分析一下这个程序欢迎光临 珩源工控论坛 (http://bbs.hymcu.com/) | Powered by Discuz! 7.2 |