《基于單片機設計的頻率計》由會員分享,可在線閱讀,更多相關《基于單片機設計的頻率計(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、實驗一 數(shù)據(jù)傳送程序
(2學時)
一、 實驗目的
1、掌握匯編語言設計和調試方法。
2、掌握DVCC實驗系統(tǒng)的操作步驟。
二、 實驗內容
1、編程實現(xiàn),把7000H~70FFH單元的內容清零。
2、編程實現(xiàn),把源地址為6000H開始的單元內容,傳送到目的地址7000H開始的單元中,傳送個數(shù)為0FFFH個。
三、DVCC實驗系統(tǒng)操作說明
1、 接通DVCC實驗系統(tǒng)電源,在DVCC實驗箱上應顯示閃動的“P”,否則按Reset鍵。
2、 運行DVCC軟件。(程序 DVCC598H實驗系統(tǒng)
2、DVCC實驗系統(tǒng))
3、 單擊工具欄上“新建”或“打開”按鈕,編寫源程序?!螕簟熬幾g”按鈕,使其形成可執(zhí)行文件。
4、 單擊工具欄上“聯(lián)接”按鈕,同時按下DVCC實驗箱上PCDBG鍵(鍵盤上最右邊第2個),實現(xiàn)PC機和實驗箱的聯(lián)接。聯(lián)機成功,屏幕上出現(xiàn):.反匯編窗口、寄存器標示位窗口。
5、 在成功聯(lián)機后,單擊工具欄上“調試”按鈕,把最終目標文件裝載到實驗系統(tǒng)RAM區(qū);或者通過單擊菜單欄中的“動態(tài)調試”,選擇“傳送(.EXE)文件”來實現(xiàn)。
6、 單擊工具欄上“運行”或“單步”按鈕,運行實驗程序。
7、 單擊工具欄上“窗口”,選擇“顯示內部數(shù)據(jù)窗口”或“顯示外部數(shù)據(jù)窗口”可顯示數(shù)據(jù)
3、窗口。鼠標右擊數(shù)據(jù)窗口的數(shù)據(jù),可設置數(shù)據(jù)塊新地址;鼠標左鍵單擊數(shù)據(jù),可修改數(shù)據(jù)數(shù)值。
8、 運行完畢,先按實驗箱上的復位按鈕Reset鍵,再按PCDBG鍵,并且點擊屏幕上OK,即可退出運行狀態(tài)。
1、 實驗內容 把7000H~70FFH單元的內容清零。
程序代碼:
ORG 0000H
AJMP START
ORG 70H
START: MOV P2, #70H ;送地址高8位到P2端口
MOV R0, #00H ;R0=00H,表地址低8位
CLR A ;將累加器A清0
LOOP: MOVX
4、 @R0, A ;將A送入以R0內容為地址的外部RAM.
INC R0 ;R0+1-->R0
CJNE R0,#00H,LOOP;比較條件轉移指令,若R0不等于0,則跳轉到LOOP
AJMP $ ;暫停
END
2、 編程實現(xiàn),將源地址為6000H開始的單元,傳送到目的地址7000H開始的單元,傳送個數(shù)為0FFFH個。
程序代碼:
ORG 0000H
AJMP START
ORG 50H
START: MOV DPTR, #6000H
MOV P2, #70H
MOV R0,#
5、00H
LOOP: MOVX A, @DPTR
MOVX @R0, A
INC DPTR
INC R0
CJNE R0,#00H,LOOP;比較條件轉移,若R0不等于0,則程序循環(huán),執(zhí)行l(wèi)oop.
INC P2
MOV R1,P2
CJNE R1,#80H,LOOP; 若R1不等與80h,則程序循環(huán)執(zhí)行l(wèi)oop.
AJMP $
END
實驗二 并行口實驗
(2學時)
一、實驗目的
6、
1、掌握P3口、P1口簡單使用。
2、學習延時程序的編寫和使用。
二、實驗內容
1、編寫程序用P1.0輸出1kHz和500Hz的音頻信號,以驅動揚聲器作為報警信號。要求1kHz信號響100ms,500Hz信號響200ms,交替進行。P1.7接一開關,進行控制。當開關合上,報警信號響;當開關斷開,報警信號停止。
(教材《單片機原理、接口及應用——嵌入式系統(tǒng)技術基礎》 P75 例4-3)
2、P3口做輸入口,P1口做輸出口。P3.3外接一脈沖,P1.0~P1.7接的8個發(fā)光二極管L1—L8。編寫程序,使P3.3每輸入一個脈沖,P1口按16進制加一方式逐次點亮發(fā)光二極管。
三、實
7、驗說明
1、P1口是準雙向口,它作為輸出口時與一般的雙向口使用方法相同,由準雙向口結構可知:當P1口作為輸入口時,必須先對它置高電平,使內部MOS管截止,因內部上拉電阻是20KΩ—40KΩ,故不會對外部輸入產生影響。若不先對它置高,且原來是低電平,則MOS管導通,讀入的數(shù)據(jù)是不正確的。
2、延時程序的延時時間計算
如:延時程序 DELAY : MOV R6, #20
DELAY1: MOV R7, #80
DJNZ R7, $
DJNZ R
8、6, DELAY1
查表可知,MOV Rn,#data指令需要1個機器周期的時間,DJNZ Rn,rel指令需要2個機器周期時間。一個機器周期是由12個時鐘周期組成的,所以一個機器周期時間長度為12/6MHz。以上程序段的執(zhí)行時間為:
[(80*2+1)*20+20*2+1]*12/6MHz
四、實驗接線圖(實驗內容二接線圖)
五、實驗內容二參考程序框圖
ORG 00H
BEG:SETB P1.7
JB P1.7, $
MOV R2,#100
DV:ACALL D500
ACALL D500
ACALL D5
9、00
ACALL D500
CPL P1.0
DJNZ R2,DV
MOV R1,#100
DD:ACALL D500
ACALL D500
CPL P1.0
DJNZ R1,DD
SJMP BEG
D500:MOV R7,#125 ;延時500us(6Mhz)
DJNZ R7,$
RET
END
實驗三 中斷實驗
(2學時)
一、實驗目的
1)掌握中斷程序的編程方法。
2)進一步掌握P1、P3口的雙功能使用方法。
二、實驗內容
正常情況下,僅綠燈亮。有故障發(fā)生時,綠燈滅
10、,同時紅燈閃爍;故障排除后,撥上總開關,恢復正常,綠燈亮,紅燈滅。
可由P1.0 控制綠燈的亮滅;P3.3 接外部中斷源,模擬故障發(fā)生;P1.1 控制紅燈的亮滅;P1.2 讀取總開頭的狀態(tài)。編寫程序實現(xiàn)以上功能。
(P3.3 復用為外部中斷1輸入,即為INT1。其中斷向量地址為0013H,使用下降沿觸發(fā)中斷。)
三、實驗接線
P1.0 接綠燈; P1.1接紅燈; P1.2 開關K1; P3.3 接點觸開關SP
四、實驗程序框圖
主程序:
中斷服務程序:
11、
ORG 0000h
AJMP MAIN ;主程序
ORG 0013H ;中斷矢量表
AJMP IRPRO ;中斷服務程序入口
ORG 0050H ;主程序
MAIN:CLR P1.1 ;紅燈滅
SETB P1.0 ;綠燈亮
SETB IT1 ;設置INT1負邊緣觸發(fā)p206
SETB EX1 ;外部中斷1有效
SETB EA ;開中斷
LOOP1:INC
12、 A ;觀察A的變化
JB P1.0, LOOP1
LOOP2:INC A ;觀察A的變化
JNB P1.2,LOOP2
SETB P1.0
SJMP LOOP1
;中斷服務程序
IRPRO:PUSH PSW
PUSH ACC
SETB PSW.3
CLR P1.0 ; 滅綠燈
LOOP3:MOV R2,#05
LOOP4:SETB P1.1 ;亮紅燈
ACALL D5
13、00
CPL P1.1
ACALL D500
DJNZ R2, LOOP4
JNB P1.2,LOOP3 ;總開關監(jiān)測
POP ACC
POP PSW
RETI
D500:MOV R6,#255
DELAY:MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DELAY
RET
END
實驗四 定時/計數(shù)實驗
(2學時)
一、實驗目的
1、 熟悉8031定時/計數(shù)功能。
2、
14、掌握定時/計數(shù)初始化編程方法。
二、實驗內容
1、 選擇T1工作于模式0定時,在P1.0腳上輸出周期為4ms的方波,單片機采用6MHZ晶振。
分析:輸出周期為4ms的方波,即高低電平的持續(xù)時間均為2ms,那么只要使P1.0腳上的電平每隔2ms取反一次,就可得到周期為4ms的方波。 將T1設為定時方式0:GATE=0,C/T=0,M1M0=00;T0不用,可為任意,只要不使其進入方式3(此時,定時器1對外停止計數(shù)),一般取0即可。
計數(shù)初值的計算:
單片機系統(tǒng)默認的定時/計數(shù)器的工作時鐘是晶振經12分頻的,即T=12/(6*106),所以計數(shù)初值為
X=(213-2ms/T
15、)=213-(2*10-3*6*106)/12=8192-1000=7192=1110000011000B
因為是13位計數(shù)器,所以X的高8位裝入TH1,X的低5位裝入TL1的低5位,即TH1=0E0H,TL1=18H。
思考:T1計數(shù)結束采用中斷工作方式 ,程序應如何編寫?
2、在P1.7端接一個發(fā)光二極管LED,要求利用定時器控制,使LED亮1秒、滅1秒,周而復始,設=6MHZ。
(教材《單片機原理、接口及應用——嵌入式系統(tǒng)技術基礎》 P97 例5-2)
三、實驗內容一參考程序框圖:
16、
ORG 00H;
START: MOV TMOD,#00H
LOAD:
MOV TL0,#18H;
MOV TH0,#0E0H;
CPL P1.3
ACALL TIMER_DELAY
JMP LOAD
TIMER_DELAY:
SETB TR0
CHECK:
JNB TF0,CHECK
CLR TR0
CLR TF0
RET;
END
實驗五 串行口應用實驗
(2學時)
17、
一、實驗目的
掌握串行口工作方式的程序設計,掌握單片機通信程序編制方法。
二、實驗內容
1、重復發(fā)送同一個數(shù)據(jù),觀察TXD端輸出的波形。
將8031串口設為工作方式1,即10位異步收發(fā),發(fā)送時鐘由計數(shù)器控制;計數(shù)器T1設為定時工作,工作方式2,即自動重裝8位計數(shù)器;波特率取1000 bps,不加倍;單片機采用6MHZ晶振。計數(shù)初值的計算:TH1=256-[(1+0)*fosc]/(12*32*BPS)
P3.1復用為串行發(fā)送端TXD,將其接至示波器,觀察輸出波形。注意觀察8位數(shù)據(jù)位前后的起始位和停止位。
2、自發(fā)自收。將代碼段中定義的10個數(shù)據(jù)0~9,通過串口發(fā)
18、送和接收,存放在外部存儲器7000H開始的單元中。
實驗內容一參考程序框圖:
ORG 00H
START:
MOV SCON,#10H;設置串行口工作在模式0下,接受數(shù)據(jù)
ENABLE:
CLR P3.2 ;使能74LS166,進行并行數(shù)據(jù)裝載(同步置數(shù)),
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB P3.2 ;使能串行輸入,由每個時鐘脈沖進行串行移位
CLR RI;
CHECK:
JBC RI,DISPLAY ;接受完畢8bit二進制(
19、1byte)時,RI=1,跳轉到顯示DISPLAY段
JMP CHECK ;如果沒有接受完畢,循環(huán)等待
DISPLAY:
MOV A,SBUF ;將串行口緩沖區(qū)SBUF數(shù)據(jù)載入ACC
MOV P1,A ;從P1口輸出顯示
CALL DELAY ;調延時子程序
JMP START ;循環(huán)
DELAY: ;延時
MOV R3,#20 ;
D1: MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
END
實驗六 倒計時鐘
(3學時)
20、一、實驗目的
1、進一步熟悉MCS-51定時/計數(shù)器的使用。
2、學會使用實驗箱上七段LED碼顯示。
二、實驗內容
在實驗箱的七段LED碼上顯示倒計時鐘。每隔一秒鐘,在LED上顯示9、8、7…0。
提示:使用T0、T1定時/計數(shù)器。T0工作在方式0、定時功能,在P1.0引腳上輸出周期為4ms的方波;T1工作在方式2、計數(shù)功能,對P1.0引腳上輸出的下降沿進行計數(shù),計到250個下降沿時,即相當于定時1秒鐘。定時器T1外部計數(shù)輸入引腳為P3.5。
計數(shù)器TR1的初值為:
X=28-250=6, TH1=TL1=6H
七段LED的顯示:
1.字位端口為0FF21H,確定顯示的位
21、置。
2.字形端口為0FF22H,確定所顯示的內容,即顯示的數(shù)據(jù):
表6.1 字形碼表
數(shù)據(jù)
0
1
2
3
4
5
6
7
字形碼
C0H
F9H
A4H
B0H
99H
92H
82H
F8H
數(shù)據(jù)
8
9
A
B
C
D
E
F
字形碼
80H
98H
88H
83H
C6H
A1H
86H
8EH
3.如要在右邊第一位顯示“2”,程序如下:
MOV A, #0A4H
MOV DPTR, #0FF22H
MOVX @DPTR,
22、 A
MOV DPTR, #0FF21H
MOV A, #1
MOVX @DPTR, A
ORG 0000H ;中斷方式:選擇T1工作,方式1
AJMP MAIN
ORG 000BH
AJMP TIMER_0 ;跳到TIMER_1
ORG 001BH
AJMP TIMER_1
ORG 0030H ;
MAIN: SETB P1.3
MOV TMOD,#60H
MOV TH0,#0E0H
MOV TL0,#18H
MOV TH1
23、, #06H
MOV TL1,#06H
SETB TR0
SETB EA;EA=1
SETB ET0;ET1
SETB TR1
SETB ET1
BB: MOV R0,#9H
WAIT:
MOV A, R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR, #0FF22H
MOVX @DPTR, A
MOV DPTR, #0FF21H
MOV A, #01H
MOVX @DPTR, A
CJNE R0,#0FFH ,WAIT
AJMP BB
TIMER_0:CPL P1.3
MOV TH0,#0E0H
MOV TL0,#18H
SETB TR0;TR1=1
RETI
TIMER_1:
DEC R0
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
END