|
**********File#1**************
#ifndef _FX2IOASM_h_
#define _FX2IOASM_h_
#include "System51.h"
void hPortAndOr(byte p, byte and, byte or);
byte hPortIn(byte p);
void hPortOut(byte p, byte d);
#endif // _FX2IOASM_h_
*********file#2 *************************
$GEN ; Enable Macro Listing
;;-----------------------------------------------------------------------------
;; File: FXIOAsm.a51
;; Contents: This file contains assembler language access to the internal resources FX chip.
;; designed by Serge Sudja
;;-----------------------------------------------------------------------------
public hPortIn, hPortOut, hAndOr
public hPortIn_port, hPortOut_port,hAndOr_and,hAndOr_or
;------------------------------------------------------------------------------
sfr Port = 0xB0;
sbit BitPort = 0xB0;
hPortIn_port EQU (hPortIn+1)
hPortOut_port EQU (hPortOut+1)
hAndOr_and EQU (hAndOr+1)
hAndOr_or EQU (hAndOr+5)
;******************************************************************************
FXIOAsm SEGMENT CODE PAGE
rseg FXIOAsm
;******************************************************************************
;byte FXPort(byte port)
; port = R7
;------------------------------------------------------------------------------
hPortIn:
MOV R7, Port
RET
;------------------------------------------------------------------------------
; R7 - data
;------------------------------------------------------------------------------
hPortOut:
MOV Port, R7
RET
;------------------------------------------------------------------------------
;hSetBit:
; SETB BitPort
; RET
;------------------------------------------------------------------------------
;hClrBit:
; CLR BitPort
; RET
;------------------------------------------------------------------------------
hAndOr:
MOV A,Port
ANL A,R7
ORL A,R5
MOV Port,A
RET
;------------------------------------------------------------------------------
example C-code
*****File#3***********************************
#include "FX2IOASM.h"
//PortIo
#define PortAddr get_bIndexL()
#define PortAnd get_bValueL()
#define PortData get_bValueL()
#define PortOr get_bValueH()
#define Cmd get_bIndexH()
//MemByte----------------------------------------
#define MemAddr get_wIndex()
#define DataByte get_bValueL()
//MemBlock---------------------------------------
#define MemAddr get_wIndex()
// data in/out EPOBUF[]
#define cmdFX2PortAndOr 2
#define cmdFX2PortInOut 1
bool VndRq_FxPort(void)
{
bool ok = 1;
switch(Cmd)
{
case cmdFX2PortInOut:
if(get_bmReqType()==c_DeviceVndIn)
{
EP0BUF[0] = hPortIn(PortAddr);
set_EP0BC(1);
}
else if(get_bmReqType()==c_DeviceVndOut)
{
hPortOut(PortAddr, PortData);
}
else
{
ok=0;
}
break;
case cmdFX2PortAndOr:
if(get_bmReqType()==c_DeviceVndOut)
{
hPortAndOr(PortAddr, PortAnd, PortOr);
}
else
{
ok=0;
}
break;
default:
ok=0;
break;
}
return ok;
}
E-mail: info@telesys.ru