Главная Микроконтроллеры [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [ 40 ] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] void main(void) { Инициализация портов ввода-вывода Все выводы порта PORTB насгроены на вывод информации DDRB=Oxff; Включить первый светодиод PORTB=led status, Инициализация таймера TIMER 1 Таймер riHERI отсоединен or линии ОСЛ не включен режим широтно-импульсной модуляции PWH TCf;R1A=0; Частота таймера T1MER1 xtal/10?4 Бегущий огонь на светодиодах Материал взят из демонстрационной версии компилятора Code-VisionAVR С Compiler, автором которого являегся Pavel Haiduc, HP InfoTech S.R.L. 8 светодиодов соединены с выходами порта PORTB и +5 В через резисторы сопротивлением 270 Ом, ограничиваюпще ток. Аноды светодиодов соединены с линией +5 В. Текст программы: Определение регистров ввода-вывода дли AT90S8515 Kinciude <90sS5.5.h> Частота кварцевого резонатора [Гц] Mefine xtal 4000000 Частота переключения светодиодов [Гц] ((define fmove 2 Включить светодиод на линии О порта PORTS unsigned char led statLS=Oxfe; Процедура обработки прерывания по переполнению таймера TIHER1 вызывается каждые 0,5с interrupt [TIH1 0VF] \oid timerl overflow(void) { preset again TIHER1 TCNT1=0x10000-(xtal/1024/fmove); move the LEO led status«=l; led status=1; If (led status==Oxff) led status=Oxfe; turn on the LED PORTB=led status: TCCR1B=5; Предустановим значение таймера TIMER1 TCNT1=0x10000-(xtal/1024/fmove); Очистить флаги прерываний по таймеру TIHER1 TIFR=0: Разрешить прерывания по переполнению таймера riHERI TIMSK=0x80; Все остальные виды прерываний запрещены GIHSK=0: Разрешение глобальных прерываний Kasm sei (tendasm Бесконечный цикл, при этом возможно возникновение прерываний по переполнению таймера TIHER1 while (1); > Цифровой вольтметр с использованием АЦП фирмы Maxim типа МАХ1241 Измеренное значение передается с помощью интерфейса RS232. Параметры интерфейса: 9600 8N1. Материал взят из демонстрационной версии компилятора CodeVisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L. Частота кварцевого резонатора: 4,000 МГц. Подсоединение МАХ1241 к AT90S8515. МАХ 1241 AT90S8515-8PI 1 VDD=5V 2 Vin - 3 /SHD - 1 РВО 4 REF=5V - 5 GND - 20 GND 6 DOUT - 7 MISO 7 /CS - 2 PBI 8 SCLK - 8 SCK Текст программы: ((Include <90s8515.h> Стандаргная библиотека ввода/вывода ((include <stdio.h> Библиотека SPI-функций ((include <spi.h> Библиотека для формирования задержек ((include <delay.h> Опорное напряжение для МАХ1241 [мВ] ((define VREF 5000 Определение управляющих сигналов для НАХ1241 ((define NSHON PORTB. О ((define NCS PORTB. 1 ((define DOUT PINB. 6 union adcu { unsigned char byte[2]; unsigned int word; >; Произвести одно аналого-цифровое преобразование и вернуть его результат unsigned int max1241 read(void) { union adcu adc data; Вывести микросхему HAX1241 из режима shutdown NSHDN=1; Подождать 5 мкс для приведения МАХ1241 в рабочее состояние delay us(5); Теперь выбрать чип для начала преобразования NCS=0; «(дать, пока преобразование не завершится DOIT будет равен О в процессе преобразования while (DOUT==0); D01T=1 -> преобразование завершено Прочитать младший байт (MSB) adc data.byte[l3=spi(0); Прочитать старший байт (LSB) adc data.byte[0]=spi(0); Снять сигнал выбора чипа NCS=i: Перевести АЦП в режим shutdown NSHDN=0: Форматировать результат преобразования и возврат результата return (adc data.word»3)&0xfff; > [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [ 40 ] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] 0.001 |