線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3636
推到 Plurk!
推到 Facebook!

DS1821在8051寫程式的問題

答題得分者是:阿信
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-24 11:25:03 IP:203.71.xxx.xxx 訂閱


我目前要寫一個時間鬧鈴溫度顯示在LCD上面
可是目前就只差DS1821不給我面子
讀取的溫度值不會改變都是55
我不太清楚位什麼
所以請大家能幫我解答一下ˊˋ
麻煩幫我看DS1821的部份
還有我並不是很專業我只是學生一個所以有些英文都有點亂打

[code delphi]
請在此區域輸入程式碼

;
NRTE EQU R6 ;比較那個數值被抓到
DNOP1 EQU 35H
DNOP0 EQU 36H
KEYSPM EQU 37H ;掃描的指標
KEYV EQU 38H ;目前有數值
KEYT EQU 39H ;讀取到數值的次數
NOKEYT EQU 3AH ;沒有讀取到數值的次數
NEWKEYV EQU 3BH ;讀取到的新數值
KEYBUF EQU 3CH ;讀取到的數值的備分暫存器
KEYBUS EQU P2
KEYM EQU 20H.1 ;真正讀取到按鍵的指標
KEYM1 EQU 20H.4
SEC EQU 3DH ;秒
MID EQU 3EH ;分
HOUR EQU 3FH ;時
TMM0 EQU 20H.2 ;分該進位的標誌
TMM1 EQU 20H.3 ;時間是否進行更新
TIM0 EQU 21H.0 ;檢查小時的數字是否超過24
TIM1 EQU 21H.1 ;檢查分鐘的數字是否超過60
TIM2 EQU 21H.2 ;檢查秒鐘的數字是否超過60
TIM3 EQU 21H.3 ;時間設定的固定數字 如果輸入錯誤結果則不輸出數字(這個指標的功能)
TIM4 EQU 21H.4 ;設定鬧鐘的小時,分鐘
TIM5 EQU 21H.5 ;鬧鐘啟動的指標
TIM6 EQU 21H.6 ;鬧鐘啟動的指標
TIM7 EQU 21H.7 ;
LCDBUS DATA P0 ;資料匯流排DB0-DB7接腳, LCDBUS.7: BUSY FLAG
ENABLE BIT P1.3 ;LCD模組上致能接腳 0: DISABLE, 1: ENABLE
RW BIT P1.2 ;LCD模組上R/W接腳, 0: WRITE, 1: READ
RS BIT P1.1 ;LCD模組上RS接腳, 0: INSTRUCTION, 1: DATA
DIRFLAG BIT 20H.0 ;方向旗標
DISP10 EQU 40H ;第一列起始位址
DISP20 EQU 50H ;第二列起始位址
DEY EQU 31H
DEYT EQU 32H
DQ EQU P3.7
; ↑↑定義站存器↑↑
ORG 0000H
JMP START
ORG 000BH ;鍵盤掃描
JMP KEY0
ORG 001BH ;溫度時間
JMP TIME0
;-------------------
; ///////初始///////
;-------------------
ORG 0030H
START: MOV SP,#05FH
MOV IE,#08AH
MOV TMOD,#011H
SETB DQ
CALL RDS0 ;DS1821重置副程式
MOV A,#00CH ;寫入開始下指令的指令
CALL CHOOSE0
MOV A,#0EEH
CALL CHOOSE0
CLR P3.6

MOV 30H,#20
MOV SEC,#00
MOV MID,#00
MOV HOUR,#00
; FILL LCD WITH BLANK
CALL CLRBUF
MOV 40H,#"0"
MOV 41H,#"0"
MOV 42H,#":";時分中間的分號
MOV 43H,#"0"
MOV 44H,#"0"
MOV 45H,#":";分秒中間的分號
MOV 46H,#"0"
MOV 47H,#"0"
MOV 4EH,#11011111B ;度
MOV 4FH,#01000011B ;C
MOV P2,#0FFH
MOV KEYSPM,#0FEH
MOV 20H,#00H
MOV 21H,#00H
;----------------------
; ///////LCD初始///////
;----------------------
CALL INIT
;-------------------------------
; ///////鍵盤掃描的計時器///////
;-------------------------------
MOV TH0,#0ECH
MOV TL0,#078H
SETB TR0

;---------------------------
; ///////時間的計時器///////
;---------------------------
MOV TH1,#03CH
MOV TL1,#0B0H
SETB TR1

L1: JB KEYM,KEYSP0
JMP L1


KEYSP0: CLR KEYM
MOV A,KEYBUF
MOV DPTR,#TAB2
MOVC A,@A DPTR
JNB TIM6,KEYSP0_0
JMP KEYSP5
KEYSP0_0:
JMP KEYSP1
;---------------------------
; ///////時間設定///////
;---------------------------
KEYSP1: CJNE A,#0BH,KEYSP2
SETB TMM1
SETB KEYM1
MOV 21H,#00
MOV 40H,#"?"
MOV 41H,#"?"
MOV 43H,#"?"
MOV 44H,#"?"
MOV 46H,#"?"
MOV 47H,#"?"
MOV SEC,#00H
MOV MID,#00H
MOV HOUR,#00H
JMP L1
;---------------------------
; ///////鬧鐘時間設定///////
;---------------------------
KEYSP2: CJNE A,#0AH,KEYSP3
JB TMM1,KEYSP3
JB TIM4,KEYSP4
MOV 50H,#"A"
MOV 51H,#"?"
MOV 52H,#"?"
MOV 53H,#":"
MOV 54H,#"?"
MOV 55H,#"?"
SETB TIM4
SETB KEYM1
JMP L1
KEYSP3: JNB KEYM1,KEYSP7
JMP CPE
KEYSP4: MOV 50H,#" "
MOV 51H,#" "
MOV 52H,#" "
MOV 53H,#" "
MOV 54H,#" "
MOV 55H,#" "
CLR TIM5
CLR TIM4
CLR KEYM1
JMP L1
KEYSP5: JB TIM7,KEYSP6
SETB TIM7
MOV 5FH,#"3"
JMP L1
KEYSP6: CJNE A,#03H,KEYSP7
MOV 5FH,#" "
CLR TIM6
CLR TIM7
KEYSP7: JMP L1
;-------------------
; ///////時間///////
;-------------------
TIME0: MOV TH1,#03CH
MOV TL1,#0B0H
DJNZ 30H,RTIME
MOV 30H,#20
MOV A,#01H ;清除所有已寫入畫面且游標移到原點
CALL WRINS
CALL DISPLAY ; SEND DATA FROM BUFFER TO LCD ;每秒更新一次LCD的圖
JB TMM1,TIME3 ;如果他是1就代表再設定時間所以先去溫度設定
MOV R0,#SEC
CALL TT0
JNB TMM0,TIME2
MOV R0,#MID
CALL TT0
JNB TMM0,TIME2
MOV R0,#HOUR
MOV A,@R0
CLR TMM0
ADD A,#01
DA A
CJNE A,#24H,TIME1
MOV A,#00
TIME1: MOV @R0,A
TIME2: CLR A
MOV R0,#SEC ;秒的存放
MOV R1,#46H
CALL HAL
INC R0 ;分的存放
MOV R1,#43H
CALL HAL
INC R0 ;時的存放
MOV R1,#40H
CALL HAL
;-------------------
; ////鬧鐘感測/////
;-------------------
TIME3: JNB TIM5,DAL0
TIME4: JNB TIM6,TIME5
JMP TIME7
TIME5: MOV DNOP0,#00H
MOV R0,#40H
MOV R1,#51H
MOV A,#00
TIME6: INC DNOP0
MOV A,@R0
MOV B,@R1
CJNE A,B,DAL0
CLR P3.6
INC R0
INC R1
MOV R7,DNOP0
CJNE R7,#5,TIME6
SETB TIM6
JMP DAL0
TIME7: CPL P3.6
;-------------------
; ////溫度感測/////
;-------------------
DAL0: CALL RDS0 ;DS1821重置副程式
MOV A,#0AAH
CALL CHOOSE0
CALL DSR ;接收8個bit到A裡
MOV B,A
ANL A,#0FH
ORL A,#30H
MOV 4DH,A
MOV A,B
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV 4CH,A
RTIME: RETI



;高低位元互換
HAL: MOV A,@R0
ANL A,#0F0H
SWAP A
ORL A,#30H
MOV @R1,A
INC R1
MOV A,@R0
ANL A,#0FH
ORL A,#30H
MOV @R1,A
RET
TT0: CLR TMM0
CLR C
MOV A,@R0
ADD A,#01
DA A
CJNE A,#60H,TT1
MOV A,#00
SETB TMM0
TT1: MOV @R0,A
RET


;-------------------
; ////鍵盤掃描/////
;-------------------
KEY0: MOV TH0,#0ECH
MOV TL0,#078H
PUSH ACC
MOV A,KEYSPM
MOV KEYBUS,A
RL A
MOV KEYSPM,A
MOV R7,KEYSPM
CJNE R7,#0EFH,KEY1
MOV KEYSPM,#0FEH
KEY1: MOV A,KEYBUS
ORL A,#0FH
CPL A
JNZ KEY2
INC NOKEYT
MOV R7,NOKEYT
CJNE R7,#08,RET_2
MOV KEYT,#00
MOV NEWKEYV,#00
MOV NOKEYT,#00
JMP RET_2
KEY2: MOV NOKEYT,#00
MOV NEWKEYV,KEYBUS
MOV A,NEWKEYV
CJNE A,KEYV,KEY3
INC KEYT
MOV R7,KEYT
CJNE R7,#04,KEY4
MOV A,KEYV
CLR C
SUBB A,#077H ;EE-77=77以此類推 1=77, 2=76, 3=74, 4=70, 5=67, 6=66, 7=64, 8=60-↓
;9=47, 0=46, A=44, B=40, C=07, D=06, E=04, F=00
INC A ;1=00000001, 2=00000101, 3=00000111, 4=00001000
;5=01000001, 6=01000101, 7=01000111, 8=01001000
;9=01100001, 0=01100101, A=01100111, B=01101000
;C=01110001, D=01110101, E=01110111, F=01111000
CLR C
RRC A ;1=00000000=00, 2=00000010=02, 3=00000011=03, 4=00000100=04
;5=00100000=20, 6=00100010=22, 7=00100011=23, 8=00100100=24
;9=00110000=30, 0=00110010=32, A=00110011=33, B=00110100=34
;C=00111000=38, D=00111010=3A, E=00111011=3B, F=00111100=3C
CLR C
MOV KEYBUF,A
SETB KEYM
JMP RET_2
KEY3: MOV KEYV,NEWKEYV
MOV KEYT,#01
JMP RET_2
KEY4: MOV R7,KEYT
CJNE R7,#05,RET_2
DEC KEYT
RET_2: CLR RS0
POP ACC
RETI
;//////////DS1821重置////////////
RDS0: MOV DEY,#250 ;
CLR DQ ;
DJNZ DEY,$ ;傳送給他500μs的彽電位
MOV DEY,#35 ;
SETB DQ ;
JB DQ,$
JNB DQ,$
MOV DEY,#240 ;
RDS1: DJNZ DEY,RDS1 ;執行時間為2us 24*5=120us此為接收時間
RET

;//////////DS1821傳送0或1////////////*請先選擇A裡面的資料 比如0EEH 連續讀取
CHOOSE0:MOV B,A
MOV DNOP1,#00
CHOOSE1:INC DNOP1
ANL A,#01H
JNZ CHOOSE2
MOV A,B
RR A
CALL DSW0 ;傳送0
MOV R7,DNOP1
CJNE R7,#08H,CHOOSE1
RET
CHOOSE2:MOV A,B
RR A
CALL DSW1 ;傳送1
MOV R7,DNOP1
CJNE R7,#08H,CHOOSE1
RET
;//////////DS1821重寫入0////////////
DSW0: MOV DEY,#35
CLR DQ
DJNZ DEY,$
SETB DQ
RET
;//////////DS1821重寫入1////////////
DSW1: CLR DQ
SETB DQ
RET
;//////////DS1821讀取////////////
DSR: MOV DEYT,#8
MOV DEY,#6
DSR1: CLR DQ
DJNZ DEY,$
MOV DEY,#30
DJNZ DEY,$
JB DQ,DSR2
RL A
DJNZ DEYT,DSR1
RET
DSR2: MOV DEY,#30
DJNZ DEY,$
RL A
ADD A,#01
DJNZ DEYT,DSR1
FF: RET
;-------------------
;INIT RESET LCD
;-------------------
INIT: MOV A,#38H ;8BIT且2行的命令
CALL WRINS
MOV A,#0EH ;顯示且游標出現且不閃爍
CALL WRINS
MOV A,#06 ;游標寫入資料時向右移動
CALL WRINS
MOV A,#01H ;清除所有已寫入畫面且游標移到原點
CALL WRINS
RET
;------------------
; WRITE INSTRUCTION TO LCD
;------------------
WRINS: CALL CHECK ;先確認忙碌
MOV LCDBUS,A ;把命令寫入
CLR RS ;0指令
CLR RW ;0寫入
SETB ENABLE ;1致能
CLR ENABLE ;0除能
RET
;-------------------
; WRITE DATA TO LCD
;-------------------
WRDATA: CALL CHECK
MOV LCDBUS,A
SETB RS
CLR RW
SETB ENABLE
CLR ENABLE
RET
;----------------
; CHECK LCD BUSY
;----------------
CHECK: MOV LCDBUS,#0FFH ;確認BUSY忙碌確認是否忙碌中
CLR RS ;0指令
SETB RW ;1讀取
SETB ENABLE ;1致能
CH1: JB LCDBUS.7,CH1 ;bit7是忙碌街腳
CLR ENABLE ;0除能
RET
;--------------
;LCD DISPLAY
;--------------
DISPLAY:MOV R0,#DISP10
MOV R2,#10H
DP1: MOV A,@R0
CALL WRDATA
INC R0
DJNZ R2,DP1
MOV A,#0C0H
CALL WRINS
MOV R0,#DISP20
MOV R2,#10H
DP2: MOV A,@R0
CALL WRDATA
INC R0
DJNZ R2,DP2
RET
;---------------------
; DISPLAY FILL SPACE
;---------------------
CLRBUF: MOV R2,#20H
MOV R0,#DISP10
MOV A,#' '
CR1: MOV @R0,A
INC R0
DJNZ R2,CR1
CALL DISPLAY
RET

DCPE3: SETB TIM3
RET
DCPE0: JNB TIM0,DCPE3 ;小時的十位數不會有2以上的數字出現
RET
DCPE1: JNB TIM1,DCPE3 ;小時的各位數只要有2就不能有3以上出的數字出現
RET
DCPE2: JNB TIM2,DCPE3 ;分鐘跟秒的十位數不能有5以上出現
RET
;-----------------------
; ///////時間設定///////
;-----------------------
CPE: CLR TIM3
INC NRTE
CJNE A,#00H,CPE0
CPE0: CJNE A,#01H,CPE1
CPE1: CJNE A,#02H,CPE2
CPE2: CJNE A,#03H,CPE3
CALL DCPE0
CPE3: CJNE A,#04H,CPE4
CALL DCPE1
CPE4: CJNE A,#05H,CPE5
CALL DCPE1
CPE5: CJNE A,#06H,CPE6
CALL DCPE2
CPE6: CJNE A,#07H,CPE7
CALL DCPE2
CPE7: CJNE A,#08H,CPE8
CALL DCPE2
CPE8: CJNE A,#09H,CPE9
CALL DCPE2
CPE9: JNB TIM3,CPE10
DEC NRTE ;如果全部都不是就代表不是我要的數值
JMP L1
CPE11: JMP AL0
;-------------------------
; ///////存回站存器///////
;-------------------------
CPE10: JB TIM4,CPE11
CJNE NRTE,#01,SPD0
SETB TIM0
MOV 40H,A
ORL 40H,#30H
SWAP A
ORL HOUR,A
CJNE A,#02,SPD1
SETB TIM1
SPD0: CJNE NRTE,#02,SPD1
SETB TIM1
MOV 41H,A
ORL 41H,#30H
ORL HOUR,A
SPD1: CJNE NRTE,#03,SPD2
SETB TIM2
MOV 43H,A
ORL 43H,#30H
SWAP A
ORL MID,A
SPD2: CJNE NRTE,#04,SPD3
CLR TIM2
MOV 44H,A
ORL 44H,#30H
ORL MID,A
SPD3: CJNE NRTE,#05,SPD4
SETB TIM2
MOV 46H,A
ORL 46H,#30H
SWAP A
ORL SEC,A
SPD4: CJNE NRTE,#06,SPD5
MOV 47H,A
ORL 47H,#30H
ORL SEC,A
MOV 21H,#00H
MOV NRTE,#00H
CLR KEYM1
CLR TMM1
MOV A,#01H ;清除所有已寫入畫面且游標移到原點
CALL WRINS
CALL DISPLAY ; SEND DATA FROM BUFFER TO LCD ;每秒更新一次LCD的圖
;SPD5: CJNE NRTE,#07,KEYSP3 ;---------------------------------
SPD5: JMP L1
;---------------------------
; ///////鬧鐘時間設定數值///////
;---------------------------
AL0:
AL1: CJNE NRTE,#01,AL11
SETB TIM0
MOV 51H,A
ORL 51H,#30H
CJNE A,#02,SPD1
SETB TIM1
AL11: CJNE NRTE,#02,AL12
SETB TIM1
MOV 52H,A
ORL 52H,#30H
AL12: CJNE NRTE,#03,AL13
SETB TIM2
MOV 54H,A
ORL 54H,#30H
AL13: CJNE NRTE,#04,AL14
CLR TIM2
MOV 55H,A
ORL 55H,#30H
MOV 21H,#00H
MOV NRTE,#00H
CLR TIM0
CLR KEYM1
CLR TMM1
CLR TIM4
SETB TIM5
AL14: JMP L1
TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,98H
TAB2: DB 001H,000H,002H,003H,004H,000H,000H,000H;07
DB 000H,000H,000H,000H,000H,000H,000H,000H;0F
DB 000H,000H,000H,000H,000H,000H,000H,000H;17
DB 000H,000H,000H,000H,000H,000H,000H,000H;1F
DB 005H,000H,006H,007H,008H,000H,000H,000H;27
DB 000H,000H,000H,000H,000H,000H,000H,000H;2F
DB 009H,000H,000H,00AH,00BH,000H,000H,000H;37
DB 00CH,000H,00DH,00EH,00FH,000H,000H,000H;3F
TAB3: DB 000H,000H,000H,000H,000H,000H,000H,001H;
DB 002H,003H,004H,005H,006H,007H,008H,009H;
TAB4: DB 040H,096H,002H,056H,000H,016H,000H,001H
END

[/code]
------
這啥需要簽嗎
拿筆來
編輯記錄
romextromext 重新編輯於 2009-08-25 19:49:38, 註解 無‧
romextromext 重新編輯於 2009-08-25 19:49:40, 註解 無‧
romextromext 重新編輯於 2009-09-01 22:56:37, 註解 無‧
romextromext 重新編輯於 2009-09-01 22:57:52, 註解 無‧
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-27 09:42:23 IP:114.32.xxx.xxx 訂閱
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-01 23:02:52 IP:123.194.xxx.xxx 訂閱
我並沒有要知道這顆IC是如何工作的((因為我早就看熟了=      =
我只想知道我這個程式是否正確無誤的讓他工作((因為他不會測溫 真奇怪
或應該修改的地方以便我可以完成這個專題
------
這啥需要簽嗎
拿筆來
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-02 13:58:36 IP:114.32.xxx.xxx 訂閱
>我並沒有要知道這顆IC是如何工作的((因為我早就看熟了=      =
>我只想知道我這個程式是否正確無誤的讓他工作((因為他不會測溫 真奇怪
>或應該修改的地方以便我可以完成這個專題

1.你的近600行的程式,我很難有時間細看!
2.你有看過通訊的波形嗎? 確認接線無誤?
3.又是學長留下來的程式吧!
4.你需要單步執行程式,分析問題出在哪!
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-04 21:48:12 IP:123.194.xxx.xxx 訂閱

===================引 用 阿信 文 章===================
>我並沒有要知道這顆IC是如何工作的((因為我早就看熟了= ? =
>我只想知道我這個程式是否正確無誤的讓他工作((因為他不會測溫 真奇怪
>或應該修改的地方以便我可以完成這個專題

1.你的近600行的程式,我很難有時間細看!
2.你有看過通訊的波形嗎? 確認接線無誤?
3.又是學長留下來的程式吧!
4.你需要單步執行程式,分析問題出在哪!?

一,所以我才說看溫度感測部分就好了阿!!
二,我想問你DS1821的的所有指令幾乎都在100us就完成作業我不太覺得顯波器能夠讓我看到那瞬間的一個小波可能有會看到一小點就沒了吧((不過我有時間會試試看的
三,專題報告怎麼可能用學長留下來的,當然是作業是要給自己寫的阿= =((所以有些怪怪的直接提出我看的董~"~
四,應該是在電腦上可以執行8051的程式吧 自己測試又不等於DS1821真的會這樣照你設定的程式做
比如說讀取要先送一個低電位1us然後立刻要提高12us的時間 之後讀取到的資料就是正確的資料
中間我想確定 這個時間以後真的會有正確的讀取到資料那應該怎麼知道問題在哪?
我不能用這樣做測試 是因為我寫入是否正確 跟讀取是否正確 完全要有真正在ds1821完成
再電腦做測試這些是只能自己設定 真正使用又是另外一種結果

------
這啥需要簽嗎
拿筆來
編輯記錄
romextromext 重新編輯於 2009-09-04 22:07:32, 註解 無‧
romextromext 重新編輯於 2009-09-17 21:35:50, 註解 無‧
romextromext 重新編輯於 2009-11-03 21:10:58, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-04 23:46:14 IP:123.194.xxx.xxx 訂閱
看來好像沒人要在回答我這個問題了==
雖然阿信大大給了很多建議和資訊跟資料
但是好像都不是我所需要的
也不無小補
不過很謝謝阿信大大起碼你有回答我的問題...

老實說DS1821真的很難搞 我目前已經不想弄了
以後有機會在搞
再次謝謝您!!
------
這啥需要簽嗎
拿筆來
gn00683155
一般會員


發表:3
回覆:7
積分:7
註冊:2008-07-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-11-09 13:47:54 IP:163.26.xxx.xxx 訂閱

===================引 用 romextromext 文 章===================
看來好像沒人要在回答我這個問題了==
雖然阿信大大給了很多建議和資訊跟資料
但是好像都不是我所需要的
也不無小補
不過很謝謝阿信大大起碼你有回答我的問題...

老實說DS1821真的很難搞 我目前已經不想弄了
以後有機會在搞
再次謝謝您!!


我想不是沒人想幫你,而是你問人的態度跟觀念不正確的關係。
要問人 或回答別人的問題何必這麼尖酸刻薄呢
其中你有說到 你的1821資料只有在100us 就完成 那用示波器應該不難抓到
我會這麼說就表示 我試過 ok 才敢這麼說
這樣看來會讓我覺得 你可能還要補修一下如何使用示波器才對
在幫你補一個測溫程式好了 我不加註解 希望你能自己一字一字看懂
你來體驗一下你的發文方式跟態度有何不妥吧





;---------------------------------------
;
EQU MINUTE 21H
EQU SECSING 23H
EQU MINSING 25H
EQU HURSING 27H
EQU SHLFUNC 29H TEMP 30H
EQU TEMPSING 32H
;---------------------------------------
;
00H JMP ORG ;Start address for Exinterrupt0
EXINT0
0BH JMP ORG ;Start address for Exinterrupt1
EXINT1 Ready to Work
;--------------------------------------- MOV MOV MOV ;All Function Reset
P0,A
P2,A
A,#0FFH
P1,A
A,#00H MOV ;Reset Second
21H,A MOV ;Reset Hour
A,#0FEH
SHLFUNC,A
DELAY
SETTING
;---------------------------------------
;
SETTING:
TMOD,#01H MOV ;10000uS A>@#(65536-10000)=55536=D8F0
TL0,#0EFH
TR0
IE,#83H MOV MOV ;10000uS*100=1Sec
DISPLAY Display Function
;--------------------------------------- JB ;
DISPLAY_HOUR
DISPLAY_MINUTE
DISPLAY_SECOND
DISPLAY
DISPLAY_TEMPDEG: CALL MOV CALL MOV CALL CALL MOV CALL CALL MOV CALL CALL MOV MOV DIV MOV MOV MOV MOV MOVC MOV MOV MOV CALL MOV MOV MOVC MOV MOV CALL MOV MOV CALL MOV MOV CALL JMP SETB CLR MOV DJNZ SETB MOV DJNZ JB JNB MOV DJNZ RET
TRANSDATA:
R6,#8
AGAIN2: MOV JB CLR JMP
TRANS_ONE:
P3.7
P3.7 MOV DJNZ MOV RR MOV SETB DJNZ RET MOV
P3.7
P3.7
R7,#8
R7,$
P3.7,GET_L
GET_H
GET_L:
C
CHECK_READ SETB
A,TEMP
A
TEMP,A
R6,READ_AGAIN RET
DISPLAY_TEMPDEG2:
A,#00H
P0,A
DISPLAY Exinterrupt0 Function
; PUSH PUSH SETB CLR MOV MOV MOV MOV
DELAY
R2,AGAIN
R2,#100
A,P1
A
P1,A
P2.3
R0,AGAIN
SECSING,#0
SECTEN,#0
SECOND,#0
DELAY
CHANGE_HOUR:
DELAY2
DISPLAY_HOUR
DELAY2
P2.1,CHANGE_MINUTE
DELAY2
P2.0,CHANGE_HOUR
DELAY
A,HOUR
A
A,#24,RETURN_HOUR
HOUR,#0
SHOW_HOUR
RETURN_HOUR:
HOUR,A
SHOW_HOUR:
A,HOUR
B,#10
AB
HURTEN,A
HURSING,B
JMP CALL CALL CALL JB CALL JNB CALL MOV INC CJNE MOV JMP MOV
SHOW_MINUTE:
A,MINUTE
B,#10
AB
MINTEN,A
MINSING,B
JMP
PSW
ACC
Exinterrupt1 Function
;
EXINT1:
ACC
PSW
POP POP RETI
;---------------------------------------
; PUSH PUSH MOV MOV DJNZ CPL MOV
A,SECOND
A
NEXTSECOND: CJNE CLR MOV MOV INC CJNE CLR
MINUTE,A
A,HOUR
A
CHECKHOUR: CJNE CLR JMP
NEXTMINUTE: MOV MOV JMP MOV MOV JMP MOV
SETTING_DISPLAY:
A,SECOND MOV DIV MOV MOV MOV ;Change Minute Display
B,#10
AB
MINSING,B
MINTEN,A
A,HOUR MOV
AB
HURSING,B
HURTEN,A
P2.3
PSW
ACC
;---------------------------------------
;
DELAY:
ACC
PSW
R3,#5
D1:
R4,#10
D2:
R1,#25
R1,$
R4,D2
R3,D1
PSW
ACC
PUSH PUSH MOV MOV MOV DJNZ DJNZ DJNZ POP POP RET
P0,#0FEH MOV MOV MOVC
P1,A
DELAY
P0,#0FDH MOV MOV MOVC
P1,A
DELAY
P0,#0FBH MOV MOV MOVC
P1,A
DELAY
P0,#0F7H MOV MOV MOVC
P1,A
DELAY
P0,#0EFH MOV MOV MOVC
P1,A
DELAY
P0,#0DFH MOV MOV MOVC
P1,A
DELAY RET
;---------------------------------------
; DB ;01234
6DH,7DH,27H,7FH,6FH Digit Table For Signle Digits
;---------------------------------------
TABLE_SINGLE:
0BFH,86H,0DBH,0CFH,0E6H DB ;5.6.7.8.9.
;The End of Program
編輯記錄
gn00683155 重新編輯於 2009-11-09 13:49:31, 註解 無‧
gn00683155 重新編輯於 2009-11-09 13:50:19, 註解 無‧
gn00683155 重新編輯於 2009-11-09 13:51:28, 註解 無‧
romextromext
一般會員


發表:6
回覆:26
積分:11
註冊:2009-08-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-11-09 22:20:13 IP:123.194.xxx.xxx 訂閱
我必須跟阿信大大說對不起了

講話有些不妥
或有點讓人不高興
這並非本意阿
只是我之前很急想要完成
可能是這樣使我打的東西也變了樣

不過有人指出我的不對
那就必然有錯誤的地方值得我檢討

不過我終於董阿信大大說的我近600行很難有時間看
可能是因為我都沒有放註解怎麼多東西讓一個本來沒有要用他的人看,而且完全是他不用管的事何必呢?
這是我發覺從我發問的角度是完全沒考慮的問題
這又是我另外沒注意到的事情
我第一次發文可能什麼都不董但是我願意學習!!
請教人的方法

在這感謝gn00683155大大的教訓
經過這次教訓真的也要再次感謝阿信大大的包容還是願意回我怎麼多次對於我的態度如此不佳


------
這啥需要簽嗎
拿筆來
findspace
一般會員


發表:3
回覆:3
積分:1
註冊:2005-03-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-11-14 22:00:31 IP:114.27.xxx.xxx 訂閱
其實我也被ds1821搞得頭昏腦脹
我不是學生 也不是這相關職業 只是有一些興趣
對非相關科系的人來說 還真有一些難度
剛接觸組語時如果沒有人解說 真的摸不到頭緒
上網發問也找問不到重點....
我學過vb 剛好有一bascom軟體
高階的軟體好學易懂 只是會浪費系統資源 比不上組語能精準控制
呵呵...
系統時間:2024-03-29 17:41:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!