發新話題
打印

定義的問題

定義的問題

我使用keil c的編譯程式
及使用c8051f340

其中此單晶片有p4的腳

但我定義

sbit LF_U = P4^7;
sbit LF_D = P4^6;
sbit RF_U = P4^5;
sbit RF_D = P4^4;
sbit LR_U = P4^3;
sbit LR_D = P4^2;
sbit RR_U = P4^1;
sbit RR_D = P4^0;


編譯卻沒辦法通過


sbit LED = P3^4;                       // LED = 1 means ON
sbit LED1 = P3^5;
卻ok

該如何解決呢?

TOP

datasheet中有說 明
sbit只能用在sfr暫存器位址的尾數 0 or 8的位址才可以做sbit的定義
P4並不沒符合上述說明

TOP

那有什麼辦法可以解決嗎?
我電路已經洗好了

TOP

以下是我寫過的方式,為P4,P5,P6....所寫的,你可以參考..

J.K

...............
sfr   P4=0xC7;  //For F340
#define P4_0   (P4 & 1)
#define P4_1   (P4 & 2)>>1
#define P4_2   (P4 & 4)>>2
#define P4_3   (P4 & 8)>>3
#define P4_4   (P4 & 16)>>4
#define P4_5   (P4 & 32)>>5
#define P4_6   (P4 & 64)>>6
#define P4_7   (P4 & 128)>>7


sbit LF_U = P4_7;
sbit LF_D = P4_6;
sbit RF_U = P4_5;
sbit RF_D = P4_4;
sbit LR_U = P4_3;
sbit LR_D = P4_2;
sbit RR_U = P4_1;
sbit RR_D = P4_0;

TOP

我編譯還是沒辦法過

最後使用函式的方法

如下:

#define LF_U 7
#define LF_D 6
#define RF_U 5
#define RF_D 4
#define LR_U 3
#define LR_D 2
#define RR_U 1
#define RR_D 0
void RelayControl(unsigned char RelayNo, bit status)
{
  unsigned char tmp;
  if(status)
  {
    tmp = 1<<RelayNo;
P4 |= tmp;
  }  
  else
  {
    tmp = 1<<RelayNo;
tmp=~tmp;
P4 &= tmp;
  }
  
}

TOP

發新話題