这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » P10 求教:用c语言操作P10口

共2条 1/1 1 跳转至

P10 求教:用c语言操作P10口

院士
2006-09-17 18:14:16     打赏
P10 求教:用c语言操作P10口



关键词: 求教     语言     操作    

院士
2006-12-22 22:43:00     打赏
2楼
问 想在函数里操作P1口的任意一个位,就做了一个函数,可以选择操作指定的口线,发现函数的参数定义成bit时,寻址是在内部ram的20H,而不是所要的P1口90H。求教该怎么定义这个函数呢?多谢!
#include <reg52.h>
#include <intrins.h>
#define  uchar unsigned char
void test(bit testport,uchar shijian);
void delay(uchar shijian);
main()
{
  test(P1^0,10);
}
void test(bit testport,uchar shijian)
{
  testport=1;
  delay(shijian);
  testport=0;
  delay(shijian);
}
void delay(uchar shijian)
{
  uchar i;
  for(i=0;i<shijian;i++)
   _nop_();

} 1: 改成宏吧#define test(TestPort,Period) {TestPort=1;delay(Period);TestPort=0;delay(Period);}


使用:
test(P1_0,30); 2: 是这样吗?编译不过啊代码改成了:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define  uchar unsigned char
#define test(TestPort,Period){ TestPort=1; delay(Period); TestPort=0; delay(Period);}
void delay(uchar shijian);
main()
{
  test(P1^0,10);
}
void delay(uchar shijian)
{
  uchar i;
  for(i=0;i<shijian;i++)
   _nop_();

}
TEST.C(11): error C141: syntax error near '='
TEST.C(11): error C141: syntax error near '='
怎么回事??? 3: 建议用at89x52.h头文件。如果你用reg52.h的话,就要自己定义IO,如sbit P1_0 = P1^0;

而不能直接在程序中使用P1^0. 4: 只是为什么宏定义非得写成一行呢?好像函数写成多行就不能编译?难道keil就是这么定义的?另外指针变量也需要把前面的*去掉吗?
我有一个函数是
void SendStr(bit TXD,unsigned char *str)
{

        int i;
        unsigned char j;
        unsigned char ch;
    
        for(i=0;i<MaxLenStr;i++){
                ch=*(str+i);
                if(ch=='\0') break;
                else if(ch=='\n'){SendByte(TXD,10);SendByte(TXD2,13);}
                else if(ch=='\t'){
                        for(j=0;j<TABNum;j++)
                                SendByte(TXD,' ');
                }
                else SendByte(TXD,ch);
        }
}
改成宏定义后为
#define SendStr(TXD_num,  str){int i;   unsigned char j; unsigned char ch;  for(i=0;i<MaxLenStr;i++){             ch=*(str+i);             if(ch=='\0') break;          else if(ch=='\n'){SendByte(TXD_num,10);SendByte(TXD_num,13);}            else if(ch=='\t'){            for(j=0;j<TABNum;j++)             SendByte(TXD_num,' ');            }               else SendByte(TXD_num,ch);        }}
但是结果不是如我所想啊。

5: 写成多行时,要使用续行符\

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]