單片機實驗原理包含八個基礎實驗
1.LED燈循環點亮
2.外部中斷計數,BCD碼轉換
3.四位一體數碼管動態靜態顯示
4.四位秒表
5.脈沖寬度與周期測量
6.串行口和異步通信
7.外部RAM擴展
8.自主設計點陣字符
附件中包含protues仿真設計,程序流程圖,匯編代碼,以及實驗心得體會。
實驗一
本實驗要求在P1端口接8個LED,并編程依次循環點亮。要求用軟件延時程序控制LED的亮滅時間,并能精確地計算和用軟件測量延時時間。 圖1.1.1 仿真原理圖 圖1.1.2 仿真原理圖細節 Protues中已默認添加了復位電路,其中R1-R8是限流電阻,將普通二極管的正極接到VCC,負極接到P0口,運行結果:D1-D8依次導通,導通時方點變紅。 圖1.1.3 程序流程圖 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,#10000000B LOOP0:MOV P1,A MOV R0,#0FFH LOOP1:MOV R1,#0FFH LOOP2:NOP NOP DJNZ R1,LOOP2 DJNZ R2,LOOP1 RR A SJMP LOOP0 END
(1)number1和number2的作用是什么; R0=number1,R1=number2是設置循環次數,其中,R1為LOOP2循環的次數,R0為LOOP1循環的次數。 (2)燈相鄰兩次變化之間的延遲時間是多少,如何控制,如何計算? R1為LOOP2循環的次數,即t1=255*2=510us,R0為LOOP1循環的次數,t2=255*2*255=130050us,所以總的延遲時間為T=t1+t2=130560us。 控制延遲時間可通過增加循環次數或者增加循環層數實現,又因為80C52中Rn寄存器最大值為255,所以在此實驗基礎上,可增加循環層數: MOV R3,#07H LOOP1:MOV R2,#0FFH LOOP2:MOV R1,#0FFH LOOP3:NOP NOP DJNZ R1,LOOP3 DJNZ R2,LOOP2 考慮到單片機的晶振為11.0592MHz,及一個機器周期為1.085us,經過計算當第三層循環次數為7時,延遲約等于1s。 初次使用實驗箱和相關軟件還不甚熟練,應加強練習。 實驗前,應先在Protues軟件上進行仿真,能很大程度上增大實驗成功概率;插電路的過程中要小心導線間是否短路,導線非絕緣部分不應剪得過長,對待實驗要有耐心,按照一定的順序從源頭和細節處檢查電路,比如單片機是否和實驗箱共地,是否有導線脫落等等。 若燒入程序出現問題,可先關閉實驗箱電源再次燒錄,或者重新插入串口。 總之,實驗過程中會遇到各種意想不到的情況,一定要沉心靜氣,不然就浪費了時間,又難以發現錯誤。
實驗二 1.功能要求 本實驗要求: (1)P0口接8個燈,INT0引腳接一下開關K0。 (2)K0用于引發外部中斷,在外部中斷子程序中,對K0按下的次數進行計數,然后以BCD碼形式,通過P0口的8個燈輸出計數結果。
2.硬件原理 圖1.2.1 仿真原理圖 此時按鍵16次,紅色發光二極管從左到右前四位表示十進制數的十位,后四位表示十進制數的各位,從仿真結果和試驗結果看,當按鍵99次,計數清零,重新開始計數。 3.軟件程序流程 圖1.2.2 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 0013H LJMP INT1P ORG 0020H MAIN: MOV P0,#00H MOV R0,#00H MOV A,#00H SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB PX0 CLR PX1 SETB EA SJMP $ ORG 0050H INT0P: INC A DA A MOV P0,A RETI END 5.實驗的問題及討論 關于Protues使用的一些問題: (1)在Protues仿真時,若要用到P0口,要記得加上拉電阻,否則發光二極管不會發光,而實驗箱中已加可不考慮; (2)排阻使用時,應注意其使用條件,及阻值的設置。 6.實驗心得及建議 單片機能實現的某種功能有多種編程方法,我覺得作為初學者,應該先嘗試自己編程,哪怕編出來程序冗長,至少在這個過程中練習了匯編語言的使用,自己編完之后,可以查閱相關資料,看看網上成熟的程序的優點;多和同學們討論思路,有時間的情況下互相看以下程序,能學到很多知識,拓寬思考問題的角度。
建議:做Protues仿真時,如果沒有系統地學習過Protues,遇到問題要努力嘗試解決,并記錄下來這些問題和解決辦法,有利于今后的學習。
實驗三 1.功能要求 本實驗要求P1口通過驅動芯片控制斷碼輸出信號線,P0口通過驅動芯片控制位選線,并實現以下功能: (1)當開關K0接低電平時,第一位依次顯示0~F,然后第二位、第三位、第四位,再循環回第一位。 (2)當開關K0接高電平時,四位動態顯示“HELP”。 2.硬件原理 圖1.3.1 74LS244引腳圖及功能表 在光學元件(optoelectronics)分類里,有各種數碼管和液晶。7段對應英文是7SEG,4位一體的英文是MPX4,共陰極CC,共陽極CA,最后的英文是顏色的意思。所以7SEG-MPX4-CA-BLUE為7段4位一體共陽極藍色數碼管顯示器。
圖1.3.2 仿真原理圖 P2.2接地時,每位均依次顯示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F 圖1.3.3 仿真原理圖 P2.2接高電平時,顯示“HELP” 3.軟件程序流程 圖1.3.4 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0010H MAIN: MOV P0,#10001000B JNB P2.2,LOOP4 JB P2.2,NEXT0 NEXT0:LJMP LOOP5 LOOP4:MOV P1,#0C0H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0F9H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0A4H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0B0H LCALL DELAY JB P2.2,NEXT0 MOV P1,#99H LCALL DELAY JB P2.2,NEXT0 MOV P1,#92H LCALL DELAY JB P2.2,NEXT0 MOV P1,#82H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0F8H LCALL DELAY JB P2.2,NEXT0 MOV P1,#80H LCALL DELAY JB P2.2,NEXT0 MOV P1,#90H LCALL DELAY JB P2.2,NEXT0 MOV P1,#88H LCALL DELAY JB P2.2,NEXT0 MOV P1,#83H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0C6H LCALL DELAY JB P2.2,NEXT0 MOV P1,#0A1H LCALL DELAY JB P2.2,LOOP5 MOV P1,#86H LCALL DELAY JB P2.2,LOOP5 MOV P1,#8EH LCALL DELAY JB P2.2,LOOP5 MOV A,P0 RL A MOV P0,A LJMP LOOP4 ORG 0100H DELAY:MOV R0,#10H LOOP1:MOV R1,#10H LOOP2:MOV R2,#0FFH LOOP3:NOP NOP DJNZ R2,LOOP3 DJNZ R1,LOOP2 DJNZ R0,LOOP1 ;2*255+50*255*2+10*50*255*2us RET LOOP5:MOV R5,P0 MOV P0,#10001000B MOV P1,#89H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#86H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#0C7H LCALL DELAY1 JNB P2.2,NEXT1 MOV P1,#8CH LCALL DELAY1 JNB P2.2,NEXT1 LJMP LOOP5 ORG 0150H DELAY1:MOV R3,#05H LOOP7:MOV R4,#0FFH LOOP6:NOP NOP DJNZ R4,LOOP6 DJNZ R3,LOOP7 MOV A,P0 RR A MOV P0,A RET NEXT1:MOV P0,R5 LJMP LOOP4 END 5.實驗的問題及討論 (1)由于程序中沒有使用DB查表命令,導致程序冗長,由高到低的變化時還不能緊接著上一字母讀數,僅能實現由低到高的自然變化。 (2)在和同學們的討論中,使用DB指令,縮短了程序長度;在不使用查表指令的條件下,若將HELP循環放入子程序中,由于子程序執行完成后返回之前的節點,可繼續讀數。 6. 實驗心得及建議 盡快熟記以及熟練使用匯編指令,寫程序前應先把思路捋順,做好程序流程圖,這樣程序寫起來就會得心應手一些。
實驗四 1.功能要求 (1) 用T0定時器實現1秒定時,控制一個LED亮1秒,滅1秒,并不斷循環。 (2) 實現一個4位秒表: ① 用開關K0模擬秒表的啟動、停止、清零功能,K0觸發外部中斷INT0,按一次啟動計時,按一次停止,再按一次清零,在三個狀態中循環。 ②定時采用T0定時器中斷完成,最低位按1/10秒計數,依次計數單位為1分、10秒、1秒、1/10秒。 ③要求外部中斷INT0的優先級高于T0的優先級。 2.硬件原理 圖1.4.1 硬件原理圖(仿真顯示) 3.軟件程序流程 圖1.4.2 程序流程圖
4.程序清單 ;剛開始未顯示,當第一次按K0時,開始計時; ;進一次中斷是1/20秒 50MS 問題在于用51輸入的無符號整數最大實現255然后清零,所以顯示一直為零。 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 000BH LJMP T0P ORG 0050H MAIN: MOV P0,#00000001B MOV TMOD,#00000001B MOV TL0,#0B0H ;循環2次最佳,誤差小 ,1/10 second MOV TH0,#3CH SETB ET0 SETB IT0 SETB EX0 SETB EA MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#00H MOV R6,#00H MOV R7,#00H MOV DPTR,#0400H W: LCALL XIANSHI SJMP W ;在主程序中一直顯示 T0P: INC R3 MOV TL0,#0B0H ;循環2次最佳,誤差小 ,1/10 second MOV TH0,#3CH CJNE R3,#2,BACK INC R2 MOV R3,#00H CJNE R2,#10,BACK INC R4 MOV R2,#00H CJNE R4,#10,BACK INC R5 MOV R4,#00H CJNE R5,#06,BACK INC R7 MOV R5,#00H CJNE R7,#10,BACK MOV R7,#00H BACK: RETI INT0P: INC R6 CJNE R6,#01H,CLR0 SETB TR0 CLR0: CJNE R6,#03H,TIMER MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#00H MOV R6,#00H MOV R7,#00H LJMP STOP1 TIMER: CJNE R6,#02H,STOP1 CLR TR0 MOV TH1,#3CH MOV TL1,#0B0H STOP1: RETI ORG 0250H XIANSHI: MOV A,R2 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000010B MOV A,R4 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000100B MOV A,R5 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00001000B MOV A,R7 MOVC A,@A+DPTR MOV P1,A LCALL DELAY MOV P0,#00000001B RET ORG 0350H DELAY: MOV R0,#05H ;2*255+2*255*5=3060US LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 RET ORG 0400H DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H ;0~9 END (1)實驗通過計時器0工作方式一實現四位秒表計時功能,使TH0、TL0初始值盡可能小,減少跳入計時器中斷的次數,以減少誤差。 (2)應注意晶振頻率,盡可能精確計時。 實驗前捋清思路很重要,注意中斷不可寫的過長,過長可能會導致單片機運行錯誤。 實驗五 1.功能要求 ① 自主設計測量方法,編程連續測量輸入脈沖寬度,并用七段LED顯示結果。 ② 自主設計測量方法,編程連續測量輸入脈沖周期,并用七段LED顯示結果。 ③ 自主設計測量方法,同時測量脈沖寬度和周期,由開關K0選擇顯示脈沖寬度還是顯示脈沖周期。 2.硬件原理 圖1.5.1 硬件原理圖 圖1.5.2 硬件原理圖 3.軟件程序流程 圖1.5.3 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0003H LJMP INT0P ORG 000BH LJMP T0P ORG 0100H MAIN: MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 MOV R6,#0 MOV R7,#0 MOV 30H,#0C0H MOV 31H,#0C0H MOV 32H,#0C0H MOV 33H,#0C0H MOV 21H,#0 SETB IT0 SETB EX0 SETB ET0 SETB EA XIAN0: LCALL XIANSHI LJMP XIAN0 T0P: INC R3 CJNE R3,#10,BACK MOV R3,#0 INC R4 CJNE R4,#10,BACK MOV R4,#0 INC R5 CJNE R5,#10,BACK MOV R5,#0 INC R6 CJNE R6,#10,BACK MOV R6,#0 INC R7 BACK: RETI INT0P: INC 21H MOV A,21H CJNE A,#1,ER2 JB P3.3,WIDTH TIME: MOV TMOD,#02H SJMP START WIDTH: JNB P3.3,TIME MOV TMOD,#0AH START: MOV TH0,#164 MOV TL0,#164 SETB TR0 ER2: CJNE A,#2,BACK1 CLR TR0 MOV A,TL0 SUBB A,TH0 MOV B,#10 DIV AB MOV R2,A MOV R1,B CJNE R7,#0,DDIAN3 CJNE R6,#0,DDIAN2 CJNE R5,#0,DDIAN1 MOV R0,#1 LJMP CUN DDIAN3: MOV R0,#4 LJMP CUN DDIAN2: MOV R0,#3 LJMP CUN DDIAN1: MOV R0,#2 CUN: LCALL CHA MOV 30H,A INC R0 LCALL CHA MOV 31H,A INC R0 LCALL CHA MOV 32H,A INC R0 LCALL CHA MOV 33H,A MOV 21H,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 MOV R6,#0 MOV R7,#0 BACK1: RETI XIANSHI:MOV DPTR,#TAB MOV P0,#01H MOV P1,30H LCALL DELAY MOV P0,#02H MOV P1,31H LCALL DELAY MOV P0,#04H MOV P1,32H LCALL DELAY MOV P0,#08H MOV P1,33H LCALL DELAY RET CHA: MOV A,@R0 MOVC A,@A+DPTR CJNE R0,#4,BACK2 ADD A,#0AH ;加十,加小數點 BACK2: RET DELAY: MOV 23H,#03H LOP1: MOV 22H,#0FFH LOOP: NOP DJNZ 22H,LOOP DJNZ 23H,LOP1 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 5.實驗的問題及討論 用查詢法發現數碼管的顯示會受測量脈沖頻率的影響,然后選用中斷法,在檢測到脈沖下降沿時開始計時,利用門控位方式二測脈沖寬度,方式二測脈沖周期。 6.實驗心得及建議 實驗中遇到測量脈沖周期為100us的倍數時,會出現較大誤差,分析發現是因為當計時達到100us時由于誤差造成跳入中斷失敗,100微秒位計數少一,為解決這一問題,適當加大微秒位誤差以減小總體誤差。
實驗六 ①利用串行口方式0實現一個七段數碼管的顯示控制,輪流顯示0~9十個數碼。 ②兩人一組,利用異步通信功能將一方的8個按鍵的高低電平狀態傳到另一方,并利用另一方的8個LED顯示其開關狀態,要求雙向通信,互相顯示。 2.硬件原理 圖1.6.1 硬件原理圖 圖1.6.2 硬件原理圖 圖1.6.3 74LS164引腳圖 表1.6.1 74LS164功能表 3.軟件程序流程 圖1.6.4 實驗1流程圖圖1.6.5 實驗2流程圖 4.程序清單 實驗1:輪流顯示0-9 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SCON,#00H ;SM0,SM1,SM2,REN,TB8,RB8,TI,RI MOV DPTR,#TAB TRAM1: MOV R3,#00H TRAM: MOV A,R3 MOVC A,@A+DPTR MOV SBUF,A CJNE R3,#0AH,WAIT MOV R3,#00H LJMP TRAM1 WAIT: JBC TI,NEXT SJMP WAIT NEXT: INC R3 LCALL DELAY LJMP TRAM ORG 0200H DELAY: MOV R2,#03H LOOP2: MOV R0,#09FH LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 DJNZ R2,LOOP2 ;2*255+2*255*255+2*255*255*8~1S RET ORG 0300H TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 實驗2:雙向通信,互相顯示 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SCON,#50H ;方式1,且接收到的數據均要保存 MOV TMOD,#20H ;T1做波特率發生器 MOV PCON,#80H ;波特率加倍 MOV TH1,#0F4H ;bps:(2^1/32)*1/(2^8-244)*12/11.0592=4800 MOV TL1,#0F4H SETB TR1 SETB EA TRAN: MOV SBUF,P1 WAIT: JBC TI,NEXT SJMP WAIT NEXT: JNB RI,TRAN MOV P2,SBUF CLR RI LJMP TRAN END 5.實驗的問題及討論 - 實驗1的難點在于對74LS164的掌握,使用串口方式0時,單片機TXD接芯片時鐘脈沖端CLK,而CLR為低電平有效清零端,在本實驗中可直接接高電平。
- 串口傳輸先輸出最低位,通過移位寄存器在QH端輸出。
- 實驗2要注意單片機發送和接收的條件,當TI置1時,發送完畢;當RI置1時,開始接收。此外,在搭建硬件電路時要注意兩個單片機相互共地。
6.實驗心得及建議 做實驗不可眼高手低,即使仿真成功,在實際電路中仍會遇到各種問題,要不斷總結經驗,提高動手能力。
實驗七 1.功能要求 本實驗要求利用74LS573進行總線擴展,連接兩片62256,并用74LS138完成地址分配;將一片62256的前10個字節的內容加1后存入另一片62256中,讀出并用8個LED顯示。 2.硬件原理 給出實驗的硬件原理圖,并分析電路原理(用仿真代替硬件電路設計) 1.74LS138引腳圖 圖1.7.1 74LS138引腳圖表1.7.1 74LS138功能
2.62系列SRAM引腳 圖1.7.2 62系列SRAM引腳
3.74LS573 圖1.7.3 74LS573引腳圖表1.7.2 74LS573功能表 4.Protues仿真 圖1.7.4 仿真全圖 圖1.7.5 仿真部分細節圖 3.軟件程序流程 圖1.7.6 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#00H MOV DPTR,#0000H WRITE: MOV A,R0 MOVX @DPTR,A MOV @R0,A INC R0 INC DPTR CJNE R0,#0AH,WRITE ;第一片62256,寫入0~9 MOV DPTR,#8000H ;62256 32K*8,第二片622556 READ: MOV P2,#00H MOV R0,#00H LOOP0: MOV A,@R0 INC A MOVX @DPTR,A INC R0 INC DPTR CJNE R0,#0AH,LOOP0 ;將第一片的前10個字節加一存入第二片 MOV DPTR,#8000H ;顯示1 2 3 4 5 6 7 8 9 10 MOV R0,#00H LOOP3: MOVX A,@DPTR MOV P1,A LCALL DELAY INC DPTR INC R0 CJNE R0,#0AH,LOOP3 LJMP MAIN ORG 0200H DELAY: MOV 50H,#06H LOOP1: MOV 51H,#0FFH LOOP2: MOV 52H,#0FFH DJNZ 52H,$ DJNZ 51H,LOOP2 DJNZ 50H,LOOP1 RET END 5.實驗的問題及討論 實驗室沒有622569(32K*8)芯片,選用了6264(8K*8)芯片,只需將程序中的第二片6264外部擴展地址改為2000H,將A13(P2.5)接譯碼器的1腳且譯碼器2、3腳接地,A14(P2.6)、A15(P2.7)也接地即可。 6.實驗心得及建議 本實驗程序的編寫并不困難,難點在于線路的搭建,搭線時一定要細心,反復檢查,搭線前應先規劃好器件的擺放,有利于實驗的快速進行。
實驗八 1.功能要求 本實驗控制LED點陣模塊動態地顯示自設字符或圖形,設計循環顯示數字0-9。 2.硬件原理 圖1.8.1 硬件原理圖(用軟件仿真顯示) 圖1.8.2 硬件原理細節圖(用軟件仿真顯示) 圖1.8.3 SD411988內部結構 圖1.8.4 CD4049引腳圖及內部結構 3.軟件程序流 程圖 圖1.8.5 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P0,#0FFH MOV P2,#0FFH MOV R0,#00H ;顯示的幕次(即每一幕顯示的數)值0-9 MOV R1,#00H ;列碼序列號置0 MOV R2,#00H ;行碼序列號置初值 MOV R3,#00H LOOP3:MOV 52H,#0FH XIANS:MOV DPTR,#ROW ;取行碼表 首地址 MOV A,R2 MOVC A,@A+DPTR MOV P2,A ;輸出行號 MOV DPTR,#COL ;取列碼表 首地址 MOV A,R1 MOVC A,@A+DPTR MOV P0,A LCALL DL0 INC R1 INC R2 CJNE R1,#08H,XIANS MOV R1,#00H MOV A,R3 MOV R2,A DJNZ 52H,XIANS INC R0 ;第R0個數 MOV A,R0 MOV B,#08H MUL AB MOV R3,A MOV R2,A CJNE R0,#10,LOOP3 LJMP MAIN ORG 0650H DL0: MOV 50H,#03H LOOP0:MOV 51H,#0FFH LOOP1:NOP NOP DJNZ 51H,LOOP1 DJNZ 50H,LOOP0 ;2*255+2*255*3=2040US RET ORG 0800H COL: DB 01H,02H,04H,08H,10H,20H,40H,80H ;列值 ORG 0850H ROW: DB 00H,00H,3EH,41H,41H,41H,3EH,00H ;0 DB 00H,00H,00H,00H,21H,7FH,01H,00H ;1 DB 00H,00H,27H,45H,45H,45H,39H,00H ;2 DB 00H,00H,22H,49H,49H,49H,36H,00H ;3 DB 00H,00H,0CH,14H,24H,7FH,04H,00H ;4 DB 00H,00H,72H,51H,51H,51H,4EH,00H ;5 DB 00H,00H,3EH,49H,49H,49H,26H,00H ;6 DB 00H,00H,40H,40H,40H,4FH,70H,00H ;7 DB 00H,00H,36H,49H,49H,49H,36H,00H ;8 DB 00H,00H,32H,49H,49H,49H,3EH,00H ;9 END 5.實驗的問題及討論 (1)實驗室使用的SD411988LED點陣是行高列低,即編寫程序過程中應先給每一行賦值,當行為高對應列為低時,對應的發光二極管被點亮。 (2)實驗時遇到點陣最后一列不會被點亮的情況,經檢查后發現,在連接時,器件引腳被折進端口下方并未插入端口。 (3)在仿真時,點陣亮度很暗,在加入了驅動74LS244后,情況得到明顯改善。 6. 實驗心得及建議 事實證明,實驗過程中不能局限于實驗講義列寫的器件,應根據實際情況調整電路以達到預期效果。
第二部分 單片機接口實驗 實驗一 基于8255的并口擴展實驗 1.功能要求 ①了解8255芯片結構、工作方式。 ②學習使用8255芯片實現單片機與外部設備傳輸。 2.硬件原理 圖2.1.1 硬件原理圖 3.軟件程序流程 圖2.1.2 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#90H ;1 0010 000 A方式0輸入,B方式0輸出 MOV DPTR,#7FFFH ;A0 A1均置1選擇控制口 MOVX @DPTR,A MOV DPTR,#7CFFH MOVX A,@DPTR ;A輸入 MOV DPTR,#7DFFH ;指向端口B MOVX @DPTR,A LCALL DELAY LJMP MAIN ORG 0200H DELAY: MOV R0,#05FH LOOP0: MOV R1,#0FFH LOOP1: NOP NOP DJNZ R1,LOOP1 DJNZ R0,LOOP0 RET END 5.實驗的問題及討論 注意應先選擇控制口,規定輸入輸出端口和輸入輸出方式。DPTR為I/O尋址16位寄存器,沒有用到的引腳賦1。 6.實驗心得及建議 在做接口實驗時,應充分學習和理解外部芯片作用以及連接方式。 嘗試盡量記憶芯片類型功能以及各引腳功能。
實驗十一 LCM控制實驗 1.功能要求 完成與LCM1602的接口,并嘗試各種顯示控制功能。 2.硬件原理 圖2.11.1 硬件原理圖 3.軟件程序流程 圖2.11.2 程序流程圖 4.程序清單 ORG 0000H LJMP MAIN ORG 0030H MAIN: LCALL CSH MOV R2,#00H MOV R3,#00H MOV R0,#80H LCALL WRI MOV DPTR,#TAB FIRST:MOV A,R2 MOVC A,@A+DPTR MOV R1,A LCALL WRD MOV 50H,#0FFH LCALL DELAY INC R2 CJNE R2,#14,FIRST MOV R0,#0C0H LCALL WRI MOV DPTR,#TAB1 SEC: MOV A,R3 MOVC A,@A+DPTR MOV R1,A LCALL WRD MOV 50H,#0FFH LCALL DELAY INC R3 CJNE R3,#16,SEC LJMP MAIN ;********延時子程序****** ORG 0200H DELAY:MOV 51H,#0FFH DJNZ 51H,$ DJNZ 50H,DELAY RET ;********寫指令代碼子程序****** ORG 0250H WRI: CLR P2.0 ;RS=0 指令 SETB P2.1 ;RW=1,忙標志和地址計數器讀出, LOP0: SETB P2.2 ;E=1,讀寫使能,高電平有效 MOV P0,#0FFH ;讀P0口狀態 MOV A,P0 ;讀P0口狀態,讀IR CLR P2.2 ANL A,#80H CJNE A,#0,LOP0 ;D7腳為高時,忙于內部操作,一直檢測 CLR P2.0 CLR P2.1 SETB P2.2 MOV P0,R0 MOV 50H,#2 ;延時約510Us LCALL DELAY CLR P2.2 ;RS=0,RW=0,E下降沿,寫指令代碼 RET ;********寫數據子程序****** ORG 0450H WRD: CLR P2.0 ;RS=0 指令 SETB P2.1 ;RW=1,忙標志和地址計數器讀出, LOP1: SETB P2.2 ;E=1,讀寫使能,高電平有效 MOV P0,#0FFH ;讀P0口狀態 MOV A,P0 ;讀P0口狀態,讀IR CLR P2.2 ANL A,#10000000B CJNE A,#0,LOP1 ;D7腳為高時,忙于內部操作,一直檢測 SETB P2.0 CLR P2.1 MOV P0,R1 MOV 50H,#2 LCALL DELAY SETB P2.2 MOV 50H,#2 LCALL DELAY CLR P2.2 RET ;********初始命令子程序****** ORG 0600H CSH: MOV R0,#38H LCALL WR ;L L L L H H(DL 8位數據接口模式) H(雙N) L(F) L L 雙列顯示,字形5*7 MOV R0,#0FH LCALL WRI ;LL L L L L H H H H 開顯示,光標閃爍 MOV R0,#01H LCALL WRI ;清除LCD顯示屏 RET ORG 0800H TAB: DB 57H,78H,79H,20H,69H,73H,20H,61H,20H,67H,69H,72H,6CH,2EH ;Wxy is a girl. ORG 0850H TAB1: DB 57H,61H,6EH,67H,78H,79H,32H,30H,31H,36H,30H,31H,32H,33H,31H,32H ;Wangxy2016012312 END 5.實驗的問題及討論 (1)考慮到使程序方便用戶設置顯示功能,方便程序員執行寫指令、寫數據操作;將初始化顯示設置和寫指令數據程序編寫為子程序,在主程序中直接調用即可。 (2)注意在每次執行寫操作過程時,應先檢測部件是否正忙,若不忙執行相關指令,若忙循環檢測直至不忙。 (3)每次讀寫引腳前,應先置位E讀寫使能端。 6.實驗心得及建議 外部設備功能較多,指令也較復雜,實驗前要先捋清思路,仔細讀外部設備的相關功能介紹。 建議更新實驗中部分硬件以方便仿真,而且更有利于實驗的進行。
課程心得及建議 整個學期下來很難忘的一堂課就是《微機原理及接口技術》,自己上課很少跑神,一方面是知識點比較細碎,需要集中精神學習,另一方面在王老師的帶動下,課堂氛圍積極活躍,感覺每個同學都在很認真的思考,自己想不到或者剛想到的問題,也總會有同學及時提出來,下課更是有很多同學圍著老師問東問西,很感謝王老師一年來的認真授課,我們真的學到很多東西,當實驗做完后,成就感是難以言表的。 建議實驗室和實驗指導書能更新一些器件,淘汰一些老化不常用的芯片,擴展一些趣味實驗,可以是對基礎實驗知識的進一步運用,以增強同學們的學習興趣,激發同學們的實驗熱情。
完整的Word格式文檔51黑下載地址:
單片機原理實驗總結.doc
(1.24 MB, 下載次數: 10)
2018-8-15 12:04 上傳
點擊文件名下載附件
|