新手keil C 3u 8051問題

本帖最後由 oYueno 於 2010-5-4 15:00 編輯

請問
  1. #include<AT89X51.H>
  2. void delayms (unsigned int time);
  3. main()
  4. {
  5.   TMOD=0x20;
  6.   TH1=230;
  7.   TL1=230;
  8.   TR1=1;
  9.   SCON=0x70;
  10.   while(1)
  11.     {
  12.          unsigned int x;
  13.      TI = 0;
  14.          x = P1; SAVE P1的狀態
  15.          SBUF =~P1;
  16.          while(TI==0);
  17.          P2 =P1 ;
  18.          while(P1==x) ;比較先前 P1的狀態
  19.          delayms(10);   
  20.      }
  21. }
  22. void delayms (unsigned int time)
  23. {
  24.   unsigned int n;
  25.   while(time > 0)
  26.         {
  27.          n =120; while(n >0 ) n--;
  28.          time--;
  29.         }
  30. }
複製代碼
如果要比較先前P1的狀態
有沒有其他的方法,如果用XOR 又應如何寫呢?

本帖最後由 shingzhk 於 2010-5-4 16:17 編輯

P1 = P1 ^ x;   // in C

= XOR P1,X   // in Assembly
呢樣?

TOP

回復 2# shingzhk


我做緊 while loop 要個 P1 有轉變 先做下一個步驟
P1=P1^x 這樣都要要先做一個 unsigned int x;

有沒有d比我個 快d/有效率/間單d 的方法呢???

TOP

回復 3# oYueno

用唔用得interrupt?

TOP

int0 int1 加埋得 得2bit P1 有8 BIT

TOP

緊係啦
不過你話要 快d/有效率/簡單

TOP