溫巡檢儀源程序_第1頁(yè)
溫巡檢儀源程序_第2頁(yè)
溫巡檢儀源程序_第3頁(yè)
溫巡檢儀源程序_第4頁(yè)
溫巡檢儀源程序_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/*內(nèi)存分配定義*/TIME_CONT EQU 33H /*定時(shí)時(shí)間*/TIME_COUNT EQU 34H /*100ms中斷次數(shù)*/KEY_CODE EQU 35H /*按鍵代碼*/KEY_VAL EQU 36H /*按鍵數(shù)值*/CHAN_NUM EQU 37H /*當(dāng)前采樣通道號(hào)*/SAMP_NUM EQU 38H /*采樣次數(shù)*/CHAN_NUM1 EQU 39H /*當(dāng)前顯示通道號(hào)*/TEMP1 EQU 40H /*1通道溫度*/TEMP2 EQU 41H /*2通道溫度*/TEMP3 EQU 42H /*3通道溫度*/TEMP4 EQU 43H /*4通道溫度*/TEMP5 EQU

2、 44H /*5通道溫度*/TEMP6 EQU 45H /*6通道溫度*/TEMP7 EQU 46H /*7通道溫度*/TEMP8 EQU 47H /*8通道溫度*/SAMP_MAX EQU 48H /*當(dāng)前通道10次采樣最大值*/SAMP_MIN EQU 49H /*當(dāng)前通道10次采樣最小值*/SAMP_SUMH EQU 4AH /*當(dāng)前通道10次采樣累加值高位*/SAMP_SUML EQU 4BH /*當(dāng)前通道10次采樣累加值低位*/SAMP_AVG EQU 4CH /*當(dāng)前通道去掉最大值和最小值后8次采樣平均值*/SAMP_VAL EQU 4DH /*當(dāng)前通道采樣值*/TEMP_VAL

3、EQU 4EH /*當(dāng)前通道溫度值*/DIS_BUF1 EQU 50H /*顯示緩沖區(qū)1*/DIS_BUF2 EQU 51H /*顯示緩沖區(qū)2*/DIS_BUF3 EQU 52H /*顯示緩沖區(qū)3*/DIS_BUF4 EQU 53H /*顯示緩沖區(qū)4*/DIS_BUF5 EQU 54H /*顯示緩沖區(qū)5*/DIS_BUF6 EQU 55H /*顯示緩沖區(qū)6*/DIS_NUM EQU 57H /*顯示通道號(hào)寄存器*/DIS_CONH EQU 58H /*CH451操作命令高位*/DIS_CONL EQU 59H /*CH451操作命令低位*/ST_FLAG BIT 20H.0 /*系統(tǒng)啟動(dòng)標(biāo)志*

4、/XJ_FLAG BIT 20H.1 /*巡回檢測(cè)標(biāo)志*/KEY_FLAG BIT 20H.2 /*有鍵按下標(biāo)志*/T_1S BIT 20H.3 /*1秒時(shí)間到*/SAMP_1 BIT 20H.4SAMP_END10 BIT 20H.5 /*10次采樣結(jié)束標(biāo)志*/SAMP_NO1 BIT 20H.6 /*每通道采樣開(kāi)始標(biāo)志*/DD_FLAG BIT 20H.7 /*定點(diǎn)檢測(cè)標(biāo)志*/CHAN_ADD0 EQU 0FF80H /*溫度檢測(cè)通道首地址*/AD_ADD0 EQU 0FE00H /*AD通道首地址*/AD_END BIT P3.2 /*AD轉(zhuǎn)換結(jié)束標(biāo)志*/DIS_DOUT BIT P3.

5、3 /*按鍵輸入*/DIS_LOAD BIT P1.0 /*命令輸入有效*/DIS_DIN BIT P1.1 /*顯示命令輸出*/DIS_DCLK BIT P1.2 /*顯示時(shí)鐘輸出*/ ORG 0000HSTART: LJMP MAIN ORG 0003H /*AD轉(zhuǎn)換結(jié)束中斷入口*/ NOP NOP NOP NOP LJMP ERR ORG 000BH /*定時(shí)器0中斷入口*/ LJMP TIME0 NOP NOP LJMP ERR ORG 0013H /*鍵盤中斷入口*/ LJMP KEY_IN NOP NOP LJMP ERR ORG 0040H MAIN: MOV SP,#60H M

6、OV TMOD,#21H /*定時(shí)器0為方式1工作,定時(shí)器2為方式2工作*/ MOV TH0,#3CH /*定時(shí)器0定時(shí)值為500ms*/ MOV TL0,#0AFH MOV TH1,#0FDH /*通信波特率為4800b/s*/ MOV TL1,#0FDH MOV SCON,#01000000B /*串口方式為工作方式1*/ MOV A,30H CJNE A,#0AAH,NRAM MOV A,31H CJNE A,#55H,NRAM /*判斷是否上電復(fù)位*/ SJMP DISP_INITNRAM: MOV R0, #7FH /*RAM低128B清零*/NRAM1: MOV R0,#00H D

7、JNZ R0,NRAM1 MOV 30H,#0AAH /*置上電標(biāo)志*/ MOV 31H,#55H NOP NOPDISP_INIT:NOP MOV 20H,#00H /*內(nèi)部狀態(tài)位清零*/ MOV DIS_BUF1,#0111001B MOV DIS_BUF2,#1110011B MOV DIS_BUF3,#0111110B MOV DIS_BUF4,#1000000B MOV DIS_BUF5,#1101101B MOV DIS_BUF6,#0000110B /*cpu-51寫入顯示緩沖區(qū)*/ SETB DIS_DIN /*CH451串口方式設(shè)為四線制*/ NOP NOP CLR DIS_

8、DIN NOP NOP SETB DIS_DIN MOV TIME_CONT,#1H MOV SAMP_NUM,#00H MOV CHAN_NUM,#00H MOV CHAN_NUM1,#01H MOV TIME_COUNT,TIME_CONT/*定時(shí)時(shí)間設(shè)為100毫秒*/ SETB IT1 /*鍵盤中斷設(shè)為邊沿觸發(fā)方式*/ SETB PX1 /*鍵盤中斷設(shè)為高優(yōu)先級(jí)*/ SETB ET0 /*允許定時(shí)器0中斷*/ SETB EA /*開(kāi)中斷*/ SETB TR0 /*啟動(dòng)定時(shí)器0*/ SETB SAMP_NO1 MOV SAMP_NUM,#00H MAIN1: JNB T_1S,MAIN1

9、/*快速檢測(cè)1通道溫度值*/ CLR T_1S LCALL SAMP /*采樣一次*/ MAIN2: JNB SAMP_END10,MAIN1 /*采完10次*/ CLR SAMP_END10 MOV DIS_CONH,#5H /*設(shè)定顯示參數(shù),不譯碼,掃描6位*/ MOV DIS_CONL,#60H LCALL DISP_WRITE MOV DIS_CONH,#4H /*設(shè)定系統(tǒng)參數(shù),啟用顯示及鍵盤功能*/ MOV DIS_CONL,#03H LCALL DISP_WRITE LCALL DISP_OUT /*顯示“CPU51”*/ CLR EA SETB EX1 SETB EA WAIT:

10、 JNB KEY_FLAG,WAIT CLR KEY_FLAG MOV A,KEY_VAL CJNE A,#8,WAIT1 SETB ST_FLAG WAIT1: JNB ST_FLAG,WAIT /*系統(tǒng)是否啟動(dòng)*/ /*巡檢儀主程序*/ CLR EX1 /*關(guān)鍵盤中斷*/ MOV DIS_CONH,#04H /*關(guān)顯示器*/ MOV DIS_CONL,#02H LCALL DISP_WRITE MOV DIS_CONH,#5H /*譯碼方式轉(zhuǎn)為BCD方式*/ MOV DIS_CONL,#0E0H LCALL DISP_WRITE MOV CHAN_NUM,#00H LCALL DISP_O

11、UT /*輸出顯示數(shù)據(jù)*/ MOV DIS_CONH,#4H /*開(kāi)顯示器*/ MOV DIS_CONL,#03H LCALL DISP_WRITE CLR EA SETB EX1 /*開(kāi)鍵盤中斷*/ SETB EA MOV TIME_CONT,#0AH /*定時(shí)時(shí)間設(shè)為1秒*/ MOV TIME_COUNT,TIME_CONT MOV CHAN_NUM,#01H /*初始化檢測(cè)通道,從第2通道開(kāi)始*/ SETB XJ_FLAG /*設(shè)為巡回檢測(cè)狀態(tài)*/ SETB SAMP_NO1 CLR SAMP_END10 SETB TR1 /*啟動(dòng)定時(shí)器1*/ /*主循環(huán)程序*/ MAIN_LOOP:

12、JNB KEY_FLAG,MAIN_LOOP3 /*是否有鍵按下*/ CLR KEY_FLAG /*處理鍵盤命令*/ MOV A,KEY_VAL SETB EX1 /*開(kāi)鍵盤中斷*/ CJNE A,#8,MAIN_LOOP2 /*是啟動(dòng)鍵?*/ JNB DD_FLAG,MAIN_LOOP1 /*當(dāng)前狀態(tài)是定點(diǎn)檢測(cè)方式*/ SETB XJ_FLAG /*改為巡檢方式*/ CLR DD_FLAG /*清除定點(diǎn)標(biāo)志*/ MOV CHAN_NUM,#00H /*從1通道開(kāi)始工作*/ MOV SAMP_NUM,#00H SETB SAMP_NO1 LCALL DISP_OUT /*顯示輸出*/MAIN_

13、LOOP1: SJMP MAIN_LOOP3MAIN_LOOP2: CLR XJ_FLAG /*如為18鍵值則清除巡檢標(biāo)志*/ SETB DD_FLAG /*改為定點(diǎn)檢測(cè)方式*/ MOV SAMP_NUM,#00H SETB SAMP_NO1 MOV CHAN_NUM,KEY_VAL /*將按鍵值寫入當(dāng)前通道寄存器*/ LCALL DISP_OUT /*顯示該通道溫度值*/MAIN_LOOP3: JNB T_1S,MAIN_LOOP7 /*1秒時(shí)間到*/ LCALL SAMP /*啟動(dòng)AD轉(zhuǎn)換*/ CLR T_1S JNB SAMP_END10,MAIN_LOOP7 /*采完10次*/ MOV

14、 SAMP_NUM,#00H CLR SAMP_END10 SETB SAMP_NO1 LCALL DISP_OUT /*顯示溫度值*/ JNB XJ_FLAG,MAIN_LOOP7 /*巡檢標(biāo)志置位*/ MOV A,CHAN_NUM /*當(dāng)前通道號(hào)加1*/ ADD A,#1 MOV CHAN_NUM,A CJNE A,#8H,MAIN_LOOP7 /*當(dāng)前通道號(hào)為8*/ MOV A,#00H /*當(dāng)前通道號(hào)復(fù)歸為1號(hào)*/ MOV CHAN_NUM,AMAIN_LOOP7: LCALL SEND /*調(diào)用串口發(fā)送程序*/ LJMP MAIN_LOOP /*數(shù)據(jù)采樣子程序*/ SAMP: PUS

15、H ACC PUSH PSW SETB RS0 MOV A,CHAN_NUM MOV DPTR,#CHAN_ADD0 /*輸出溫度檢測(cè)通道,發(fā)采樣脈沖*/ ADD A,DPL MOV DPL,A MOVX DPTR,A NOP NOP MOV A,CHAN_NUM MOV DPTR,#AD_ADD0 /*根據(jù)通道號(hào)計(jì)算出對(duì)應(yīng)的AD地址*/ ADD A,DPL MOV DPL,A MOVX DPTR,A /*啟動(dòng)AD轉(zhuǎn)換器*/ NOP NOP NOP SAMP1: JB AD_END,SAMP1 /*等待AD轉(zhuǎn)換結(jié)束*/ MOVX A,DPTR /*讀AD轉(zhuǎn)換值*/ INC SAMP_NUM /

16、*采樣次數(shù)加1*/ JNB SAMP_NO1,SAMP2 /*是否首次采樣*/ MOV SAMP_SUMH,#00H /*10次累加和賦初值*/ MOV SAMP_SUML,A MOV SAMP_MAX,A /*最大值賦初值*/ MOV SAMP_MIN,A /*最小值賦初值*/ CLR SAMP_NO1 SJMP SAMP4 SAMP2:MOV SAMP_VAL,A /*每次采樣值累加*/ ADD A,SAMP_SUML MOV SAMP_SUML,A CLR A ADDC A,SAMP_SUMH MOV SAMP_SUMH,A MOV A,SAMP_VAL /*當(dāng)前采樣值是否為最大值?*/

17、 CLR C SUBB A,SAMP_MAX JC SAMP3 MOV A,SAMP_VAL /*更新最大值*/ MOV SAMP_MAX,A SJMP SAMP4SAMP3: MOV A,SAMP_VAL /*當(dāng)前采樣值是否為最小值?*/ CLR C SUBB A,SAMP_MIN JNC SAMP4 MOV A,SAMP_VAL /*更新最小值*/ MOV SAMP_MIN,ASAMP4: MOV A,SAMP_NUM CJNE A,#0AH,SAMP5 /*是否采樣完10次*/ /*去極值平均算術(shù)數(shù)字濾波*/ CLR C /*從累加和中減去最大值*/ MOV A,SAMP_SUML SU

18、BB A,SAMP_MAX XCH A,SAMP_SUMH SUBB A,#00H XCH A,SAMP_SUMH /*再?gòu)睦奂雍椭袦p去最小值*/ SUBB A,SAMP_MIN MOV SAMP_SUML,A MOV A,SAMP_SUMH SUBB A,#00H SWAP A /*剩余數(shù)值除以8*/ RL A XCH A,SAMP_SUML SWAP A RL A ADD A,#80H /*結(jié)果四舍五入*/ ANL A,#1FH ADDC A,SAMP_SUML MOV SAMP_AVG,A /*保存去極值平均濾波后的最終采樣值*/ SETB SAMP_END10 SJMP SAMP6SA

19、MP5: AJMP SAMP8/*采樣值轉(zhuǎn)為溫度值*/SAMP6: MOV R2,#00H MOV R3,SAMP_AVG MOV R6,#0C7H /* r6r7為定點(diǎn)小數(shù)0.779*/ MOV R7,#6CH MOV A,R3 /* r3*r6r7 小數(shù)部分四舍五入取整*/ MOV B,R7 MUL AB MOV R4,B MOV R5,A MOV A,R3 MOV B,R6 MUL AB ADD A,R4 MOV R4,A CLR A ADDC A,B MOV R3,A MOV A,R2 MOV B,R7 MUL AB ADD A,R4 MOV R4,A MOV A,R3 ADDC A,

20、B MOV R3,A CLR A RLC A XCH A,R2 MOV B,R6 MUL AB ADD A,R3 MOV R3,A MOV A,R2 ADDC A,B MOV R2,A MOV A,R4 JNB ACC.7,SAMP7 INC R3 CJNE R3,#0,SAMP7 INC R2 SAMP7: MOV TEMP_VAL,R3 /*將溫度值存入TEMP_VAL*/ MOV A,CHAN_NUM MOV R0,#TEMP1 ADD A,R0 MOV R0,A MOV R0,TEMP_VAL SAMP8: CLR RS0 POP PSW POP ACC RET /*溫度值顯示子程序*

21、/ DISP_OUT: PUSH ACC PUSH PSW PUSH B PUSH 00H JNB ST_FLAG,DISP_OUT0 /*系統(tǒng)在工作狀態(tài),將溫度值寫入顯示緩沖區(qū)*/ MOV A,CHAN_NUM ADD A,#1H MOV CHAN_NUM1,A MOV A,CHAN_NUM MOV R1,#TEMP1 ADD A,R1 MOV R1,A/*將溫度值轉(zhuǎn)為三位BCD碼,存入R3,A,B*/ MOV A,R1 MOV B,#100 DIV AB MOV R3,A MOV A,#10 XCH A,B DIV AB MOV DIS_BUF1,CHAN_NUM1 /*顯示通道號(hào)*/ M

22、OV DIS_BUF2,#10010B /*顯示“”*/ MOV DIS_BUF3,#00H /*顯示溫度千位*/ MOV DIS_BUF4,R3 /*顯示溫度百位*/ MOV DIS_BUF5,A /*顯示溫度十位*/ MOV DIS_BUF6,B /*顯示溫度個(gè)位*/ /*數(shù)據(jù)顯示輸出*/ DISP_OUT0: MOV R1,#7H /*顯示位數(shù)為6位*/ MOV R2,#0DH /*從左至右開(kāi)始描掃*/ MOV R0,#50H /*顯示區(qū)首址*/DISP_OUT1: MOV DIS_CONL,R0 MOV A,R2 ORL A,#8H MOV DIS_CONH,A ACALL DISP_

23、WRITE /*將數(shù)據(jù)寫入顯示芯片*/ INC R0 DEC R2 DJNZ R1,DISP_OUT1 /*共寫6位數(shù)據(jù)*/ POP 00H POP B POP PSW POP ACC RET/*顯示芯片命令寫入子程序*/DISP_WRITE: PUSH ACC PUSH B PUSH 07H PUSH 00H CLR EX1 CLR DIS_LOAD MOV R7,#08H MOV A,DIS_CONL MOV B,DIS_CONHDISP_WRITE8: RRC A CLR DIS_DCLK NOP NOP MOV DIS_DIN,C NOP NOP SETB DIS_DCLK DJNZ

24、R7,DISP_WRITE8 MOV A,B MOV R7,#04H DISP_WRITE4: RRC A CLR DIS_DCLK NOP NOP MOV DIS_DIN,C NOP NOP SETB DIS_DCLK DJNZ R7,DISP_WRITE4 NOP NOP SETB DIS_LOAD SETB EX1 POP 00H POP 07H POP B POP ACC RET/*鍵盤中斷程序*/ KEY_IN: PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH 06H CLR EX1 MOV SAMP_NUM,#00H CLR DIS_LOAD MO

25、V A,#07H MOV R7,#04H DIS_READ4: RRC A /*發(fā)送讀鍵碼命令*/ CLR DIS_DCLK NOP NOP MOV DIS_DIN,C NOP NOP SETB DIS_DCLK DJNZ R7,DIS_READ4 SETB DIS_LOAD CLR A MOV R7,#07H DIS_READ7: MOV C,DIS_DOUT /*讀出鍵碼*/ CLR DIS_DCLK RLC A SETB DIS_DCLK DJNZ R7,DIS_READ7 CLR IE1 MOV KEY_CODE,A SUBB A,#40H MOV KEY_VAL,A SETB KEY_FLAG SETB EX1 POP 06H POP DPL POP DPH POP ACC POP PSW RETI/*100MS定時(shí)中斷程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論