www.5iediy.com - 我爱电子制作网

仪器仪表    我爱电子制作网

 
主页 > 仪器仪表 > 电脑接口的数字多用表也DIY(1-3)

上一页 / 没有了

电脑接口的数字多用表也DIY(3)-源程序清单

原作者:何光(站长) 本站原创 未经许可 请勿转载

源程序清单


;usart adc test
;连续转换模式
;不断将DATA送至USART ut60 or ms9803
;adc5(pin28)in
;mega48 2mhz
;CRYSTAL=16MHZ,熔丝位-外部时钟8分频
;2005-10-29


.include"m48def.inc"
.def temp=r21
.def temp2=r22
.def data_usart=r28


.equ db7=7
.equ port3=portb
.equ ddr3=ddrb
.equ pin3=pinb

.equ db6=6
.equ port4=portb
.equ ddr4=ddrb

.equ db5=5
.equ port5=portb
.equ ddr5=ddrb

.equ db4=4
.equ port6=portb
.equ ddr6=ddrb

.equ rs=4
.equ port0=portd
.equ ddr0=ddrd

.equ rw=3
.equ port1=portd
.equ ddr1=ddrd

.equ e=2
.equ port2=portd
.equ ddr2=ddrd

.def data_lcd=r29



.org 0000
rjmp reset

reset:
;sp set
ldi temp,low(ramend)
out spl,temp
ldi temp,high(ramend)
out sph,temp
;portd=out
ldi temp,$ff
out ddrd,temp


main:
;调用 usart 初始化子程序
rcall usart_init_ut60 ;如果使用MA9803,就把UT60换成MA9803
;调用 adc 初始化子程序
rcall adc_init

;out data to xx
out_adc:
ldi temp,0b11000101
sts admux,temp ;1.1vadc5
lds r16,adcl
lds r17,adch
rcall b16td5

rcall ut60 ;如果使用MA9803,就把UT60换成MA9803
rjmp out_adc


;***************************************************
;r19-r16 (xxxx)输出10进制电压值

;go to multimeter
ut60:
ldi data_usart,$15
rcall usart_tx


mov r23,r19 ;msb 无效0消隐
sbrs r23,0
ldi r23,10 ;10 = no display
rcall ut60_code
ori r24,$20
mov data_usart,r24
rcall usart_tx
ori r25,$30
mov data_usart,r25
rcall usart_tx

mov r23,r18
rcall ut60_code
ori r24,$40
mov data_usart,r24
rcall usart_tx
ori r25,$50
mov data_usart,r25
rcall usart_tx

mov r23,r17
rcall ut60_code
ori r24,$60
mov data_usart,r24
rcall usart_tx
ori r25,$70
mov data_usart,r25
rcall usart_tx

mov r23,r16 ;lsb
rcall ut60_code
ori r24,$80
;ori r24,$08 ;add point
mov data_usart,r24
rcall usart_tx
ori r25,$90
mov data_usart,r25
rcall usart_tx


ldi data_usart,$a0
rcall usart_tx
ldi data_usart,$b8
rcall usart_tx
ldi data_usart,$c0
rcall usart_tx
ldi data_usart,$d4
rcall usart_tx
ldi data_usart,$e0
rcall usart_tx
ret
;****************************************************

;(欢迎访问:我爱电子制作网 http://www.5iediy.com) 请关注本站2011新款VGA信号源(信号发生器)
;****************************************************
;r19-r16 (xxxx)输出10进制电压值

;go to multimeter
ms9803:
ldi data_usart,0b00000000
rcall usart_tx
mov data_usart,r16 ;l
rcall usart_tx
mov data_usart,r17
rcall usart_tx
mov data_usart,r18
rcall usart_tx
mov data_usart,r19 ;h
rcall usart_tx
ldi data_usart,0b00000000
rcall usart_tx
ldi data_usart,0b00000010
rcall usart_tx
ldi data_usart,0b00000000
rcall usart_tx
ldi data_usart,0b00000000
rcall usart_tx
ldi data_usart,$0d
rcall usart_tx
ldi data_usart,$0a
rcall usart_tx
ret
;****************************************************


;****************************************************
;过程名:usart
;fun:初始化,发和收子程序
;入口参数:寄存器data_usart
;出口参数:寄存器data_usart
;影响资源:temp,data_usart
;****************************************************
;ut60 code 0-9-nodisplay
tab:.db $07,$0d,$00,$05,$05,$0b,$01,$0f,$02,$07,$03,$0e,$07,$0e,$01,$05,$07,$0f,$03,$0f,$00,$00
;usart初始化子程序 for ut60
usart_init_ut60:
;波特率设置:2400
ldi temp,0
sts ubrr0h,temp
;ldi temp,25 ;u2x0=0
ldi temp,51
sts ubrr0l,temp
;常速模式;u2x0=0
lds temp,ucsr0a
andi temp,0b11111101
sts ucsr0a,temp
;接收器与发送器使能
ldi temp,0b00011000 ;t and r enable
sts ucsr0b,temp
;设置帧格式:n,8,1
ldi temp,0b00000110
sts ucsr0c,temp
ret

;usart初始化子程序 for ms9803
usart_init_ms9803:
;波特率设置:9600
ldi temp,0
sts ubrr0h,temp
ldi temp,12
sts ubrr0l,temp
;倍速模式;u2x0=1 ///////////////////////////
;lds temp,ucsr0a
;ori temp,0b00000010
;sts ucsr0a,temp
;接收器与发送器使能
ldi temp,0b00011000 ;t and r enable
sts ucsr0b,temp
;设置帧格式:n,7,2
ldi temp,0b00001100
sts ucsr0c,temp
ret

;usart 发送子程序
usart_tx:
;等待发送缓冲器为空
lds temp,ucsr0a
sbrs temp,udre0
rjmp usart_tx
;将数据放入缓冲器,发送数据
sts udr0,data_usart ;入口是将待发数据放入data_usart
ret

;usart 接收子程序
usart_rx:
;等待接收数据
lds temp,ucsr0a
sbrs temp,rxc0
rjmp usart_rx
;从缓冲器中获取并返回数据
lds data_usart,udr0 ;出口是data_usart
ret
;****************************************************
;****************************************************
;adc 初始化子程序
;解除ADC电源禁止
adc_init:
lds temp,prr
andi temp,$fe
sts prr,temp
adcadc:
;adc输入pin数字输入禁止
ldi temp,0b00110000
sts didr0,temp
;adc多路复用选择设置
;参考电压,是否左对齐和CH选择
ldi temp,0b11000000
sts admux,temp ;1.1vadc(0-5)
;adc控制及状态控制b
ldi temp,0b00000000
sts adcsrb,temp
;adc控制及状态控制a
ldi temp,0b10100000
sts adcsra,temp
;adc_start
ldi temp,0b11100000
sts adcsra,temp
ret
;****************************************************
;****************************************************

;****************************************************
;过程名:b16td5
;功能:16bit二进制数转换成5位BCD码
;入口参数:R17,R16
;出口参数:r20,r19,r18,r17,r16 (万-个)
;影响资源:r16-r20
;****************************************************
b16td5:ser r20
b16td5_1:inc r20
subi r16,low(10000)
sbci r17,high(10000)
brcc b16td5_1
subi r16,low(-10000)
sbci r17,high(-10000)
ser r19
b16td5_2:inc r19
subi r16,low(1000)
sbci r17,high(1000)
brcc b16td5_2
subi r16,low(-1000)
sbci r17,high(-1000)
ser r18
b16td5_3:inc r18
subi r16,low(100)
sbci r17,high(100)
brcc b16td5_3
subi r16,low(-100)
sbci r17,high(-100)
ser r17
b16td5_4:inc r17
subi r16,10
brcc b16td5_4
subi r16,-10
ret

;****************************************************
;过程名:ut60_code
;功能:查ut60_code编码表
;入口参数:TAB,r23(偏移量)
;出口参数:r1(code_NO1.),r2(code_NO2.)
;影响资源:z(r30,r31),R23,R1,R2
;tab:.db $07,$0d,$00,$05,$05,$0b,$01,$0f,$02,$07,$03,$0e,$07,$0e,$01,$05,$07,$0f,$03,$0f
;****************************************************
;****************************************************

ut60_code:
ldi zh,high(tab*2)
ldi zl,low(tab*2)
lsl r23 ;*2
add zl,r23 ;r23(偏移量)
lpm
mov r24,r0 ;NO.1
inc zl
lpm
mov r25,r0 ;NO.2
ret

;*****************************************************
;*****************************************************

;***************************************************
;过程名:data_to_port
;功能:data_lcd 的H BYTE 送到PORT1的H BYTE
;代替指令 out port,data_lcd
;入口参数:data_lcd
;出口参数:
;影响资源:data_lcd
;***************************************************
data_to_port:

cbi port3,db7
cbi port4,db6
cbi port5,db5
cbi port6,db4
sbrc data_lcd,7 ;out port,data_lcd
sbi port3,db7
sbrc data_lcd,6
sbi port4,db6
sbrc data_lcd,5
sbi port5,db5
sbrc data_lcd,4
sbi port6,db4
ret

;(欢迎访问:我爱电子制作网 http://www.5iediy.com) 请关注本站2011新款VGA信号源(信号发生器)

上一页 / 没有了