單片機(jī)實(shí)習(xí)報(bào)告
發(fā)布時(shí)間:2020-11-06 來源: 調(diào)研報(bào)告 點(diǎn)擊:
實(shí)
習(xí)
報(bào)
告
實(shí)習(xí)名稱 :
嵌入式系統(tǒng) 實(shí)習(xí)
系部名稱 :
信科院
專業(yè)班級(jí):
:
計(jì)本 08 -5
學(xué)生姓名:
。
陳鵬任
學(xué)
號(hào):
。
3080417907
指導(dǎo)教師:
。
陳小琴 金紅 楊光杰
日 日
期:
2010.12.18
一. 引言
目前,嵌入式技術(shù)已成為通信和消費(fèi)類產(chǎn)品的共同發(fā)展方向。嵌入式系統(tǒng)幾乎包括了生活中的所有電器設(shè)備,如掌上PDA、移動(dòng)計(jì)算設(shè)備、電視機(jī)頂盒、手機(jī)上網(wǎng)、數(shù)字電視、多媒體、汽車、微波爐、數(shù)字相機(jī)、家庭自動(dòng)化系統(tǒng)、電梯、空調(diào)、安全系統(tǒng)、自動(dòng)售貨機(jī)、蜂窩式電話、消費(fèi)電子設(shè)備、工業(yè)自動(dòng)化儀表與醫(yī)療儀器等。
嵌入式系統(tǒng)是先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)和各個(gè)行業(yè)的具體應(yīng)用相結(jié)合的產(chǎn)物,這就決定了它必然是一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。嵌入式系統(tǒng)一般指非PC系統(tǒng)。它是以應(yīng)用為中心、軟硬件可裁減的、能適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等綜合性要求的專用計(jì)算機(jī)系統(tǒng)。簡(jiǎn)單地說,嵌入式系統(tǒng)是集系統(tǒng)的應(yīng)用軟件與硬件于一體,類似于PC中BIOS的工作方式,具有軟件代碼小、高度自動(dòng)化、響應(yīng)速度快等特點(diǎn),因此特別適合于要求實(shí)時(shí)和多任務(wù)的系統(tǒng)。嵌入式系統(tǒng)主要由嵌入式處理器、相關(guān)支撐硬件、嵌入式操作系統(tǒng)及應(yīng)用軟件系統(tǒng)等組成。
通過這次實(shí)訓(xùn),老師讓我們了解最基本的嵌入式系統(tǒng)設(shè)計(jì),開發(fā)的流程,結(jié)合掌握所學(xué)的知識(shí),做出一個(gè)單片機(jī)與上位機(jī)通信的簡(jiǎn)單嵌入式系統(tǒng)。
二.課題設(shè)計(jì) 1 .基本原理
MCS-51 單片機(jī)串行口發(fā)送/接收數(shù)據(jù)時(shí),通過 2 個(gè)串行緩沖器 SBUF 進(jìn)行,這 2 個(gè)緩沖器采用一個(gè)地址(98H),但在物理上是獨(dú)立的。其中接收緩沖器只能讀出不能寫入,發(fā)送緩沖器只能寫入不能讀出。
、 發(fā)送過程,由指令 MOV SBUF,A 啟動(dòng),此時(shí)待傳送的數(shù)據(jù)由 A 累加器傳入串行發(fā)送緩沖器 SBUF,由硬件自動(dòng)在發(fā)送字符的始、末加上起始位(低電平)、停止位(高電子)及其它控制位(如奇偶位等),而后在移位脈沖的控制下,低位在前,高位在后,逐位從 TXD 端(方式 0 除外)發(fā)出。
② 接收過程,串行口的接收與否受制于允許接收位 REN 的狀態(tài),當(dāng) REN 被軟件置“1”后,允許接收器接收。串口的接收器以所選波特率的 16 倍速對(duì) RXD線進(jìn)行監(jiān)視。當(dāng)“1”到“0”跳變時(shí),檢測(cè)器連續(xù)采樣到 RXD 線上低電平時(shí)。便認(rèn)定 RXD 端出現(xiàn)起始位,繼而接收控制器開始工作。在每位傳送時(shí)間的第 7、8、9 三個(gè)脈沖狀態(tài)采樣 RXD 線,決定所接收的值為“0”或“1”。當(dāng)接收完停止位后,控制電路使中斷標(biāo)志 R1 置為“1”,此時(shí)程序可通過 MOV
A,SBUF指令將接收到的字符從 SBUF 送入累加器 A,從而完成一幀數(shù)據(jù)的接收工作。
2. 原理框架
3. 硬件電路原理 圖,對(duì)各模塊進(jìn)行分別介紹
單
片
機(jī) LCD 顯示電路 復(fù)位電路 時(shí)鐘電路 電源電路 串行口通信電路
3.1 液晶顯示模塊
1602LCD 采用標(biāo)準(zhǔn)的 14 腳(無背光)或 16 腳(帶背光)接口,各引腳接口如下所示
接口信號(hào)說明 編號(hào) 符號(hào) 引腳說明 編號(hào) 符號(hào) 引腳說明 1 VSS 電源地 9 D2 Data I/O 2 VDD 電源正極 10 D3 Data I/O 3 VL 液晶顯示偏壓信號(hào) 11 D4 Data I/O 4 RS 數(shù)據(jù)/命令選擇端(H/L)
12 D5 Data I/O 5 R/W 讀/寫選擇端(H/L)
13 D6 Data I/O 6 E 使能信號(hào) 14 D7 Data I/O 7 D0 Data I/O 15 BLA 背光源正極 8 D1 Data I/O 16 BLK 背光源負(fù)極 用 LCD1602 液晶顯示模塊顯示字符或字符串之前必須對(duì)其進(jìn)行初始化,LCD1602 液晶顯示模塊的初始化流程如下:
? 5.0 初始化過程(復(fù)位過程)
? 5.1 延時(shí) 15ms ? 5.2 寫指令 38H(不檢測(cè)忙信號(hào))
? 5.3 延時(shí) 5ms ? 5.4 寫指令 38H(不檢測(cè)忙信號(hào))
? 5.5 延時(shí) 5ms ? 5.6 寫指令 38H(不檢測(cè)忙信號(hào))
? 5.7(以后每次寫指令、讀/寫數(shù)據(jù)之前均需檢測(cè)忙信號(hào))
? 5.8 寫指令 38H:顯示模式設(shè)置 ? 5.9 寫指令 38H:顯示關(guān)閉 ? 5.10 寫指令 01H:顯示清屏 ? 5.11 寫指令 06H:顯示光標(biāo)移動(dòng)設(shè)置 ? 5.12 寫指令 0CH:顯示開關(guān)及光標(biāo)位置
表 8 LCD1602 液晶模塊內(nèi)部的控制器控制指令 指令 指令碼
說明
RS
R/W D0
D1
D2
D3
D4
D5
D6
D7
清屏
0 0 0 0 0 0 0 0 0 1 清顯示,光標(biāo)回位
光標(biāo)返回
0 0 0 0 0 0 0 0 1 * ADD=0 時(shí),回原位
輸入方式
0 0 0 0 0 0 0 1 I/D S 決定是否移動(dòng)以及移動(dòng)方向
顯示開關(guān)
0 0 0 0 0 0 1 D C B D-顯示,C-光標(biāo),B-光標(biāo)閃爍
移位
0 0 0 0 0 1 S/C R/L * * 移動(dòng)光標(biāo)及整體顯示
功能設(shè)置
0 0 0 0 1 DL N F * * DL-數(shù)據(jù)位數(shù),L-行數(shù),F-字體
CGRAM 地址設(shè)置
0 0 0 1 A5 A4 A3 A2 A1 A0 設(shè)置 CGRAM 的地址 DDRAM 地址設(shè)置
0 0 1 A6 A5 A4 A3 A2 A1 A0 設(shè)置 DDRAM 的地址 忙標(biāo)志/讀地址計(jì)數(shù)器
0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 讀出忙標(biāo)志位(BF)及 AC 值 CGRAM/DDRAM 數(shù)據(jù)寫
1 0 寫數(shù)據(jù) 將內(nèi)容寫入 RAM 中 CGRAM/DDRAM 數(shù)據(jù)讀
1 1 讀數(shù)據(jù) 將內(nèi)容從 RAM 中讀出
LCD1602 液晶顯示模塊可以和單片機(jī) AT89C51 直接接口,電路如下圖所示。
RP110KGND1VDD2VO3RS4RW5E6DB07DB18DB29DB310DB411DB512DB613DB714BL115BL216U2LCD1620X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10GND20VCC40EA/VP31nPSENRXDTXDALEU1AT89S51P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7+5VP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7RWRSE+5VnWRVCCnWRnRD
AT89S52 和 LCD1602 液晶模塊連接電路 液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表 9 是 LCD1602 的內(nèi)部顯示地址。即第 1 行的顯示地址應(yīng)為 80H+顯示位置,第 2 行的顯示地址應(yīng)為 40H+顯示位置。
表 9
LCD1602 的內(nèi)部顯示地址
3.2 串口通信模塊 RS-232C 標(biāo)準(zhǔn)(協(xié)議)的全稱是 EIA-RS-232C 標(biāo)準(zhǔn),其中 EIA(Electronic Industry Association)代表美國電子工業(yè)協(xié)會(huì),RS(recommended standard)代表推薦標(biāo)準(zhǔn),232 是標(biāo)識(shí)號(hào),C 代表 RS232 的最新一次修改,在這之前,有 RS232B、RS232A,它規(guī)定連接電纜和機(jī)械、電氣特性、信號(hào)功能及傳送過程。RS-232C 適合于數(shù)據(jù)傳輸速率在 0~20000b/s 范圍內(nèi)的通信。
PC 機(jī)常用 DB-9 連接器作為提供多功能 I/O 卡或主板上 COM1 和 COM2 兩個(gè)串行接口的連接器,它只提供異步通信的 9 個(gè)信號(hào),9 針串口功能見表 10,并且對(duì)電纜長(zhǎng)度也有要求:
RS-232C 標(biāo)準(zhǔn)規(guī)定,若不使用 MODEM,在碼元畸變小于 4%的情況下,DTE 和 DCE 之間最大傳輸距離為 15m(50 英尺)?梢娺@個(gè)最大的距離是在碼元畸變小于 4%的前提下給出的,為了保證碼元畸變小于 4%的要求,接口標(biāo)準(zhǔn)在電氣特性中規(guī)定,驅(qū)動(dòng)器的負(fù)載電容應(yīng)小于 2500pF。
表 10
9 針串口功能一覽表 針腳 功能 針腳 功能 1 載波檢測(cè) 6 數(shù)據(jù)準(zhǔn)備完成 2 接收數(shù)據(jù) 7 發(fā)送請(qǐng)求 3 發(fā)送數(shù)據(jù) 8 發(fā)送清除 4 數(shù)據(jù)終端準(zhǔn)備完成 9 振鈴指示 5 信號(hào)地線
本方案對(duì) RS-232-C 接口采用 3 線制(RXD、TXD、GND)軟握手的零 MODEM 方式進(jìn)行單片機(jī)和 PC 之間的數(shù)據(jù)通信,即 PC 機(jī)和單片機(jī)的發(fā)送數(shù)據(jù)線(TXD)與接收數(shù)據(jù)(RXD)交叉連接,二者的地線(GND)直接相連,其它信號(hào)線如握手信號(hào)線均不用,而采用軟件握手。但由于 RS-232-C 的邏輯電對(duì)地是對(duì)稱的,與 TTL、MOS 邏輯電平完全不同,邏輯 0 電平規(guī)定為+5~ +15V 之間,邏輯 1 是電平為-5~ -15V 之間,因此利用 MAX232芯片進(jìn)行電平轉(zhuǎn)換,電路連接如圖 11。
C1-3V+2C2+4C2-5V-6R209D2110VCC16GND15D1014R1113R1012D1111R218D207C1+1IC2MAX232C13C12C11C10VCC162738495J232DB9 圖 RS-232-C 通信連接電路
3.3 電源模塊 +220PFC5C60.1uFS12Vin+5VGNDU37805R81.5KD0LED123POWCON3SPD2
充電電路
4. 軟件設(shè)計(jì) ( (1 )流程圖
。 (2 )代碼附錄 //示 接收電腦送過來的數(shù)據(jù),并且顯示 16 進(jìn)制數(shù),并將數(shù)據(jù)回傳到電腦 腦 #include <reg52.h> //LCD 的口線 sbit E=P2^5; sbit RW=P3^6; sbit RS=P2^6; unsigned char recdata[28];//定義 RS232 數(shù)組 unsigned char recv_p; unsigned char bdata myflag; sbit recokbit = myflag^0; void Delay(unsigned int t); void SendCommandByte(unsigned char ch);//傳送命令 void SendDataByte(unsigned char ch);//傳送數(shù)據(jù) void InitLcd(void);//LCD 顯示 void disprec(void); //顯示 void rs232(void); void main(void)//主函數(shù) {
InitLcd();//初始化 LCD
myflag=0x00;//標(biāo)志痊
SendCommandByte(0x80);//調(diào)用發(fā)送命令
Delay(2);
SendDataByte("c"); //初始化顯示 CPR:
SendDataByte("p");
SendDataByte("r");
SendDataByte(":");
TMOD=0x20;//定時(shí)器的設(shè)置
TH1=0xf3;//計(jì)時(shí)器
TL1=0xf3;
SCON=0x50;//設(shè)定串行工作方式
TR1=1;
REN=1;//允許中斷
IE=0x90;//中斷允許標(biāo)志
while(1)
{
if(recokbit==1)//接收數(shù)據(jù)
{
recokbit=0;
disprec();
}
} }
//以下為串口中斷程序 void rs232(void) interrupt 4//中斷串行口
{
if(RI==1)//控制電路使中斷標(biāo)志 R1 置為“1 此時(shí)程序可通過 MOV
A,SBUF 指令將接收到的字符從 SBUF 送入累加器 A,從而完成一幀數(shù)據(jù)的接收工作
{
RI=0;
recdata[recv_p]=SBUF;
SBUF=recdata[recv_p];
recv_p++; if(recv_p>27) recv_p=0;//
recokbit=1;//接受完成
}
} void Delay(unsigned int t)
// delay 40us {
for(;t!=0;t--); } //============================================= void SendCommandByte(unsigned char ch) {
RS=0;
RW=0;
P0=ch;
E=1;//使能端口為 1,接收命令
Delay(1);
E=0;
Delay(100);
//delay 40us }
//=============================================
//------------------------------------------------------- void SendDataByte(unsigned char ch) {
TI=0;//開始發(fā)送數(shù)據(jù)
SBUF=ch;
while(!TI);
RS=1;//輸入數(shù)據(jù)
RW=0;//為 0 時(shí)寫,1 時(shí)讀
P0=ch;
E=1;
Delay(1);
E=0;//使能信號(hào)為 0 時(shí),不能輸入
Delay(100); //delay 40us } //------------------------------------------------- void InitLcd(void) { unsigned char i; for(i=0;i<28;i++) recdata[i]=0x30;//初始化數(shù)組 0 recv_p=0;
SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x38); //設(shè)置工作方式
SendCommandByte(0x0c); //顯示狀態(tài)設(shè)置
SendCommandByte(0x01); //清屏
SendCommandByte(0x06); //輸入方式設(shè)置 } void disprec(void) {
unsigned char i;
for(i=0;i<12;i++)
{
SendCommandByte(0x84+i);
SendDataByte(recdata[i]);
}
for(i=0;i<16;i++)
{
SendCommandByte(0xc0+i);
SendDataByte(recdata[i+12]);
}
}
5. 調(diào)試過程 ( (1 )測(cè)試數(shù)據(jù)
采用 RS232 把 PC 機(jī)與單片機(jī)連接起來,運(yùn)行上位機(jī)程序如下圖所示:
向單片機(jī)發(fā)送信息時(shí),PC 機(jī)顯示信息重復(fù)了。
( (2)
)
數(shù)據(jù)分析
PC 機(jī)發(fā)送的數(shù)據(jù)給單片機(jī)能正常顯示,但單片機(jī)返回給 PC 機(jī)的信息重復(fù)了,經(jīng)過反復(fù)檢查,原來是 recdata[recv_p]=SBUF; SBUF=recdata[recv_p];這語句重寫了,刪了,就恢復(fù)正常通信顯示了。
三. 結(jié)論 經(jīng)過這次嵌入式系統(tǒng)實(shí)訓(xùn),熟悉了單片機(jī)設(shè)計(jì),開發(fā)的流程,在楊琴老師,金紅老師,楊光杰老師的辛勤指導(dǎo)下,在和組員龐卡努力下,從最初的元件領(lǐng)取,電路焊接,利用 PROTEL99 畫電路原理圖,到代碼的編寫,我負(fù)責(zé)下位機(jī)程序,龐卡負(fù)責(zé)上位機(jī)的程序,經(jīng)過我們的共同努力,加上各位老師的指導(dǎo),終于在老師規(guī)定的時(shí)間內(nèi)完成了單片機(jī)與上位機(jī)的通信。
這次嵌入式系統(tǒng)實(shí)訓(xùn),學(xué)習(xí)了嵌入式系統(tǒng)簡(jiǎn)單開發(fā)流程,加深所學(xué)知識(shí)的理解。
相關(guān)熱詞搜索:單片機(jī) 實(shí)習(xí)報(bào)告
熱點(diǎn)文章閱讀