51单片机—8255A详细介绍(全!)—04

发布者:乐呵的挑最新更新时间:2015-10-23 来源: eefocus关键字:51单片机  8255A 手机看文章 扫描二维码
随时随地手机看文章
这个学期学的微机原理~~[转载]51单片机—8255A详细介绍(全!)—04,课件很是给力啊~~呵呵

8255A的原程序设计什么的网上很多~~也有好多Proteus仿真的,但是这里面的大多数都是简单的几行搞定的~~我晕咧,里面的好多东西其实都没有用到~~[转载]51单片机—8255A详细介绍(全!)—04,呵呵,其实我也就是做个小小的实验,先把原理贴出来,供以后用,其中Proteus仿真真的不给力啊~~浪费了我好多时间,定时计数器竟然一会快,一会慢~~shit,让我白白调了半天~~这么简单的程序[转载]51单片机—8255A详细介绍(全!)—04

看看我的仿真的程序~~(c语言程序在最后~~)

[转载]51单片机—8255A详细介绍(全!)—04

其中有两个可以控制移位方向的,就是为了验证那个Proteus仿真51的时候定时器不准确的[转载]51单片机—8255A详细介绍(全!)—04

然后就是详细介绍了

8255A的详细介绍

1、引脚图:

[转载]51单片机—8255A详细介绍(全!)—04

2、内部结构和引脚

[转载]51单片机—8255A详细介绍(全!)—04

3、连接外设的数据端口(也就是ABC口呗,这里的三种方式,会在下面的图片补充的[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

4、端口寻址
[转载]51单片机—8255A详细介绍(全!)—04

6、工作方式
[转载]51单片机—8255A详细介绍(全!)—04

7、控制字
[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

8、三种方式介绍(说到这里,具体应该说是贴到这里,呵呵,重点就是上面的7!!!8就是一种提高了~~[转载]51单片机—8255A详细介绍(全!)—04
[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04
[page]
[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04

[转载]51单片机—8255A详细介绍(全!)—04
9、就是应用了呗
[转载]51单片机—8255A详细介绍(全!)—04


最后来个程序就哦了,里面带有注释~~
//------------------------------------------------------------------------------
//实现由8255的PA、PB、PC作为输出口的可控流水灯的设计,采用灌电流的方法
//c语言部分
#include"reg52.h"
#include"delay.h"
#include"macroandconst.h"
#include"foot.h"
//------------------------------------------------------------------------------
uchar pdata in_reg;            //定义片外存储空间
uchar temp,temp1;      //用于写数据的临时数值
bit   flag=1;       //定义标志位
//------------------------------------------------------------------------------
//定时器0初始化函数
void timer0_init()
{
 TMOD=0x02;       //定时器0,8位自动装初值
 TH0=(256-50)/256;     //50us定时
 TL0=TH0;
 ET0=1;
 TR0=1;
 IT1=0;        //外部中断1控制为电平触发方式
 EX1=1;        //外部中断1中断允许位
 EA=1;
}
//------------------------------------------------------------------------------
//main
void main()
{
 uchar i;
 timer0_init();
 reset=0;
 reset=1;       //复位
 reset=0;
 a0=1;
 a1=1;      //选择8255控制寄存器
 in_reg=0x82;    //写入控制寄存器,PA、PC作为输出口,PB口作为输入口,并写入控制寄存器
                             //这里可能不是很明白吧,呵呵,其实很简单,这个是51系列单片机的特有功能,反正我用AVR单片机没用到过
        //,呵呵,相信都知道51系列单片机的PA口是个A/D口,那就对了,这里还省去了控制WR和RD了,而且还省去了
        //用上拉电阻,要是别的I/O口就得按照WR和RD的协议办~~~ (从根本来说就是单片机自己控制WR和RD,其实
        //这个东西用的最多的就是扩展了~~~呵呵,不说了,因为我当时扩展也给失败了~~哭
 while(1)
  
  a0=0;
  a1=0;     //选中PA口的寄存器
  if(flag==0)    //标志位为0,流水灯从上向下循环
  {
   temp=0xfe;
   i=0;
   while(i<8)   //循环移动8位
   {
    in_reg=temp; 
    temp=~temp;
    temp=temp<<1;
    temp=~temp;
    delay(100);
    i++;
//    if(flag!=0)     //可以加或者不加,加上后就是从当前亮的地方转向开头或者结尾
//     break;
   }
  }
  else                  //标志位为1,流水灯从上向下循环
  {
   temp=0x7f;
   i=0;
   while(i<8)      //循环移动8位
   {
    in_reg=temp;
    temp=~temp;
    temp=temp>>1;
    temp=~temp;
    delay(100);
    i++;
//    if(flag!=1)     //同理就哦了
//     break; 
   }
  }
 }
}
//------------------------------------------------------------------------------
//定时器0中断函数,由于用的Proteus仿真,我看着它进入中断有时间长的,有时间短的,所以所以这个
void timer0() interrupt 1
{
 EA=0;      //关闭总中断
 a0=1;
 a1=0;     //选中PB口寄存器
 temp1=in_reg;   //读取PB口的数据
 if(((~temp1)&0x01)==1) //按键检测(由于这里的8255当设置为输入的时候都是输入高电平~~,所以还是取个反
 {
//  delay(5);   //这里就是按键检测的一个延时防抖动的,但是我加上跟不加,差别真的好大啊~~晕了~~
  if(((~temp1)&0x01)==1)
  {
   flag=~flag;     //取反标志位,让它的循环方向改变,下面就不加按键松手检测了~~因为加不上~~呵呵
  }
 }
 a0=0;
 a1=0; 
 EA=1; 
}
//------------------------------------------------------------------------------
//外部中断1 ,这个是我另加上去的,真的要累死了,我用的外部中断1,它和上面的按键检测是一样的,看来我是对的,Proteus仿真的时候,定时器还是有问题的,有时候根本不执行中断!!!
void int1() interrupt 2
{
 flag=~flag;
}

关键字:51单片机  8255A 引用地址:51单片机—8255A详细介绍(全!)—04

上一篇:51单片机—8*8LED点阵—09—①
下一篇:51单片机—软件看门狗—01

推荐阅读最新更新时间:2024-03-16 14:37

51单片机实现最小系统的原理和电路与编程设计说明
本课以AT89S51单片机最小系统来教你如何实现单片机编程,该程序驱动单片机P1.7端口上的发光二极管不停闪烁,系统程序用keil 汇编语言编写,电路参考下图1所示。 《51单片机最小系统原理及编程电路设计》 首先来认识一下发光二极管(LED),发光二极管实物如下图2所示,发光二极管具有单项导电,体积小、耗电省、寿命长、响应速度快、显示清晰等特点,广泛用于电子电路中当作LED数码管、LED指示灯、LED电子显示屏,既然是51单片机最小系统我们当然只进行了最简单的电路设计与编程 发光二极管导通时,产生一个正向的工作电流IF,工作电流根据发光二极管的材料、功率等不同,额定电流一般在10~40mA左右,发光二极管导通时的正向压降
[单片机]
<font color='red'>51单片机</font>实现最小系统的原理和电路与编程设计说明
51单片机驱动CT1642数码管显示源程序
拆解电视机顶盒找到带CT1642控制的数码管 在网上找到代码修改了一下 没有解决按键检测的问题 可根据自己的需求修改对应引脚 制作出来的实物图如下: 单片机源程序如下: sbit DAT=P2^2; sbit CLK=P2^1; sbit KEY=P2^0; u8 NixieTable ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; u8 NixieTablepos ={0,0x02,0x04,0x08}; void CT1642_Write(u8 Pos, u8 Val) { u8 i,Posn; // 1、移18位:对应C1--C4、6位空、Q2--Q9 P
[单片机]
<font color='red'>51单片机</font>驱动CT1642数码管显示源程序
51单片机串口程序
串口中断服务函数集 //本函数集来自 51单片机世界 ,作者斑竹丁丁(聂小猛)。 //主页地址http://www.mcu51.com //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,必须定义最大输入字符数 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char
[单片机]
51单片机学习:LED点阵实验(显示数字)
实验名称:LED点阵实验(显示数字) 接线说明: 实验现象:下载程序后,8*8LED点阵显示数字0 注意事项:LED点阵旁的J24黄色跳线帽短接到GND一端 ***************************************************************************************/ #include reg51.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义74HC595控制管脚 sbit SRCLK=P3^6; //移位寄存器时钟输入 sbit RCLK=P3^5; //存
[单片机]
基于51单片机的自动测控LED节能照明系统
在全球能源危机凸现的当今社会,LED照明以其绿色环保,高效节能的优势成为当前最具潜力的照明方式之一。LED号称“绿色照明的第四代光源”,目前已开始逐步应用于电信、交通、农业、医学、军事等领域。LED(Light-emitting Diode,发光二极管)是一种固态的半导体组件,能够把电能直接转化为光能。作为一种固体照明光源,LED具有长寿命、高光效、多光色等特性,可在安全低电压下工作,也可连续开关闪断,能实现0%~100%调光。 本文阐述一种基于单片机C8051F020自动测控LED节能照明系统的设计方案。该系统能够对LED灯的发光强度进行调控,当环境光强减弱时自动提高LED的发光强度,当环境光强变强时自动减弱LED灯的发
[单片机]
基于<font color='red'>51单片机</font>的自动测控LED节能照明系统
8051单片机教程第十二课:逻辑运算类指令
单片机教程第十二课:逻辑运算类指令: 对累加器A的逻辑操作: CLRA;将A中的值清0,单周期单字节指令,与MOVA,#00H效果相同。 CPLA;将A中的值按位取反 RLA;将A中的值逻辑左移 RLCA;将A中的值加上进位位进行逻辑左移 RRA;将A中的值进行逻辑右移 RRCA;将A中的值加上进位位进行逻辑右移 SWAPA;将A中的值高、低4位交换。 例:(A)=73H,则执行CPLA,这样进行: 73H化为二进制为01110011, 逐位取反即为10001100,也就是8CH。 RLA是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执
[单片机]
51单片机学习笔记:写了个led宏,并尝试控制led灯的亮度
经常用led灯来观察现象,甚至调试代码,修改代码时用0和1很不方便,而且阅读性也不好, 故写了个宏,用起来方便些. 今天尝试控制灯的亮度. 先试试for循环控制,占空比调节... C代码 //#include my51.h #include reg52.h typedef unsigned char u8; typedef unsigned short int u16; #ifndef _51LED_ #define _51LED_ #define led P1 //P1总线连8个led灯,灯连573锁存器,P1置低电平点亮 #define LED led
[单片机]
<font color='red'>51单片机</font>学习笔记:写了个led宏,并尝试控制led灯的亮度
51单片机点亮LED点阵
共阴极双色点阵 Led点阵就是很多led放在一起组成的矩阵灯。原理很简单,如果我们要点亮图中左上的绿灯。那么管脚5接高电平,管脚24接低电平,那么这个绿色led就会亮,其他的led亦是如此。我们要显示需要的内容,只要点亮相关内容即可。如:我们显示如图的“+”,和“-”。 红色“+”:将管脚18,17,16 设置成高电平,同时对应21,22,23 设置成低电平。 注意:管脚18为高时,只能22管脚为低, 17管脚为高时,22,23,24同时为低,16管脚为高时,智能22管脚为低。 就是说同一时刻只有这三种情况之一出现,换言之就是通过扫描实现显示”+”. 具体过程: 1.显示第一步: ,其他全灭 。一个短延时,保持
[单片机]
<font color='red'>51单片机</font>点亮LED点阵
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved