![]() |
偽爺 發表于 2019-12-24 17:21 只可惜我電腦上沒有Keil了,你可以把工程貼上來,這樣子光說很難找的出問題的 |
led=P1 錯了哦 |
圖片底下有錯誤提示,根據提示改 |
sbit 是位定義,P1口8位使用,直接調用 |
偽爺 發表于 2019-12-25 09:10 原來是這樣,可以可以,解決了就好 |
sbit是定義特殊寄存器的位變量,不能直接定義P1 |
51jia 發表于 2019-12-25 00:16 謝謝啦 問題解決啦 |
未成為大佬 發表于 2019-12-24 23:36 謝謝啦 問題解決啦 ,確實是intrins.h頭文件中程序少加了一個崗 ,應該是我誤刪的 哈哈 |
變量聲明要在程序開始,sibit是位定義。按你的寫法要用宏定義define. #include <reg52.h> #define led P0 void delay(unsigned int z) { while(z--); } void main() { unsigned char i; led=0xff; while(1) { for(i=0;i<8;i++) { led=0xff; led&=~(1<<i); delay(50000); } } |
![]() 我照這敲了一遍,沒錯。是不是你的intrins.h錯誤? #ifndef __INTRINS_H__ #define __INTRINS_H__ extern void _nop_ (void); extern bit _testbit_ (bit); extern unsigned char _cror_ (unsigned char, unsigned char); extern unsigned int _iror_ (unsigned int, unsigned char); extern unsigned long _lror_ (unsigned long, unsigned char); extern unsigned char _crol_ (unsigned char, unsigned char); extern unsigned int _irol_ (unsigned int, unsigned char); extern unsigned long _lrol_ (unsigned long, unsigned char); extern unsigned char _chkfloat_(float); extern void _push_ (unsigned char _sfr); extern void _pop_ (unsigned char _sfr); #endif |
void led=P1 改成#define led=P1 但是還是不行,報錯還是一樣 |
無法錯誤,定義led的端口不對 |
小黑屋525 發表于 2019-12-24 09:18 之后我針對這個問題又編了一個簡單的程序,用sbit 聲明整個IO口,計算機是檢查不出來,是沒有錯誤的,但是單片機沒有反應。 |
小黑屋525 發表于 2019-12-24 09:18 改了之后錯誤還是沒變, 好無助啊 |
還有誰? 發表于 2019-12-24 14:02 用這個函數流水燈看起來自然些 |
試試這個#define led P1 |
sbit led=P1改成 #define led P1 |
圖片顯示,mian.c沒錯,有問題的是intrins.h,141和129行。 |
這個拿去,不謝! #include "reg52.h" #include<intrins.h> void main() { u8 i; led=~0x01; delay(50000); //大約延時450ms while(1) { for(i=0;i<7;i++) //將led左移一位 { led=_crol_(led,1); delay(50000); //大約延時450ms } for(i=0;i<7;i++) //將led右移一位 { led=_cror_(led,1); delay(50000); //大約延時450ms } } } |
csmyldl 發表于 2019-12-24 02:18 我刪除了一個組也不行 |
csmyldl 發表于 2019-12-24 02:18 雙擊 main.c沒有任何反應呀 不過要是雙擊那兩個錯誤就會跳到intrins.h的頭文件中 |
第一條語句就是錯的:sbit是位操作,定義不了P1。 |
你的第三行的sbit led=P1要改成define led P1,sbit是位操作,不能一下子定義整個IO口; |
你上傳的圖片中程序12行是沒錯的,檢查你工程中加載的main.c是否加載正確,可以雙擊右邊"main.c"看打開的文件是否對,因為看到你左邊工程建有兩個群組,要不刪除一個群組試試 |