?? temp_dis.asm
字號:
;******************************************************************
;《智能溫度顯示儀》程序清單
;程序文件名為: TEMP_DIS.ASM
;******************************************************************
;==============================寄存器定義===================================
STATUS EQU 03H ;定義狀態(tài)寄存器地址
PORTA EQU 05H ;定義端口RA的數(shù)據(jù)寄存器地址
PORTB EQU 06H ;定義端口RB的數(shù)據(jù)寄存器地址
PORTC EQU 07H ;定義端口RC的數(shù)據(jù)寄存器地址
TRISA EQU 85H ;定義端口RA的方向控制寄存器地址
TRISB EQU 86H ;定義端口RB的方向控制寄存器地址
TRISC EQU 87H ;定義端口RC的方向控制寄存器地址
OPTION_REG EQU 80H ;定義選項寄存器地址
INTCON EQU 0BH ;定義中斷控制寄存器地址
TMR0 EQU 01H ;定義TMR0寄存器地址
PIR1 EQU 0CH ;定義第一外設(shè)中斷標志寄存器地址
ADRESH EQU 1EH ;定義ADC結(jié)果寄存器高字節(jié)地址
ADCON0 EQU 1FH ;定義ADC控制寄存器0地址
ADCON1 EQU 9FH ;定義ADC控制寄存器1地址
T1CON EQU 10H ;定義TMR1控制寄存器地址
TMR1L EQU 0EH ;定義TMR1低字節(jié)地址
TMR1H EQU 0FH ;定義TMR1高字節(jié)地址
;==============================變量聲明=======================================
ADR EQU 20H ;存放標度變換結(jié)果
ADR_deci EQU 21H ;存放標度變換小數(shù)部分進位
ADR_int EQU 22H ;存放標度變換整數(shù)部分
TEMP1 EQU 23H ;暫存寄存器1
TEMP2 EQU 24H ;暫存寄存器2
BCD_count EQU 25H ;存放BCD碼轉(zhuǎn)換計數(shù)
DISP_count EQU 26H ;數(shù)碼管顯示移位計數(shù)
TMR1_count EQU 27H ;15秒中斷外循環(huán)計數(shù)值
MAX EQU 28H ;報警上限值
MIN EQU 29H ;報警下限值
MAX?_temp EQU 30H ;報警上限值暫存寄存器
MIN_temp EQU 31H ;報警下限值暫存寄存器
DISP_dig EQU 32H ;顯示"位"寄存器
DISP_seg EQU 33H ;顯示"段"寄存器
;==============================常量聲明=======================================
TMR1LB EQU 0DCH ;定義TMR1低字節(jié)寄存器初始值 (定時500毫秒)
TMR1HB EQU 0BH ;定義TMR1高字節(jié)寄存器初始值
;****************************復(fù)位矢量和中斷矢量**************************
ORG 000H
NOP
GOTO MAIN
ORG 004H
;*****************************TMR1中斷服務(wù)程序***************************
TMR1_int BCF PIR1,0 ;清中斷溢出標志位
BCF T1CON,0 ;關(guān)閉TMR1定時器
MOVLW TMR1LB ;500ms定時初值
MOVWF TMR1L
MOVLW TMR1HB
MOVWF TMR1H
DECFSZ TMR1_count,1 ;外循環(huán)數(shù)減到零?
RETFIE ;否,中斷返回
GOTO AGAIN ;是,轉(zhuǎn)至正常顯示
;******************************主程序************************************
MAIN CALL INITIAL ;調(diào)用初始化子程序
AGAIN BTFSC PORTB,0 ;K1鍵是否按下
GOTO NEXT1 ;否,轉(zhuǎn)檢測K2
CALL DELAY10 ;調(diào)10ms延時子程序,消除抖動影響
BTFSC PORTB,0 ;再次檢測K1鍵是否按下
GOTO NEXT1 ;否,轉(zhuǎn)檢測K2
CALL Change_Max ;是,調(diào)上限修改子程序
NEXT1 BTFSC PORTB,1 ;K2鍵是否按下
GOTO NEXT2 ;否,轉(zhuǎn)采樣子程序
CALL DELAY10 ;是,調(diào)10ms延時子程序,消除抖動影響
BTFSC PORTB,1 ;再次檢測K2鍵是否按下
GOTO NEXT2 ;否,轉(zhuǎn)采樣子程序
CALL Change_Min ;是,調(diào)下限修改子程序
NEXT2 CALL AD_trans ;調(diào)采樣轉(zhuǎn)換子程序
;========================判斷溫度是否為100℃================================
MOVF ADR,0
SUBLW 0FEH
BTFSC STATUS,0 ;采樣結(jié)果大于0FEH(對應(yīng)100℃)?
CALL BCD_trans ;否,調(diào)標度轉(zhuǎn)換子程序
BSF PORTA,3 ;是,點亮上限報警燈
MOVLW 01H
MOVWF DISP_dig ;數(shù)碼管第一位顯示
MOVLW 00H
MOVWF DISP_seg ;數(shù)碼管第一位顯示數(shù)值
CALL Display ;調(diào)顯示子程序顯示這一位(個位)
MOVLW 02H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;顯示十位
MOVLW 03H
MOVWF DISP_dig
MOVLW 01H
MOVWF DISP_seg
CALL Display ;顯示百位
MOVLW 04H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;顯示最高位
;==========================上下限報警及數(shù)據(jù)顯示==========================
MOVF MAX,0
SUBWF ADR,0 ;采樣結(jié)果是否大于上限值
BTFSS STATUS,0
GOTO NEXT3 ;否;轉(zhuǎn)NEXT2
BSF PORTA,3 ;是;點亮上限報警燈
GOTO NEXT5
NEXT3 MOVF ADR,0
SUBWF MIN,0 ;采樣結(jié)果是否低于下限值
BTFSS STATUS,0
GOTO NEXT4 ;否,轉(zhuǎn)NEXT3
BSF PORTA,5 ;是,點亮下限報警燈
GOTO NEXT5
NEXT4 BCF PORTA,3 ;熄滅上限報警燈
BCF PORTA,5 ;熄滅下限報警燈
NEXT5 MOVLW 01H
MOVWF DISP_dig ;顯示個位
MOVF ADR,0
ANDLW 0FH ;顯示ADR中低四位值(BCD碼的個位值)
MOVWF DISP_seg
CALL Display
SWAPF ADR,0 ;交換ADR的高四位和低四位值
ANDLW 0FH
MOVWF DISP_seg ;顯示ADR中高四位值(BCD碼的十位值)
MOVLW 02H
MOVWF DISP_dig
CALL Display ;顯示十位
MOVLW 03H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;顯示百位
MOVLW 04H
MOVWF DISP_dig
MOVLW 00H
MOVWF DISP_seg
CALL Display ;顯示最高位
CALL DELAY30 ;延時
CALL DELAY30
CALL DELAY30
GOTO AGAIN
;******************************延時10ms子程序***************************
DELAY10 BCF INTCON,2 ;TMR0溢出標志位清零
MOVLW 0B2H
MOVWF TMR0 ;裝入初值,啟動計時
L1 BTFSS INTCON,2 ;定時溢出?
GOTO L1 ;否,循環(huán)檢測標志位
RETURN ;是,返回
;*******************************延時30ms子程序**************************
DELAY30 BCF INTCON,2 ;TMR0溢出標志位清零
MOVLW 16H
MOVWF TMR0 ;賦初值,啟動計時
L2 BTFSS INTCON,2 ;檢測溢出標志位
GOTO L2
RETURN
;*******************************初始化子程序******************************
INITIAL
;=============================輸入輸出口初始化============================
BSF STATUS,5
MOVLW 01H
MOVWF TRISA ;置RA0輸入,RA4、RA5輸出
MOVLW 17H
MOVWF TRISB ;置RB輸入方式
MOVLW 00H
MOVWF TRISC ;置RC輸出方式
MOVLW 07H
MOVWF OPTION_REG ;TMR0初始化,預(yù)設(shè)分頻比1:256
;==============================TMR1初始化==============================
BSF PIR1,0 ;開放TMR1中斷使能位
BCF STATUS,5
MOVLW 34H ;設(shè)置分頻比為1:8
MOVWF T1CON
MOVLW 0C0H ;開放總中斷和外設(shè)中斷使能位
MOVWF INTCON
MOVLW TMR1LB ;TMR1低字節(jié)賦初值
MOVWF TMR1L
MOVLW TMR1HB ;TMR1高字節(jié)賦初值
MOVWF TMR1H
MOVLW 1EH ;TMR1中斷"30"次則自動跳出上下限值修改
MOVWF TMR1_count
MOVLW 60H ;報警上限賦初值
MOVWF MAX
MOVLW 20H ;報警下限賦初值
MOVWF MIN
;===============================7219初始化================================
MOVLW 0CH
MOVWF DISP_dig ;選中寄存器"SHUTDOWN",其地址為0CH
MOVLW 01H
MOVWF DISP_seg ;寄存器"SHUTDOWN"賦初值
CALL Display ;設(shè)為正常顯示狀態(tài)
MOVLW 0FH
MOVWF DISP_dig ;選中寄存器"DISPLAY TEST",其地址為0FH
MOVLW 00H
MOVWF DISP_seg ;寄存器"DISPLAY TEST"賦初值
CALL Display ;設(shè)為正常顯示狀態(tài)
MOVLW 0BH
MOVWF DISP_dig ;選中寄存器"SCAN LIMIT",其地址為0BH
MOVLW 03H
MOVWF DISP_seg ;寄存器"SCAN LIMIT"賦初值
CALL Display ;點亮0-3四個數(shù)碼管
MOVLW 09H
MOVWF DISP_dig ;選中寄存器"DECODE MODE",其地址為09H
MOVLW 0FFH
MOVWF DISP_seg ;寄存器"DECODE MODE"賦初值
CALL Display ;選B碼譯碼方式
MOVLW 0AH
MOVWF DISP_dig ;選中寄存器"INTENSITY",其地址為0AH
MOVLW 0FH
MOVWF DISP_seg ;寄存器"INTENSITY"賦初值
CALL Display ;顯示亮度選擇最亮
RETURN
;***************************A/D轉(zhuǎn)換子程序************************************
AD_trans BSF STATUS,5
MOVLW 0EH
MOVWF ADCON1 ;設(shè)RA0為模擬輸入,采樣結(jié)果左對齊
BCF STATUS,5
MOVLW 41H
MOVWF ADCON0 ;選擇A/D轉(zhuǎn)換時鐘,選擇采樣通道0,開
;采樣允許位
BSF ADCON0,2 ;采樣開始
LOOP_AD NOP
BTFSC ADCON0,2 ;采樣結(jié)束?
GOTO LOOP_AD ;否,轉(zhuǎn)LOOP_AD
MOVF ADRESH,0 ;是,讀取采樣結(jié)果
MOVWF ADR
RETURN
;***************************標度變換轉(zhuǎn)換子程序*******************************
BCD_trans
;===========================小數(shù)進位部分處理=================================
MOVF ADR,0
MOVWF TEMP1
MOVWF TEMP2
RLF TEMP1,1
RLF TEMP1,1
RLF TEMP1,1
MOVF TEMP1,0
MOVWF TEMP2 ;采樣結(jié)果左移3位送TEMP2
RLF TEMP1,1 ;采樣結(jié)果左移4位送TEMP1
MOVLW 30H
ANDWF TEMP1,1 ;左移4位結(jié)果屏蔽高2位和低4位
MOVLW 38H
ANDWF TEMP2,1 ;左移3位結(jié)果屏蔽高2位和低3位
MOVF TEMP2,0
ADDWF TEMP1,1
MOVF ADR,0
MOVWF TEMP2
MOVLW 3FH
ANDWF TEMP2,1 ;采樣結(jié)果屏蔽高2位
MOVF TEMP2,0
ADDWF TEMP1,0
MOVWF ADR_deci
;=============================整數(shù)部分處理===============================
MOVF ADR,0
MOVWF TEMP1
MOVWF TEMP2
RRF TEMP1,1
RRF TEMP1,1 ;采樣結(jié)果右移2位送TEMP1
MOVLW 3FH
ANDWF TEMP1,1 ;屏蔽高2位
RRF TEMP2,1
RRF TEMP2,1
RRF TEMP2,1 ;采樣結(jié)果右移3位送TEMP2
MOVLW 1FH
ANDWF TEMP2,1 ;屏蔽高3位
MOVF TEMP2,0
ADDWF TEMP1,1
MOVF ADR,0
MOVWF TEMP2
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -