From: Vinicius K. <li...@vk...> - 2005-04-06 22:35:38
|
Is there a way to dinamically assign a sfr. Eg. I want to control something that goes on PORT X but i want the user to be able to define the port at runtime, someting like void do_thing_on_port(sfr the_port) { the_port = 0x10; // do the proper stuff in the port, just example } then on the main i would call do_thing_on_port(0x80) or do_thing_on_port(P1); Thanks, vinicius kursancew. |
From: Erik P. <epe...@iv...> - 2005-04-16 14:22:30
|
On Wed, 6 Apr 2005, Vinicius Kursancew wrote: > Is there a way to dinamically assign a sfr. > Eg. I want to control something that goes on PORT X but i want the user > to be able to define the > port at runtime, someting like > > void do_thing_on_port(sfr the_port) > { > the_port = 0x10; // do the proper stuff in the port, just example > } > > then on the main i would call > > do_thing_on_port(0x80) or do_thing_on_port(P1); In general, no. Assuming you are using a fully Intel 8051 compatible microcontroller, the sfr registers are only accessed when the sfr address is directly specified in the instruction. Indirect accesses (when the address is in a register rather than the instruction itself) will access the indirect RAM area instead (if present) for addresses corresponding to the sfrs. However, some non-Intel 8051 compatible microcontrollers that do not have the indirect RAM will allow indirect access to the sfrs instead. In this case, you could write: void do_thing_on_port(volatile idata unsigned char *the_port) { *the_port = 0x10; // do the proper stuff in the port, just example } do_thing_on_port((volatile idata unsigned char *)0x80) or do_thing_on_port((volatile idata unsigned char *)&P1); Erik |
From: Tal <ta...@gm...> - 2005-04-17 13:58:39
|
If you have 1062 free code bytes, and can't think of anything better to do with them, then try these two functions. I'm not absolutely sure they work, but I believe so. This is a complete file, with main(), that you can compile and run in the simulator: (I hope it's not too long to post in here...) =================================readsfr.c============================== ==== /* this is the shell script i used for read_sfr(): var=128 while [ "$var" -lt 256 ] do printf " mov _DPL,0x%X ; 3 byte instrution\n" $var echo " ret ; 1 byte instruction" var=`expr $var + 1` done */ #include <8051.h> char read_sfr(char sfrnum) _naked; // 531 bytes char write_sfr(int param) _naked; // 531 bytes void main() { char c; write_sfr(0xCD84); // higher byte = data to write // lower byte = sfrnum c = read_sfr(0x84); } // function size: 531 bytes char read_sfr(char sfrnum) _naked { _asm ;// jmp to sfrtbl+4*sfrnum mov a,_DPL ;// (2 bytes) DPL has sfrnum add a,#-0x80 ;// (2 bytes) SFR space stars at 0x80 mov _B,#4 ;// (3 bytes) mul ab ;// (1 byte) a=low,b=high add a,#<read_sfr_tbl ;// (2 bytes) push acc ;// (2 bytes) low return address mov a,_B ;// (2 bytes) addc a,#>read_sfr_tbl ;// (2 bytes) push acc ;// (2 bytes) high return address ret ;// (1 byte) call address on the stack ;// (total=19) read_sfr_tbl=. mov _DPL,0x80 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x81 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x82 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x83 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x84 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x85 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x86 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x87 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x88 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x89 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8A ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8B ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8C ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8D ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8E ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x8F ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x90 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x91 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x92 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x93 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x94 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x95 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x96 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x97 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x98 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x99 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9A ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9B ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9C ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9D ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9E ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0x9F ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xA9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAD ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xAF ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xB9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBD ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xBF ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xC9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCD ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xCF ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xD9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDD ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xDF ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xE9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xEA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xEB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xEC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xED ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xEE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xEF ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF0 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF1 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF2 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF3 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF4 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF5 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF6 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF7 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF8 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xF9 ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFA ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFB ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFC ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFD ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFE ; 3 byte instrution ret ; 1 byte instruction mov _DPL,0xFF ; 3 byte instrution ret ; 1 byte instruction _endasm; sfrnum; // avoid compilation warning } // function size: 531 bytes // lowbyte(param): sfrnum to access // highbyte(param): value to write char write_sfr(int param) _naked { // here DPL = sfrnum // and DPH = val _asm ;// jmp to sfrtbl+4*sfrnum mov a,_DPL ;// (2 bytes) DPL has sfrnum add a,#-0x80 ;// (2 bytes) SFR space stars at 0x80 mov _B,#4 ;// (3 bytes) mul ab ;// (1 byte) a=low,b=high add a,#<write_sfr_tbl ;// (2 bytes) push acc ;// (2 bytes) low return address mov a,_B ;// (2 bytes) addc a,#>write_sfr_tbl ;// (2 bytes) push acc ;// (2 bytes) high return address ret ;// (1 byte) call address on the stack ;// (total=19) write_sfr_tbl=. mov 0x80,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x81,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x82,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x83,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x84,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x85,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x86,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x87,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x88,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x89,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8A,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8B,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8C,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8D,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8E,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x8F,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x90,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x91,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x92,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x93,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x94,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x95,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x96,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x97,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x98,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x99,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9A,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9B,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9C,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9D,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9E,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0x9F,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xA9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAD,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xAF,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xB9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBD,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xBF,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xC9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCD,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xCF,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xD9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDD,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xDF,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xE9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xEA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xEB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xEC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xED,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xEE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xEF,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF0,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF1,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF2,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF3,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF4,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF5,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF6,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF7,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF8,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xF9,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFA,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFB,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFC,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFD,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFE,_DPH ; 3 byte instrution ret ; 1 byte instruction mov 0xFF,_DPH ; 3 byte instrution ret ; 1 byte instruction _endasm; param; // avoid compilation warning } ======================================================================== = -----Original Message----- From: sdc...@li... [mailto:sdc...@li...] On Behalf Of Vinicius Kursancew Sent: Thursday, April 07, 2005 12:35 AM To: sdc...@li... Subject: [Sdcc-user] Dynamic SFRs Is there a way to dinamically assign a sfr. Eg. I want to control something that goes on PORT X but i want the user to be able to define the port at runtime, someting like void do_thing_on_port(sfr the_port) { the_port = 0x10; // do the proper stuff in the port, just example } then on the main i would call do_thing_on_port(0x80) or do_thing_on_port(P1); Thanks, vinicius kursancew. ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ Sdcc-user mailing list Sdc...@li... https://lists.sourceforge.net/lists/listinfo/sdcc-user |
From: Johan L. <jo...@va...> - 2005-04-19 10:33:49
|
The 8051 does not have indirect I/O som=20 I use the code below to dynamically read/write i/o pins (pin can be 0 - 23 =3D P0.0 - P3.7) /Johan Lidberg jo...@va... /* * pario.c * * Copyright 2002, 2003, 2004, 2005 Johan Lidberg (jo...@va...) * * This file is part of Johan Lidbergs x51 utils * * x51utils is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include <8052.h> #include "defs.h" #include "pario.h" void pario_setpin (byte pin) reentrant { byte mask =3D 0x01 << (pin & 0x07); switch ((pin >> 3) & 0x03) { case 0: P0 |=3D mask; break; case 1: P1 |=3D mask; break; case 2: P2 |=3D mask; break; case 3: P3 |=3D mask; break; } } void pario_togglepin (byte pin) reentrant { byte mask =3D 0x01 << (pin & 0x07); switch ((pin >> 3) & 0x03) { case 0: P0 ^=3D mask; break; case 1: P1 ^=3D mask; break; case 2: P2 ^=3D mask; break; case 3: P3 ^=3D mask; break; } } void pario_clrpin (byte pin) reentrant { byte mask =3D (0x01 << (pin & 0x07)) ^ 0xff; switch ((pin >> 3) & 0x03) { case 0: P0 &=3D mask; break; case 1: P1 &=3D mask; break; case 2: P2 &=3D mask; break; case 3: P3 &=3D mask; break; } } byte pario_getpin (byte pin) reentrant { byte value; switch ((pin >> 3) & 0x03) { case 0: value =3D P0; break; case 1: value =3D P1; break; case 2: value =3D P2; break; case 3: value =3D P3; break; } return (value >> (pin & 0x07)) & 0x01; } void pario_putpin (byte pin, byte value) reentrant { if (value) { pario_setpin (pin); } else { pario_clrpin (pin); } } -----Ursprungligt meddelande----- Fr=E5n: sdc...@li... [mailto:sdc...@li...] F=F6r Vinicius Kursancew Skickat: den 7 april 2005 00:35 Till: sdc...@li... =C4mne: [Sdcc-user] Dynamic SFRs Is there a way to dinamically assign a sfr. Eg. I want to control something that goes on PORT X but i want the user=20 to be able to define the port at runtime, someting like void do_thing_on_port(sfr the_port) { the_port =3D 0x10; // do the proper stuff in the port, just example } then on the main i would call do_thing_on_port(0x80) or do_thing_on_port(P1); Thanks, vinicius kursancew. ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=3D6595&alloc_id=3D14396&op=3Dclick _______________________________________________ Sdcc-user mailing list Sdc...@li... https://lists.sourceforge.net/lists/listinfo/sdcc-user |