搜索
bottom↓
回复: 14

ATmega8L控制8255A的一个简单例子(刚转到GCC几天,就用GCC写了).

[复制链接]

出0入0汤圆

发表于 2006-2-8 14:42:42 | 显示全部楼层 |阅读模式
/*

  在C51中通过总线地址来写总线上的器件

        如:

        #define CTRL8255A XBYTE[0x7f00]

        要写的话就用:

        CTRL8255A=0x0d; 即可。

        而如今ATmega大多没有总线,写这些器件就得自已动手了。

        ATmega8L 模拟总线 控制 8255A

        环境 ATmega8L GCC PROTEUS6.7

        作者 zhb2000

           执行效果 ATmega8L通过8255A的A口控制2个数码管循环显示0~ff.

*/

#include <avr/io.h>

#include <avr/delay.h>



#define uchar unsigned char

#define uint  unsigned int



#define sbi(sfr,bit) (sfr|=(1<<bit))

#define cbi(sfr,bit) (sfr&=~(1<<bit))

#define CS_8255A     4



void init(void);

void ctrl8255a(uchar ctrl);          //写8255a控制字

void wa_8255a(uchar value);          //写8255a的A口

int main(void)

{

        uchar i=0;

        init();

        while(1)

        {

                wa_8255a(i);

                _delay_ms(200);

                ++i;

        }

        return 0;

}



void init(void)

{

        PORTB=0xff;

        PORTC=0xff;

        PORTD=0xff;

        DDRB=0xff;

        DDRC=0xff;

        DDRD=0xff;

       

        ctrl8255a(0x80);           //ABC口方式0输出

}



void ctrl8255a(uchar ctrl)

{

        PORTD=0x0d;                 //选择写控制字

        PORTB=ctrl;

        sbi(PORTD,CS_8255A);          //不选8255A

}



void wa_8255a(uchar value)

{        //写值到8255A的A口

        PORTD=0x01;                  //写8255A的A口

        PORTB=value;

        sbi(PORTD,CS_8255A);          //不选8255A

}



全部代码及PROTEUS6.7仿真例子:

点击此处下载armok01101267.rar



程式执行如下图:

出0入0汤圆

发表于 2006-2-8 15:26:36 | 显示全部楼层
還有公司生產8255嗎? 市場上的是不是都是舊貨? 好像也不平易啊.

出0入0汤圆

发表于 2006-2-8 16:38:44 | 显示全部楼层
我们这里卖20大洋一片,还是翻新货,用个M16来模拟成本都没有这么高

出0入0汤圆

发表于 2006-2-8 16:51:01 | 显示全部楼层
用带外部接口的M8515/M162/M64/M128操作8255方便得多。



不过对与AVR的SOC理念来说,基本上没多大必要使用这些8255之类的扩展器件。

出0入0汤圆

发表于 2006-2-8 17:56:44 | 显示全部楼层
8255两元一个要多少有多少,旧但好用是不?

出0入0汤圆

发表于 2006-2-9 11:28:18 | 显示全部楼层
呵呵, 8255還可以攪這個東東.

http://www.boondog.com/

出0入0汤圆

发表于 2006-7-2 15:55:37 | 显示全部楼层
有没有实际的实现,这个仿真没法用。我现在的一个工程就碰到这个问题,急需用atmega8控制8255A,但是还尚未成功,几乎被逼得要采用51了,高人快帮帮忙吧。

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=582048&bbs_page_no=1&bbs_id=1000

出0入0汤圆

发表于 2006-7-2 23:42:42 | 显示全部楼层
to 6楼:

……几个猴年前的东西了阿?现在还要用?不怕产品出来原料断档么?



而且,求人帮忙好歹讲清楚阿……

出0入0汤圆

发表于 2006-7-3 09:12:47 | 显示全部楼层
hao!

出0入0汤圆

发表于 2007-4-24 11:27:36 | 显示全部楼层
点击此处下载armok01151751.rar

我用8255A的PA作为输出,而PB作为输入,通过参考上面的程序我的程序可以写出来,但是读不了。希望有高手指教,不胜感激。

#include <mega16.h>

#include <delay.h>

#define uchar unsigned char

#define uint  unsigned int



#define sbi(sfr,bit) (sfr|=(1<<bit))

#define cbi(sfr,bit) (sfr&=~(1<<bit))

#define RD           PORTD.0

#define WR           PORTD.1

#define A0           PORTD.2

#define A1           PORTD.3

#define CS           PORTD.4



void init(void);

void ctrl8255(uchar ctrl);

void write(uchar wr);

uchar read(void);

void main(void)

{

uchar i=0;

init();

while(1)

  {

  i=read();

  delay_ms(1);

  write(i);

  delay_ms(200);

  i++;

  if(i>152)i=0;

  }

}      



void init(void)

{

DDRA=0XFF;

DDRD=0XFF;

PORTA=0XFF;

PORTD=0XFF;

ctrl8255(0x82);

}   



void ctrl8255(uchar ctrl)

{

CS=0;

A0=1;

A1=1;

WR=0;

RD=1;

PORTA=ctrl;

CS=1;

}         

void write(uchar wr) //OUTPUT

{

CS=0;

A0=0;

A1=0;

WR=0;

RD=1;

DDRA=0XFF;

PORTA=wr;

CS=1;

}  

uchar read(void)   //INPUT

{

uchar rd;

CS=0;

A0=1;

A1=0;

WR=0;

RD=1;

DDRA=0X00;   //PA口输入,为读数据做准备

rd=PINA;

CS=1;

//DDRA=0XFF;  //

return rd;

}

出0入0汤圆

发表于 2007-4-24 11:29:41 | 显示全部楼层
点击此处下载armok01151752.rar

出0入0汤圆

发表于 2007-4-24 11:32:12 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2007-4-24 13:21:33 | 显示全部楼层
to:11楼

请将你的程序作如下修改试一下:

uchar read(void)   //INPUT

{

uchar rd;

CS=0;

A0=1;

A1=0;

WR=0;  

RD=1;  

DDRA=0X00;   //PA口输入,为读数据做准备

rd=PINA;

CS=1;

//DDRA=0XFF;  //

return rd;

}uchar read(void)   //INPUT

{

uchar rd;

CS=0;

A0=1;

A1=0;

WR=0;  

RD=1;  

DDRA=0X00;   //PA口输入,为读数据做准备

_delay_ms(200);   //******在此加入延时试一下.

rd=PINA;

CS=1;

//DDRA=0XFF;  //

return rd;

}

出0入0汤圆

发表于 2011-10-3 13:56:18 | 显示全部楼层
为何我下载了楼主的仿真~运行时,在8255的D0到D7口有显示电平的变化~可是在8255的A口就没有任何电平变化·····仿真不了···数码管总是显示FF···

出0入0汤圆

发表于 2011-11-27 18:15:27 | 显示全部楼层
谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 18:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表