IAR写的C++程序,不知道构造函数如何让位变量指向端口?

2020-01-20 19:10发布

/************************************
初学C++,这是个测试程序,设计的想法是,把最普遍的IO口,作一个对象来看待。
指定一个端口,构造一个端口对象
*************************************/
#include<ioat89c51.h>

class Led{
private:
        bool LED_IO;  //位变量,但如何指向构造函数的参数。
public:
        Led(bool b){  //此处怎样写,让LED_IO 指向b(即P3_bit.P3_0)               
        }
        void on(){
                LED_IO=1;
        }
        void off(){
                LED_IO=0;
        }       
};

void delayms(int ms){
        while(ms--)
                for(int i=0;i<1000;i++);
}

int main(){
        Led led1(P3_bit.P3_0);
        while(1){
                led1.on();
                delayms(100);
                led1.off();
                delayms(100);
        }
}

这样写,不是为了标新立异,是想从这里开始把MCU所有内部资源作为对象的方式编程。但构造函数不知道如何写,才能把LED_IO与P3.0等同起来。对LED_IO的操作可以影响P3.0.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
uc_stm32f050
2020-01-21 02:59
IAR 8051 C++操作IO口早就发过了,用类模板。

#define  IO_TEST  IO_TICC_OBJECT_DEF(1,0)     //P1_0

uint8 io_read;
int main()
{
   IO_TEST<<IO_MAKE_OUT;         //设置为输出
   IO_TEST<<IO_MAKE_OUT_LOW;     //设置为输出,且输出低  
   IO_TEST<<0<<IO_MAKE_OUT;      //设置为输出,且输出低
   
   IO_TEST<<0<<1;                //输出低,再输出高
   
   IO_TEST<<1<<0<<IO_TOGGLE;     //输出搞,再输出低,再翻转
   
   IO_TEST>>io_read;             //读取电平到io_read;
                                 //读到的电平再写回IO口
   IO_TEST<<io_read;
  
  while(1);
}         


汇编代码:
        RSEG NEAR_CODE:CODE:NOROOT(0)
//    6 int main()
main:
        CODE
//    7 {
        ; Auto size: 0
//    8    IO_TEST<<IO_MAKE_OUT;         //设置为输出
        ORL     0xfe,#0x1
//    9    IO_TEST<<IO_MAKE_OUT_LOW;     //设置为输出,且输出低  
        CLR     0x90.0
        ORL     0xfe,#0x1
//   10    IO_TEST<<0<<IO_MAKE_OUT;      //设置为输出,且输出低
        CLR     0x90.0
        ORL     0xfe,#0x1
//   11   
//   12    IO_TEST<<0<<1;                //输出低,再输出高
        CLR     0x90.0
        SETB    0x90.0
//   13     
//   14    IO_TEST<<1<<0<<IO_TOGGLE;     //输出搞,再输出低,再翻转
        SETB    0x90.0
        CLR     0x90.0
        XRL     0x90,#0x1
//   15   
//   16    IO_TEST>>io_read;             //读取电平到io_read;
        MOV     C,0x90.0
        JNC     ??main_0
        SETB    0x90.0
        SJMP    ??main_1
??main_0:
        CLR     0x90.0
//   17                                  //读到的电平再写回IO口
//   18    IO_TEST<<io_read;
//   19

一周热门 更多>