单片机资源扩展方式
IO、MM(存储器映射)两种扩展模式,通过J13配置。MM模式可直接通过XBYTE关键字来操作部分资源。
练习内容
IO:
#include "reg52.h"
#include <intrins.h>
void delayxms(unsigned char t)
{
while(t--)
{
unsigned char data i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void hc573(unsigned char channel)
{
switch(channel)
{
case 4: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;
}
}
void ledrunning()
{
hc573(4);
P0=0xf0;//点亮低四位
delayxms(50);
P0=0x0f;//点亮高四位
delayxms(50);
}
void smgrunning()
{
unsigned char i;
for(i=0;i<8;i++)
{
hc573(6);//位选
P0=0x01<<i;
hc573(7);
P0=0x00;
delayxms(50);
}
P0=0x00;
delayxms(50);
}
void main()
{
while(1)
{
ledrunning();
smgrunning();
}
}
MM:
#include "reg52.h"
#include "absacc.h"
#include <intrins.h>
void delayxms(unsigned char t)
{
while(t--)
{
unsigned char data i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void ledrunning()
{
XBYTE[0X8000]=0xf0;//点亮低四位
delayxms(50);
XBYTE[0X8000]=0x0f;//点亮高四位
delayxms(50);
XBYTE[0X8000]=0xff;//关闭所有灯
delayxms(50);
}
void smgrunning()
{
unsigned char i;
for(i=0;i<8;i++)
{
XBYTE[0xc000]=0x01<<i;//位选
XBYTE[0xe000]=0x00;//段选
delayxms(50);
}
XBYTE[0xc000]=0x00;//关闭数码管
delayxms(50);
}
void main()
{
while(1)
{
ledrunning();
smgrunning();
}
}