標題: 如果想要單片機計數的時長超過100s應該怎么改動匯編程序? [打印本頁]
作者: BSq 時間: 2020-3-26 19:29
標題: 如果想要單片機計數的時長超過100s應該怎么改動匯編程序?
;定義數據RAM空間
LMS EQU 37H ;定義一個變量存放計數值毫秒
LMIAO EQU 38H ;定義一個變量存放計數值秒
;數據存放
ORG 0100H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H
;表:共陽數碼管 0-9
ORG 0000H
LJMP MAIN
ORG 000BH ;中斷入口
LJMP TIMER
ORG 0200H
MAIN: MOV TMOD,#01H ;設置定時器1為1模式,即16位計算模式
MOV TH0,#0D8H ;給計數寄存器賦值,10毫秒時間
MOV TL0,#0F0H
MOV IE,#82H ;開總中斷和T0中斷
CLR A
MOV LMS,A ;計數緩沖清0
MOV LMIAO,A
SETB TR0 ;
M1: MOV A,LMS
CJNE A,#100,M2 ;以10毫秒計數,100次即為1秒
MOV LMS,#0
MOV A,LMIAO
INC A
MOV LMIAO,A
CJNE A,#100,M2 ;如果加到100秒,則清0
MOV LMIAO,#0
M2: LCALL DISPLAY ;顯示
SJMP M1
TIMER: INC LMS ;定時中斷產生,以10毫秒計數加1
MOV TH0,#0D8H ;重新裝入定時器值10毫秒
MOV TL0,#0F0H
RETI
DISPLAY: MOV DPTR,#TABLE ;數碼管顯示子程序
MOV A,LMIAO
MOV B,#10
DIV AB
SETB P3.4
SETB P3.3 ;千位數碼管
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
CLR P3.3 ;百位數碼管
MOV A,B
MOVC A,@A+DPTR
ANL A,#0X7F ;加入小數點
MOV P1,A
MOV P1,#0FFH
MOV A,LMS
MOV B,#10
DIV AB
CLR P3.4
SETB P3.3 ;十位數碼管
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
CLR P3.3 ;個位數碼管
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
RET
END
作者: yzwzfyz 時間: 2020-3-27 07:02
在中斷服務子程序中,加一個計數器,計數不滿時,立即返回。計數計滿時再執行你的主服務內容!
如此10000秒也行、這么簡單事,如何就想不到呢?
作者: Y_G_G 時間: 2020-3-27 08:20
如果你定時器中斷不改變的話,100S的延時要用3個地址在存放時間數據
在定時器中使用DJNZ來實現
作者: BSq 時間: 2020-3-27 10:10
呃呃,對不起,我剛剛學習,學的不精。其實我之前改過顯示分秒的,是在原來的加一個分鐘中斷,和顯示,然后計數超過一百秒,沒有要求上限,我有點😵
作者: BSq 時間: 2020-3-27 10:12
對對,我之前改分秒顯示就是這樣改的,加一個存儲單元,加一個d'j'n'z
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |