蓝桥杯之单片机学习(十三)——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产生冲突


相关文章
|
5月前
|
数据采集 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
83 22
|
4月前
|
IDE Linux 程序员
技术经验解读:【转】IO空间,IO端口,MMIO
技术经验解读:【转】IO空间,IO端口,MMIO
174 0
|
17天前
|
网络协议 Java Linux
高并发编程必备知识IO多路复用技术select,poll讲解
高并发编程必备知识IO多路复用技术select,poll讲解
|
4月前
|
存储 运维 算法
Python文件处理(IO 技术)-2
Python文件处理(IO 技术)
|
3月前
|
NoSQL
共识协议的技术变迁问题之WPaxos理常态下的IO请求处理如何解决
共识协议的技术变迁问题之WPaxos理常态下的IO请求处理如何解决
159 55
|
4月前
单片机IO口模拟串口实现原理
单片机IO口模拟串口实现原理
47 5
|
4月前
|
存储 编解码 Linux
Python文件处理(IO 技术)-1
Python文件处理(IO 技术)
|
3月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
3月前
stm32f407探索者开发板(十四)——IO引脚复用和映射
stm32f407探索者开发板(十四)——IO引脚复用和映射
|
4月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
109 4

热门文章

最新文章