当前位置: 代码迷 >> 汇编语言 >> 基于单片机的数字电压表设计解决办法
  详细解决方案

基于单片机的数字电压表设计解决办法

热度:8851   发布时间:2013-02-26 00:00:00.0
基于单片机的数字电压表设计
下面是基于单片机的数字电压表设计,星号之间为需要添加的程序,定时我自己加了,还有一个添加不出来,
  就是对adc0808输出的信号采样这段做不出来,它要实现一个算法,即,将adc0808输出的
  二进制数转换成相应的电压值,并且写成“*.***”的形式,将这几位分别放在30h,31h,32h
  33h,34h单元里。中断次数的设置是为了能在很短的时间里采样几次,然后去平均值(“*.***”形式)放在相应
  的单元里,这样可以消除抖动,是测量值更精确。
  麻烦各位大侠帮忙一下,
   



  COM EQU 50H ;指令寄存器
  DAT EQU 51H ;数据寄存器

  RS EQU P2.1 ;LCD寄存器选择信号
  RW EQU P2.2 ;LCD读/写选择信号
  E EQU P2.3 ;LCD使能信号

  ORG 0000H
  LJMP MAIN ;主程序入口
  ORG 000BH
  LJMP BT0 ;T0中断入口

  ORG 0030H ;主程序,初始化
MAIN: MOV SP,#60H
  LCALL INT ;调LCD简介控制方式下的初始化子程序
  MOV 30H,#30H ;8051片内30H-34H为显示缓冲区,用于存放A/D转换数据
  MOV 31H,#0A5H ;初始化数据设为0.000
  MOV 32H,#30H
  MOV 33H,#30H
  MOV 34H,#30H
  MOV R7,#30H
  LCALL N1 ;显示 Voltage=0.000
;*********************** 定时器初始化程序 ***********************************
  MOV TMOD,#00H ;定时器T0设为方式0
  MOV TL0,#0FH ;装入定时常数
  MOV TH0,#00H
  SETB TR0 ;启动T0
  MOV R6,#03H ;装入T0中断次数
  SETB EA
  SETB ET0 ;开中断
;******************************************************************************
LP: MOV R7,#30H ;显示缓冲区首地址
  LCALL DISPLY
  SJMP LP ;循环显示

;********************** 定时器中断服务程序 **********************************
BT0:
  ;读取0809第0通道的转换结果
  ;重新启动0809
  ;将读得的2进制数据转换为10进制数
  ;将数据送往显示缓冲区30H-34H
  RETI
;******************************************************************************
DISPLY: ;LCD显示子程序
  MOV COM,#8AH
  LCALL PR1
  MOV R1,#05H
  MOV R0,#30H
L: MOV DAT,@R0
  LCALL PR2
  INC R0
  DJNZ R1,L
  RET

;1.逐字一次输入方式演示程序段
N1: MOV COM,#01H
  LCALL PR1
  MOV COM,#06H
  LCALL PR1
  MOV COM,#080H
  LCALL PR1
  MOV DPTR,#TAB
  MOV R2,#10
  MOV R3,#00H
WRIN: MOV A,R3
  MOVC A,@A+DPTR
  MOV DAT,A
  LCALL PR2
  INC R3
  DJNZ R2,WRIN
  RET
TAB: DB"Voltage=";

;LCD间接控制方式下的初始化子程序
INT: LCALL DELAY ;调延时子程序
  MOV COM,#38H ;设置工作方式
  LCALL PR1
  MOV COM,#01H ;清屏
  LCALL PR1
  MOV COM,#06H ;设置输入方式
  LCALL PR1
  MOV COM,#0EH ;设置显示方式
  LCALL PR1
  RET

DELAY:MOV R6,#0FH ;延时子程序
  MOV R7,#00H
DELAY1:
  NOP
  DJNZ R7,DELAY1
  DJNZ R6,DELAY1
  RET

;LCD间接控制方式的驱动子程序

;1 读BF和AC值
PR0: PUSH ACC
  MOV P0,#0FFH ;P0置位,准备读
  CLR RS
  SETB RW
  SETB E
  LCALL DELAY
  MOV COM,P0
  CLR E
  POP ACC
  RET

;2 写指令代码子程序 ;读BF和AC6-4值
PR1: PUSH ACC
  CLR RS
  SETB RW
PR11: MOV P0,#0FFH ;P0置位,准备读
  SETB E
  LCALL DELAY
  NOP
  MOV A,P0
  相关解决方案