本文目錄一覽:
- 1、c語言實驗報告心得
- 2、c語言實驗報告總結怎麼寫
- 3、C語言實驗報告總結
- 4、C語言編程實踐報告
- 5、C語言實習報告
c語言實驗報告心得
c語言實驗心得:
1、只有頻繁用到或對運算速度要求很高的變量才放到data區內,如for循環中的計數值。
2、其他不頻繁調用到和對運算速度要求不高的變量都放到xdata區。
3、常量放到code區,如字庫、修正係數。
4、邏輯標誌變量可以定義到bdata中。
在51系列芯片中有16個位元組位尋址區bdata,其中可以定義8*16=128個邏輯變量。這樣可以大大降低內存佔用空間。定義方法是: bdata bit LedState;但位類型不能用在數組和結構體中。
5、data區內最好放局部變量。
因為局部變量的空間是可以覆蓋的(某個函數的局部變量空間在退出該函數是就釋放,由別的函數的局部變量覆蓋),可以提高內存利用率。當然靜態局部變量除外,其內存使用方式與全局變量相同;
6、確保程序中沒有未調用的函數。
在Keil C里遇到未調用函數,編譯器就將其認為可能是中斷函數。函數里用的局部變量的空間是不釋放,也就是同全局變量一樣處理。這一點Keil做得很愚蠢,但也沒辦法。
7、如果想節省data空間就必須用large模式。
將未定義內存位置的變量全放到xdata區。當然最好對所有變量都要指定內存類型。
8、使用指針時,要指定指針指向的內存類型。
在C51中未定義指向內存類型的通用指針佔用3個位元組;而指定指向data區的指針只佔1個位元組;指定指向xdata區的指針佔2個位元組。如指針p是指向data區,則應定義為: char data *p;。還可指定指針本身的存放內存類型,如:char data * xdata p;。其含義是指針p指向data區變量,而其本身存放在xdata區。
以前沒搞過C51,大學時代跟單片機老師的時候也是搗鼓下彙編,現在重新搞單片機,因為手頭資料不多,找到一些C51的程序,發現裏面有這些關鍵字,不甚明了,沒辦法只好找了下,發現如下描述:
從數據存儲類型來說,8051系列有片內、片外程序存儲器,片內、片外數據存儲器,片內程序存儲器還分直接尋址區和間接尋址類型,分別對應code、data、xdata、idata以及根據51系列特點而設定的pdata類型,使用不同的存儲器,將使程序執行效率不同,在編寫C51程序時,最好指定變量的存儲類型,這樣將有利於提高程序執行效率(此問題將在後面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應不同的實際硬件系統,也將有不同的編譯結果。
在51系列中data,idata,xdata,pdata的區別
data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式訪問的。彙編中的語句為:mox ACC,@Rx.(不重要的補充:c中idata做指針式的訪問效果很好)
xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdata:外部擴展RAM的低256個位元組,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優點,具體用法屬於中級問題,這裡不提。
三、有關單片機ALE引腳的問題
“單片機不訪問外部鎖存器時ALE端有正脈衝信號輸出,此頻率約為時鐘振蕩頻率的1/6.每當訪問
外部數據存儲器是,在兩個機器周期中ALE只出現一次,即丟失一個ALE脈衝.”這句話是不是有毛
病.我覺得按這種說法,應該丟失3個ALE脈衝才對,我一直想不通是怎麼回事,希望大蝦們幫幫我.
小弟感激涕零.
答:
其他所有指令每6個機器周期發出一個ALE,而MOVX指令佔用12個機器周期只發出一個ALE
四、如何將一個INT型數據轉換成2個CHAR型數據?
經keil優化後,char1=int1/256,char2=int1%256或char1=int18,char2=int10x00ff效率是一樣的。
五、在KEIL C51上仿真完了,怎樣生成HEX文件去燒寫??
右鍵點項目中Target 1,選第二個,在OUTPUT中選中CREAT HEX
六、typedef 和 #define 有何不同??
typedef 和 #define 有何不同》》》 如
typedef unsigned char UCHAR ;
#define unsigned char UCHAR ;
typedef命名一個新的數據類型,但實際上這個新的數據類型是已經存在的,只不過是定義了
一個新的名字.
#define只是一個標號的定義.
你舉的例子兩者沒有區別,但是#define還可以這樣用
#define MAX 100
#define FUN(x) 100-(x)
#define LABEL
等等,這些情況下是不能用typedef定義的
七、請問如何設定KELC51的仿真工作頻(時鐘)
用右鍵點擊左邊的的target 1,然後在xtal一欄輸入
八、不同模塊怎樣共享sbit變量,extern不行?
把SBIT定義單獨放到一個.H中,每個模塊都包含這個.h文件
九、C51中對於Px.x的訪問必須自己定義嗎?
是的。
如sbit P17 = 0x97;即可定義對P1.7的訪問
十、SWITCH( )語句中表達式不可以是位變量對嗎?
可以用位變量:
#include
#include
void main()
{
bit flag;
flag=0;
switch(flag)
{
case ‘0’:{printf(“0\n”);break;}
case ‘1’:{printf(“1\n”);break;}
default:break;
}
}
bit 變量只有兩種狀態,if 語句足夠啦,!!!
十一、const常數聲明佔不佔內存???
const 只是用來定義「常量」,所佔用空間與你的定義有關,如:
const code cstStr[] = {“abc”};
佔用代碼空間;而如:
const char data cstStr[] = {“abc”};
當然佔用內存空間。
另外,#define 之定義似乎不佔用空間。
十二、philips的單片機P89C51RD+的擴展RAM在C51中如何使用?
試一試將auxr.1清0,然後在c語言中直接聲明xdata類型的變量
十三、BUG of Keil C51
程序中用如下語句:
const unsigned char strArr[] = {“數學”};
結果發現strArr[] 內容為 {0xCA,0xD1,0xA7},真奇怪!
凡是有0xfd,則會通通不見了,所以只能手工輸入內碼了,例如 uchar strArr[]=
{0xCA,0xfd,0xd1,0xa7}(用Ultraedit會很方便)。
十四、Keil C51中如何實現代碼優化?
菜單Project下Option for target “Simulator”的C51.
看到Code optimization了嗎?
十五、請教c的!和 ~ 符號有甚區別??
!是邏輯取反,~是按位取反。
十六、c51編程,讀端口,還要不要先輸出1?
我怎麼看到有的要,有的不要,請高手給講講,到底咋回事?謝了
要輸出1的,除非你能保證之前已經是1,而中間沒有輸出過其他值。
十七、當定時器1(T1)用於產生波特率時,P3^5還是否可以用作正常的I/O口呢?
p3.5完全可以當普通的io使用
十八、C51中 INT 轉換為 2個CHAR?
各位高手:
C51中 INT 轉換為 CHAR 如何轉換諸如:
X = LOW(Z);
Y = HIGH(Z);
答:
x=(char)z;
y=(char)(z8);
十九、如果我想使2EH的第7位置1的話,用位操作可以嗎?
現在對位操作指令我一些不太明白請各位多多指教:
如 SETB 07H 表示的是20H.7置1,對嗎?(我在一本書上是這麼看到的)
那麼如果我想使2EH的第7位置1的話,象我舉的這個例子怎麼表示呢?謝謝!
SETB 77H
setb (2eh-20h)*8+7
20h-2fh每位元組有8個可位操作(00h-7fh),其它RAM不可位直接操作
二十、char *addr=0xc000 和char xdata *addr=0xc000有何區別?
char *addr=0xc000;
char xdata *addr=0xc000;
除了在內存中佔用的位元組不同外,還有別的區別嗎?
char *addr=0xc000; 是通用定義,指針變量 addr 可指向任何內存空間的值;
char xdata *addr=0xc000; 指定該指針變量只能指向 xdata 中的值;
後一種定義中該指針變量(addr)將少佔用一個存儲位元組。
uchar xdata *addr=0xc000;指針指向外ram;
如果:data uchar xdata *addr=0xc000;指針指向外ram但指針本身存在於內ram(data)
中
以此類推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;
data uchar idata *addr=0xa0;………
二十一、while(p1_0)的執行時間?
假設,P1_0為單片機P1口的第一腳,請問,
while(P1_0)
{
P1_0=0;
}
while(!P1_0)
{
P1_0=1;
}
以上代碼,在KEIL C中,需要多長時間,執行完。能具體說明while(P1_0)的執行時間嗎?
仿真運行看看就知道了,
我仿真了試了一下,約14個周期
二十二、怎樣編寫C51的watchdog程序?
各位大蝦,我用KEIL C51 編寫了一個帶外部開門狗的程序,可程序無法運行起來,經過查
找,發現程序在經過C51編譯後,在MAIN()函數的前部增加了一端初始化程序,等到進入
主程序設置開門狗時,開門狗已經時間到,將我的程序複位了,請問我怎樣才能修改這一端
初始花程序,使他一運行,就設置開門狗?
可以在startup.a51中加入看門狗刷新指令,當然用彙編,然後重新編譯startup.a51
,將他和你的程序連接即可。新的startup.a51會自動代替系統默認的啟動模塊。
二十三、keil C51 怎樣把修改的startup.a51 加到工程文件中
直接加入即可
注意不要改動?STACK,?C_START,?C_STARTUP等符號。startup.a51直接加入項目,不用修改也可。可在內面自己修改彙編的一些限制或堆棧指針。
二十四、關於波特率的設置
我在設定串口波特率時發現一個問題:在晶體震蕩器為11.0592MHz時,若設9600BPS的話,
TH1=0XFD,TL1=0XFD,而要設19200BPS的話,TH1、TL1有否變化,如果沒變,為什麼?
如果變了,又為什麼?(因為我看書上倆個是一樣的),希望大家點撥。
答:
當電源控制寄存器(PCON)第BIT7(SMOD)為1時波特率加倍。
TH1和TL1的值不變.
二十五、如何在C中聲明保留這部分RAM區不被C使用?
我不知道在C源程序中怎麼控制這個,但在彙編程序中加入下面一段就行:
DSEG AT 20H
AA: DS 10
這樣C51就不會佔用20H–29H了
或者在c51里這樣定義:
uchar data asm_buff[10] _at_ 0x20;
二十六、問浮點運算問題
我在用C51時發現它對傳遞浮點參數的個數有限制,請問:
1)參數是以全局變量的形式傳遞的,請問以全局變量的形式傳遞的參數也有限制嗎?
2)這種傳遞浮點參數的限制有多少呢?
3)float*float的結果是float類型還是double類型?能否直接賦值給float類型的變量?
答:
由於KEIL C51的參數傳遞是通過R0-R7來傳遞的,所以會有限制。
不過KEIL提供了一個編譯參數,可以支持更多參數的傳遞。具體
的內容見KEIL的PDF文檔。
我建議你把多個要傳遞的參數定義到指針或結構體中去,傳遞參
數通過指針或結構進行,這樣好一些。
第3個問題回答是YES,你自己試試不就知道了。
二十七、如何在某一個地址定義ram
用_at_ 命令,這樣可以定位靈活一點的地址
uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM
將dis_buff[16]定位在0x6020開始的16個位元組
二十八、keil c中,用什麼函數可以得到奇偶校驗位?
例如32位數據,將四個位元組相互異或後檢查P即可,若耽心P被改變,可用內嵌彙編。
#include
unsigned char parity(unsigned char x){
x^=x;
if(P)return(1);
else return(0);
}
unsigned char parity2(unsigned int x){
#pragma asm
mov a,r7
xrl ar6,a
#pragma endasm
if(P)return(1);
else return(0);
}
c語言實驗報告總結怎麼寫
實驗報告總結示例如下:
1、此次設計也讓我明白了思路即出路,有什麼不懂不明白的地方要及時請教或上網查詢,只要認真鑽研,動腦思考,動手實踐,就沒有弄不懂的知識,俗話說的好,讀書破萬卷下筆如有神,沒有學不會只有不肯學!我堅信,只要下一番功夫就能有理想的收穫!
2、通過這次實驗,讓我更加了解到地理信息系統原理與方法的重要性,以及它對我們資源勘查專業發展發揮的重要作用。學習,我覺得結果並不是最重要的,很多結果並不美好。
但是學習這個過程是不可少的。當自己把本課程所有的實驗做完後,才領悟到老師所說話的含義,要掌握一種新的軟件,得隨着實踐的演練,通過循序漸進的學習,才能更好的掌握它。這次實驗,學到的東西很多。
3、我認為,在這學期的gis實驗中,不僅培養了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學會了很多學習的方法。而這也是日後最實用的,真的是受益匪淺。要面對社會的挑戰,只有不斷的學習、實踐,再學習、再實踐。這對於我們的將來也有很大的幫助。
4、綜上所述,經過這次實習,我了解了很多日後工作所需的基本技能,檢驗了平時所學習的基礎知識,對植物營養這門學科有了更深刻的理解,這於我來說無疑是受益匪淺的。我相信,這次實習讓我獲得的經驗、心得會促進我在以後的學習、工作中尋找到合理的方法和正確的方向。最終感激學校為我們供給這樣的實習機會。
5、這次實驗雖然僅有短短的xx天,可是實習資料異常豐富,並且經過這個實習我們都得到了知識上的複習和本事上的提高。正是因為這個實習,加深了我對植物營養學這門學科的了解,同時對我們專業的發展方向有了初步認識。這次實習不但鞏固了我們平時所學,也為我們日後的專業工作供給了十分實際的便利。
C語言實驗報告總結
你只需要按那個模版就行,那些內容就改成你的作業
班級: 學號: 姓名:
實驗9 指針
一、實驗目的
(1)掌握指針概念,並定義與使用它。
(2)使用數組的指針和指向數組的指針變量。
(3)使用字符串的指針和指向字符串的指針變量。
二、實驗內容
1. 將一個3*3的矩陣轉置,用函數實現。
2. 有n個人圍成一圈,順序排號。從第一個人開始報數(1~3),凡報到3的人退出,問第幾號的人能留下。
三、實驗環境
硬件:(1)學生用微機
(2)多媒體實驗教室
軟件:(1)Windows XP 中文操作系統
(2)VC++ 6.0
四、實驗結果
程序1:
#includestdio.h
void main()
{
void move(int *pointer);
int a[3][3],*p,i;
printf(“input marix:\n”);
for(i=0;i3;i++)
scanf(“%d %d %d”,a[i][0],a[i][1],a[i][2]);
p=a[0][0];
move(p);
printf(“matrix:\n”);
for(i=0;i3;i++)
printf(“%d %d %d\n”,a[i][0],a[i][1],a[i][2]);
}
void move(int *pointer)
{
int i,j,t;
for(i=0;i3;i++)
for(j=i;j3;j++)
{
t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
程序2:
#includestdio.h
void main()
{
int i,k,m,n,num[50],*p;
printf(“input num of person:”);
scanf(“%d”,n);
p=num;
for(i=0;in;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(mn-1)
{
if(*(p+i)!=0)k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;
}
while(*p==0)p++;
printf(“the last num is %d\n”,*p);
}
結果1:(就是程序運行之後出現的框,截圖後粘貼這裡)
結果2:
五、總結:
通過這個實驗的學習, 基本掌握了指針的基本用法。
C語言編程實踐報告
樓上你就幫下人家啊,當今的畢業論文,報告有幾個是自己做的啊?
C語言實習報告
C語言實習報告
一、實習目的
1。掌握在集成環境中編輯、編譯、連接和運行C程序的方法。
(1)運行TC
(2)啟動TC集成環境,輸入一個源程序,編譯並運行。
2。掌握單步執行、設置/去除斷點,觀察變量或表達式的值。
(3)在該程序中按CTRL+F7單步招待並在觀察窗口中查看變量和表達式的值。
(4)設置/去除斷點,繼續調試。1、熟練掌握if.switch分支語句的使用。
2、熟練掌握for.while.do.while循環語句的使用。
3、熟練掌握函數的定義、說明、參數傳遞及嵌套和遞歸調用方法。
4、熟練掌握一維數組、二維數組、字符數組的定義、說明和使用方法。
熟練掌握結構體和指針的綜合應用鏈表的操作
二、實習地點
北京交通幹部管理學院計算機系機房十三號.
三、實習成果
熟練掌握TC集成環境的使用方法。認真編寫實習報告和實習總結,描述實習操作和心得體會,總結在這次實習中的業務收穫,作出自我評價。熟練掌握並應用TC程序設計的各個知識點。掌握結構體和指針的聯合使用,學會鏈表的構造和常用操作方法,認真編寫實習日誌和實習體會。並通過各種途徑查找所需資料,拓寬視野,培養自學能力。
四、實習心得
在短短一周的實習期間使我獲取了不少新知識也鞏固了許多老知識。我體會到了老師和同學們的熱心幫助,無論面對學習中多大的困難,同學們都會幫助你,老師也會幫助你,大家就像兄弟姐妹一樣。老師安排我們有具有的分工:
首先,在計算機機房裡同學們積極的對C語言進行鞏固與實習,老師熱心的講解同學們提出的問題和實習過程中應該注意的事項和同學們的任何。老師把我們分為幾組,每一組十一個人,並且分配了具體的任務,在我們實習結束後每一組的同學都把自己組裡的成果展示給大家一起分享,告訴大家編程的原理、方法等,使同學們既有動手能力,又能提高語言表達能力。
然後同學們把自到自己的小組裡,大家具體分工,你編這道題,我編這道題……我們不會的地方就去問學習比較好一些的同學,或者去問老師,老師和同學們總是那麼的熱心,只要你還不明白,不論你問多少次,老師和同學們都會耐心地給你細心的講解,直到講會為止。
最後我們把每天收穫到的知識和心得都以實習日誌的形式寫好,最後交給老師。我們把自己的成果交給老師,就這樣,這次實習圓滿結束。
這次實習是有益的,它不僅讓我們學習到了C語言的知識,更讓我們學習到了同學們之間的那種團隊精神,為我以後踏入社會工作準備了很多良好的知識與經驗。
(本人水平有限,我們也正好交報告,是我今天用了一下午的時間才寫好的,希望對你有用!!)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/160959.html