蓝桥杯之单片机学习(十三)——IO扩展技术与存储器映射扩展

简介: 蓝桥杯之单片机学习(十三)——IO扩展技术与存储器映射扩展

零、概述


0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


对内存地址进行操作

P0口,可数据传输,与地址低字节

P2口,可高8位地址


一、训练任务


在CT107D单片机综合训练平台上,分别用I/O扩展方式与存储器扩展方式对LED灯和数码管进行基本的控制。


1.首先点亮指示灯低4位,关闭高4位,延时片刻,点亮指示灯的高4位,关闭低4位,延时片刻,关闭所有指示灯。

2.然后依次逐个点亮数码管的所有段码,每次只点亮一个数码管 。

3.循环执行上述功能。


二、训练准备


2.1 外部资源的地址映射关系


0x8000—指示灯

0xa000—蜂鸣器与继电器

0xc000—数码管位选

0xe000—数码管段码


2.2 提示


1.进行存储器映射扩展,CT107平台的J13要将1-2脚短接

2.引入“absacc.h”,通过XBYTE关键字来直接操作扩展资源。

3.存储器映射扩展方式要占用单片机的P3.6引脚。

4.

4cebaac233b3433da32a72337a77fc60.png


三、代码展示


3.1 IO扩展


#include 
typedef unsigned int uint;
typedef unsigned char uchar;
void Delay(uint t)
{
  while(t--);
  while(t--);
}
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:    //蜂鸣器和继电器
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:    //位码
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:    //段码
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  case 0:    //锁住所有寄存器
    P2 = (P2 & 0X1F) | 0X00;
  break;
  }
}
void LEDRuning()
{
  SelectHC138(4);  //打开LED的HC138
  P0 = 0XF0;
  Delay(60000);
  Delay(60000);
  P0 = 0X0F;
  Delay(60000);
  Delay(60000);
  P0 = 0XFF;
  Delay(60000);
  Delay(60000);
}
void SMGRuning()
{
  uchar i;
  for(i = 0; i < 8; i++)
  {
  SelectHC138(6);
  P0 = 0X01 << i;
  SelectHC138(7);
  P0 = 0X00;
  Delay(60000);
  Delay(60000);
  }
  P0 = 0XFF;
  Delay(60000);
  Delay(60000);
}
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void main()
{
  Initsys();
  while(1)
  {
  LEDRuning();
  SMGRuning();
  }
}


3.2 存储器扩展


#include 
#include "absacc.h"
typedef unsigned int uint;
typedef unsigned char uchar;
void Delay(uint t)
{
  while(t--);
  while(t--);
}
void LEDRuning()
{
  XBYTE[0X8000] = 0XF0;
  Delay(60000);
  Delay(60000);
  XBYTE[0X8000] = 0X0F;
  Delay(60000);
  Delay(60000);
  XBYTE[0X8000] = 0XFF;
  Delay(60000);
  Delay(60000);
}
void SMGRuning()
{
  uchar i;
  for(i = 0; i < 8; i++)
  {
  XBYTE[0XC000] = 0X01 << i;
  XBYTE[0XE000] = 0X00;
  Delay(60000);
  Delay(60000);
  }
  XBYTE[0XE000] = 0XFF;
  Delay(60000);
  Delay(60000);
}
void main()
{
  while(1)
  {
  LEDRuning();
  SMGRuning();
  }
}


四、注意事项


1.XBYTE后面是中括号[]

2.如果用到矩阵键盘,就不雅用寄存器扩展方式,因为与P3^6产生冲突


相关文章
|
2月前
|
人工智能 Cloud Native Java
云原生技术深度解析:从IO优化到AI处理
【10月更文挑战第24天】在当今数字化时代,云计算已经成为企业IT架构的核心。云原生作为云计算的最新演进形态,旨在通过一系列先进的技术和实践,帮助企业构建高效、弹性、可观测的应用系统。本文将从IO优化、key问题解决、多线程意义以及AI处理等多个维度,深入探讨云原生技术的内涵与外延,并结合Java和AI技术给出相应的示例。
112 1
|
7月前
|
数据采集 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
99 22
|
6月前
|
IDE Linux 程序员
技术经验解读:【转】IO空间,IO端口,MMIO
技术经验解读:【转】IO空间,IO端口,MMIO
340 0
|
6月前
|
存储 运维 算法
Python文件处理(IO 技术)-2
Python文件处理(IO 技术)
|
2月前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
71 0
|
3月前
|
网络协议 Java Linux
高并发编程必备知识IO多路复用技术select,poll讲解
高并发编程必备知识IO多路复用技术select,poll讲解
|
5月前
|
NoSQL
共识协议的技术变迁问题之WPaxos理常态下的IO请求处理如何解决
共识协议的技术变迁问题之WPaxos理常态下的IO请求处理如何解决
164 55
|
6月前
单片机IO口模拟串口实现原理
单片机IO口模拟串口实现原理
105 5
|
6月前
|
存储 编解码 Linux
Python文件处理(IO 技术)-1
Python文件处理(IO 技术)
|
5月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)