仿真程序功能:用八個通道分別檢測8路信號,并通過數碼管實時顯示
程序參考源代碼如下:
CLR P3.7
MAIN:MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER
LCALL TEMPRRO
MOV P2,#06H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER2
LCALL TEMPRRO
MOV P2,#5BH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER3
LCALL TEMPRRO
MOV P2,#4FH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER4
LCALL TEMPRRO
MOV P2,#66H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER5
LCALL TEMPRRO
MOV P2,#6DH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER6
LCALL TEMPRRO
MOV P2,#7DH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER7
LCALL TEMPRRO
MOV P2,#07H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER8
LCALL TEMPRRO
MOV P2,#7FH
LCALL PRO
LJMP MAIN
;==============================================CHL1
GET_TEMPER:
SETB P1.0H ; 定時入口
BCD: LCALL INIT_1820
JB 00H,S22
LJMP BCD ; 若DS18B20不存在則返回
S22: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_1820
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_1820
NOP
LCALL DELAY1
CBA:LCALL INIT_1820
JB 00H,ABC
LJMP CBA
ABC:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200 ;READ_1820
RET
;==============================
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB P1.0H
NOP
NOP
CLR P1.0H
NOP
NOP
NOP
SETB P1.0H
MOV R3,#7
DJNZ R3,$
MOV C,P1.0H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
;=============================
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR P1.0H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.0H,C
MOV R3,#23
DJNZ R3,$
SETB P1.0H
NOP
DJNZ R2,WR1
SETB P1.0H
RET
;=======================================
READ_18200:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB P1.0H
NOP
NOP
CLR P1.0H
NOP
NOP
NOP
SETB P1.0H
MOV R3,#7
DJNZ R3,$
MOV C,P1.0H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;=======================================
INIT_1820:
SETB P1.0H
NOP
CLR P1.0H
MOV R0,#250
TSR1:
DJNZ R0,TSR1 ; 延時520us
SETB P1.0H
MOV R0,#25H ;96US-25H
TSR2:
DJNZ R0,TSR2
JNB P1.0H,TSR3;如D0為低則復位成功,DS18B20存在
LJMP TSR4 ; 延時
TSR3:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH ;200US
TSR6:
DJNZ R0,TSR6 ; 延時
TSR7:
SETB P1.0H ;拉高總線
RET
;===============================
GET_TEMPER2:
SETB P1.1H ; 定時入口
BCD2: LCALL INIT_18202
JB 00H,S222
LJMP BCD2 ; 若DS18B20不存在則返回
S222: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18202
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18202
NOP
LCALL DELAY1
CBA2:LCALL INIT_18202
JB 00H,ABC2
LJMP CBA2
ABC2:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18202
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18202
LCALL READ_182002 ;READ_1820
RET
;==============================
READ_18202:
MOV R2,#8
RE12:
CLR C
SETB P1.1H
NOP
NOP
CLR P1.1H
NOP
NOP
NOP
SETB P1.1H
MOV R3,#7
DJNZ R3,$
MOV C,P1.1H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE12
RET
;=============================
WRITE_18202:
MOV R2,#8
CLR C
WR12:
CLR P1.1H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.1H,C
MOV R3,#23
DJNZ R3,$
SETB P1.1H
NOP
DJNZ R2,WR12
SETB P1.1H
RET
;=======================================
READ_182002:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE002:
MOV R2,#8
RE012:
CLR C
SETB P1.1H
NOP
NOP
CLR P1.1H
NOP
NOP
NOP
SETB P1.1H
MOV R3,#7
DJNZ R3,$
MOV C,P1.1H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE012
MOV @R1,A
DEC R1
DJNZ R4,RE002
RET
;=======================================
INIT_18202:
SETB P1.1H
NOP
CLR P1.1H
MOV R0,#250
TSR12:
DJNZ R0,TSR12 ; 延時520us
SETB P1.1H
MOV R0,#25H ;96US-25H
TSR22:
DJNZ R0,TSR22
JNB P1.1H,TSR32;如D0為低則復位成功,DS18B20存在
LJMP TSR42 ; 延時
TSR32:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR52
TSR42:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR72
TSR52:
MOV R0,#06BH ;200US
TSR62:
DJNZ R0,TSR62 ; 延時
TSR72:
SETB P1.1H ;拉高總線
RET
;===============================
GET_TEMPER3:
SETB P1.2H ; 定時入口
BCD3: LCALL INIT_18203
JB 00H,S223
LJMP BCD3 ; 若DS18B20不存在則返回
S223: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18203
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18203
NOP
LCALL DELAY1
CBA3:LCALL INIT_18203
JB 00H,ABC3
LJMP CBA3
ABC3:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18203
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18203
LCALL READ_182003 ;READ_1820
RET
;==============================
READ_18203:
MOV R2,#8
RE13:
CLR C
SETB P1.2H
NOP
NOP
CLR P1.2H
NOP
NOP
NOP
SETB P1.2H
MOV R3,#7
DJNZ R3,$
MOV C,P1.2H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE13
RET
;=============================
WRITE_18203:
MOV R2,#8
CLR C
WR13:
CLR P1.2H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.2H,C
MOV R3,#23
DJNZ R3,$
SETB P1.2H
NOP
DJNZ R2,WR13
SETB P1.2H
RET
;=======================================
READ_182003:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE003:
MOV R2,#8
RE013:
CLR C
SETB P1.2H
NOP
NOP
CLR P1.2H
NOP
NOP
NOP
SETB P1.2H
MOV R3,#7
DJNZ R3,$
MOV C,P1.2H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE013
MOV @R1,A
DEC R1
DJNZ R4,RE003
RET
;=======================================
INIT_18203:
SETB P1.2H
NOP
CLR P1.2H
MOV R0,#250
TSR13:
DJNZ R0,TSR13 ; 延時520us
SETB P1.2H
MOV R0,#25H ;96US-25H
TSR23:
DJNZ R0,TSR23
JNB P1.2H,TSR33;如D0為低則復位成功,DS18B20存在
LJMP TSR43 ; 延時
TSR33:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR53
TSR43:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR73
TSR53:
MOV R0,#06BH ;200US
TSR63:
DJNZ R0,TSR63 ; 延時
TSR73:
SETB P1.2H ;拉高總線
RET
;===============================
GET_TEMPER4:
SETB P1.3H ; 定時入口
BCD4: LCALL INIT_18204
JB 00H,S224
LJMP BCD4 ; 若DS18B20不存在則返回
S224: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18204
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18204
NOP
LCALL DELAY1
CBA4:LCALL INIT_18204
JB 00H,ABC4
LJMP CBA4
ABC4:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18204
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18204
LCALL READ_182004 ;READ_1820
RET
;==============================
READ_18204:
MOV R2,#8
RE14:
CLR C
SETB P1.3H
NOP
NOP
CLR P1.3H
NOP
NOP
NOP
SETB P1.3H
MOV R3,#7
DJNZ R3,$
MOV C,P1.3H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE14
RET
;=============================
WRITE_18204:
MOV R2,#8
CLR C
WR14:
CLR P1.3H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.3H,C
MOV R3,#23
DJNZ R3,$
SETB P1.3H
NOP
DJNZ R2,WR14
SETB P1.3H
RET
;=======================================
READ_182004:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE004:
MOV R2,#8
RE014:
CLR C
SETB P1.3H
NOP
NOP
CLR P1.3H
NOP
NOP
NOP
SETB P1.3H
MOV R3,#7
DJNZ R3,$
MOV C,P1.3H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE014
MOV @R1,A
DEC R1
DJNZ R4,RE004
RET
;=======================================
INIT_18204:
SETB P1.3H
NOP
CLR P1.3H
MOV R0,#250
TSR14:
DJNZ R0,TSR14 ; 延時520us
SETB P1.3H
MOV R0,#25H ;96US-25H
TSR24:
DJNZ R0,TSR24
JNB P1.3H,TSR34;如D0為低則復位成功,DS18B20存在
LJMP TSR44 ; 延時
TSR34:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR54
TSR44:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR74
TSR54:
MOV R0,#06BH ;200US
TSR64:
DJNZ R0,TSR64 ; 延時
TSR74:
SETB P1.3H ;拉高總線
RET
;===============================
GET_TEMPER5:
SETB P1.4H ; 定時入口
BCD5: LCALL INIT_18205
JB 00H,S225
LJMP BCD5 ; 若DS18B20不存在則返回
S225: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18205
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18205
NOP
LCALL DELAY1
CBA5:LCALL INIT_18205
JB 00H,ABC5
LJMP CBA5
ABC5:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18205
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18205
LCALL READ_182005 ;READ_1820
RET
;==============================
READ_18205:
MOV R2,#8
RE15:
CLR C
SETB P1.4H
NOP
NOP
CLR P1.4H
NOP
NOP
NOP
SETB P1.4H
MOV R3,#7
DJNZ R3,$
MOV C,P1.4H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE15
RET
;=============================
WRITE_18205:
MOV R2,#8
CLR C
WR15:
CLR P1.4H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.4H,C
MOV R3,#23
DJNZ R3,$
SETB P1.4H
NOP
DJNZ R2,WR15
SETB P1.4H
RET
;=======================================
READ_182005:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE005:
MOV R2,#8
RE015:
CLR C
SETB P1.4H
NOP
NOP
CLR P1.4H
NOP
NOP
NOP
SETB P1.4H
MOV R3,#7
DJNZ R3,$
MOV C,P1.4H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE015
MOV @R1,A
DEC R1
DJNZ R4,RE005
RET
;=======================================
INIT_18205:
SETB P1.4H
NOP
CLR P1.4H
MOV R0,#250
TSR15:
DJNZ R0,TSR15 ; 延時520us
SETB P1.4H
MOV R0,#25H ;96US-25H
TSR25:
DJNZ R0,TSR25
JNB P1.4H,TSR35;如D0為低則復位成功,DS18B20存在
LJMP TSR45 ; 延時
TSR35:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR55
TSR45:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR75
TSR55:
MOV R0,#06BH ;200US
TSR65:
DJNZ R0,TSR65 ; 延時
TSR75:
SETB P1.4H ;拉高總線
RET
;===============================
GET_TEMPER6:
SETB P1.5H ; 定時入口
BCD6: LCALL INIT_18206
JB 00H,S226
LJMP BCD6; 若DS18B20不存在則返回
S226: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18206
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18206
NOP
LCALL DELAY1
CBA6:LCALL INIT_18206
JB 00H,ABC6
LJMP CBA6
ABC6:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18206
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18206
LCALL READ_182006 ;READ_1820
RET
;==============================
READ_18206:
MOV R2,#8
RE16:
CLR C
SETB P1.5H
NOP
NOP
CLR P1.5H
NOP
NOP
NOP
SETB P1.5H
MOV R3,#7
DJNZ R3,$
MOV C,P1.5H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE16
RET
;=============================
WRITE_18206:
MOV R2,#8
CLR C
WR16:
CLR P1.5H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.5H,C
MOV R3,#23
DJNZ R3,$
SETB P1.5H
NOP
DJNZ R2,WR16
SETB P1.5H
RET
;=======================================
READ_182006:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE006:
MOV R2,#8
RE016:
CLR C
SETB P1.5H
NOP
NOP
CLR P1.5H
NOP
NOP
NOP
SETB P1.5H
MOV R3,#7
DJNZ R3,$
MOV C,P1.5H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE016
MOV @R1,A
DEC R1
DJNZ R4,RE006
RET
;=======================================
INIT_18206:
SETB P1.5H
NOP
CLR P1.5H
MOV R0,#250
TSR16:
DJNZ R0,TSR16 ; 延時520us
SETB P1.5H
MOV R0,#25H ;96US-25H
TSR26:
DJNZ R0,TSR26
JNB P1.5H,TSR36;如D0為低則復位成功,DS18B20存在
上一篇:單片機控制10BitDA正弦信號發生器
下一篇:單片機水塔控制系統
推薦閱讀
史海拾趣
Advanced Thermal Products Inc公司成立于XXXX年,由一群熱衷于熱管理技術的工程師創立。在初創期,ATP公司便以獨特的技術視角,專注于研發高效、創新的熱管理產品。他們針對當時電子設備散熱效果不佳的痛點,成功開發出了一款新型的熱管理解決方案,為公司在行業內樹立了良好的口碑。
Crane Connectors公司自創立之初,便致力于電子連接器技術的研發與創新。面對激烈的市場競爭,公司不斷投入研發資源,推出了一系列具有自主知識產權的新型連接器產品。這些產品憑借出色的性能、穩定性和可靠性,迅速獲得了市場的認可,為公司贏得了大量訂單。隨著技術的不斷升級和產品的持續優化,Crane Connectors逐漸在電子連接器領域樹立了良好的品牌形象,實現了市場的快速擴張。
安普康(AMPCOM)自創立之初,就致力于將品牌推向國際市場。隨著公司規模的擴大和產品線的豐富,安普康開始實施全球商標注冊戰略。從2011年首次申請安普康AMPCOM商標,到隨后的幾年內在泰國、日本、新加坡、老撾、澳大利亞等多個國家成功注冊,安普康的品牌影響力逐漸擴大。這一過程中,公司不僅面臨著不同國家法律法規的挑戰,還需應對文化差異和市場需求的差異。然而,憑借專業的團隊和精準的市場定位,安普康成功地將品牌推向了全球舞臺。
Antenova公司在行業內率先推出了第二代GPS射頻天線模塊,這一創新產品為嵌入式GPS應用提供了高性能的解決方案。該產品的推出不僅樹立了行業標桿,還為公司帶來了可觀的收入增長。同時,Antenova還不斷推出其他領先產品,進一步鞏固了公司在天線設計領域的領先地位。
在穩步發展國內市場的同時,CST積極拓展國際市場。公司建立了分布世界各地的銷售渠道,與多家國際知名企業建立了長期穩定的合作關系。通過不斷的市場拓展和品牌建設,CST在國際市場上樹立了良好的企業形象和品牌形象。
ECM Electronics Limited.自創立之初,就注重技術創新。公司投入大量研發資金,專注于開發高效、節能的電子產品。通過不斷的技術迭代和產品創新,ECM成功推出了一系列具有競爭力的產品,逐漸在市場上建立了良好的口碑。同時,公司還積極與高校和科研機構合作,引進先進技術,為公司的持續發展提供了強大的技術支撐。
如題,想通過寫注冊表來安裝新的輸入法,應該怎么做??以全拼輸入法為例,除了寫入winpy.ime和kbdus.dll兩個文件外,還需要怎么做????另外,這兩個文件應該拷貝到WinCE系統的什么位置?????… 查看全部問答∨ |
|
關于xdata unsigned char MYRAM _at_ 0xdfff的簡單問題 xdata unsigned char MYRAM _at_ 0xdfff定義之后,在程序中能不能對MYRAM進行改變?比如 MYRAM++; 我用一個循環向片外數據RAM依次寫入數據,用C語言如何實現?… 查看全部問答∨ |
void copywrite(char* string) { } void mystring(char* name) { copywrite(name); } 1 void main() { mystring(\"my name is\"); } 2 void main() { char str[20]=\"my name is\"; &nbs ...… 查看全部問答∨ |
我的系統是多臺電腦和PLC通信。其中一臺完全正常,其他的就有我下面說的問題。IFIX和400通信,我在S7A上看見的通信狀態是GOOD。但是在PDB里面,有個向下寫的數據塊有些數據沒有值?。兩臺上位機和PLC通信應該怎么弄? 還有個問題,就是啟動IFIX的時 ...… 查看全部問答∨ |
|