⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1113752222.asm

📁 本实验使用 A/D 转换来对一个桥式结构的热敏元件电路采样
💻 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 + -