第一篇:?jiǎn)纹瑱C(jī),雙機(jī)通信實(shí)驗(yàn)報(bào)告
洛陽理工學(xué)院實(shí)驗(yàn)報(bào)告
系別 計(jì)算機(jī)系 班級(jí) B140504 學(xué)號(hào) B14050414 姓名 史錦峰 課程名稱 單片機(jī)原理及組成 實(shí)驗(yàn)日期 2016.04.28 實(shí)驗(yàn)名稱 雙機(jī)通信及 PCB 設(shè)計(jì)過程 成績(jī)
實(shí)驗(yàn)?zāi)康模赫莆沾锌谕ㄐ殴ぷ髟?,熟悉單片機(jī)電路的 PCB 設(shè)計(jì)過程 實(shí)驗(yàn)條件:計(jì)算機(jī)、Keil uVision4、ISIS 7 Professional、實(shí)驗(yàn)箱 實(shí)驗(yàn)內(nèi)容:
1.掌握串行通信原理和中斷法通信軟件編程; 2.完成實(shí)驗(yàn)的 C51 語言編程;
3.學(xué)習(xí)使用 ARES 軟件,完成實(shí)驗(yàn) 61#機(jī)電路;
實(shí)驗(yàn)電路圖
仿真運(yùn)行效果
圖一:
圖二:
源程序:
#include
unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main(void){
uchar counter=0;
P2=0x3f;
TMOD=0x20;
TH1=TL1=0xf4;
PCON=0;
SCON=0x50;
TR1=1;
while(1){
SBUF=counter;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
if(SBUF==counter){
P2=counter;
if(++counter>15)counter=0;
delay(500);
}
} }
#include
while(RI==1){
RI=0;
receiv=SBUF;
SBUF= receiv;
while(TI==0)
TI=0;
P2=receiv;
}
}
}
實(shí)驗(yàn)總結(jié):一直不能正確顯示同步的信號(hào),詢問老師后才知道是實(shí)驗(yàn)箱燒寫程序時(shí)用了兩臺(tái)電腦,但是進(jìn)行通訊時(shí)不在一臺(tái)機(jī)子上。這是一個(gè)很重要的店。
第二篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)三 雙機(jī)通信實(shí)驗(yàn)程序
實(shí)驗(yàn)三 雙機(jī)通信實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
UART 串行通信接口技術(shù)應(yīng)用
二、實(shí)驗(yàn)實(shí)現(xiàn)的功能
用兩片核心板之間實(shí)現(xiàn)串行通信,將按鍵信息互發(fā)到對(duì)方數(shù)碼管顯示。
三、系統(tǒng)硬件設(shè)計(jì)
實(shí)驗(yàn)所需硬件:電腦一臺(tái);
開發(fā)板一塊;
串口通信線一根; USB線一根;
四、系統(tǒng)軟件設(shè)計(jì)
實(shí)驗(yàn)所需軟件:編譯軟件:keil uvision3;
程序下載軟件:STC_ISP_V480; 試驗(yàn)程序:
#include
L1=1;L2=1;L3=1;
H1=0;if(L1==0)
return 1;else if(L2==0)
return 2;else if(L3==0)
return 3;
H1=1;H2=0;if(L1==0)
return 4;else if(L2==0)
return 5;else if(L3==0)
return 6;H2=1;return 0;
} unsigned char keyscan(){ static unsigned int ct=0;static unsigned char lastkey=0;unsigned char key;key=getkey();
if(key==lastkey){
ct++;
if(ct==900)
{
ct=0;
lastkey=0;
return key;
} } else {
第三篇:?jiǎn)纹瑱C(jī)數(shù)據(jù)采集與雙機(jī)通信系統(tǒng)的設(shè)計(jì)任務(wù)書
智能儀器設(shè)計(jì)實(shí)習(xí)
設(shè) 計(jì) 任 務(wù) 書
題目單片機(jī)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)專業(yè)、班級(jí)學(xué)號(hào)姓名主要內(nèi)容、基本要求、主要參考資料等:
主要內(nèi)容:
功能要求:完成單片機(jī)數(shù)據(jù)采集系統(tǒng)
1)使用單片機(jī)采集數(shù)據(jù)。
2)將采集到的數(shù)據(jù)送上微機(jī)顯示、處理。
上述內(nèi)容為基本要求,可按照自己的理解增加功能使之更完善。
基本要求:
? 明確設(shè)計(jì)任務(wù),復(fù)習(xí)與查閱有關(guān)資料。
? 設(shè)計(jì)所用硬件芯片按給定使用。
? 按要求對(duì)設(shè)計(jì)進(jìn)行簡(jiǎn)要說明,總體設(shè)計(jì)方案,各部分的詳細(xì)設(shè)計(jì)。
? 寫出體會(huì)和總結(jié)。
要求全部使用A4紙打印稿,不少于5000字。
主要參考資料:
? 李朝青編.《單片機(jī)原理及接口技術(shù)》(簡(jiǎn)明修訂版).北京航空航天大學(xué)出版社,1998 ? 馮克.《MCS-51單片機(jī)實(shí)用子程序及其應(yīng)用實(shí)例》.黑龍江科學(xué)技術(shù)出版社,1990 ? 楊欣榮等.《智能儀器原理、設(shè)計(jì)與發(fā)展》.中南大學(xué)出版社,2003 ? 孫傳友等.《感測(cè)技術(shù)基礎(chǔ)》. 電子工業(yè)出版社,2001
? 王福瑞等.《單片微機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全》.北京航空航天大學(xué)出版社,1999 ? 科技期刊:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》、《實(shí)用測(cè)試技術(shù)》、《自動(dòng)化儀表》、《傳感器世界》、《測(cè)控技術(shù)》、《電子技術(shù)應(yīng)用》等2001年以后各期。
完成期限: 2013年12月16日
指導(dǎo)教師簽名:
2013年 12月16日
第四篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)報(bào)告
目錄
第一章單片機(jī)簡(jiǎn)介....................................................2 第二章
實(shí)驗(yàn)要求..................................................3 第三章實(shí)驗(yàn)設(shè)備......................................................3 第四章實(shí)驗(yàn)安排......................................................4 第五章實(shí)驗(yàn)內(nèi)容......................................................4
LED燈實(shí)驗(yàn).......................................................4 步進(jìn)馬達(dá)試驗(yàn)....................................................5 獨(dú)立按鍵控制LED實(shí)驗(yàn)............................................7 矩陣鍵盤實(shí)驗(yàn)....................................................9 靜態(tài)數(shù)碼管實(shí)驗(yàn).................................................12 動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn).................................................14 NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器).............................16 RS232串口通信實(shí)驗(yàn)(接收與發(fā)送)..................................21 第六章收獲體會(huì).....................................................25
單片機(jī)實(shí)驗(yàn)報(bào)告
第一章單片機(jī)簡(jiǎn)介
單片機(jī)也被稱為微控制器(Microcontroller),是因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設(shè)計(jì)理念是通過將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對(duì)體積要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,這是別的器件需要費(fèi)很大力氣才能做到的,有些則是花大力氣也很難做到的。一個(gè)不是很復(fù)雜的功能要是用美國(guó)50年代開發(fā)的74系列,或者60年代的CD4000系列這些純硬件來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國(guó)70年代成功投放市場(chǎng)的系列單片機(jī),結(jié)果就會(huì)有天壤之別!只因?yàn)閱纹瑱C(jī)的通過你編寫的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!
單片機(jī)誕生于20世紀(jì)70年代末,經(jīng)歷了SCM、MCU、SoC三大階段。
1.SCM即單片微型計(jì)算機(jī)(Single Chip Microcomputer)階段,主要是尋求最佳的單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)?!皠?chuàng)新模式”獲得成功,奠定了SCM與通用計(jì)算機(jī)完全不同的發(fā)展道路。在開創(chuàng)嵌入式系統(tǒng)獨(dú)立發(fā)展道路上,Intel公司功不可沒。
2.MCU即微控制器(Micro Controller Unit)階段,主要的技術(shù)發(fā)展方向是:不斷擴(kuò)展?jié)M足嵌入式應(yīng)用時(shí),對(duì)象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對(duì)象的智能化控制能力。它所涉及的領(lǐng)域都與對(duì)象系統(tǒng)相關(guān),因此,發(fā)展MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來看,Intel逐漸淡出MCU的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips公司。
Philips公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢(shì),將MCS-51從單片微型計(jì)算機(jī)迅速發(fā)展到微控制器。因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時(shí),不要忘記Intel和Philips的歷史功績(jī)。
3.單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路,向MCU階段發(fā)展的重要因素,就是尋求
單片機(jī)實(shí)驗(yàn)報(bào)告
應(yīng)用系統(tǒng)在芯片上的最大化解決;因此,專用單片機(jī)的發(fā)展自然形成了SoC化趨勢(shì)。隨著微電子技術(shù)、IC設(shè)計(jì)、EDA工具的發(fā)展,基于SoC的單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)會(huì)有較大的發(fā)展。因此,對(duì)單片機(jī)的理解可以從單片微型計(jì)算機(jī)、單片微控制器延伸到單片應(yīng)用系統(tǒng)。
MCS51系列微控制器應(yīng)用廣泛,在家電、汽車甚至航空等領(lǐng)域都有其活躍的身影。然而,普通51系列微控制器內(nèi)部資源有限,像我用Proteus構(gòu)建微控制器虛擬實(shí)驗(yàn)室選用的AT89C52只有三個(gè)定時(shí)器、一個(gè)全雙工的串行口和中斷控制,并且其數(shù)據(jù)處理能力有限,不適合對(duì)大量數(shù)據(jù)進(jìn)行復(fù)雜分析和運(yùn)算。
因此,在不重新選型(可選用SoC)的前提下,為實(shí)現(xiàn)我們所需要的功能,就需要進(jìn)行外圍擴(kuò)展。針對(duì)微控制器的特點(diǎn),我們首先考慮串行擴(kuò)展,因?yàn)槲⒖刂破鞯腎/O引腳有限,并行擴(kuò)展一則外圍芯片面積比較大,二則對(duì)抑制EMI不利。
第二章 實(shí)驗(yàn)要求
1.學(xué)習(xí)Keil C51集成開發(fā)工具的操作及調(diào)試程序的方法,包括:仿真調(diào)試與脫機(jī)運(yùn)行間的切換方法
2.熟悉TD-51單片機(jī)系統(tǒng)板及實(shí)驗(yàn)系統(tǒng)的結(jié)構(gòu)及使用
3.進(jìn)行MCS51單片機(jī)指令系統(tǒng)軟件編程設(shè)計(jì)與硬件接口功能設(shè)
4. 學(xué)習(xí)并掌握Keil C51軟件聯(lián)機(jī)進(jìn)行單片機(jī)接口電路的設(shè)計(jì)與編程調(diào)試
5.完成指定MCS51單片機(jī)綜合設(shè)計(jì)題
第三章實(shí)驗(yàn)設(shè)備
1.HC600S-51單片機(jī)開發(fā)板 2.Keil C51 3.普中自動(dòng)下載軟件
第四章 實(shí)驗(yàn)安排
1.LED燈實(shí)驗(yàn)
單片機(jī)實(shí)驗(yàn)報(bào)告
2.步進(jìn)馬達(dá)試驗(yàn)
3.獨(dú)立按鍵控制LED實(shí)驗(yàn) 4.矩陣鍵盤實(shí)驗(yàn) 5.靜態(tài)數(shù)碼管實(shí)驗(yàn) 6.動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn)
7.NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器)8.RS232串口通信實(shí)驗(yàn)(接收與發(fā)送)
第五章 實(shí)驗(yàn)內(nèi)容
一、LED燈實(shí)驗(yàn)
1.基本要求
利用位移循環(huán)指令實(shí)現(xiàn)LED燈的閃爍 2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
4.電路原理圖
單片機(jī)實(shí)驗(yàn)報(bào)告
5.程序
#include
main(){unsigned int i;while(1)
{for(i=0,P0=1;i<4;i++){d(500);P0=(P0<<2);}}}
二、步進(jìn)馬達(dá)試驗(yàn)
1.基本要求
編程實(shí)現(xiàn)馬達(dá)的正反轉(zhuǎn),調(diào)速等功能 2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
單片機(jī)實(shí)驗(yàn)報(bào)告
圖一 圖二
4.電路原理圖
上圖圖二 5.程序
#include “reg52.h” #define speed 2 sbit PH1 = P1^0;
//定義管腳 sbit PH2 = P1^1;sbit I01 = P1^2;sbit I11 = P1^3;sbit I02 = P1^4;sbit I12 = P1^5;
void delay(int time);
void Go(){ //A
PH1 = 0;//PH1為0 則A線圈為反向電流
I01 = 0;I11 = 0;
//以最大電流輸出
PH2 = 0;//PH2為0 則B線圈為反向電流
I02 = 1;I12 = 1;
//輸出0 delay(speed);//圈為反向電流
I01 = 1;//輸出0 I11 = 1;
PH2 = 1;//PH2為1 則B線圈為正向電流
I02 = 0;//以最大電流輸出
I12 = 0;
delay(speed);//B PH1 = 1;
//PH1為1 則A線圈為
正向電流
I01 = 0;
//以最大電流輸出
I11 = 0;
PH2 = 1;//PH2為1 則B線圈為正
向電流
I02 = 1;//輸出0 I12 = 1;
delay(speed);
PH1 = 1;
//PH1為1 則A線圈為正向電流
I01 = 1;I11 = 1;
PH2 = 0;
//PH2為0 則B線圈為反向電流
I02 = 0;I12 = 0;delay(speed);}
void delay(int time){
int i,j;
for(j=0;j <= time;j++)
for(i =0;i <= 120;i++);}
void main(){
while(1)
{
Go();//步進(jìn)電機(jī)運(yùn)行
} }
單片機(jī)實(shí)驗(yàn)報(bào)告
三、獨(dú)立按鍵控制LED實(shí)驗(yàn)
1.基本要求
通過編程控制8個(gè)獨(dú)立按鍵分別控制8個(gè)LED燈的開關(guān) 2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
圖一 圖二
4.電路原理圖 上圖圖二 5.程序
#include
P1口
#define uchar unsigned char #define uint unsigned int
void Delayms(unsigned int c);
//延時(shí)10ms uchar Key_Scan();void main(void){
unsigned char ledValue, keyNum;
ledValue = 0x01;
while(1)
{
keyNum = Key_Scan();//掃描鍵
盤
switch(keyNum)
{
case(0xFE):
//返回按
鍵K1的數(shù)據(jù)
ledValue = 0x01;
break;
單片機(jī)實(shí)驗(yàn)報(bào)告
case(0xFD):
ledValue = 0x02;
break;case(0xFB):
ledValue = 0x04;
break;case(0xF7):
ledValue = 0x08;
break;case(0xEF):
ledValue = 0x10;
break;case(0xDF):
ledValue = 0x20;
break;case(0xBF):
ledValue = 0x40;
break;case(0x7F):
ledValue = 0x80;
//返回按鍵K2的數(shù)據(jù)
//返回按鍵K3的數(shù)據(jù)
//返回按鍵K4的數(shù)據(jù)
//返回按鍵K5的數(shù)據(jù)
//返回按鍵K6的數(shù)據(jù)
//返回按鍵K7的數(shù)據(jù)
//返回按鍵K8的數(shù)據(jù)
break;default:
break;
}
GPIO_LED = ledValue;//點(diǎn)亮LED燈
}
}
uchar Key_Scan(void)//鍵盤掃描函數(shù) { uchar i,n=0xff;
if(P1==0xff)goto Scan_r;//無鍵按
下,返回
goto Scan_r;Scan_1:
while(P1!=0xff);//等待鍵釋放
Delayms(10);Scan_r:
return n;}
void Delayms(uint x){
uint n;
for(;x>0;x--)
{
for(n=0;n<123;n++)
{;}
} }
四、矩陣鍵盤實(shí)驗(yàn)
1.基本要求
編程由16個(gè)矩陣按鍵控制數(shù)碼管顯示相應(yīng)的數(shù)值 2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。
3.接線圖
單片機(jī)實(shí)驗(yàn)報(bào)告
見下圖圖一
圖一 圖二
4.電路原理圖
見上圖圖二 5.程序
#include
uchar ScanKey(void);void Delayms(uint x);main(){ unsigned char ledValue;uchar i;ledValue = 0x01;loop: i = ScanKey();
switch(i)
{ case 0xee:
ledValue = ~0x3F;
break;
case 0xde:
ledValue = ~0x06;
break;
case 0xbe:
ledValue = ~0x5B;
break;
case 0x7e:
ledValue = ~0x4F;
break;
case 0xed:
ledValue = ~0x66;
break;
case 0xdd:
ledValue = ~0x6D;
break;
單片機(jī)實(shí)驗(yàn)報(bào)告
case 0xbd:
ledValue = ~0x7D;
break;
case 0x7d:
ledValue = ~0x07;
break;
case 0xeb:
ledValue = ~0x7F;
break;
case 0xdb:
ledValue = ~0x6F;
break;
case 0xbb:
ledValue = ~0x77;
break;
case 0x7b:
ledValue = ~0x7C;
break;
case 0xe7:
ledValue = ~0x39;
break;
case 0xd7:
ledValue = ~0x5E;
break;
case 0xb7:
ledValue = ~0x79;
break;
case 0x77:
ledValue = ~0x71;
break;
}
GPIO_LED = ledValue;i=0;goto loop;}
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
uchar ScanKey(void)//鍵盤掃描函數(shù) { uchar i,n=0xff;
P1=0xf0;
if(P1==0xf0)goto Scan_r;//無鍵按下,返回
for(i=0,P1=0xfe;i<4;i++)
{ if((P1&0xf0)!=0xf0)
{ Delayms(10);
if((P1&0xf0)!=0xf0)
{ n=
P1;
goto
Scan_1;}
}
P1=(P1<<1)+1;
//掃描下
一行
} goto Scan_r;Scan_1:
單片機(jī)實(shí)驗(yàn)報(bào)告
P1=0xf0;while((P1&0xf0)!=0xf0);//等待鍵
釋放
Delayms(10);
Scan_r:
P1=0xff;return n;} }
五、靜態(tài)數(shù)碼管實(shí)驗(yàn)
1.基本要求
編程使數(shù)碼管顯示字符0-F 2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線框圖(圖一)
圖一
單片機(jī)實(shí)驗(yàn)報(bào)告
圖二
4.電路原理圖
見上圖圖二 5.程序
#include
{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){
unsigned int LedNumVal;//定義變量 while(1)
{
// 將字模送到P0口顯示
LedNumVal++;
P0 = LED7Code[LedNumVal%16];
Delayms(1000);
//調(diào)用延時(shí)程序
}
}
單片機(jī)實(shí)驗(yàn)報(bào)告
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
六、動(dòng)態(tài)數(shù)碼管實(shí)驗(yàn)
1.基本要求
編程實(shí)現(xiàn)8個(gè)數(shù)碼管的動(dòng)態(tài)掃描。通過P22、P23、P24控制3-8譯碼器來對(duì)數(shù)碼管進(jìn)行位選,通過P0口經(jīng)過573的驅(qū)動(dòng)控制數(shù)碼管的段選,通過P13控制573的使能端,為低電平時(shí)573才會(huì)有輸出。2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖(圖一)
圖一 圖二
單片機(jī)實(shí)驗(yàn)報(bào)告
圖三
4.電路原理圖
見上圖圖
二、圖三 5.程序
#define uint unsigned int void Dsplay();void Delayms(uint x);uchar mDS[6];uchar code cDsCode[]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){ uchar i;
for(i=0;i<6;i++)mDS[i]=i+1;
loop:
Dsplay();
goto loop;}
void Dsplay()//動(dòng)態(tài)掃描顯示
{uchar i;
for(i=0,P2=0x01;i<6;i++)
{ P1=cDsCode[mDS[i]];//輸出段
Delayms(1000);
P2=P2<<1;
//選通下一位
}
P2=0x00;
//關(guān)閉位選通 }
void Delayms(uint x){uint n;for(;x > 0;x--)
{ for(n=0;n<123;n++)
{;}
} }
七、NE555脈沖發(fā)生器實(shí)驗(yàn)(定時(shí)/計(jì)數(shù)器)
1.基本要求
2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
4.電路原理圖
5.程序
#include
CYMOMETER
”};uchar code EN_CHAR2[16]={“FREQ:
HZ”};
單片機(jī)實(shí)驗(yàn)報(bào)告
void TIMER_Configuration();//初始化定時(shí)器 ulong Freq;
//用來存放要顯示的頻率值 ulong TimeCount;//用于計(jì)算1S鐘的
void main(){ uchar i, freqValue[6];
LcdInit();TIMER_Configuration();for(i=0;i<16;i++){
LcdWriteData(EN_CHAR1[i]);}
LcdWriteCom(0xc0);//第二行顯示
for(i=0;i<16;i++){
LcdWriteData(EN_CHAR2[i]);}
while(1){
if(TR0==0)
//當(dāng)計(jì)數(shù)器停下的時(shí)候,表明計(jì)數(shù)完畢
{
Freq = Freq + TL1;
//讀取TL的值
Freq = Freq +(TH1 * 256);//讀取TH的值
LcdWriteCom(0xc8);
//--求頻率的個(gè)十百千萬十萬位--//
freqValue[0]='0'+Freq%1000000/100000;
freqValue[1]='0'+Freq%100000/10000;
freqValue[2]='0'+Freq%10000/1000;
freqValue[3]='0'+Freq%1000/100;
freqValue[4]='0'+Freq%100/10;
freqValue[5]='0'+Freq%10;
for(i=0;i<5;i++)//從最高位開始查找不為0的數(shù)開始顯示(最低位為0顯示0)
{
if(freqValue[i]==0x30)
{
freqValue[i]=0x20;//若為0則賦值空格鍵
}
else
單片機(jī)實(shí)驗(yàn)報(bào)告
{
break;
}
}
for(i=0;i<6;i++)
{
LcdWriteData(freqValue[i]);
}
Freq=0;//將計(jì)算的頻率清零
TH1=0;//將計(jì)數(shù)器的值清零
TL1=0;
TR0=1;//開啟定時(shí)器
TR1=1;//開啟計(jì)數(shù)器
} } }
void TIMER_Configuration(){ TMOD=0x51;TH0=0x3C;TL0=0xB0;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;} void Timer0()interrupt 1 { TimeCount++;if(TimeCount==20)//計(jì)時(shí)到1S {
TR0=0;
TR1=0;
TimeCount=0;
}
//--12MHZ設(shè)置定時(shí)50ms的初值--// TH0=0x3C;TL0=0xB0;} void Timer1()interrupt 3 {
單片機(jī)實(shí)驗(yàn)報(bào)告
//--進(jìn)入一次中斷,表明計(jì)數(shù)到了65536--// Freq=Freq+65536;
}
#include“l(fā)cd.h”
void Lcd1602_Delay1ms(uint c)
//誤差 0us {
uchar a,b;for(;c>0;c--){
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
} #ifndef LCD1602_4PINS //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí) void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;
//使能
LCD1602_RS = 0;
//選擇發(fā)送命令
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = com;
//放入命令
Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1;
//寫入時(shí)序
Lcd1602_Delay1ms(5);
//保持時(shí)間
LCD1602_E = 0;} #else
void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;//使能清零
LCD1602_RS = 0;//選擇寫入命令
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = com;// Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);
單片機(jī)實(shí)驗(yàn)報(bào)告
LCD1602_DATAPINS = com << 4;//發(fā)送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS
void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//選擇輸入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;//寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//寫入時(shí)序
Lcd1602_Delay1ms(5);
//保持時(shí)間
LCD1602_E = 0;} #else void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;
//選擇寫入數(shù)據(jù)
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif #ifndef LCD1602_4PINS void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x38);//開顯示
單片機(jī)實(shí)驗(yàn)報(bào)告
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #else void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28);//在四位線下的初始化
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #endif
八、RS232串口通信實(shí)驗(yàn)(接收與發(fā)送)
1.基本要求
a.通過實(shí)驗(yàn)了解串口的基本原理及使用,理解并掌握對(duì)串口進(jìn)行初始化; b.使用串口調(diào)試助手(Baud 9600、數(shù)據(jù)位
8、停止位
1、效驗(yàn)位無)做為上位機(jī)來做收發(fā)試驗(yàn);
c.利用串口調(diào)試助手中字符串輸入進(jìn)行數(shù)據(jù)發(fā)送,接受窗口顯示收到的數(shù)據(jù)。2.實(shí)驗(yàn)內(nèi)容
在Keil C51中進(jìn)行程序的編寫設(shè)計(jì)并生成.HEX文件,按照下圖連接電路后將HC600S-51單片機(jī)開發(fā)板接通電源,按下開關(guān),錄入。打開普中錄入生成.HEX文件,加載程序,觀察實(shí)驗(yàn)結(jié)果,如果不正確對(duì)程序進(jìn)行改進(jìn)后重復(fù)此操作。實(shí)驗(yàn)結(jié)束后先斷電源再拆線,將元器件歸位后離開。3.接線圖
單片機(jī)實(shí)驗(yàn)報(bào)告
4.電路原理圖
5.程序
#include
LcdWriteData(ChCode[i]);} UsartConfiguration();while(1){
if(RI == 1)
//查看是否接收到數(shù)據(jù)
{
receiveData = SBUF;//讀取數(shù)據(jù)
單片機(jī)實(shí)驗(yàn)報(bào)告
RI = 0;
//清除標(biāo)志位
LcdWriteCom(0xC0);
LcdWriteData('0' +(receiveData / 100));
// 百位
LcdWriteData('0' +(receiveData % 100 / 10));// 十位
LcdWriteData('0' +(receiveData % 10));
// 個(gè)位
} } } void UsartConfiguration(){ SCON=0X50;
//設(shè)置為工作方式1 TMOD=0X20;//設(shè)置計(jì)數(shù)器工作方式2 PCON=0X80;
//波特率加倍
TH1=0XF3;
//計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的TL1=0XF3;TR1=1;
//打開計(jì)數(shù)器 }
#include“l(fā)cd.h”
void Lcd1602_Delay1ms(uint c)
//誤差 0us {
uchar a,b;for(;c>0;c--){
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
} #ifndef LCD1602_4PINS //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí) void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;
//使能
LCD1602_RS = 0;
//選擇發(fā)送命令
LCD1602_RW = 0;
//選擇寫入
LCD1602_DATAPINS = com;
//放入命令
Lcd1602_Delay1ms(1);//等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1;
//寫入時(shí)序
單片機(jī)實(shí)驗(yàn)報(bào)告
Lcd1602_Delay1ms(5);
//保持時(shí)間
LCD1602_E = 0;} #else
void LcdWriteCom(uchar com)
//寫入命令 { LCD1602_E = 0;//使能清零
LCD1602_RS = 0;//選擇寫入命令
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = com;Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com << 4;//發(fā)送低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//選擇輸入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;//寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時(shí)序
Lcd1602_Delay1ms(5);
//保持時(shí)間
LCD1602_E = 0;} #else void LcdWriteData(uchar dat)
//寫入數(shù)據(jù) { LCD1602_E = 0;
//使能清零
LCD1602_RS = 1;
//選擇寫入數(shù)據(jù)
LCD1602_RW = 0;//選擇寫入
LCD1602_DATAPINS = dat;
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時(shí)序
Lcd1602_Delay1ms(5);
單片機(jī)實(shí)驗(yàn)報(bào)告
LCD1602_E = 0;LCD1602_DATAPINS = dat << 4;//寫入低四位
Lcd1602_Delay1ms(1);LCD1602_E = 1;
//寫入時(shí)序
Lcd1602_Delay1ms(5);LCD1602_E = 0;} #endif
#ifndef LCD1602_4PINS void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x38);//開顯示
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #else void LcdInit()
//LCD初始化子程序 { LcdWriteCom(0x32);//將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28);//在四位線下的初始化
LcdWriteCom(0x0c);//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);//寫一個(gè)指針加1 LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn) } #endif
單片機(jī)實(shí)驗(yàn)報(bào)告
第六章 收獲體會(huì)
本次微控制器綜合設(shè)計(jì)基本上使用了所選微控制器的所有資源,進(jìn)一步熟悉和加深了對(duì)中斷、定時(shí)器和串行通信的理解和使用。我覺得軟件實(shí)驗(yàn)就是讓我們初學(xué)者熟悉keil的使用,然后復(fù)習(xí)下匯編的思想和掌握程序的流程,所以軟件實(shí)驗(yàn)可以很快的完成,并且慢慢熟悉調(diào)試的強(qiáng)大功能。硬件設(shè)計(jì)中,仿真讓我很有感觸,感覺蠻好玩的,可以摒棄麻煩的實(shí)驗(yàn)硬件自己在寢室玩而且不受硬件狀態(tài)的限制,即便出錯(cuò)了也不會(huì)損壞。當(dāng)然更重要的是這種好習(xí)慣,仿真完后再去在實(shí)驗(yàn)板上驗(yàn)證會(huì)比直接要來的確切而且便捷,至少不要老是去插拔線。在做實(shí)驗(yàn)中在同學(xué)指導(dǎo)下我試用C語言來編寫程序,確實(shí)發(fā)現(xiàn)比匯編語言容易編寫也容易理解,以前的實(shí)驗(yàn)還是有參考資料的習(xí)慣,現(xiàn)在什么都開始自己寫感覺還是很有成就感的,當(dāng)然這是基于程序本身就那么幾行很容易編寫,也不是說參考不好??偠灾?,這學(xué)期的單片機(jī)實(shí)驗(yàn)還是收獲頗豐的。相信在以后的實(shí)驗(yàn)學(xué)習(xí)實(shí)踐工作中都會(huì)有個(gè)潛移默化的作用的。
第五篇:?jiǎn)纹瑱C(jī)實(shí)驗(yàn)報(bào)告
單片機(jī)實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)?zāi)康?/p>
1.熟練使用Keil、Protues兩款軟件 2.通過上機(jī)操作,增強(qiáng)個(gè)人動(dòng)手實(shí)踐能力 3.加深對(duì)理論知識(shí)的理解
4.培養(yǎng)運(yùn)用匯編語言進(jìn)行初步編寫程序的能力
二、實(shí)驗(yàn)內(nèi)容
1.將片外RAM3050-306FH中數(shù)據(jù)轉(zhuǎn)移至片內(nèi)70-8FH中。
要求:可以從Keil或Protues上看到RAM的數(shù)據(jù)轉(zhuǎn)移結(jié)果。2.設(shè)計(jì)一個(gè)外部中斷觸發(fā)流水燈系統(tǒng):當(dāng)外部中斷來臨時(shí),啟動(dòng)流水燈,即令P2口的LED輪流循環(huán)點(diǎn)亮。
要求:開發(fā)板或Prrotues演示
3.將片內(nèi)存儲(chǔ)器80H中存放的BCD碼轉(zhuǎn)換為ASCII碼,要求使用表格查詢技術(shù)。
要求:在Keil或Protues上看到數(shù)據(jù)轉(zhuǎn)換結(jié)果。
4.各使用中斷方式和查詢方式設(shè)計(jì)一個(gè)方波發(fā)生器,頻率為50HZ。
要求:Protues使軟件間示波器顯示方波。
三、實(shí)驗(yàn)程序
1.將片外RAM3050-306FH中數(shù)據(jù)轉(zhuǎn)移至片內(nèi)70-8FH中
ORG 0000H AJMP MAIN 上電,轉(zhuǎn)向主程序
ORG 0030H 主程序入口
MAIN: MOV DPTR,#3050H 數(shù)據(jù)指針指向地址3050H MOV A,#04H 將立即數(shù)04H送A寄存器
MOV R0,#20H NEXT: MOVX @DPTR,A INC DPTR 數(shù)據(jù)指針DPTR自加一
DJNZ R0,NEXT 判斷是否跳轉(zhuǎn)到NEXT或繼續(xù)向下執(zhí)行
MOV DPTR,#3050H MOV R0,#70H MOV R2,#20H NEXT1: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 DJNZ R2,NEXT1
SJMP $ 等待
END 2.設(shè)計(jì)一個(gè)外部中斷觸發(fā)流水燈系統(tǒng):當(dāng)外部中斷來臨時(shí),啟動(dòng)流水燈,即令P2口的LED輪流循環(huán)點(diǎn)亮 ORG 0000H SJMP MAIN 上電,轉(zhuǎn)向主程序
ORG 0003H 外部中斷0向量入口
AJMP INSER ORG 0030H 主程序入口
MAIN: SETB EX0 SETB IT0
SETB EA CPUHERE: SJMP HERE ORG 0200H INSER: MOV R2,#08H MOV A,#01H NEXT: MOV P2,A LCALL DELAY RL A DJNZ R2,NEXT NEXT或繼續(xù)向下執(zhí)行
RETI DELAY: MOV R3,#0FFH DEL2: MOV R4,#0FFH DEL1: NOP
允許外部中斷0中斷 選擇邊沿觸發(fā)方式 開中斷 等待中斷 設(shè)置循環(huán)次數(shù) 賦初值,設(shè)置高電平亮 將初值送往P2口 延時(shí) 左移一位
判斷循環(huán)次數(shù),是否跳轉(zhuǎn)到中斷返回 延時(shí)程序 DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 3.將片內(nèi)存儲(chǔ)器80H中存放的BCD碼轉(zhuǎn)換為ASCII碼,要求使用表格查詢技術(shù) ORG 0000H LJMP MAIN ORG 0030H主程序起始地址 MAIN: MOV 80H,#05H 將立即數(shù)50H轉(zhuǎn)送內(nèi)存單元80H MOV A,80H 將內(nèi)存單元80H中的內(nèi)容送寄存器A MOV DPTR,#TAB MOVC A,@A+DPTR A寄存器內(nèi)容加指針偏移量后送A寄存器 MOV 80H,A RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 4.1中斷方式產(chǎn)生50HZ方波
ORG 0000H
AJMP MAIN
ORG 0030H 主程序入口 MAIN: MOV TMOD,#10H 設(shè)置定時(shí)器工作模式為模式1 MOV TH1,#0D8H 裝入T1計(jì)數(shù)初值
MOV TL1,#0F0H
SETB ET1 開中斷
SETB EA CPU開中斷
SETB TR1 啟動(dòng)定時(shí)器T1 HERE: SJMP HERE 等待中斷 ORG 001BH T1中斷向量地址
CLR TF1 將TF1清零
CPL P2.0 P2.0取反輸出
MOV TH1,#0D8H 重裝初值
MOV TH0,#0F0H
RETI;中斷返回
END 4.2 查詢方式產(chǎn)生50HZ方波
ORG 0000H
AJMP MAIN
ORG 0030H 主程序入口
MAIN: MOV TMOD,#10H 設(shè)置定時(shí)器的工作模式為模式1 SETB TR1 啟動(dòng)定時(shí)器T1 LOOP: MOV TH1,#0D8H 裝入T1計(jì)數(shù)初值
MOV TH0,#0F0H JNB TF1,$ T1沒有溢出則等待
CLR TF1
產(chǎn)生溢出,清標(biāo)志位
CPL P2.0 P2.0取反輸出
SJMP LOOP 循環(huán)
END
四、實(shí)驗(yàn)結(jié)果截圖
1.2
3.4.1
4.2