① 單片機實驗內容及結果分析
熟悉單片機的原理、結構;學好數電、模電,為設計電路打好基礎;熟練使用C語言,多學習他人的程序;對操作系統原理有一定的了解,Protel有一定的基礎;培養實際動手調試電路的能力。一般可以通過專業的書籍和課程進行持之以恆的學習,注意理論與實踐並重,遇到問題耐心檢查並適當投資購買實驗器材。
② 單片機中斷實驗交通燈的實驗原理
根據圖3.2電路,用單片機的IO口控制4組紅綠黃共12個發光二極體,使發光二極體按照一定規則與次序發光與閃亮以實現模擬交通燈的功能。假設初始狀態為:(南北通行狀態)南北綠燈、東西紅燈(25s);後轉為過度狀態:南北黃燈、東西紅燈(5s);再轉為東西通行狀態:東西綠燈、南北紅燈25(s)。再轉為過渡狀態:東西黃燈、南北紅燈(5s),然後循環往復。
要求採用定時器實現所需要的定時時間。
2、鍵控交通燈。
按一下K1鍵
,保持南北通行狀態;按一下K2鍵
,保持東西通行狀態;按一下K3鍵
,保持正常交通燈。
要求在中斷中進行按鍵處理。
3、具有閃爍的交通燈。
在2的基礎上增加,綠燈最後5s閃爍,即亮0.5S滅0.5S閃爍。
四、實驗原理圖
圖3.2交通燈實驗電路原理圖
圖3.2共有4個按鍵K1、K2、K3、K4,分別連接到單片機P2.0、P2.1、P2.2、P2.3引腳,按鍵後對應引腳為低電平,通過4個二極體D17、D18、D19、D20連接到P3.2(外部中斷0),這是二極體構成的相與電路,即任意按一個鍵能在P3.2上產生一個低電平或下降,作為中斷觸發信號。
五、軟體設計思想
1、定時思想。
採用定時器T0或T1的方式1定時500ms,每500ms中斷進行計數,計數10次即0.5s,計數20次即1s,對秒計數實現所需要的定時時間。
2、亮燈控制思想。
單片機控制燈引腳與燈對應如下,0點亮。
一共有四種狀態S0、S1、S2、S3,
a、南北通行S0狀態:
南北綠燈、東西紅燈,P0=11110111=0xf7,P1=10011110=0x9e;
南北通行S0
b、過渡狀態S1:
南北黃燈、東西紅燈,P0=11111011=0xfb,P1=10101110=0xae;
過渡狀態S1
c、東西通行狀態S2:
東西綠燈、南北紅燈,P0=11111100=0xfc,P1=11110011=0xf3;
東西通行狀態S2
d、過渡狀態S3:
東西黃燈、南北紅燈,P0=11111101=0xfd,P1=01110101=0x75;
過渡狀態S3
設置一個秒計數單元SEC每秒+1,設置兩個控制值變數a,b。
③ 單片機實驗 編寫程序
單片機實驗,其實這就是典型的流水燈電路,P1口接8個流水燈,每個燈點亮1秒。用定時器T1定時50ms,中斷20次就為1秒,可用_crol_()移位函數實現。模擬效果如下圖所示。
④ 單片機基礎實驗
1、
Loop:
mov a, #01h
mov r2, #8
Output:
mov P1, a
rl a
call Delay
djnz r2, Output
ljmp Loop
Delay:
mov r6, #0
mov r7, #0
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
ret
end
#include <reg51.h>
void delay()
{
unsigned int i;
for (i=0; i<20000; i++) {}
}
void main()
{
unsigned char index;
unsigned char LED;
while (1) {
LED = 1;
for (index=0; index < 8; index++) {
P1 = LED;
LED <<= 1;
delay();
}
}
}
2、
CS273 equ 8000h
mov dptr, #CS273
mov a,P1
movx @dptr, a
end
⑤ 利用51單片機,4個數碼管設計一個計時器,要求在數碼管上顯示的數據從0開始每1秒鍾加1。
共陽數碼管中斷程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x83,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint num,a;
uchar ,shi,ge;
void init();
void delay(uint);
void display(uchar,ucharshi,ucharge);
uint fb();
uint fs();
uint fg();
void main()
{
init();
while(1)
{
display(fb(),fs(),fg());
}
}
void init()
{
num=0;
a=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(uchar,ucharshi,ucharge)
{
P1=0xfd;
P0=table[];
delay(1);
P1=0xfb;
P0=table[shi];
delay(1);
P1=0xf7;
P0=table[ge];
delay(1);
}
void timeoff() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
a++;
if(a%20==0)
{
num++;
if(num==999)
{
num=0;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uint fb()
{
=num/100;
return ;
}
uint fs()
{
shi=num%100/10;
return shi;
}
uint fg()
{
ge =num%100%10;
return ge;
}
(5)單片機課程實驗擴展閱讀
2個可編程定時/計數器·5個中斷源,2個優先順序(52有6個)
一個全雙工串列通信口
外部數據存儲器定址空間為64kB
外部程序存儲器定址空間為64kB
邏輯操作位定址功能·雙列直插40PinDIP封裝
單一+5V電源供電
CPU:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據;
ROM:用以存放程序、一些原始數據和表格;
I/O口:四個8位並行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工UART(通用非同步接收發送器)的串列I/O口,用於實現單片機之間或單片機與微機之間的串列通信;
片內振盪器和時鍾產生電路,石英晶體和微調電容需要外接。最佳振盪頻率為6M—12M。
參考資料來源:網路-51單片機
⑥ 單片機計數器實驗
做計數器實驗,不需要開中斷,T1設為計數模式,脈沖由P3.5口進入。
TR1 = 1;是單片機自己在運行
⑦ 簡論單片機課程中單片機實驗教學探究
簡論單片機課程中單片機實驗教學探究
論文摘要:單片機的開發與應用、學習將造就一批計算機智能化控制的工程師、科學家。一些中等院校也相繼開設了單片機課程設計及相關的課程。在單片機及介面技術課程的教學過程中,實驗教學是重要的組成部分。針對單片機課程的教學改革,不斷加強單片機課程實驗環節,改革教學方法,虛擬模擬實驗在單片機教學中的應用,實踐表明,該方法有利於激發學生的學習興趣,培養學生的工程素養和創新能力,提高了教學效果。
論文關鍵詞:單片機;教學;模擬實驗
「單片機原理」是一門理論性、邏輯性、實踐性很強的學科,是電類專業一門非常重要的專業基礎課,把微機介面部分、匯編語言部分、通信技術部分的知識點等綜合在一起,屬於邏輯性、工程性、技術性、實踐性很強的一門專業基礎課。該課程作為電類專業最重要的核心課程之一,它是電類專業高素質技能型人才所需全部自動控制類知識結構的載體,占據著非常重要的位置。
然而,傳統的單片機教學一般注重課程本身的體系結構和前後的邏輯聯系,均以學科體系為出發點,忽略了「可學性」,致使學生學得吃力,老師教得辛苦,教學效果卻沒有顯現出來。
一、研究背景及意義
目前,全國將單片機列入單獨的比賽項目,在考查中注重學生的能力培養,學生的技能素養教育成為重中之重,加之社會需求高技能人才,許多學校為了適應社會的發展和市場需求在不同的專業開設了單片機課程,然而單片機課程是一門實踐性很強的課程,要想在教學過程中取得很好的效果,就必須要求學生在學習過程中多動手實踐,但有的學校教學設備有限,怎樣解決這個問題。模擬實驗課可以讓學生在單片機工作室里做中學,真正玩轉單片機,也同時解決了學生學起來枯燥,老師教起來吃力的尷尬局面。
目前單片機教學中存在諸多問題。如單片機課程理論為主,實驗教學多是進行驗證性實驗。單片機實驗室存在場地和時間限制,學生除了課上,很難有機會接觸到所需要的設備,如模擬器、實驗板等,個人配備成本太高,個體無法承擔。而且實驗箱只能驗證試驗的基本作用和意義,就無從談起學生動手能力的訓練和提升。單片機在當今社會中的應用速度發展迅速,然而單片機教材陳舊,實驗設備很容易落後、老化等問題,必然會帶來耗資等問題。由此可見,構建成本低廉的單片機模擬實驗系統對於單片機教學意義重大。它不僅可以降低實驗設備投資,而且能培提高學生的工程素質,養學生的創新精神。在單片機控制系統的設計開發過程中,我們不單要突出設備的自動化程度及智能性,另一方面也要重視控制系統的工作穩定性,否則就無法體現控制系統的優越性。
由於單片機控制系統應用系統的工作環境往往是比較惡劣和復雜的,其應用的可靠性、安全性就成為一個非常突出的問題。單片機控制系統應用必須長期穩定、可靠地運行,否則將導致控制誤差加大,嚴重時會使系統失靈,甚至造成巨大的損失。
影響單片機控制系統應用的可靠、安全運行的主要因素是來自系統內部和外部的各種電氣干擾,以及系統結果設計、元器件選擇、安裝、製造工藝和外部環境條件等。這些因素對控制系統造成的干擾後果主要表現在下述幾個方面。(1)數據採集誤差加大。(2)控制狀態失靈。(3)數據受干擾發生變化。(4)程序運行失常。
由於受到干擾後計數器的值是隨機的,因而導致程序混亂。通常的情況是程序將執行一系列毫無意義的指令,最後進入「死循環」,這將使輸出嚴重混亂或系統失靈。
隨著單片機及其介面技術的飛速發展,目前面對職業教育存在的突出問題:質量能力與規模能力不相適應,教學信息化程度低,古老的填鴨式課堂教學模式仍應用普遍,「雙師型」教師隊伍建設機制缺乏完善性,科學管理水平和改革創新能力就提到了日程,管理制度不健全,學校基本辦學規范不健全,科學的職業教育評價標准和評價機制達不到標准,學生成長的「通道」不暢通。
從新的教學要求來看,這類課程僅在課堂上講授基本原理是不夠的,必須在教學中加強實踐環節,開出一定數量的高質量的配套實驗課活獨立的實驗課程,讓學生有足夠的實驗機會。那麼對於單片機實驗教學環境建設就相應提出了高要求。怎樣解決這個問題,單片機模擬實驗應運而生。
二、「單片機模擬實驗」初探
伴隨著計算機技術的飛速發展,在各個領域都出現了各種模擬系統,為各種實際系統的開發提供了准確可靠的保證,同時為很多學校、企業等節約了大量的人力和物力。在電子信息技術領域也同樣出現了大量的模擬工具,如課堂上用到的各種EDA工具;模數混合模擬的Protel、Multisim等常見的電子應用模擬軟體,數字系統設計的Fundation、Maxplus II、Expert等。
所謂「模擬」,就是通過開發工具真實地模擬用戶系統的運行環境,使用戶能夠在透明和可控的條件下觀察系統運行過程中的狀態和結果,模擬實際上也是一種軟體和硬體的綜合調試手段,它能提高應用系統開發的效率。
用通俗的話來描述「單片機模擬實驗」就是在一塊虛擬電路板上按照真實電路的設計構想放置一些虛擬的元器件,並模擬實際燒ROM的過程鏈接上程序代碼,「接通」電路觀察效果,如果不理想的話可以反復修改電路或程序代碼,直至符合設計要求為止。
模擬實驗的好處是顯而易見的。在沒有模擬實驗的年代,每架構一個真實的電路都需要費時費力費錢,稍有不慎還有可能前功盡棄,再加上單片機中的ROM晶元是有擦寫次數的,而一段程序可能需要修改擦寫多次,無形中減少了ROM晶元的使用壽命。模擬實驗是在計算機上進行的(可能會費點兒電),以上問題都不存在,而且就現在的模擬軟體來說,模擬出來的電路效果與真實電路一模一樣,毫不誇張地說,只要模擬是成功的,就可以直接下工廠的流水線生產了。
⑧ 單片機實驗
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit d=P3^7;
sbit swi=P3^2;//暫停-開始按鍵
sbit fen=P3^3;//調分
sbit shi=P3^4;//調時
bit state1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar time[]={0,0,0,0,0,0};//待顯示的時分秒
void concrol();
void tiaofen();//檢測調分函數的聲明
void tiaoshi();//檢測調時函數的聲明
void display();//顯示函數的聲明
void pause();//暫停開始檢測函數的聲明
uchar a,key;
void delay(uchar z)//延時函數
{
uchar x,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
void main()
{
key=0;
state1=1;
state2=1;
state3=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display();//顯示函數
pause();//暫停開始檢測
tiaofen();//檢測調分
tiaoshi();//檢測調時
}
}
void time0() interrupt 1//中斷計時函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
time[0]++;
if(time[0]==10)
{
time[1]++;
time[0]=0;
if(time[1]==6)
{
time[1]=0;
time[2]++;
if(time[2]==10)
{
time[2]=0;
time[3]++;
if(time[3]==6)
{
time[3]=0;
time[4]++;
if(time[4]==10)
{
time[4]=0;
time[5]++;
}
if(time[5]==2)
if(time[4]==4)
{
time[4]=0;
time[5]=0;
}
}
}
}
}
}
}
void pause()//暫停開-開始函數
{
if(state1!=swi)//按鍵控制電子表的暫停
{
delay(5);
if(state1!=swi)
{
state1=swi;
concrol();
}
}
}
void concrol()//執行按鍵的函數
{
if(state1==0)
{
key=!key;
switch(key)
{
case 1: EA=0;
ET0=0;
TR0=0;
break;
case 0: EA=1;
ET0=1;
TR0=1;
break;
}
}
}
void tiaofen()//調分鍾的函數
{
if(key==1)
if(fen==0)
{
time[2]++;
if(time[2]==10)
{
time[2]=0;
time[3]++;
if(time[3]==6)
time[3]=0;
}
while(!fen);
}
}
void tiaoshi()//調小時的函數
{
if(key==1)
if(shi==0)
{
time[4]++;
if(time[4]==10)
{
time[4]=0;
time[5]++;
}
if(time[5]==2)
if(time[4]==4)
{
time[5]=0;
time[4]=0;
}
while(!shi);
}
}
void display()//顯示函數
{
P2=7;
d=0;
P0=table[time[0]];
d=1;
delay(5);
P0=0;
P2=6;
d=0;
P0=table[time[1]];
d=1;
delay(5);
P0=0;
P2=5;
d=0;
P0=0x40;
d=1;
delay(5);
P0=0;
P2=4;
d=0;
P0=table[time[2]];
d=1;
delay(5);
P0=0;
P2=3;
d=0;
P0=table[time[3]];
d=1;
delay(5);
P0=0;
P2=2;
d=0;
P0=0x40;
d=1;
delay(5);
P0=0;
P2=1;
d=0;
P0=table[time[4]];
d=1;
delay(5);
P0=0;
P2=0;
d=0;
P0=table[time[5]];
d=1;
delay(5);
P0=0;
}
這是我寫的一個電子時鍾的程序,能顯示小時分鍾和秒,按鍵可以修改時間值
參考一下吧