Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > MSP430 |
|
|||||||||||
FET_intADC MSP430F11x1 Demo#include "msp430x11x1.h" ;*************************************************************************** NAME ;FET_intADC MSP430F11x1 Demo ; ; Описание: Эта программа демонстрирует как реализовать на микроконтроллере MSP430F11x1 ; милливольтметр, использующий компаратор comparator_A. Напряжение считывается и ; передается в ПК со скоростью 9600 бод по протоколу 8N1. ; ; Используемые регистры вычислительного ядра #define ADCData R11 #define BitCnt R6 #define RXTXData R5 ; ; Условия для обеспечения скорости HW/SW UART 9600 бод при MCLK = 3.579545MHz Bitime_5 equ 0186 ; длительность половины бита Bitime equ 0373 ; 104 мкс TXD equ 002h ; TXD подключен к порту P1.1 DAC_Out equ 001h ; к порту P2.0 подключен выход ЦАП CR equ 0dh ; ASCII символ перевода каретки ; ; MSP430F1121 ; __________ ; 3.3В| XIN|- ; | | | 3.58 МГц ; ---|RST XOUT|- ; | | ; AIN--->|P2.4 | ; | | ; + -470 к- |P2.0 | ; | | | 9600 8N1 ; +----- |P2.3 P1.1|--------> ; | | | ; ===.047 | | ; | | | ; ------ |VSS | ; ; Автор M.Buccini ; Компания Texas Instruments, Inc ; Сентябрь 2000 г. ;*************************************************************************** ; ;----------------------------------------------------------------------------- ORG 010FEh ; Информационная память ;----------------------------------------------------------------------------- VCC_Cal DW 03300 ; Актуальное напряжение питания (VCC) ; ;----------------------------------------------------------------------------- ORG 0F000h ;----------------------------------------------------------------------------- RESET mov #300h,SP ; Инициализация указателя стека call #Init_Sys ; Инициализация системных периферийных модулей ; Mainloop call #Meas_ADC ; Преобразование АЦП, call #TX_2_PC ; Пересылка результата измерения АЦП в ПК или пользователю Delay push #0FFFFh ; Программная задержка до TOS L1 dec 0(SP) ; Уменьшение TOS jnz L1 ; Задержка окончилась? incd SP ; Очистка TOS jmp Mainloop ; Повтор ; ;--------------------------------------------------------------------------- Init_Sys; Инициализация системных периферийных модулей ;--------------------------------------------------------------------------- mov #WDTPW+WDTHOLD,&WDTCTL ; Остановка сторожевого таймера SetupC0 mov #OUT,&CCTL0 ; TXD освобожден для маркировки SetupP1_2 bis.b #TXD,&P1SEL ; P1.1/TA0 для функции TXD bis.b #TXD,&P1DIR ; P1.1 = выход TXD bis.b #DAC_Out,&P2DIR ; P2.0 = выход ЦАП SetupCA mov.b #P2CA0+P2CA1,&CACTL2 ; P2.3+ P2.4- SetupBC bis.b #XTS,&BCSCTL1 ; ACLK = LFXT1 HF XTAL резонатор SetupOsc bic.b #OFIFG,&IFG1 ; Очистка флага повреждения автогенератора mov #0FFh,R15 SetupOsc1 bit.b #OFIFG,&IFG1 ; Флаг повреждения автогенератора установлен? jnz SetupOsc ; dec R15 ; дополнительная задержка для убеждения в запуске jnz SetupOsc1 bic.b #OFIFG,&IFG1 ; Очистка флага повреждения автогенератора bis.b #SELM1+SELM0,&BCSCTL2 ; MCLK = LFXT1 ; mov #TASSEL0+TACLR,&TACTL ; Очистка Timer_A, ACLK, TAR bis #MC1,&TACTL ; Запуск TA в непрерывном режиме eint ; Глобальное разрешение прерываний ret ; Выход из подпрограммы ; ;--------------------------------------------------------------------------- Meas_ADC; Подпрограмма: измерения при помощи АЦП, результат преобразования АЦП ; в двоично-дополнительном коде --> ADCData ; R15 используется в качестве рабочего регистра и не сохраняет свое состояние ;--------------------------------------------------------------------------- mov.b #CAON,&CACTL1 ; Включение компаратора clr ADCData ; Очистка регистра ADCData call #Sample_ADC ; результат выборки --> ADCData call #Sample_ADC ; результат выборки --> ADCData + предыдущие данные Meas_Over clr.b &CACTL1 ; Выключение компаратора ret ; Выход из подпрограммы ; Sample_ADC mov &VCC_Cal,R15 ; ~3300 rra R15 ; VCC/2 ; предварительный заряд конденсатора; Pre_ADC bis.b #DAC_Out,&P2OUT ; заряд конденсатора C1 bit.b #CAOUT,&CACTL2 ; На выходе компаратора сигнал высокий или низкий? jz C1 ; ; Настройка и накопление импульсов ЦАП; Test_DAC bit.b #CAOUT,&CACTL2 ; На выходе компаратора сигнал высокий или низкий? jnc Low1 ; High bic.b #DAC_Out,&P2OUT ; Разряд конденсатора jmp Meas_ ; Low1 bis.b #DAC_Out,&P2OUT ; Заряд конденсатора setc ; dadc ADCData ; увеличение ADCData в двоично-десятичном коде Meas_ dec R15 ; Уменьшение счетчика цикла слежения jnz Test_DAC ; цикл слежения закончен? bic.b #DAC_Out,&P2OUT ; разряд конденсатора xor.b #CAEX,&CACTL1 ; инвертирование выводов компаратора ret ; Выход из подпрограммы ; ;--------------------------------------------------------------------------- TX_2_PC; Поресылка CR и 16- битного слова ADCData (регистр R11) в ПК/пользователю ;--------------------------------------------------------------------------- mov #CR,RXTXData ; пересылка CR в буфер UART call #TX_Byte ; CR --> ПК/пользователю ; ; Переход к нижеследующей подпрограмме ; ;--------------------------------------------------------------------------- TX_Word_ASCII; Передача слова из ADCData в виде четырех ASCII байт ;--------------------------------------------------------------------------- swpb ADCData ; ADCData = 3412 call #TX_Byte_ASCII ; swpb ADCData ; ADCData = 1234 ; ;--------------------------------------------------------------------------- TX_Byte_ASCII; Передача байта из ADCData в виде двух ASCII байт ;--------------------------------------------------------------------------- push ADCData ; передача значения ..x call #NUM_ASCIR ; push ADCData ; передача значения ...x call #NUM_ASCIA ; ret ; Выход из подпрограммы ; NUM_ASCIR ; Преобразование числа от 0 до F в ASCII символ с левым выравниванием 2(SP) rrc 2(SP) ; 1. и 3. пропускаются rrc 2(SP) ; rrc 2(SP) ; rrc 2(SP) ; ; NUM_ASCIA and #0fh,2(SP) ; 2. и 4. пропускаются add #030h,2(SP) ; cmp #03ah,2(SP) ; jlo NUM_End ; add #039,2(SP) ; NUM_End mov 2(SP),RXTXData ; загрузка буфера передатчика, FALL mov @SP+,0(SP) ; Очистка w\ возврат адреса TOS ; ;--------------------------------------------------------------------------- TX_Byte; Подпрограмма, которая передает байт, находящийся в буфере RXTXData. ;--------------------------------------------------------------------------- mov #TX_Count,BitCnt ; TX_Count --> Указатель перехода push &TAR ; Текущее значение TA add #Bitime,0(SP) ; Сдвиг к следующему биту pop &CCR0 ; Время для следующего бита в CCR0 mov #OUTMOD2+OUTMOD0+CCIE,&CCTL0 ; TXD = пустой старт бит TX_Wait bit #CCIE,&CCTL0 ; Ожидание окончания передачи jnz TX_Wait ; ret ; Выход из подпрограммы ; ;----------------------------------------------------------------------------- TA0_ISR ; Подпрограмма обработки прерывания CCR0/UART ISR: буфер RXTXData содержит данные для UART. ;----------------------------------------------------------------------------- add #Bitime,&CCR0 ; Bitime до следующего бита mov @BitCnt+,PC ; Ветвление программы ; TX_Bit rra.b RXTXData ; LSB сдвигается в бит переноса jc TX_Mark ; Переход если бит = 1 TX_Space bis #OUTMOD2,&CCTL0 ; Передача нуля reti TX_Comp bic #CCIE,&CCTL0 ; Все биты приняты, запрет прерывания TX_Mark bic #OUTMOD2,&CCTL0 ; передача 1 reti ; ; even ; TX_Count DW TX_Bit ; Передача первого бита DW TX_Bit ; DW TX_Bit ; DW TX_Bit ; DW TX_Bit ; DW TX_Bit ; DW TX_Bit ; DW TX_Bit ; DW TX_Mark ; передача стоп бита = 1 TX_End DW TX_Comp ; Передача завершена ; ;--------------------------------------------------------------------------- RSEG INTVEC ; вектора прерываний MSP430x11x1 ;--------------------------------------------------------------------------- DW RESET ; нет источника DW RESET ; нет источника DW RESET ; P1.x DW RESET ; P2.x DW RESET ; нет источника DW RESET ; нет источника DW RESET ; нет источника DW RESET ; нет источника DW RESET ; Timer_AX DW TA0_ISR ; Timer_A0 DW RESET ; Сторожевой таймер / Таймер DW RESET ; Компаратор Comparator_A DW RESET ; нет источника DW RESET ; нет источника DW RESET ; NMI, повреждение автогенератора DW RESET ; POR, внешний сброс, сторожевой таймер END индивидуальный гороскоп совместимости, магия
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|