hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 963|回复: 0

ATmega8L控制8255A的一个简单例子

[复制链接]

936

主题

1148

帖子

3617

积分

超级版主

Rank: 8Rank: 8

积分
3617

论坛头条论坛元老谋士数据帝优秀版主超级版主见习版主论坛版主

发表于 2024-4-16 10:08:16 | 显示全部楼层 |阅读模式
/*
  在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仿真例子:

8255A.rar(30.95 KB, 下载次数: 4)2010-5-26 00:01 上传
点击文件名下载附件



程式执行如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
世界上最遥远的距离,不是生与死的距离,而是我站在你面前,你却不知道我爱你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-5-9 00:11 , Processed in 0.074190 second(s), 23 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

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