Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / Методичка_проектирование МП систем.doc
Скачиваний:
114
Добавлен:
08.03.2016
Размер:
1.92 Mб
Скачать

6.5. Программа для работы цап и ацп на языке c

Не забудьте поместить файл – библиотеку ADuC812.h в папку с программой.

C51 COMPILER V6.22 DAC_ADC 12/14/2009 01:59:17 PAGE 1

C51 COMPILER V6.22, COMPILATION OF MODULE DAC_ADC

OBJECT MODULE PLACED IN DAC_ADC.OBJ

COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DAC_ADC.C DEBUG OBJECTEXTEND

stmt level source

1 #include "ADuC812.h" // библиотека для работы с микроконтроллером ADuC812

2

3 #defineBUSY0x80 // определяем битBUSYдля контроля конца

преобразования

4

5 #define DAC0 0

6 #define DAC1 1

7

8 #define ON 1

9 #define OFF 0

10 #define VDD 5.0 // напряжение питания 5 В

11

12 bitchannel; // переменная, содержащая № канала ЦАП и АЦП

13 unsignedshortmax_val; // количество шагов квантования

14 unsignedshortval; // переменная содержит значение преобразованного

напряжения

15

16 unsignedchardata*p1=0x07; // указатели на адрес возврата

17 unsigned char data* p2=0x08;

18

19 unsignedcharoldp1=0x07; // переменные содержат указатели на адрес

возврата

20 unsigned char oldp2=0x08;

21

22 void SetVoltage(float v)

23 {

24 1 oldp1=*p1;

25 1 oldp2=*p2;

26 1

27 1 if(DACCON & 0x80)

28 1 {

29 2 max_val= 0xFF; // 8ми битный режим (255)

30 2 }

31 1 else

32 1 {

33 2 max_val= 0xFFF; // 12ти битный режим (4095)

34 2 }

35 1

36 1 val= (unsignedshort)(v*max_val/VDD); // перевод аналогового напряжения в

цифровой код

37 1

38 1 val&=max_val;

39 1

40 1 if(channel == DAC0) // выбор канала

41 1 {

42 2 DAC0H=val>> 8; // запись старших 4 бит ЦАП

43 2 DAC0L=val; // запись младшихстарших 8 бит ЦАП

44 2 }

45 1 else

46 1 {

47 2 DAC1H=val>> 8; // запись старших 4 бит ЦАП

48 2 DAC1L=val; // запись младшихстарших 8 бит ЦАП

49 2 }

50 1 *p1=oldp1;

51 1 *p2=oldp2;

52 1 }

53

54

55 float GetVoltage(unsigned char channel)

56 {

57 1 float v;

58 1

59 1 while(ADCCON3 & BUSY); // ждем конца преобразования АЦП

60 1

61 1 ADCCON2 = 0x10 |channel; // выбираем канал

62 1

63 1 while(ADCCON3 &BUSY); ждем конца преобразования

64 1

65 1 v = ((unsigned short)(ADCDATAH&0xF) << 8) | ADCDATAL; // запись

66 1 v=v* 5.0 / 0xFFF; // перевод цифрового кода в аналоговое напряжение

67 1

68 1 return v;

69 1 }

70

MODULE INFORMATION: STATIC OVERLAYABLE

CODE SIZE = 172 ----

CONSTANT SIZE = ---- ----

XDATA SIZE = ---- ----

PDATA SIZE = ---- ----

DATA SIZE = 8 8

IDATA SIZE = ---- ----

BIT SIZE = 1 ----

END OF MODULE INFORMATION.

C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

Уровень квантования определяется по формуле

,

где n – разрядность ЦАП.

Для SDK разрядность ЦАП составляет 8 или 12. При разработке микропроцессорных систем управления необходимо учитывать погрешность, вносимую разрядностью ЦАП.