第一篇:基于PIC單片機(jī)電子萬(wàn)年歷實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)報(bào)告
姓名:文可鑫學(xué)號(hào):20072121010專業(yè):電子信息工程
1編寫(xiě)一個(gè)秒表程序,使用查詢方式。
listp=16f877a
include“p16f877a.inc”
include
countequ20h
count_sequ21h
org000h
startnop
callInitSPI
bankselOPTION_REG
movlw04h
movwfOPTION_REG
bankselINTCON
movlw00h
movwfINTCON
movlw06h
movwfTMR0
movlwd'131'
movwfcount
movlw00h
movwfcount_s
mainbtfssINTCON,T0IF
goto$-1
movlw06h
movwfTMR0
bcfINTCON,T0IF
incfcount,f
btfssSTATUS,Z
gotomain
movlwd'131'
movwfcount
incfcount_s,f
movfcount_s,w
sublwd'60'
btfscSTATUS,Z
clrfcount_s
movfcount_s,w
callBin2BCD
movfDIS_TEMP2,w
callCHAR_CODE1
movwfDIS_TEMP2movfDIS_TEMP1,wcallCHAR_CODE1movwfDIS_TEMP1callLEDlightnop
gotomain CHAR_CODE1;共陰極字符表
ADDWF PCL,F
RETLW 3fh;0RETLW 06h;1RETLW 5bh;2RETLW 4fh;3RETLW 66h;4RETLW 6dh;5RETLW 7dh;6RETLW 07h;7RETLW 7fh;8RETLW 6fh;9 Bin2BCD
CLRF DIS_TEMP1MOVWF DIS_TEMP2 Ttenth
MOVLW.10SUBWF DIS_TEMP2,WBTFSS STATUS,CGOTO OUT
MOVWF DIS_TEMP2INCF DIS_TEMP1,FGOTO Ttenth OUT
RETURN
end
2編寫(xiě)一個(gè)秒表程序,使用中斷方式。listp=16f877a
include“p16f877a.inc” include
gotointp startnop
callInitSPIbankselOPTION_REGmovlw44h
movwfOPTION_REGbankselINTCONmovlw0a0hmovwfINTCONmovlw06hmovwfTMR0movlwd'131'movwfcountmovlw00hmovwfcount_s heregotohere intp
btfssINTCON,T0IFgoto$-1movlw06hmovwfTMR0
bcfINTCON,T0IFincfcount,fbtfssSTATUS,Zgotointpmovlwd'131'movwfcountincfcount_s,fmovfcount_s,wsublwd'60'btfscSTATUS,Zclrfcount_smovfcount_s,wcallBin2BCDmovfDIS_TEMP2,wcallCHAR_CODE1movwfDIS_TEMP2movfDIS_TEMP1,wcallCHAR_CODE1movwfDIS_TEMP1callLEDlightnop
RETFIE
CHAR_CODE1;共陰極字符表
ADDWF PCL,F
RETLW 3fh;0RETLW 06h;1RETLW 5bh;2RETLW 4fh;3RETLW 66h;4RETLW 6dh;5RETLW 7dh;6RETLW 07h;7RETLW 7fh;8RETLW 6fh;9 Bin2BCD
CLRF DIS_TEMP1MOVWF DIS_TEMP2 TtenthMOVLW.10SUBWF DIS_TEMP2,WBTFSS STATUS,CGOTO OUT
MOVWF DIS_TEMP2INCF DIS_TEMP1,FGOTO Ttenth OUT
RETURN
end CHAR_CODE1;共陰極字符表
ADDWF PCL,F
RETLW 3fh;0RETLW 06h;1RETLW 5bh;2RETLW 4fh;3RETLW 66h;4RETLW 6dh;5RETLW 7dh;6RETLW 07h;7RETLW 7fh;8RETLW 6fh;9 Bin2BCD
CLRF DIS_TEMP1MOVWF DIS_TEMP2 Ttenth
MOVLW.10SUBWF DIS_TEMP2,WBTFSS STATUS,CGOTO OUT
MOVWF DIS_TEMP2INCF DIS_TEMP1,FGOTO Ttenth OUT
RETURN
end
listp=16f877a
include“p16f877a.inc” include
callInitSPIbankselOPTION_REGmovlw04h
movwfOPTION_REGbankselINTCONmovlw00hmovwfINTCONmovlw06hmovwfTMR0movlwd'131'movwfcountmovlw00hmovwfcount_s heregotohere
intpbtfssINTCON,T0IFgoto$-1movlw06hmovwfTMR0
bcfINTCON,T0IFincfcount,fbtfssSTATUS,Zgotointpmovlwd'131'movwfcountincfcount_s,fmovfcount_s,w
sublwd'60'btfscSTATUS,Zclrfcount_smovfcount_s,wcallBin2BCDmovfDIS_TEMP2,wcallCHAR_CODE1movwfDIS_TEMP2movfDIS_TEMP1,wcallCHAR_CODE1movwfDIS_TEMP1callLEDlightnop
RETFIE
CHAR_CODE1;共陰極字符表
ADDWF PCL,F
RETLW 3fh;0RETLW 06h;1RETLW 5bh;2RETLW 4fh;3RETLW 66h;4RETLW 6dh;5RETLW 7dh;6RETLW 07h;7RETLW 7fh;8RETLW 6fh;9 Bin2BCD
CLRF DIS_TEMP1MOVWF DIS_TEMP2 Ttenth
MOVLW.10SUBWF DIS_TEMP2,WBTFSS STATUS,CGOTO OUT
MOVWF DIS_TEMP2INCF DIS_TEMP1,FGOTO Ttenth OUT
RETURN
end
第二篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)-電子萬(wàn)年歷
單片機(jī)及接口技術(shù)綜合實(shí)驗(yàn)
——————電子萬(wàn)年日歷系統(tǒng)一、題目:電子實(shí)時(shí)時(shí)鐘/萬(wàn)年日歷系統(tǒng)
二、功能要求:
1. 基本要求:
⑴ 顯示準(zhǔn)確的北京時(shí)間(時(shí)、分、秒),可用24小時(shí)制式; ⑵ 隨時(shí)可以調(diào)校時(shí)間。
2. 發(fā)揮要求:
⑴ 增加公歷日期顯示功能(年、月、日),年號(hào)只顯示最后兩位; ⑵ 隨時(shí)可以調(diào)校年、月、日;
⑶ 允許通過(guò)轉(zhuǎn)換功能鍵轉(zhuǎn)換顯示時(shí)間或日期。
三、方案考慮:
1、硬件方案:
⑴ 顯示器采用6位LED數(shù)碼管(共陽(yáng)),可分別顯示時(shí)間或日期;(通過(guò)KB鍵可切換)⑵ 顯示器的驅(qū)動(dòng)采用動(dòng)態(tài)掃描電路形式,以達(dá)到簡(jiǎn)化電路的目的。但要注意所需的驅(qū)動(dòng)電流比靜態(tài)驅(qū)動(dòng)時(shí)要大,因此要增加驅(qū)動(dòng)電路。可采用74LS244或者晶體管;其中74ls244是用來(lái)驅(qū)動(dòng)段選碼,晶體管是驅(qū)動(dòng)位選碼!⑶采用“一鍵多用方案”,以減少按鍵數(shù)目。本方案只采用了兩個(gè)按鍵 ⑷ 整體上要考慮:結(jié)構(gòu)簡(jiǎn)單、布局美觀、操作方便、成本低廉。
2、設(shè)計(jì)電路圖如下:
3、元件清單:
⑴ 89C51
1個(gè)
⑵ IC座(40腳)
3個(gè)(其中1個(gè)用于接插89C51、2個(gè)用于接插LED段數(shù)碼管)。⑶ 74LS244
1個(gè)(用于驅(qū)動(dòng)6個(gè)共陽(yáng)的LED段數(shù)碼管)。⑷ IC座(20腳)
1個(gè)(用于接插74LS244)。(5)顯示器:LED_8段數(shù)碼管(共陽(yáng)型)6個(gè)三極管:
(6)PNP(8550)
6個(gè)(用于驅(qū)動(dòng)6個(gè)共陽(yáng)型LED段數(shù)碼管)。
(7)微型開(kāi)關(guān):
3個(gè)(其中1個(gè)用于復(fù)位電路、其它用于鍵盤(pán))。(8)晶體振蕩器(12MHz):1個(gè)(用于振蕩電路)。(9)電阻器:
⑴ 3KΩ
1個(gè)(用于系統(tǒng)復(fù)位電路)。
⑵ 1KΩ
6個(gè)(用作PNP三極管基極電阻)。⑶ 100Ω
7個(gè)(驅(qū)動(dòng)器用作74LS244輸出限流電阻)。(10)電容器:
⑴ 10μF
1個(gè)(用于系統(tǒng)復(fù)位電路)。⑵ 30 pF
2個(gè)(用于系統(tǒng)振蕩電路)。(11)其它:
⑴ 萬(wàn)能電路板(10×15):
1塊 ⑵ 焊錫條:
2米 ⑶ 帶插頭、座的電源端子:
1條 ⑷ 各種顏色外皮的導(dǎo)線:
各1米(12)工具:
1.電烙鐵:
1把 2.剪鉗:
1把 3.鑷子:
1把 4.萬(wàn)用表:
1個(gè)(13)設(shè)備:
編程器(MEP300或TOP851)
6個(gè)
4、軟件方案:
只使用第一組工作寄存器,功能分布如下:
⑴ “時(shí)鐘”基準(zhǔn)時(shí)間由單片機(jī)內(nèi)部定時(shí)中斷來(lái)提供,定時(shí)時(shí)間應(yīng)該乘以一個(gè)整數(shù)得到“秒”,且不宜太長(zhǎng)或太短,最長(zhǎng)不能超過(guò)16位定時(shí)器的最長(zhǎng)定時(shí)時(shí)間,最短不能少于定時(shí)中斷服務(wù)程序的執(zhí)行時(shí)間。一般來(lái)說(shuō),基準(zhǔn)時(shí)間越短,越有利于提高時(shí)鐘運(yùn)行的精確度。本實(shí)驗(yàn)定時(shí)5mS。乘以一個(gè)整數(shù)200得到“1秒”.⑵ 用一個(gè)計(jì)數(shù)器(R4)對(duì)定時(shí)中斷的次數(shù)進(jìn)行計(jì)數(shù),從而可以實(shí)現(xiàn)“秒”定時(shí),同理可以實(shí)現(xiàn)“分”定時(shí)和“時(shí)”定時(shí),甚至于“日”、“月”、“年”定時(shí)。
⑶ 顯示器采用動(dòng)態(tài)驅(qū)動(dòng)時(shí)要注意到:LED的 “啟輝時(shí)間”和 “余輝時(shí)間”。驅(qū)動(dòng)信號(hào)的維持時(shí)間必須大于啟輝時(shí)間;而驅(qū)動(dòng)信號(hào)的間歇時(shí)間必須小于余輝時(shí)間。“啟輝時(shí)間”和 “余輝時(shí)間”與驅(qū)動(dòng)電流的大小有關(guān),驅(qū)動(dòng)電流越大,啟輝時(shí)間越短,而余輝時(shí)間越長(zhǎng)。但是,驅(qū)動(dòng)電流的大小受到驅(qū)動(dòng)電路的驅(qū)動(dòng)能力和LED極限功耗的限制。本實(shí)驗(yàn)采用了74ls244和晶體管8550驅(qū)動(dòng),并進(jìn)行適當(dāng)?shù)难訒r(shí)3ms解決上述問(wèn)題。
⑷ LED的余輝時(shí)間使動(dòng)態(tài)驅(qū)動(dòng)顯示得到保證,但也要注意到它在更新顯示內(nèi)容時(shí),可能造成顯示字符的混亂模糊。為此,在把“更新顯示內(nèi)容”寫(xiě)入顯示器之前,必須把所有的LED熄滅,即要把一個(gè)“熄滅驅(qū)動(dòng)信號(hào)”先寫(xiě)入顯示器。
⑸對(duì)于按鍵的處理,采用中斷。產(chǎn)生中斷后先判有無(wú)按鍵被按下,還要考慮到“去抖動(dòng)影響”問(wèn)題,可采用軟件延遲法解決這個(gè)問(wèn)題,延遲時(shí)間至少10mS。而單純進(jìn)行軟件延時(shí)的話會(huì)令到顯示管產(chǎn)生斷續(xù)的情況,故調(diào)用顯示程序作為延時(shí)時(shí)間。這樣就合理地處理好這兩者的矛盾了。
⑹ 把鍵盤(pán)的按鍵分兩種情況來(lái)處理,操作簡(jiǎn)單。
①
調(diào)整時(shí)間時(shí),先按下KA鍵,(KA鍵為選擇調(diào)整位置的鍵,如選調(diào)整秒或分),而此時(shí)的KB鍵只是用來(lái)加一操作。在調(diào)整時(shí)間狀態(tài)下,若在十秒內(nèi)檢測(cè)到?jīng)]有任何按鍵按下,則返回正常顯示時(shí)鐘狀態(tài)。
②
而不調(diào)整時(shí)間,即不按下KA鍵,KB的鍵只用來(lái)切換顯示日期和時(shí)鐘。⑺ 對(duì)于自動(dòng)識(shí)別“月大、月小”和“平年、閏年”的問(wèn)題,主要考慮: ① 月大、月小:
1~7月:逢單月為31天;逢雙月為30天,其中2月另行處理。8~12月:逢單月為30天;逢雙月為31天。②平年、閏年:
僅僅處理2月份的天數(shù):平年的2月份天數(shù)為28天,閏年的2月份天數(shù)為29天。
5、程序流程圖如下:(1)電子時(shí)鐘計(jì)算程序圖
(2)調(diào)整流程圖
程序編寫(xiě)如下:
;///////////////////////////////////////////////////////// ORG 0000H
LJMP START ORG 0003H LJMP PROINT0
;int0用來(lái)切換時(shí)鐘調(diào)整位置
ORG 0013H
;用來(lái)調(diào)整時(shí)間,只加不減 LJMP PROINT1
ORG 001BH
;5ms的延遲,計(jì)數(shù)200次則為1秒
LJMP PROTIME
ORG 0030H
;主程序
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;0 1 2 3 4 5 6 7 8 9
ORG 0050H
START: MOV TCON,#05H
;中斷初始化
MOV IE ,#8DH MOV TMOD,#10H MOV TH1,#0eCH
;定時(shí)器初始化
MOV TL1,#78H
MOV 31H,#0AH
;10秒 MOV 32H,#1EH;30分 MOV 33H,#09H;9點(diǎn) MOV 34H,#0AH MOV 35H,#06H MOV 36H,#05H MOV 37H,#14H
;10號(hào);6月;2005年
;R7 存放切換標(biāo)志 0 NORMAL , 1 HOUR ,2 MINUTE ,3 SECOND ,4 YEAR,5 MONTH,6 DAY
MOV R1,#00H
;確定在調(diào)時(shí)不按鍵的最長(zhǎng)時(shí)間,10秒后返回normal狀態(tài)
MOV R7,#00H
;切換標(biāo)志
MOV 40H,#00H
;十六進(jìn)制轉(zhuǎn)換BCD的高位 MOV 41H,#00H
;十六進(jìn)制轉(zhuǎn)換BCD的低位
MOV R6,#00H
;調(diào)時(shí)的位閃爍的時(shí)間間隔
MOV R4,#00H
;用來(lái)計(jì)數(shù)5ms的中斷次數(shù),200次則一秒
mov r3,#00h
SETB TR1
;開(kāi)始計(jì)時(shí) AGAIN:
ACALL PROSHOW
;顯示
AJMP AGAIN
PROSHOW:
CJNE R3,#00H,SHOWDATE
;如果r3等于1就顯示日期,等于0就顯示時(shí)鐘 CJNE R7,#04H,DATE1
;顯示程序
AJMP SHOWDATE
;showdate顯示年月日 AJMP SHOWDATE DATE1: CJNE R7,#05H,DATE2 DATE2: CJNE R7,#06H,SHOWCLOCK AJMP SHOWDATE
showCLOCK: MOV R0,33H
;showclock顯示時(shí)分秒,先顯示時(shí)
ACALL PROHTOD
CJNE R7,#01H,CLK1 INC R6
CJNE R6,#03H,CLK2
;若處于調(diào)時(shí)狀態(tài),則該位閃爍
MOV R6 ,#00H CLK1: clr P2.4 mov a,41H MOV P0, a
;顯示時(shí)的低位 ACALL DELAY3MS CLK2: SETB P2.4 CLR P2.5 mov a,40H
MOV P0,a
;顯示時(shí)的高位 ACALL DELAY3MS SETB P2.5
MOV R0,32H
;顯示分 ACALL PROHTOD CJNE R7,#02H,CLK3 INC R6
CJNE R6,#03H,CLK4
;若處于調(diào)時(shí)狀態(tài),則該位閃爍
MOV R6,#00H CLK3: CLR P2.2
mov a,41H MOV P0, a
;顯示分的低位 ACALL DELAY3MS CLK4:
SETB P2.2 CLR P2.3 mov a,40h MOV P0,a
;顯示分的高位 ACALL DELAY3MS SETB P2.3
MOV R0,31H
;顯示秒
ACALL PROHTOD CJNE R7,#03H,CLK5 INC R6
CJNE R6,#03H,CLK6
MOV R6,#00H CLK5: CLR P2.0 mov a,41H MOV P0, a
ACALL DELAY3MS CLK6: SETB P2.0 CLR P2.1 mov a,40h MOV P0,a
ACALL DELAY3MS SETB P2.1
RET
SHOWDATE: MOV R0,36H
ACALL PROHTOD CJNE R7,#04H,DAY1 INC R6
CJNE R6,#03H,DAY2
MOV R6,#00H DAY1: CLR P2.4 MOV P0,41H
ACALL DELAY3MS DAY2: SETB P2.4 CLR P2.5 MOV P0,40H
ACALL DELAY3MS SETB P2.5
MOV R0,35H
ACALL PROHTOD CJNE R7,#05H,MONTH1
;若處于調(diào)時(shí)狀態(tài),則該位閃爍
;顯示秒的低位
;顯示秒的高位
;顯示年
;若處于調(diào)時(shí)狀態(tài),則該位閃爍;顯示年的低位
;顯示年的高位
;顯示月
INC R6
CJNE R6,#03H,MONTH2
;若處于調(diào)時(shí)狀態(tài),則該位閃爍
MOV R6,#00H MONTH1: CLR P2.2 MOV P0,41H
;顯示月的低位
ACALL DELAY3MS MONTH2: SETB P2.2
CLR P2.3 MOV P0,40H
;顯示月的高位
ACALL DELAY3MS SETB P2.3
MOV R0,34H
ACALL PROHTOD CJNE R7,#06H,YEAR1 INC R6
CJNE R6,#03H,YEAR2
MOV R6,#00H YEAR1: CLR P2.0
MOV P0,41H
ACALL DELAY3MS YEAR2: SETB P2.0 CLR P2.1 MOV P0,40H
ACALL DELAY3MS SETB P2.1
RET
PROHTOD:PUSH ACC
MOV A,R0 MOV B,#0AH DIV AB MOV DPTR,#0030H MOVC A,@A+DPTR MOV 40H,A MOV A,B MOVC A,@A+DPTR MOV 41H,A POP ACC RET
;顯示日
;若處于調(diào)時(shí)狀態(tài),則該位閃爍
;十六進(jìn)制數(shù)轉(zhuǎn)換成bcd碼,且可以直接輸出p0口
DELAY3MS:
;DELAY3MS MOV 45H,#08H DELAY1: MOV 46H,#0FFH DELAY2: DJNZ 46H,DELAY2 DJNZ 45H,DELAY1 RET
PROINT0:
CLR EX0
;切換鍵中斷程序 MOV R3,#00H ACALL PROSHOW MOV C,P3.2 JC IEXIT0 MOV R1,#00H INC R7 CJNE R7,#07H,IEXIT0
MOV R7,#00H INT01: MOV C,P3.2 JC INT02 ACALL PROSHOW AJMP INT01 INT02: ACALL PROSHOW IEXIT0: SETB EX0 RETI
PROINT1:CLR EX1
ACALL PROSHOW MOV C,P3.3 JC IEXIT1 LCALL ISYEAR
;判斷平年閏年
LCALL ISMONTH
;判斷月份,確定最大日數(shù)
MOV R1,#00H CJNE R7,#00H,NEXT1
;若不是調(diào)時(shí)狀態(tài),按此鍵就是切換顯示日期、時(shí)鐘
INC R3 CJNE R3,#02H,IEXIT1 MOV R3,#00H AJMP IEXIT1 NEXT1: mov r3,#00h
CJNE R7,#03H,NEXT2
;修改秒位 INC 31H MOV A,31H CJNE A,#3CH,INT11
;遇60變0 MOV 31H,#00H AJMP IEXIT1
NEXT2: CJNE R7,#02H,NEXT3
;修改分位
INC 32H MOV A,31H
CJNE A,#3CH,INT11
;遇60變0 MOV 31H,#00H AJMP IEXIT1 NEXT3: CJNE R7,#01H,NEXT4
;修改時(shí)位
INC 33H MOV A,33H CJNE A,#18H,INT11
;遇24變0 MOV 33H,#00H AJMP IEXIT1 NEXT4: CJNE R7,#06H,NEXT5
;修改日
INC 34H MOV A,34H CJNE A,49H,INT11
;到月底就返回月初 MOV 34H,#01H AJMP IEXIT1
NEXT5: CJNE R7,#05H,NEXT6
;修改月
INC 35H
MOV A,35H CJNE A,#0DH,INT11
;十二月過(guò)后就跳回1月 MOV 35H,#01H AJMP IEXIT1 NEXT6: CJNE R7,#04H,INT11
;修改年
INC 36H
MOV A,36H CJNE A,#64H,INT11
MOV 36H,#00H MOV C,P3.3 INT11: JC INT12 ACALL PROSHOW AJMP INT11 INT12: ACALL PROSHOW IEXIT1: setb EX1
RETI PROTIME:
MOV TMOD,#10H MOV TH1,#3CH
;定時(shí)器初始化 MOV TL1,#60H setb tr1 INC R4
CJNE R4,#0c8H,EXIT
MOV R4,#00H
;計(jì)滿1秒則清零 CJNE R7,#00H,DIAOSHI
AJMP NORMAL DIAOSHI:INC R1
;調(diào)時(shí)不按鍵的最長(zhǎng)時(shí)間為10秒,在此期間又鍵按下重新計(jì)時(shí)
CJNE R1,#0AH,EXIT MOV R7,#00H
;到10秒則返回正常顯示狀態(tài) MOV R1,#00H AJMP EXIT
NORMAL:ACALL ISYEAR
;判斷平閏年,返回標(biāo)志48h,0為平年,1為閏年
ACALL ISMONTH
;判斷哪個(gè)月,返回該月的最大日數(shù),存放在49h
INC 31H
MOV A,31H
;秒加一 CJNE A,#3CH,EXIT MOV 31H,#00H
INC 32H
;分加一 MOV A,32H CJNE A,#3CH,EXIT MOV 32H,#00H INC 33H
;時(shí)加一 MOV A,33H CJNE A,#18H,EXIT MOV 33H,#00H INC 34H
MOV A,34H CJNE A,49H,EXIT MOV 34H,#01H INC 35H
MOV A,35H CJNE A,#0DH,EXIT MOV 35H,#01H INC 36H
MOV A,36H CJNE A,#64H,EXIT MOV 36H,#00H;年加一;月加一;日加一 EXIT:
RETI
ISYEAR: MOV A,36H;判斷平閏年
MOV B,#04H
DIV AB MOV A,B CJNE A,#00H,EXITYEAR1 MOV 48H,#01H
;閏年 SJMP EXITYEAR MOV 48H,#00H
;平年 EXITYEAR1: EXITYEAR: RETI
ISMONTH:
MOV A,35H
;開(kāi)始檢查月份 CJNE A,#02H,NEXTMON1
;判斷二月 MOV R2,48H
CJNE R2,#00H,RUNNIAN MOV 49H,#1DH
;平年為28天,賦29給49h AJMP EXITMONTH RUNNIAN:MOV 49H,#1EH
;閏年為29天,賦30天給49h
AJMP EXITMONTH
NEXTMON1: CJNE A,#04H,NEXTMON2
AJMP XIAOYUE
NEXTMON2:CJNE A,#06H,NEXTMON3 AJMP XIAOYUE
NEXTMON3:CJNE A,#09H,NEXTMON4 AJMP XIAOYUE NEXTMON4:CJNE A,#0BH,DAYUE XIAOYUE: MOV 49H,#1FH
;四,六,九,十一月是小月,30天,但應(yīng)該賦31天給比較值49h,AJMP EXITMONTH DAYUE: MOV 49H,#20H
;其他月份為大月,31天,賦32天給49h EXITMONTH: RETI END
第三篇:PIC單片機(jī)報(bào)告
PIC單片機(jī)實(shí)驗(yàn)報(bào)告
一、定時(shí)器的使用
(1)實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)學(xué)習(xí)和實(shí)驗(yàn)理解PIC單片機(jī)定時(shí)器的內(nèi)部工作原理,學(xué)會(huì)定時(shí)器 初始化配置編程,并能利用實(shí)驗(yàn)板對(duì)定時(shí)器有簡(jiǎn)單的應(yīng)用。
(2)實(shí)驗(yàn)器材:16位PIC單片機(jī)學(xué)習(xí)板。
(3)實(shí)驗(yàn)過(guò)程:
1、PIC單片機(jī)定時(shí)器概述:根據(jù)具體器件,dsPIC30F 器件系列提供了幾個(gè)16 位定時(shí)器。這些定時(shí)器被指定為T(mén)imer1、Timer2、Timer3 ……等。可分為三種類型:A類型時(shí)基、B類型時(shí)基和C類型時(shí)基。
A類型時(shí)基:在大多數(shù)dsPIC30F 器件上,至少有一個(gè)A 類型定時(shí)器。通常Timer1 是A 類型定時(shí)器。A 類型定時(shí)器與其他類型的定時(shí)器相比,有下列獨(dú)特的功能:
可以使用器件的低功耗32 kHz 振蕩器作為時(shí)鐘源工作
可以在使用外部時(shí)鐘源的異步模式下工作
A 類型定時(shí)器獨(dú)特的功能使它可以用于實(shí)時(shí)時(shí)鐘應(yīng)用(Real-Time Clock,RTC)。16 位定時(shí)器模式:在16 位定時(shí)器模式下,定時(shí)器在每個(gè)指令周期遞增,直到與預(yù)先裝入周期寄存器PR1 中的值匹配,然后復(fù)位至0,繼續(xù)計(jì)數(shù)。當(dāng)CPU 進(jìn)入空閑模式時(shí),定時(shí)器將停止遞增,除非TSIDL(T1CON<13>)位 = 0。如果TSIDL = 1,定時(shí)器模塊邏輯將繼續(xù)遞增,直到CPU 空閑模式終止。位同步計(jì)數(shù)器模式:在16 位同步計(jì)數(shù)器模式下,定時(shí)器將在外部時(shí)鐘信號(hào)的上升沿遞增,外部時(shí)鐘信號(hào)與內(nèi)部相位時(shí)鐘同步。定時(shí)器計(jì)數(shù),直到等于PR1 中預(yù)先裝入的值,然后復(fù)位至0,繼續(xù)計(jì)數(shù)。當(dāng)CPU 進(jìn)入空閑模式時(shí),同上。位異步計(jì)數(shù)器模式:在16 位異步計(jì)數(shù)器模式下,定時(shí)器在外部時(shí)鐘信號(hào)的上升沿遞增。定時(shí)器計(jì)數(shù),直到等于PR1 中預(yù)先裝入的值,然后復(fù)位至0,繼續(xù)計(jì)數(shù)。當(dāng)定時(shí)器配置為異步工作模式時(shí),CPU 進(jìn)入空閑模式,如果TSIDL = 1,則定時(shí)器將停止遞增。
B類型時(shí)基:在大多數(shù)dsPIC30F 器件上,如果存在Timer2 和Timer4,它們是B 類型定時(shí)器。與其他類型的定時(shí)器相比,B 類型定時(shí)器有下列獨(dú)特的功能:
B 類型定時(shí)器可以和C 類型定時(shí)器相連形成32 位定時(shí)器。B 類型定時(shí)器的TxCON
寄存器具備T32 控制位,用來(lái)使能32 位定時(shí)器功能。B 類型定時(shí)器的時(shí)鐘同步在預(yù)分頻邏輯后執(zhí)行。為輸入捕捉,輸出比較/ 簡(jiǎn)單PWM 模塊提供時(shí)基
C類型時(shí)基:在大多數(shù)dsPIC30F 器件上,Timer3 和Timer5 是C 類型定時(shí)器。與其他類型的定時(shí)器相比,C 類型定時(shí)器有下列獨(dú)特的功能:
C 類型定時(shí)器可以和B 類型定時(shí)器相連形成32 位定時(shí)器。在某個(gè)給定的器件上,至少有一個(gè)C 類型定時(shí)器能夠觸發(fā)A/D 轉(zhuǎn)換。
相關(guān)寄存器:要使用定時(shí)器,首先要了解定時(shí)器相關(guān)寄存器,dspic30f4011的定時(shí)器相關(guān)寄存器有:
以A類時(shí)基定時(shí)器(Timer1)為例,要用到的相關(guān)寄存器有:T1CON(定時(shí)器1控制寄存器)、IFS0bits(中斷標(biāo)志狀態(tài)寄存器)、IPC0bits(中斷優(yōu)先級(jí)控制寄存器)、IEC0bits(中斷允許控制寄存器)、PR1(定時(shí)器初值寄存器)
定時(shí)器模式:所有類型的定時(shí)器都可以在定時(shí)器模式下工作。在定時(shí)器模式下,定時(shí)器的輸入時(shí)鐘由內(nèi)部系統(tǒng)時(shí)鐘(FOSC/4)提供。當(dāng)使能為該模式時(shí),對(duì)于1:1 的預(yù)分頻器設(shè)置,定時(shí)器的計(jì)數(shù)值在每個(gè)指令周期都會(huì)加1。
通過(guò)清零TCS 控制位(TxCON<1>)選擇定時(shí)器模式。
同步模式控制位TSYNC(T1CON<2>)在該模式下不起作用,因?yàn)槭褂昧讼到y(tǒng)時(shí)鐘源產(chǎn)生定時(shí)器時(shí)鐘。
定時(shí)器初值計(jì)算:指令周期=1/(fosc/4),定時(shí)器初值=所需定時(shí)時(shí)間/(指令周期×分頻比)
程序代碼:
#include “p30f4011.h” void timer_init()
{
T1CON=0X8030;
//預(yù)分頻256,ton=1,開(kāi)始計(jì)時(shí),其余都為0//清除TMR1的中斷標(biāo)志 //中斷優(yōu)先級(jí)為7 //使能中斷
//在預(yù)分頻256模式下,計(jì)時(shí)1秒
IFS0bits.T1IF = 0;
IPC0bits.T1IP = 7;IEC0bits.T1IE = 1;}
PR1=0x1c20;
void __attribute__((__interrupt__))_T1Interrupt(void)//中斷服務(wù)程序 {}
void main(){}
TRISE=0x100;
//將LED相連IO口設(shè)為輸出 //執(zhí)行定時(shí)器1初始化 //PORTE初始化輸出為低
IFS0bits.T1IF=0;PORTE++;
//軟件清除定時(shí)器1中斷標(biāo)志位 //實(shí)現(xiàn)每一秒對(duì)PORTE加1,用LED顯示
timer_init();PORTE=0;
while(1);//程序進(jìn)入死循環(huán),定時(shí)執(zhí)行定定時(shí)器中斷程序
二、中斷
實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)學(xué)習(xí)和實(shí)踐理解PIC單片機(jī)中斷的特性及工作原理,學(xué)會(huì)中斷的初始化配置,并能對(duì)中斷進(jìn)行簡(jiǎn)單的應(yīng)用。
實(shí)驗(yàn)器材:16位PIC單片機(jī)學(xué)習(xí)板。
實(shí)驗(yàn)過(guò)程:
dsPIC30F的中斷特性:
多達(dá)8 個(gè)處理器異常和軟件陷阱 7 個(gè)用戶可選擇的優(yōu)先級(jí)
具有多達(dá)62 個(gè)向量的中斷向量表(Interrupt Vector Table,IVT)每個(gè)中斷或異常源都有唯一的向量 指定的用戶優(yōu)先級(jí)中的固定優(yōu)先級(jí)
用于支持調(diào)試的備用中斷向量表(Alternate Interrupt Vector Table,AIVT)固定的中斷入口和返回延時(shí)
中斷優(yōu)先級(jí):
(1)可以為每個(gè)外設(shè)中斷源分配7 個(gè)優(yōu)先級(jí)之一。
可用的優(yōu)先級(jí)從1 開(kāi)始為最低優(yōu)先級(jí),7 級(jí)為最高優(yōu)先級(jí)。如果與中斷源有關(guān)的IPC 位被全部清零,則中斷源被有效禁止。
(2)由于特定的優(yōu)先級(jí)會(huì)被分配給一個(gè)以上的中斷請(qǐng)求源,所以在給定的用戶分配
級(jí)別內(nèi)提供了一種解決優(yōu)先級(jí)沖突的方法。
根據(jù)每個(gè)中斷源在IVT中的位置,它們都有一個(gè)自然順序優(yōu)先級(jí)。中斷向量的編號(hào)越低,自然優(yōu)先級(jí)越高,而向量的編號(hào)越高,自然優(yōu)先級(jí)越低。
(3)任何待處理的中斷源的總優(yōu)先級(jí)都首先由該中斷源在IPCx 寄存器中用戶分配的優(yōu)先級(jí)決定,然后由IVT 中的自然順序優(yōu)先級(jí)決定。
相關(guān)寄存器:INTCON1 和INTCON2(全局中斷控制寄存器)、IFSx(中斷標(biāo)志狀態(tài)寄存器)、IECx(中斷使能控制寄存器)、IPCx(中斷優(yōu)先級(jí)控制寄存器)、SR(CPU狀態(tài)寄存器)、CORCON(內(nèi)核控制寄存器)。
初始化配置:
1.如果不需要中斷嵌套,將NSTDIS 控制位置1。
2.通過(guò)寫(xiě)相應(yīng)的IPCx 控制寄存器中的控制位選擇中斷源的用戶分配優(yōu)先級(jí)。如果不需要多個(gè)優(yōu)先級(jí),所有允許的中斷源的IPCx 寄存器控制位均可以編程為同一個(gè)非零值。3.在相關(guān)的IFSx 狀態(tài)寄存器中清零與外設(shè)相關(guān)的中斷標(biāo)志狀態(tài)位。
4.通過(guò)在相應(yīng)的IECx 控制寄存器中置1 與中斷源相關(guān)的中斷允許控制位,使能中斷源。
程序代碼:
void init(){
IFS0bits.INT0IF = 0;//清除INT0的中斷標(biāo)志
IPC0bits.INT0IP = 7;//中斷優(yōu)先級(jí)為7 IEC0bits.INT0IE = 1;}
void __attribute__((__interrupt__))_INT0Interrupt(void)//中斷服務(wù)程序 {
IFS0bits.INT0IF = 0;Led=~Led;}
int main(){
unsigned char Led=0;init();while(1){
PORTE = Led;
//清INT0中斷標(biāo)志//實(shí)現(xiàn)LED亮滅變化 //使能中斷
}}
第四篇:PIC單片機(jī)課程設(shè)計(jì)報(bào)告
河北聯(lián)合大學(xué)輕工學(xué)院
QINGGONG COLLEGE, HEBEI UNITED UNIVERSITY
《PIC單片機(jī)課程設(shè)計(jì)》
學(xué)生姓名: 學(xué)號(hào): 學(xué)部:專業(yè)班級(jí):指導(dǎo)教師:
年月日
一、課程設(shè)計(jì)目的本課程設(shè)計(jì)是在《PIC單片機(jī)原理及應(yīng)用》及《單片機(jī)C語(yǔ)言編程》課程的基礎(chǔ)上,通過(guò)硬件設(shè)計(jì)、軟件編程及仿真調(diào)試的實(shí)踐,進(jìn)一步掌握PIC單片機(jī)的應(yīng)用方法,熟練掌握PICC C語(yǔ)言程序的編寫(xiě)與調(diào)試,是畢業(yè)設(shè)計(jì)前的一次重要實(shí)踐,為今后走上工作崗位打下堅(jiān)實(shí)的單片機(jī)應(yīng)用基礎(chǔ)。
二、設(shè)計(jì)題目及要求
2.1 設(shè)計(jì)題目:
基于PIC16F877單片機(jī)的多功能電子時(shí)鐘 2.2 功能實(shí)現(xiàn):
實(shí)時(shí)時(shí)鐘顯示,時(shí)間可調(diào);實(shí)時(shí)溫度顯示,并具有超限報(bào)警功能。輸出顯示采用LCD1602或LED七段數(shù)碼顯示器。2.3 設(shè)計(jì)要求:
自己設(shè)計(jì)硬件和程序編程,畫(huà)出完整的電路原理圖,用Multisim或Proteus仿真,最終可實(shí)現(xiàn)脫機(jī)運(yùn)行。
三、設(shè)計(jì)原理說(shuō)明
3.1 時(shí)鐘模塊
DS1307是美國(guó)DALLAS公司推出的I2C總線接口實(shí)時(shí)時(shí)鐘芯片,它可獨(dú)立于CPU 工作,不受CPU主晶振及其電容的影響,且計(jì)時(shí)準(zhǔn)確,月累積誤差一般小于10秒。芯片還具有主電源掉電情況下的時(shí)鐘保護(hù)電路,DS1307的時(shí)鐘靠后備電池維持工作,拒絕CPU對(duì)其讀出和寫(xiě)入訪問(wèn)。同時(shí)還具有備用電源自動(dòng)切換控制電路,因而可在主電源掉電和其它一些惡劣環(huán)境場(chǎng)合中保證系統(tǒng)時(shí)鐘的定時(shí)準(zhǔn)確性。
DS1307具有產(chǎn)生秒、分、時(shí)、日、月、年等功能,且具有閏年自動(dòng)調(diào)整功能。同時(shí),DS1307芯片內(nèi)部還集成有一定容量、具有掉電保護(hù)特性的靜態(tài)RAM,可用于保存一些關(guān)鍵數(shù)據(jù)。3.2 顯示模塊
如用LCD1602作為顯示設(shè)備,要求顯示屏分兩行顯示,第一行顯示日期(年-月-日)和星期,第二行顯示時(shí)間(時(shí):分:秒)和溫度。顯示秒由00一直加到59,分鐘數(shù)也由00加到59,小時(shí)采用24小時(shí)制,由00加到23,如此循環(huán)顯示。
3.3 按鍵模塊
按鍵用來(lái)作為時(shí)間調(diào)整。要求至少設(shè)計(jì)4個(gè)按鍵,按鍵1作為設(shè)置鍵;按鍵
2、按鍵3分別為增加、減少鍵,在設(shè)置鍵按下時(shí),此兩個(gè)按鍵方有效;按鍵4是確定鍵,在設(shè)置鍵按下時(shí)方才有效。3.4 溫度采集模塊
DS18B20是美國(guó)DALLAS公司推出的單總線數(shù)字溫度傳感器。DS18B20內(nèi)部集成了溫敏元件、數(shù)據(jù)轉(zhuǎn)換芯片、存儲(chǔ)器芯片和計(jì)算機(jī)接口芯片等多功能模塊。其主要技術(shù)特點(diǎn)有:具有獨(dú)特的單線接口方式;可以通過(guò)數(shù)據(jù)線供電,具有超低功耗工作方式;測(cè)溫范圍為-55℃~125℃,測(cè)溫精度為0.5℃;溫度轉(zhuǎn)換精度9~12位可編程,直接將溫度轉(zhuǎn)換值以二進(jìn)制數(shù)碼的方式串行輸出。
四、硬件原理圖
(含原理圖、電路仿真圖)
五、軟件設(shè)計(jì)
(含流程圖、帶注釋的程序清單)
六、設(shè)計(jì)總結(jié)
設(shè)計(jì)成績(jī):
教師簽名:
年月
日
第五篇:萬(wàn)年歷單片機(jī)課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)報(bào)告 任務(wù)和設(shè)計(jì)要求
首先要學(xué)會(huì)安裝軟件,要熟悉會(huì)使用。系統(tǒng)設(shè)計(jì) 系統(tǒng)框圖 硬件設(shè)計(jì) 3.1 電路原理圖
課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)報(bào)告
3.2 主要單元電路
3.3 元件清單 軟件設(shè)計(jì) 4.1 程序流程圖
課程設(shè)計(jì)報(bào)告
4.2程序清單
TIME_WEEK DATA 52H TIME_YEAR DATA 5DH TIME_MONTH DATA 5EH TIME_DATA DATA 5FH YEARH DATA 36H YEAR DATA 35H MONTH DATA 34H DAY DATA 33H HOUR DATA 32H MINUTE DATA 31H SEC DATA 30H
課程設(shè)計(jì)報(bào)告
AAA BIT P3.0 BBB BIT P3.1 AA BIT P3.3 BB BIT P3.4 CC BIT P3.5 BL BIT P3.2 BZ1 BIT 21H.0 TIMES DATA
20H COM
DATA
P1 ORG
0000H LJMP
START ORG
0003H RETI ORG
000BH LJMP INTT0 ORG
0013H RETI ORG
001BH RETI ORG
0023H RETI START:
課程設(shè)計(jì)報(bào)告
MOV
R0,#30H MOV
R7,#9 CLEETE: MOV
@R0,#00H INC
R0 DJNZ
R7,CLEETE MOV
TIMES,#00H MOV
TMOD,#01H MOV
TL0,#0C0H MOV
TH0,#63H MOV
SEC,#0 MOV
MINUTE,#0H MOV
HOUR,#0H MOV
DAY,#01H MOV
MONTH,#01H MOV
YEAR,#01H MOV
YEARH,#20H SETB
EA SETB
ET0 SETB
TR0 MOV
R4,#19 START1:
課程設(shè)計(jì)報(bào)告
CALL
DISP JNB
AA,SETMM1 JMP
START1 SETMM1: CALL
SETMM JMP START1 SETMM: CALL
DISP CALL
DISP JB AA,SETMM0 SETMM2: JNB AA,SETMM3 CLR ET0 CLR TR0 MOV
SEC,#0 MOV
TIMES,#01H MOV
R0,#MINUTE SETMM4: NOP INC22: CALL
OFFL CALL
INC11
課程設(shè)計(jì)報(bào)告
CALL
DISP JB AA,INC22 CALL DISP JB AA,INC22 INC R0 MOV A,TIMES RL A MOV TIMES,A JNB
TIMES.5, SETMM4 SETMM12: JNB AA , SETMM11 SETMM0: SETB
TR0 SETB
ET0 RET SETMM11: CALL DISP JMP
SETMM12 SETMM3: CALL
DISP JMP
SETMM2 INC11:
課程設(shè)計(jì)報(bào)告
MOV
R3,#40 INC111: MOV A,@R0 JB
BB,INC17 ADD
A,#1 DA A CALL INC000 INC13: JNB BB , INC14 INC17: MOV
@R0,A CALL
DISP DJNZ R3,INC111 RET INC14: CALL
DISP JMP
INC13 OFFL: MOV
22H,@R0 MOV
R6,#10 OFF1: MOV
R7,#10
課程設(shè)計(jì)報(bào)告
OFF2: MOV
@ R0, # 0AAH CALL
DISP DJNZ R7 , OFF2 DJNZ R6 , OFF1 MOV
@ R0 , 22H RET INC000: JB
TIMES.0, INC001 JB
TIMES.1, INC002 JB
TIMES.2, INC003 JB
TIMES.3, INC004 JB
TIMES.4, INC005 JMP
INCOUT INC005: CJNE A, #99H, INCOUT MOV
A,#00H JMP
INCOUT INC004: CJNE A, # 13H, INCOUT MOV
A,#01H JMP
INCOUT
課程設(shè)計(jì)報(bào)告
INC003: CJNE A,# 32H ,INCOUT MOV
A,#01H JMP
INCOUT INC002: CJNE A,#24H,INCOUT MOV
A,#00H JMP
INCOUT INC001: CJNE A,# 60H , INCOUT MOV
A,#00H INCOUT: RET INTT0: PUSH
ACC PUSH
PSW ORL TL0,#0C0H MOV
TH0,#63H DJNZ R4 , CLKE111 JMP
LOOP11 CLKE111: JMP
CLKE
課程設(shè)計(jì)報(bào)告
LOOP11: MOV
R4,#19H MOV
A,SEC ADD
A,#1 DA A MOV
SEC,A CJNE A, #60H , CLKE99 MOV
SEC,#0 MOV
A,MINUTE ADD
A,#1 DA A MOV
MINUTE,A CLK0: CJNE A, # 60H, CLKE MOV
MINUTE,#0 MOV
A,HOUR ADD
A,#1 DA
A MOV
HOUR,A CJNE A, # 24H, CLKE MOV
HOUR,#0 MOV
A,DAY
課程設(shè)計(jì)報(bào)告
ADD
A,#1 DA A MOV
DAY,A MOV
A,MONTH INC
A MOVC A, @A + PC SJMP
CLK1 DB
31H,28H,31H DB
30H,31H,30H DB
31H,31H,30H DB
00H,00H,00H DB
00H,00H,00H DB
31H,30H,31H CLK1: CLR C SUBB A,DAY JNC
CLKE MOV
A,MONTH CJNE A,#2,CLK3 MOV
A,YEAR ANL A,#13H JNB
ACC.4,CLK2
課程設(shè)計(jì)報(bào)告
ADD
A,#2 CLK2: ANL A,#3 JNZ
CLK3 MOV
A,DAY XRL A,#29H JZ
CLKE CLK3: MOV
DAY,#1 MOV
A,MONTH ADD
A,#1 DA
A MOV
MONTH,A CJNE A,#13H,CLKE MOV
MONTH,#1 MOV
A,YEAR ADD
A,#1 DA
A MOV
YEAR,A CLKE99: CALL
CONVERT CLKE:
課程設(shè)計(jì)報(bào)告
POP
PSW POP
ACC RETI DISP: PUSH
PSW PUSH
ACC MOV
23H,R0 DISP99: MOV
R1,#40H MOV
R0,#30H MOV
R2,#9 DISP1: MOV A,@R0 ANL A,#0FH MOV @R1,A MOV A,@R0 SWAP A ANL A,#0FH INC R1 MOV @R1,A DJNZ R2,DISP2 CALL DISPLAY
課程設(shè)計(jì)報(bào)告
MOV R0,23H POP ACC POP PSW RET DISP2: INC R1 INC R0 JMP DISP1 DISPLAY: MOV R1,#40H MOV R5,#19 SETB AAA PLAY: SETB BBB NOP CLR BBB CLR AAA MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR MOV COM,A CALL DL1MS
課程設(shè)計(jì)報(bào)告
MOV COM,#0FFH DJNZ R5,PLAY1 CLR BBB SETB AAA RET PLAY1: INC R1 JMP PLAY TAB: DB 0C0H,0F9H,0A4H, 0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0A3H,8EH,0ABH DL1MS: MOV 25H,R7 MOV 24H,R6 MOV R7,#20 DS1: MOV R6,#10 DJNZ R6,$ DJNZ R7,DS1 MOV R7,25H MOV R6,24H RET
課程設(shè)計(jì)報(bào)告
START_YEAR EQU 01 CONVERT_YEAR DATA 5CH CONVERT_MONTH DATA 38H CONVERT_DATE DATA 37H TEMP_BYTE1 DATA 57H TEMP_BYTE2 DATA 58H TEMP_BYTE3 DATA 59H TEMP_BYTE4 DATA 5AH TEMP_BYTE5 DATA 5BH CONVERT: MOV A, YEAR MOV TIME_YEAR,A MOV A,MONTH MOV TIME_MONTH,A MOV A,DAY MOV TIME_DATA,A MOV A,TIME_YEAR MOV B,#16 DIV AB MOV CONVERT_YEAR,B MOV B,#10 MUL AB
課程設(shè)計(jì)報(bào)告
ADD A,CONVERT_YEAR MOV CONVERT_YEAR,A MOV A,TIME_MONTH JNB ACC.4,CON_02 CLR ACC.4 ADD A,#10 CON_02:MOV CONVERT_MONTH,A MOV A,TIME_DATA MOV B,#16 DIV AB MOV CONVERT_DATE,B MOV B,#10 MUL AB ADD A,CONVERT_DATE MOV CONVERT_DATE,A MOV DPTR,#MONTH_DATA MOV A,CONVERT_YEAR CON_06:CLR C SUBB A,#START_YEAR MOV B,#3 MUL AB ADD A,DPL
課程設(shè)計(jì)報(bào)告
MOV DPL,A MOV A,B ADDC A,DPH MOV DPH,A MOV A, #2 MOVC A, @A+DPTR CLR ACC.7 MOV B, #32 DIV AB MOV TEMP_BYTE1,A MOV TEMP_BYTE2,B MOV TEMP_BYTE3,#0 MOV A,CONVERT_MONTH CJNE A,#10,CON_08 CON_08:JC CON_09 MOV TEMP_BYTE3,#1 CON_09:MOV A,CONVERT_YEAR ANL A,#03H JNZ CON_10 MOV A,CONVERT_MONTH LCALL GET_RUN_DAYS_LOW SJMP CON_12
課程設(shè)計(jì)報(bào)告
CON_10:MOV A,CONVERT_MONTH LCALL GET_DAYS_LOW CON_12:MOV B,CONVERT_DATE DEC B ADD A,B MOV TEMP_BYTE4,A JNC CON_14 INC TEMP_BYTE3 CON_14:MOV A,TEMP_BYTE1 LCALL GET_DAYS_LOW DEC A ADD A,TEMP_BYTE2 MOV TEMP_BYTE5,A MOV A,CONVERT_MONTH CJNE A,TEMP_BYTE1,CON_20 MOV A,CONVERT_DATE CJNE A,TEMP_BYTE2,CON_20 CON_20:JC CON_22 LJMP CON_60 CON_22:MOV A,CONVERT_YEAR JNZ CON_24 MOV A,#100
課程設(shè)計(jì)報(bào)告
CON_24:DEC A MOV CONVERT_YEAR,A MOV A,DPL CLR C SUBB A,#3 MOV DPL,A JNC CON_26 DEC DPH CON_26:MOV A,TEMP_BYTE5 CLR C SUBB A,TEMP_BYTE4 MOV TEMP_BYTE3,A MOV CONVERT_MONTH,#12 CLR F0 CLR A MOVC A,@A+DPTR ANL A,#0F0H SWAP A;MOV TEMP_BYTE4,A JZ CON_30 MOV A, #2 MOVC A , @A+DPTR
課程設(shè)計(jì)報(bào)告
MOV C, ACC.7 MOV A, #1 MOVC A, @A+DPTR RLC A SJMP CON_34 CON_30:MOV A, #1 MOVC A, @A+DPTR CON_34:MOV TEMP_BYTE5, A CON_40:MOV A, TEMP_BYTE5 RRC A MOV TEMP_BYTE5, A JC CON_42 MOV B, #29 SJMP CON_44 CON_42:MOV B, #30 CON_44:MOV A, TEMP_BYTE3 CLR C SUBB A, B JZ CON_46 JNC CON_50 CPL A INC A
課程設(shè)計(jì)報(bào)告
CON_46: INC A MOV B, #10 DIV AB SWAP A ORL A, B MOV CONVERT_DATE, A MOV A, CONVERT_MONTH MOV B, #10 DIV AB SWAP A ORL A, B MOV CONVERT_MONTH, A MOV A, CONVERT_YEAR MOV B, #10 DIV AB SWAP A ORL A, B MOV CONVERT_YEAR, A CALL WEEK RET CON_50:MOV TEMP_BYTE3, A JB F0, CON_52
課程設(shè)計(jì)報(bào)告
DEC CONVERT_MONTH CON_52:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE4, CON_54 CPL F0 CON_54:SJMP CON_40 CON_60:MOV A, TEMP_BYTE4 CLR C SUBB A, TEMP_BYTE5 MOV TEMP_BYTE4, A JNC CON_62 DEC TEMP_BYTE3 CON_62:MOV CONVERT_MONTH, #1 CLR A MOVC A, @A+DPTR MOV TEMP_BYTE5, A ANL A, #0F0H SWAP A XCH A, TEMP_BYTE5 CLR F0 ANL A, #0FH MOV TEMP_BYTE1, A MOV A, #1
課程設(shè)計(jì)報(bào)告
MOVC A, @A+DPTR MOV TEMP_BYTE2, A ANL A, #0F0H ORL A, TEMP_BYTE1 SWAP A MOV TEMP_BYTE1, A MOV A, #2 MOVC A, @A+DPTR MOV C, ACC.7 MOV A, TEMP_BYTE2 ANL A, # 0FH SWAP A MOV ACC.3, C MOV TEMP_BYTE2, A CON_70:MOV A, TEMP_BYTE2 RLC A MOV TEMP_BYTE2, A MOV A, TEMP_BYTE1 RLC A MOV TEMP_BYTE1, A JC CON_72 MOV B, #29
課程設(shè)計(jì)報(bào)告
SJMP CON_74 CON_72:MOV B, #30 CON_74:MOV A, TEMP_BYTE4 CLR C SUBB A,B JNC CON_78 MOV B, A MOV A, TEMP_BYTE3 JZ CON_76 DEC TEMP_BYTE3 MOV TEMP_BYTE4, B SJMP CON_80 CON_76:MOV A, TEMP_BYTE4 LJMP CON_46
CON_78:MOV TEMP_BYTE4, A CON_80:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE5, CON_82 CPL F0 JNB F0, CON_82 SJMP CON_70 CON_82:INC CONVERT_MONTH SJMP CON_70
課程設(shè)計(jì)報(bào)告
GET_DAYS_LOW: MOVC A, @A+PC RET DB 0,31,59,90,120,151,181,212,243,17,48,78 GET_RUN_DAYS_LOW: MOVC A, @A+PC RET DB 0,31,60,91,121,152,182,213,244,18,49,79 MONTH_DATA:
DB 04DH,04AH,0B8H;2001 DB 00DH,04AH,04CH;2002 DB 00DH,0A5H,041H;2003 DB 025H,0AAH,0B6H;2004 DB 005H,06AH,049H;2005 DB 07AH,0ADH,0BDH;2006 DB 002H,05DH,052H;2007 DB 009H,02DH,047H;2008 DB 05CH,095H,0BAH;2009 DB 00AH,095H,04EH;2010 DB 00BH,04AH,043H;2011
課程設(shè)計(jì)報(bào)告
DB 04BH,055H,037H;2012 DB 00AH,0D5H,04AH;2013 DB 095H,05AH,0BFH;2014 DB 004H,0BAH,053H;2015 DB 00AH,05BH,048H;2016 DB 065H,02BH,0BCH;2017 DB 005H,02BH,050H;2018 DB 00AH,093H,045H;2019 DB 047H,04AH,0B9H;2020 DB 006H,0AAH,04CH;2021 DB 00AH,0D5H,041H;2022 DB 024H,0DAH,0B6H;2023 DB 004H,0B6H,04AH;2024 DB 069H,057H,03DH;2025 DB 00AH,04EH,051H;2026 DB 00DH,026H,046H;2027 DB 05EH,093H,03AH;2028 DB 00DH,053H,04DH;2029 DB 005H,0AAH,043H;2030 DB 036H,0B5H,037H;2031 DB 009H,06DH,04BH;2032 DB 0B4H,0AEH,0BFH;2033
課程設(shè)計(jì)報(bào)告
DB 004H,0ADH,053H;2034 DB 00AH,04DH,048H;2035 DB 06DH,025H,0BCH;2036 DB 00DH,025H,04FH;2037 DB 00DH,052H,044H;2038 DB 05DH,0AAH,038H;2039 DB 00BH,05AH,04CH;2040 DB 005H,06DH,041H;2041 DB 024H,0ADH,0B6H;2042 DB 004H,09BH,04AH;2043 DB 07AH,04BH,0BEH;2044 DB 00AH,04BH,051H;2045 DB 00AH,0A5H,046H;2046 DB 05BH,052H,0BAH;2047 DB 006H,0D2H,04EH;2048 DB 00AH,0DAH,042H;2049 DB 035H,05BH,037H;2050 DB 009H,037H,04BH;2051 DB 084H,097H,0C1H;2052 DB 004H,097H,053H;2053 DB 006H,04BH,048H;2054 DB 066H,0A5H,03CH;2055
課程設(shè)計(jì)報(bào)告
DB 00EH,0A5H,04FH;2056 DB 006H,0B2H,044H;2057 DB 04AH,0B6H,038H;2058 DB 00AH,0AEH,04CH;2059 DB 009H,02EH,042H;2060 DB 03CH,097H,035H;2061 DB 00CH,096H,049H;2062 DB 07DH,04AH,0BDH;2063 DB 00DH,04AH,051H;2064 DB 00DH,0A5H,045H;2065 DB 055H,0AAH,0BAH;2066 DB 005H,06AH,04EH;2067 DB 00AH,06DH,043H;2068 DB 045H,02EH,0B7H;2069 DB 005H ,02DH, 04BH;2070 DB 08AH, 095H, 0BFH;2071 DB 00AH, 095H, 053H;2072 DB 00BH, 04AH, 047H;2073 DB 06BH, 055H, 03BH;2074 DB 00AH, 0D5H, 04FH;2075 DB 005H, 05AH, 045H;2076 DB 04AH, 05DH, 038H;2077
課程設(shè)計(jì)報(bào)告
DB 00AH, 05BH, 04CH;2078 DB 005H, 02BH, 042H;2079 DB 03AH, 093H, 0B6H;2080 DB 006H, 093H, 049H;2081 DB 077H, 029H, 0BDH;2082 DB 006H, 0AAH, 051H;2083 DB 00AH, 0D5H, 046H;2084 DB 054H, 0DAH, 0BAH;2085 DB 004H, 0B6H, 04EH;2086 DB 00AH, 057H, 043H;2087 DB 045H, 027H, 038H;2088 DB 00DH, 026H, 04AH;2089 DB 08EH, 093H, 03EH;2090 DB 00DH, 052H, 052H;2091 DB 00DH, 0AAH, 047H;2092 DB 066H, 0B5H, 03BH;2093 DB 005H, 06DH, 04FH;2094 DB 004H, 0AEH, 045H;2095 DB 04AH, 04EH, 0B9H;2096 DB 00AH, 04DH, 04CH;2097 DB 00DH, 015H, 041H;2098 DB 02DH, 092H, 0B5H;2090
課程設(shè)計(jì)報(bào)告
DB 00DH, 053H, 049H;2100 TIME_WEEK1 DATA 52H WEEK: MOV A, TIME_YEAR MOV B, #16 DIV AB MOV TEMP_BYTE1, B MOV B, #10 MUL AB ADD A, TEMP_BYTE1 MOV TEMP_BYTE1, A MOV A, TIME_MONTH JB ACC.7, GETW02 MOV A, #100 ADD A, TEMP_BYTE1 MOV TEMP_BYTE1, A MOV A, TIME_MONTH CLR ACC.7 GETW02: JNB ACC.4, GETW04 ADD A , #10 CLR ACC.4 GETW04: MOV TEMP_BYTE2,A
課程設(shè)計(jì)報(bào)告
MOV A, TIME_DATA MOV B, #16 DIV AB MOV TEMP_BYTE3, B MOV B, #10 MUL AB ADD A, TEMP_BYTE3 MOV TEMP_BYTE3, A MOV A ,TEMP_BYTE1 ANL A, #03H JNZ GETW10 MOV A, TEMP_BYTE2 CJNE A, #3,GETW06 GETW06: JNC GETW10 DEC TEMP_BYTE3 GETW10: MOV A,TEMP_BYTE2 LCALL GET_CORRECT ADD A, TEMP_BYTE1 MOV B, #7 DIV AB
MOV A, TEMP_BYTE1
課程設(shè)計(jì)報(bào)告
ANL A, #0FCH RR A RR A ADD A, B ADD A, TEMP_BYTE3 MOV B, #7 DIV AB MOV A, B CJNE A, #0,OUTOUT MOV B, #8 OUTOUT: MOV TIME_WEEK, B RET GET_CORRECT: MOVC A, @A+PC RET DB 0,3,3,6,1,4,6,2,5,0,3,5 END 系統(tǒng)仿真及調(diào)試
課程設(shè)計(jì)報(bào)告 仿真結(jié)果及分析
課程設(shè)計(jì)報(bào)告
上圖為運(yùn)行時(shí)的顯示,左邊兩個(gè)數(shù)碼管顯示器顯示的是年、月、日,中間的顯示的是時(shí)、分、秒,右邊顯示的是農(nóng)歷日期以及星期。若想要調(diào)試時(shí)間,可通過(guò)右下方兩個(gè)并聯(lián)開(kāi)關(guān)調(diào)試,左邊開(kāi)關(guān)調(diào)試數(shù)碼管顯示位置,右邊的調(diào)試增1。此刻是2013年11月29日下午15:02,星期五,時(shí)間準(zhǔn)確。訓(xùn)練體會(huì)
在整個(gè)單片機(jī)課程設(shè)計(jì)中,想要做出這個(gè)完整的設(shè)計(jì)過(guò)程,必須突破幾個(gè)難點(diǎn):
1、元件得找準(zhǔn)卻,6路驅(qū)動(dòng)可以用74LS244代替。
2、連線不能連錯(cuò),對(duì)應(yīng)的輸入輸出端標(biāo)上序號(hào)。
3、程序代碼不能敲錯(cuò)。
4、由于單管顯示的星期數(shù)不穩(wěn)定,可以采用雙管顯示。參考文獻(xiàn):?jiǎn)纹瑱C(jī)課程設(shè)計(jì)指導(dǎo)。