?? 1113752222.asm
字號:
;*************************************************
;************************************************
;* 說明:這只是一個程序構架,您應按此構架的提示 *
;* 合理添加程序,以使其正常運行。 *
;************************************************
;*************************************************
;* 本實驗使用 A/D 轉換來對一個橋式結構的熱敏元件 *
;* 電路采樣,然后將其結果送至一校準表中。校準后 *
;* 得出其實際溫度值,并將校準值轉換成 ASCII碼顯示*
;* 在LCD上。 *
;*************************************************
include <p16f877.inc>
; 定義 LCD數據& 控制I/O口
LCD_DATA equ PORTB
LCD_CNTL1 equ PORTB
LCD_CNTL2 equ PORTA
; 定義 LCD控制相應的I/O引腳
RS equ 1
E equ 5
; LCD 模塊命令代碼
DISP_ON EQU 0x00C ; 開顯示
DISP_ON_C EQU 0x00E ; 開顯示, 開指針
DISP_ON_B EQU 0x00F ; 開顯示, 開指針,開閃爍
DISP_OFF EQU 0x008 ; 關顯示
CLR_DISP EQU 0x001 ; 清顯示的操作數
ENTRY_INC EQU 0x006 ; 操作數,由左向右顯示
ENTRY_INC_S EQU 0x007 ; 操作數,顯示和讀取均向右
ENTRY_DEC EQU 0x004 ; 操作數,由右向左顯示
ENTRY_DEC_S EQU 0x005 ; 操作數,顯示和讀取均向左
DD_RAM_ADDR EQU 0x080 ; 初始化第一行顯示的操作數
DD_RAM_UL EQU 0x0c0 ; 初始化第二行顯示的操作數
;
;**************************************
; 請設置顯示相關寄存器 *
;**************************************
Byte RES 1
Count RES 1
Count1 RES 1
Count2 RES 1
LCD_DATA1 RES 1
;*******************************************
;提示:您需要定義下列寄存器用做變量寄存器
;*******************************************
Temp res 1
TempH res 1
TempL res 1
Count res 1
org 0
goto Start
CalTable
movwf Temp ; 存A/D轉換結果至Temp
movlw 0x66 ; 進行校準處理
subwf Temp,w ;
addwf PCL,f ; 將補償結果與 PCL相加
dt 0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5
dt 6,6,6,7,7,7,8,8,8,9,9,0xa,0xa,0xb,0xb,0xc,0xc
dt 0xd,0xd,0xe,0xe,0xf,0xf,0xf,0x10,0x10,0x10
dt 0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x14
dt 0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x18,0x18
dt 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c
dt 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20
dt 0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24,0x25,0x25
dt 0x26,0x26,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b
dt 0x2c,0x2d,0x2e,0x2f,0x30,0x32
Start
call InitLCD ; 初始化 LCD 顯示
;**************************************************
;* 提示:將code1替換成你的程序,依次完成以下功能: *
;* - 初始化 A/D 轉換器 *
;* - 設置轉換速率為Fosc/8 *
;* - 選定通道1 *
;* - A/D使能 *
;**************************************************
code1
Main
;**************************************************
;* 提示:將code2替換成你的程序,依次完成以下功能:*
;* - 調用子程序延時 20us *
;* - 開始 A/D 轉換 *
;* - 等待轉換完成 *
;* - 送轉換結果(高8位)到校準表CalTable *
;* - 存校準后結果至 Temp *
;**************************************************
code2
;**************************************************
call Bin2BCD ; 進行BCD碼調整
call L1homeLCD ; 顯示指針指向第1行
movf TempH,W ; 顯示溫度
call putcLCD
movf TempL,W
call putcLCD
movlw 'C' ; 顯示“C”(表示攝氏度)
call putcLCD
goto Main
;********************************************************
;* Delay20 - 將call及return指令計算在內,準確的延時20us*
;********************************************************
Delay20
;************************************************
;* 提示:將code3替換成你的程序,完成以下功能: *
;* - code2將是一個能準確延時20us 的子程序(包*
;* 括call 和 return指令在內)。 *
;* -用變量 Count 來進行循環次數計數 *
;************************************************
code3
return
;************************************************
;* Bin2BCD - 將 Temp 寄存器內的二進制數轉 *
;* 換為相應的 ASCII 碼并存為 TempH:TempL 的形式 *
;************************************************
Bin2BCD
clrf TempH ; Initialize variables
movf Temp,W
movwf TempL
Ttenth ; Subtract 10 from low variable
movlw .10 ; until result is < 0. On each
subwf TempL,W ; subtraction, increment the
btfss STATUS,C ; temperature high byte.
goto Over
movwf TempL
incf TempH,F
goto Ttenth
Over
movlw 0x30 ; Make decimal ASCII by adding
addwf TempH,F ; '0' to high and low byte
addwf TempL,F
return
;****************************************************
;提示:要將code4替換成以下子程序以供調用: *
; - InitLCD 初始化面板子程序 *
; - putcLCD 寫入字符子程序 *
; - clrLCD 清顯示子程序 *
; - L1homeLCD定位指針在第一行 *
; - L2homeLCD定位指針在第二行 *
;****************************************************
code4
end
;****************************************************
;Written by : Yamato Tel:0591-3375855-721 *
;****************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -