Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Применение > Микроконтроллеров > 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

индивидуальный гороскоп совместимости, магия
    Получить консультации и преобрести компоненты вы сможете у дистибутора фирмы Texas Instruments компании КОМПЭЛ,





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники