《分支與循環(huán)程序設計實驗 資料報告材料》由會員分享,可在線閱讀,更多相關《分支與循環(huán)程序設計實驗 資料報告材料(29頁珍藏版)》請在裝配圖網上搜索。
1、word
實驗名稱 分支與循環(huán)程序設計實驗
指導教師 羅志祥
專業(yè)班級 光電1406段昳暉 學號 U2014*****
聯系 137********
一、 任務要求
1. 設有8bits符號數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元,請按要求編寫完整程序。
2. 利用51系列單片機設計一個24小時制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
二、 設計思路
1. 設有8
2、bits符號數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元,請按要求編寫完整程序。
將外部單元1000H中的X,通過分支判斷,分別執(zhí)行不同的語句,三條語句分別為標記為L1、L2、L3,先比擬X與64的大小關系,再判斷X與10的大小關系,主要利用比擬轉移指令CJNE,以與執(zhí)行CJNE指令后的進位位CY,進一步比擬大小,分別跳轉至對應語句。將結果存于外部單元的1001H以與1002H。
2. 利用51系列單片機設計一個24小時制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計
3、時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
主程序設計三層循環(huán),分別對應時、分、秒,最層安放一秒延時程序。利用R0、R1、R2計數,R3保存分鐘數、R4保存小時數,最層循環(huán)60次,中循環(huán)循環(huán)1次,中循環(huán)60秒,外循環(huán)循環(huán)1次,外循環(huán)循環(huán)24次,清零。其中對端口顯示的秒數、分鐘數、時間數,進展二進制修正。
利用循環(huán)來設計延時程序,合理計算語句長度,以與循環(huán)次數。
程序運行時修正P3.0的值,可以實現暫停計數和繼續(xù)的功能。
提高局部〔選做〕:
1) 實現4位十進制加、減1計數,千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計
4、數方式。
2) 利用P3口低四位狀態(tài)控制開始和停止計數,控制方式自定。
初始化P1、P2,,計數循環(huán)中插入一秒延時程序。R1存千百位、R2存?zhèn)€十位,P3.7=0時,進展加1計數,取出R2中的數存于A,對A 加1,同時進展十進制修正,存于P2,達到99,如此進位對千百位進展加1。P3.7=1時,進展減一操作,取出R1中的數存于A,對A減1,同時進展十進制修正,存于P1,達到0,如此對P2,對R2進展減一。
計數循環(huán)前判斷P3.0的值,當P3.0=1時,開始計數,P3.0=0時,原地循環(huán),停止計數,直到P3.0=1,可以實現隨時停止與開始。
三、 資源分配
1. 設有8bits符號
5、數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元,請按要求編寫完整程序。
X存于片外1000H
Y存于片外1001H、1002H
其中,求平方時,低位存于1001H,,高位存于1002H
除二時,商存于1001H,,余數存于1002H
2. 利用51系列單片機設計一個24小時制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
P0輸出小時數
P1輸出分鐘數
P2輸出秒數
R0小時循
6、環(huán)計數
R1分鐘循環(huán)計數
R2秒循環(huán)計數
R3保存分鐘數
R4保存小時數
提高局部〔選做〕:
1〕實現4位十進制加、減1計數,千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數方式。
2〕利用P3口低四位狀態(tài)控制開始和停止計數,控制方式自定。
P1輸出千百位
P2輸出個十位
P3.0 計數開始與停止控制
P3.7 加1減1計數切換
R1存千百位
R2存?zhèn)€十位
四、 流程圖
1. 設有8bits符號數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元,請按要求編寫完整程序。
2. 利用51
7、系列單片機設計一個24小時制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
提高局部〔選做〕:
1〕實現4位十進制加、減1計數,千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數方式。
2〕利用P3口低四位狀態(tài)控制開始和停止計數,控制方式自定。
五、 源代碼 〔含文件頭說明、語句行注釋〕
1. 設有8bits符號數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元
8、,請按要求編寫完整程序。
File name: task
Description: 對8bits符號數X,對于不同的X進展不同的運算操作
Date:
Designed by:
Source used: 1000H: 存X的值
1001H、1002H: 存Y的值
1001H:平方運算所得低位;除法運算所得商
1002H:平方運算所得高位;除法運算所得余數
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#1000H ;X存于1000H
9、 MOV A,#-1 ;給X賦值
MOV B,#0
MOVX DPTR,A
;正負判斷
ACC.7,L3;X<0,L3
;X>0
CJNE A,#64,L2 ;A!=64,L2
SJMP L1
L1: MOV B,A ;X>=64
MUL AB
SJMP STORE ;低位存于1001H,?高位存于1002H
L2: JNC L1 ;X>64,L1
CJNE A,#10,L4 ;A!=10,L4
SJMP L3 ;X
10、=10,L3
L4: JC L3 ;X<10,L3
MOV B,#2
DIV AB ;X>10
SJMP STORE ;商存于1001H,余數存于1002H
L3: CPL A ;X<=10
STORE: INC DPTR ;結果存于1001H
MOVX DPTR,A
INC DPTR
MOV A,B
MOVX DPTR,A
SJMP $
END
2. 利用51系列單片機設計一個24小時
11、制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
3.
File name: task2.asm
Description: 24小時制電子時鐘
Date:
Designed by: DYH
Source used:
P0:輸出小時數
P1:輸出分鐘數
P2:輸出秒數
R0:小時循環(huán)計數
R1:分鐘循環(huán)計數
R2:秒循環(huán)計數
R3:保存分鐘數
R4:保存小時數
ORG 0
12、000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#40H
MOV P0,#0
MOV P1,#0
MOV P2,#0
MOV R3,#0 ;保存小時
MOV R4,#0 ;保存分鐘
;設定循環(huán)
MOV R0,#24 ;小時 外循環(huán)·24
MOV R1,#59 ;分鐘 中循環(huán)·60
MOV R2,#59 ;秒 循環(huán)·60
CLR A
LOOP: JNB P3.0,$ ;p3.0=0,完畢計數
LCALL DELAY ;延時1s
13、ADD A,#1
DA A
MOV P2,A
DJNZ R2,LOOP
MOV A,R3 ;分鐘開始計數 將分鐘賦給A
ADD A,#1 ;分鐘+1
DA A
MOV R3,A
MOV P1,A
CLR A ;秒清零
MOV R2,#59 ;重置循環(huán)·
DJNZ R1,LOOP;R1!=0,中循環(huán)
MOV R3,#0 ;分鐘清零,小時計數
MOV A,R4
ADD A,#1
DA A
MOV R4,A
MOV
14、 P0,A
MOV R2,#59 ;重置中循環(huán)
MOV R1,#59 ;重置外循環(huán)
DJNZ R0,LOOP
DONE: SJMP $
DELAY: MOV R7,#11 ;n==((201*5+5)*90+9)*11+2=1000001
DELAY3: MOV R6,#90 ;t=1.000001s
DELAY2: MOV R5,#201
DELAY1: NOP
NOP
NOP
DJNZ R5,DELAY1
NOP
NOP
DJNZ R6,D
15、ELAY2
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY3
RET
END
提高局部〔選做〕:
1〕實現4位十進制加、減1計數,千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數方式。
2〕利用P3口低四位狀態(tài)控制開始和停止計數,控制方式自定。
Description: 實現4位十進制加、減1計數
Date:
Designed by: DYH
Source used:
P1輸出千百位
P2輸出個十位
P3.0 計數開始與停止控制
P3.7 加
16、1減1計數切換
R1存千百位
R2存?zhèn)€十位
ORG 0000H
MOV P1,#0 ;輸出千百位
MOV P2,#0 ;輸出個十位
MOV R1,#0 ;存千百位
MOV R2,#0 ;存?zhèn)€十位
LJMP MAIN
ORG 0100H
MAIN: P3.0,$;計數開始與停止控制
JNB P3.7,ADD1 ;加1減1,模式選擇
SUB1: MOV P1,#99
MOV P2,#99
MOV R1,#99
LOOP2: MOV R2,#99
LOOP1: P3.0,$
17、 JNB P3.7,LOOP3
MOV A,R2
LCALL DELAY
DEC A
MOV R2,A
MOV P2,R2
CJNE R2,#0H,LOOP1
MOV A,R1
DEC A
MOV R1,A
MOV P1,R1
CJNE R1,#0H,LOOP2
SJMP $
ADD1: MOV P1,#0
MOV P2,#0
MOV R1,#0
LOOP4: MOV R2,#0
LOOP3: P3.0,$
P3.7,LOOP1
18、 MOV A,R2
LCALL DELAY
INC A
MOV R2,A
MOV P2,R2
CJNE R2,#99H,LOOP3
MOV A,R1
INC A
MOV R1,A
MOV P1,R1
CJNE R1,#99H,LOOP4
MOV R1,#0
SJMP $
DELAY: MOV R7,#11 ;n==((201*5+5)*90+9)*11+2=1000001
DELAY3: MOV R6,#90 ;t=1.000001s
DELAY2: MOV R
19、5,#201
DELAY1: NOP
NOP
NOP
DJNZ R5,DELAY1
NOP
NOP
DJNZ R6,DELAY2
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY3
RET
END
六、 程序測試方法與結果
1. 設有8bits符號數X存于外部RAM單元,按以下方式計算后的結果Y也存于外部RAM單元,請按要求編寫完整程序。
(1) X=-30=E2H Y=1DH
(2) .X=5=05H
20、,Y=FAH
(3) .X=10=0AH,Y=F5H
(4) X=25=19h Y=0CH〔商〕 01H〔余數〕
(5) .X=64=40H Y=1000H
2. 利用51系列單片機設計一個24小時制電子時鐘,電子時鐘的時、分、秒數值分別通過P0、P1、P2端口輸出〔以壓縮BCD碼的形式〕。P3.0為低電平時開始計時,為高電平時停止計時。設計1s延時子程序〔延時誤差小于10us,晶振頻率12MHz〕。
(1) P3.0=0,停止計數
(2) 分鐘進位前
(3) 分鐘進位后
(4) 小時進位前
21、
(5) 小時進位后
提高局部〔選做〕:
1〕實現4位十進制加、減1計數,千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數方式。
2〕利用P3口低四位狀態(tài)控制開始和停止計數,控制方式自定。
(1) P3.0=1,停止計數
(2) P3.0=1,中途停止計數
(3) P3.0=0,從暫停點繼續(xù)計數
(4) P3.7=0,加1計數前后
(5) P3.7=1,減1計數前后
思考題
1. 實現多分支結構程序的主要方法有哪些?舉例說明。
2. 在編程上,十進制加1計數器與十六進制加1計數器的區(qū)別是什么?怎樣用十進制加法指令實現減1計數?
十進制加1計數器,逢10進1,計數模為10,十六進制加1計數器逢16進1,計數模為16,加上1的補碼,再通過DA,進展BCD修正
本人承諾:
本報告內容真實,無偽造數據,無抄襲他人成果。本人完全了解學校相關規(guī)定,如假設違反,愿意承擔其后果。
簽字:
2016 年 10 月 25 日
其它說明:
1.標題:黑體,小四號
3.流程圖使用 SmartDraw7 或Visio軟件繪制
29 / 29