АСВТ 2 семестр ЛР №7

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:50, 12 мая 2016.


Работа с АЦП (PIC12F675)

Выполнение работы

Подробнее о принципе работы АЦП на МК PIC12F675[1] можно прочитать здесь.

Цель работы. Изучить принцип работы АЦП.

Исходные данные. Осуществить индикацию изменения показаний вольтметра в зависимости от изменения реостата. На ССИ градация должна умещаться в пределах от 0 до F.

Реализация. Схема реализована с использованием ССИ, вольтметра и реостата. При изменении сопротивления реостата меняется величина показателя вольтметра, что затем отображается на ССИ.

Рис. 1. Схема в Proteus
Рис. 2. Демонстрация работы (анимация кликабельна)

Листинг на Ассемблере.

Переопределение банков с помощью макросов для дальнейшего удобного переключения портов:

#include p12f675.inc                ; Include register definition file

bank0   MACRO 
	bcf STATUS,RP0
	ENDM
	
bank1   MACRO
	bsf STATUS,RP0
	ENDM	
;====================================================================
; VARIABLES
;====================================================================

cc0	equ	0x20
cc1	equ	0x21
cc2	equ	0x22
buf	equ	0x23
ccc	equ	0x24
RST   code	0 
      goto	Start
      
      org	4
      bcf	PIR1, ADIFStart  
      bank0
      
      bank1
      movlw	0x18
      movwf	ANSEL; выбор скорости и выбор аналогового или цифрового сигнала на порты 2мкс
      movlw	0x18
      movwf	TRISIO
      
      bank0
      movlw	0x81
      movwf	ADCON0
      movlw	0x07
      movwf	CMCON; компаратор выключен
      movlw	0x00
      movwf	VRCON; модуль компаратора
      
      movlw	0x3F
      movwf	0x40
      movlw	0x06
      movwf	0x41
      movlw	0x5B
      movwf	0x42
      movlw	0x4F
      movwf	0x43
      movlw	0x66
      movwf	0x44
      movlw	0x6D
      movwf	0x45
      movlw	0x7D
      movwf	0x46
      movlw	0x07
      movwf	0x47
      movlw	0x7F
      movwf	0x48
      movlw	0x6F
      movwf	0x49
      movlw	0x77
      movwf	0x4a
      movlw	0x7C
      movwf	0x4b
      movlw	0x39
      movwf	0x4c
      movlw	0x5E
      movwf	0x4d
      movlw	0x79
      movwf	0x4e
      movlw	0x71
      movwf	0x4f
      
Loop  
      movlw	0xf3
      andwf	ADCON0, f
      movlw	0x0c
      iorwf	ADCON0, f
      movwf	10
      call 	delay
      bsf	ADCON0, GO
loop1; ждем нуля
      btfsc	ADCON0, GO
      goto	loop1
      bank1
      movf	ADRESL, W;2-левое или 8-правое выравнивание младших бит результата ацп
      movwf	buf	
      swapf	buf, F
      movlw	0x0f
      andwf	buf, F
      movlw	0x40
      addwf	buf, f
      movf	buf, W
      movwf	FSR ; регистр адреса при косвенной адресации
      movf	INDF, W; обращение к регистру из FSR
      bank0
      btfsc	ADRESH, 0;8-левое или 2-правое выравнивание младших бит результата ацп
      iorlw	0x80;выставка точки
      movwf	buf
      call	serial
      movlw	0xff
      call	delay
      goto  Loop
      
serial ; перегон в регистр сдвига       
      movlw	8
      movwf	ccc
      bank0
s_loop
      btfsc	buf, 0
      goto	setb
      goto	clrb
setb
      bsf	GPIO, GP2
      goto	clk
clrb
      bcf	GPIO, GP2
      goto	clk      
clk
      bsf	GPIO, GP1      
      call	delay10mcs
      bcf	GPIO, GP1
      call	delay10mcs
      rrf	buf, f
      decfsz	ccc, f
      goto	s_loop
      return
      
      
delay; установка задержки
      movwf	cc2
cyc2
      call	delay1ms
      decfsz	cc2, f
      goto	cyc2
      return
      
delay1ms; задерка в 1 мс
      movlw	0x20
      movwf	cc1
cyc1
      call	delay10mcs
      decfsz	cc1, f
      goto	cyc1
      return
      
delay10mcs ; задерка в 1 мкс
      movlw	0x0a
      movwf	cc0
cyc0
      decfsz	cc0, f; вычет и сравнение с нулем
      goto	cyc0
      return
END

Примечания