SOGO論壇

標題: 8051初學者 [列印本頁]

作者: p59403056    時間: 2012-9-24 16:37:13     標題: 8051初學者

我是個8051的初學者想做一個

中斷的副程式 第13腳的 INT1
該怎麼寫啊
中斷是亮滅3次玩又回到8個LED燈的左移右移霹靂燈主程式
我LED霹靂燈左移右移寫這樣是對還是ˇ錯啊
請給我一點解答吧
#include "HW1.H"
void delay();
void Init_B_Port();
int main()
{
unsigned int a,b;
int i;

Init_B_Port();
while (1) {
//
a = 0x0080;
for (i =0; i < 8; i++)
{
*P_IOB_Data = a;
delay();
a = a >> 1;
}
//
b = 0x0001;
for (i =0; i < 8; i++)
{
*P_IOB_Data = b;
delay();
b = b << 1;
}
作者: if8051    時間: 2012-9-25 08:27:02

您用的是哪種 C compiler ? 看起來不是 Keil 我是使用 Keil C compiler
既然是要控制 8 顆 LED ,data type 宣告成 unsigned char 就好!不
需要宣告成 unsigned int 這可是 16 bit,8051 RAM 僅有 128 byte
8052 RAM 也才有 256 byte 而已,8 bit 夠用的話,就盡量使用
unsigned char 就可以。

作者: p59403056    時間: 2012-9-25 09:32:03

if8051 發表於 2012-9-25 08:27  
您用的是哪種 C compiler ? 看起來不是 Keil 我是使用 Keil C compiler
既然是要控制 8 顆 LED ,data type ...

謝指點我在試試看
那我改用KEIL寫看看好了
作者: alphi    時間: 2012-10-11 15:38:06

本帖最後由 alphi 於 2012-10-11 18:46 編輯

不過我很好奇你提供的副程式中 幾乎都沒有關於8051 暫存器與相關的設定,如果以8051 外部中斷用Keil /SDCC寫至少中斷副程式會像以下的寫法
  1. #include <8052.h>
  2. void EINT0(void) interrupt 0 using 0
  3. {
  4.       P2^=0xFF; //每當壹次外部中斷反向
  5.       ......

  6. }
  7. int main()
  8. {
  9.         P2=0x00;
  10.         TCON=0x05; //IT0 =1& IT1=1,邊沿觸發(Edge Trigger)

  11.         //IE=(1<<7)|1; 相當於EA=1,EX0=1
  12.         EA   =1;     //啟用所有中斷
  13.         EX0 =1;     //開啟INT0中斷

  14.         while(1)
  15.         {
  16.         }
  17. }
複製代碼
不過看不出來你的設定,另外再中斷中建議不要做太多事情用一個Flag 做狀態機切換到主程式去執行...這樣你的後續如果有中斷才有足夠時間去處理




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM