本例采用處部地址擴展了兩個IO口,并實現(xiàn)16個發(fā)光二極管的流水燈實驗.程序簡單,旨在演示并口的擴展操作
/***************************************
*程序:簡單的并口擴展演示
*方法:絕對地址訪問
*時間:2008-5-1
*作者:gys
***************************************/
#include
#include //用絕對地址訪問時要包含此文件
#define P4 XBYTE[0xfeff] //定義訪問外部端口地址0xfeff,一個字節(jié)長度
#define P5 XBYTE[0xfdff]
void delay(unsigned int n) //延時
{
while(n--);
}
void main()
{
unsigned int s=0x01;
while (1)
{
P4=s;
P5=s>>8; //把S的高8位送P5口
if (s==0) s=0x01;
s<<=1;
delay(10000);
}
}
/***************************************
*程序:簡單的并口擴展演示
*方法:指針
*時間:2008-5-1
*作者:gys
***************************************/
#include
void delay(unsigned int n) //延時
{
while(n--);
}
void main()
{
unsigned int s=0x01;
unsigned char xdata *P4=0xfeff; //定義一個指針指向外部地址0xfeff
unsigned char xdata *P5=0xfdff; //定義一個指針指向外部地址0xfdff
while (1)
{
*P4=s;
*P5=s>>8; //把S的高8位送P5口
if (s==0) s=0x01;
s<<=1;
delay(10000);
}
}
;/***************************************
;*程序:簡單的并口擴展演示
;*方法:匯編
;*時間:2008-5-1
;*作者:gys
;***************************************/
org 00h
ajmp main
org 30h
main: mov R7,#01H
mov R6,#0h
loop: mov dptr,#0feffh
mov a,R7
movx @dptr,a
rlc a
mov R7,a
mov dptr,#0fdffh
mov a,R6
movx @dptr,a
rlc a
mov r6,a
lcall delay
ajmp loop
delay: mov r5,#255
D1: mov R4,#255
D2: nop
nop
nop
djnz r4,D2
Djnz R5,D1
ret
end