標題: 51單片機匯編程序時鐘 供電后,程序似乎卡住,求解 [打印本頁]
作者: dvga 時間: 2018-1-6 18:42
標題: 51單片機匯編程序時鐘 供電后,程序似乎卡住,求解
P1口段選,P2口位選,P3.0-3.3調秒分時。供電后,程序似乎卡住,求解
- ORG 00H JMP MAIN
- ORG 0BH
- JMP TIM0
- MAIN:
- MOV IE,#82H ;使能定時器中斷
- MOV TMOD,#01H ;設置計數初始值,設置為4ms中斷一次
- MOV TH0,#0F0H
- MOV TL0,#60H
- MOV R0,#00H ;1秒鐘計數器,250次后為1s
- MOV 30H,#00H ;秒分時初始值00
- MOV 31H,#00H
- MOV 32H,#00H
- MOV R1,#00H ;位選累計器
- SETB TR0
- LOOP: ;按鍵設置時分秒,循環掃描按鍵,否則執行中斷程序
- JB P3.0,NOPRESS2
- CALL FILTER
- MOV A,30H
- ADD A,#01H
- DA A
- MOV 30H,A
- CJNE A,#60H,NOPRESS1;等于60則清零
- MOV 30H,#00H
- NOPRESS1:
- JNB P3.0,$
- CALL FILTER
- NOPRESS2:
- JB P3.1,NOPRESS4
- CALL FILTER
- MOV A,31H
- ADD A,#01H
- DA A
- MOV 31H,A
- CJNE A,#60H,NOPRESS3;等于60則清零
- MOV 31H,#00H
- NOPRESS3:
- JNB P3.1,$
- CALL FILTER
- NOPRESS4:
- JB P3.2,LOOP
- CALL FILTER
- MOV A,32H
- ADD A,#01H
- DA A
- MOV 32H,A
- CJNE A,#24H,NOPRESS5;等于24則清零
- MOV 32H,#00H
- NOPRESS5:
- JNB P3.2,$
- CALL FILTER
- JMP LOOP
- TIM0:
- PUSH ACC
- CJNE R0,#250,SCAN ;等于250時說明到1秒,未滿則繼續掃描顯示
- MOV A,#30H
- ADD A,#01H
- DA A
- MOV 30H,A
- CJNE A,#60H,INCSEC ;等于60時說明到一分
- MOV A,31H
- ADD A,#01H
- DA A
- MOV 31H,A
- CJNE A,#60H,INCMIN ;等于60時說明到一小時
- MOV A,32H
- ADD A,#01H
- DA A
- MOV 32H,A
- CJNE A,#24H,INCHR ;等于24說明到一天,清零時分秒寄存器
- MOV 30H,#00H
- MOV 31H,#00H
- MOV 32H,#00H
- INCSEC:
- JMP INCTIM
- INCMIN:
- MOV 30H,#00H ;滿60秒,清零秒存儲器
- JMP INCTIM
- INCHR:
- MOV 30H,#00H ;滿60分,清零分寄存器,秒存儲器
- MOV 31H,#00H
- INCTIM:
- MOV R0,#00H ;秒存儲器清零
- SCAN:
- CJNE R1,#6,DISPLAY ;6位數碼管掃描值為6,則完成一次掃描
- MOV R1,#00H ;清零掃描計數器,繼續掃描
- JMP SCAN
- DISPLAY:
- CJNE R1,#0,CHK1 ;秒低位顯示
- MOV A,30H
- ANL A,#0FH
- MOV P2,#0DFH
- JMP RELOAD
- CHK1:
- CJNE R1,#1,CHK2 ;秒高位顯示
- MOV A,30H
- SWAP A
- ANL A,#0FH
- MOV P2,#0EFH
- JMP RELOAD
- CHK2:
- CJNE R1,#2,CHK3 ;分低位顯示
- MOV A,31H
- ANL A,#0FH
- MOV P2,#0F7H
- JMP RELOAD
- CHK3:
- CJNE R1,#3,CHK4 ;分高位顯示
- MOV A,31H
- SWAP A
- ANL A,#0FH
- MOV P2,#0FBH
- JMP RELOAD
- CHK4:
- CJNE R1,#4,CHK5 ;時低位顯示
- MOV A,32H
- ANL A,#0FH
- MOV P2,#0FDH
- JMP RELOAD
- CHK5:
- CJNE R1,#5,RELOAD ;時高位顯示
- MOV A,32H
- SWAP A
- ANL A,#0FH
- MOV P2,#0FEH
- RELOAD:
- MOV P1,A ;掃描顯示
- INC R0
- INC R1
- MOV TH0,#0F0H
- MOV TL0,#60H
- POP ACC
- RETI
- FILTER:
- MOV R6,#60H
- D1: MOV R7,#248
- DJNZ R7,$
- DJNZ R6,D1
- RET
- END
復制代碼
秒分時。供電后,程序似乎卡住,求解
-
運行時的圖片_1.png
(257.95 KB, 下載次數: 106)
下載附件
2018-1-6 18:38 上傳
-
數字表_1.png
(216.26 KB, 下載次數: 93)
下載附件
2018-1-6 18:39 上傳
作者: yzwzfyz 時間: 2018-1-6 20:42
1、R0何時+1?
2、如果T0中斷發生在:
NOPRESS4:
JB P3.2,LOOP
CALL FILTER
MOV A,32H
ADD A,#01H...........發生在這里
中斷返回后:
DA A
MOV 32H,A
這時的 DA A之后能保證正確碼?
3、當秒會不會=60H、61H、62H呢?
作者: yzwzfyz 時間: 2018-1-6 20:45
寫程序,先畫個框圖,框圖走通了再寫程序。
這么點邏輯關系都搞不定,復雜一些怎么辦?學會畫框圖很重要!.
作者: yzwzfyz 時間: 2018-1-6 20:46
以分為例:
何時清0?何時+1?
作者: zl2168 時間: 2018-1-6 21:18
本帖最后由 zl2168 于 2018-1-6 21:28 編輯
實例93 具有校正功能的時鐘1302(LED數碼管顯示)
先Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學,可從零基礎c語言開始學習。
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
作者: zl2168 時間: 2018-1-6 21:30
本帖最后由 zl2168 于 2018-1-6 21:32 編輯
實例94 模擬電子鐘(由80C51定時器產生秒時基)
先Proteus仿真一下,確認有效。
模擬電子鐘.jpg (306.12 KB, 下載次數: 107)
下載附件
2018-1-6 21:32 上傳
以上摘自張志良編著《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學,可從零基礎c語言開始學習。
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
作者: dvga 時間: 2018-1-7 11:54
1,R0是每4毫秒加1,也就是每中斷1次就加一,
2,執行中斷時,我將累加器的值壓入了堆棧,中斷結束POP ACC,彈棧
3,秒不會等于大于60H,CJNE A,60H,INC MIN此時MOV 30H,00對秒請0了
作者: dvga 時間: 2018-1-7 11:56
老師,我是初學,受教了
作者: yzwzfyz 時間: 2018-1-7 12:50
看來你還不糊糊。
把你回答的,補寫到中斷服務程序中去。
另外DA A是依據PSW中的半進和進位標記進行調整的,你沒有保護PSW。!
我回你的三點在中斷務程序中沒有看到。
這與你是不是初學無關,能理解、邏輯清楚就好。初學不可以作借口,態度要正確。
作者: dvga 時間: 2018-1-7 13:14
保護程序標志位?什么意思啊,我回答的都是中斷程序中有的啊,搞不清楚了。。。。無知確實不是借口,但我真不清楚
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |