Re: [問題] keilc uVision的問題
硬體方面我用的晶片是89s52
我是剛練習單晶片的新手
買了一本單晶片的書作練習
因為剛買了一台燒錄機做練習用
所以就接了一個霹靂燈的電路
來測試是否可以進行燒錄
在keil c的輸出模擬中
可以成功的模擬出動作
但是一旦燒錄晶片中
就一點動作也沒有了
請大家幫我看一下程式
讓我瞭解是程式的問題還是因為我keil c版本的問題導致的錯誤
/* ch03_3.c - 霹靂燈實驗程式 */
//==宣告區================================================================
#include <reg51.h> // 定義8051暫存器之標頭檔,P2-17~19
#define LED P2 // 定義LED接至Port 2
void delay(int); // 宣告延遲函數
//==主程式================================================================
main() // 主程式開始
{ unsigned char i ; // 宣告無號數字元變數i(佔1Bytes)
LED=0xfe; // 初值=1111 1110,只有最右1燈亮
while(1) // 無窮迴圈,程式一直跑
{ for(i=0;i<7;i++) // 左移7次
{ delay(100); // 延遲100*5m=0.5s
LED=(LED<<1)|0x01; // 左移1位,並設定最低位元為1
} // 左移結束,只有最左1燈亮
for(i=0;i<7;i++) // 右移7次
{ delay(100); // 延遲100*5m=0.5s
LED=(LED>>1)|0x80; // 右移1位,並設定最高位元為1
} // 結束右移,只有最右1燈亮
} // while迴圈結束
} // 主程式結束
//==副程式================================================================
/* 延遲函數,延遲約x*5ms */
void delay(int x) // 延遲函數開始
{ int i,j; // 宣告整數變數i,j
for (i=0;i<x;i++) // 計數x次,延遲x*5ms
for (j=1;j<=600;j++); // 計數600次,延遲5ms
} // 延遲函數結束
後來我改用一行一行的去作控制的方式燒入晶片
電路又可以動作了
以下是程式
LCM1_8=0xfd;
delay(100);
LCM1_8=0xfb;
delay(100);
LCM1_8=0xf7;
delay(100);
LCM1_8=0xef;
delay(100);
LCM1_8=0xdf;
delay(100);
LCM1_8=0xbf;
delay(100);
LCM1_8=0x7f;
delay(100);
我猜測電路應該沒錯
因為我用第二種方式的時候燒錄進晶片
電路可以正常的動作
所以想請教有可能是什麼問題
keil c的硬體設定如下
1.Device 內的CPU的種類 選擇AT89s52 (ATMEL)
2.Target 內
a.石英振盪器的頻率有設定 12
b.Memory Model 我是選 small
以上
※ 引述《beminaru (賞你個痛快)》之銘言:
: 想請問
: 我使用的是Keil uVision2並且以c語言方式進行撰寫
: 但是有些程式組譯完後燒進去晶片,
: 以實際電路來看結果
: 卻沒辦法完成我要的動作
: (但以Keil uVision2內的軟體模擬來看我的輸出,輸出的方式仍為我想要達成的
: 方式在進行,所以程式應該沒有錯)
: 後來我改用簡易的寫法去組譯
: 載入晶片後,就可以動作了
: 是否是因為我的程式Keil uVision2版本問題?
--
靜靜的等人追的話頂多只能有兩三個選擇
但是主動出擊去追人的話妳的選擇將會是無限喔~共勉之
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.250.16
※ 編輯: beminaru 來自: 60.248.250.16 (03/13 22:09)
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章