Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Исходные тексты приложения для МК.

Микросхема моста USB-UART | Интегрированная среда разработки фирмы SiLabs IDE 2. | Ассемблер, компилятор и линкер интегрированной среды разработки Keil | Библиотека WIN32 API функций | Windows-приложение OGView | Обобщенная схема алгоритма. | Характеристика дочерних окон. Элементы управления. | Описание протокола RS232. | Инициализация Com-port. | Организация настроек Com-port в графическом интерфейсе. |


Читайте также:
  1. III. ПРИЛОЖЕНИЯ (тексты методик)
  2. VI.3. Приложения
  3. А IV (8) Приложения 1
  4. А-IV (7) Однородные и неоднородные приложения
  5. Вопрос.7 В модуле приложения...
  6. Все права на исходные материалы принадлежат соответствующим организациям и частным лицам.
  7. Дипломный проект 102 л., 22 рисунка, 15 таблиц, 20 использованных источников, 2 приложения

#include <c8051f060.h> // SFR declarations

 

sfr16 RCAP3 = 0xCA; // Timer3 reload value

sfr16 TMR3 = 0xCC; // Timer3 counter

 

sfr16 ADC0 = 0xBE; // ADC0 Data

sfr16 ADC1 = 0xBE; // ADC1 Data

 

sfr16 DMA0DS = 0xDB; // DMA0 XRAM Address Pointer

sfr16 DMA0CT = 0xF9; // DMA0 Repeat Counter Limit

sfr16 DMA0DA = 0xD9; // DMA0 Address Beginning

sfr16 DMA0CS = 0xFB; // DMA0 Repeat Counter

 

#define SYSCLK 22118400 // SYSCLK frequency in Hz

#define BAUDRATE 115200 // Baud Rate for UART0

 

// DMA INSTRUCTIONS

#define DMA0_END_OF_OP 0x00 // End-of-Operation

#define DMA0_END_OF_OP_C 0x80 // End-of-Operation + Continue

#define DMA0_GET_ADC0 0x10 // Retrieve ADC0 Data

#define DMA0_GET_ADC1 0x20 // Retrieve ADC1 Data

#define DMA0_GET_ADC01 0x30 // Retrieve ADC0 and ADC1 Data

#define DMA0_GET_DIFF 0x40 // Retrieve Differential Data

#define DMA0_GET_DIFF1 0x60 // Retrieve Differential and ADC1 Data

 

 

#define NUM_SAMPLES 32768 // Number of ADC sample to acquire (each sample 2 bytes)

#define XRAM_START_ADD 0x0000 // DMA0 XRAM Start address of ADC data log

 

 

sbit LED = P0^7; // LED: '1' = ON; '0' = OFF

sbit BUTTON = P3^7; // pushbutton on the target board

sbit RAM_CS = P4^5; // chip select bit is P4^4

 

void SYSCLK_Init (void);

void UART0_Init (void);

void PORT_Init (void);

void ADC0_Init (void);

void ADC1_Init (void);

void DMA0_Init (void);

void Timer3_Init (unsigned int counts);

void EMIF_Init (void);

void SendData(unsigned char);

void ReceiveData(unsigned char *byte);

 

//-------------------------

// Global Variables

//-------------------------

unsigned char Conv_Complete = 0;

unsigned char xdata * data read_ptr;

 

unsigned char byteA=0;

unsigned char byteB=0;

unsigned char byteC=0;

unsigned int i=0, SampNum;

unsigned char ggg=0;

unsigned int Samp_Rate = 0;

 

//---------------------------------------------------------------------------------

void main (void)

{

WDTCN = 0xde; // disable watchdog timer

WDTCN = 0xad;

 

SYSCLK_Init (); // initialize SYSCLK

PORT_Init ();

UART0_Init (); // initialize UART0

 

while (1)

{

ReceiveData (&byteA);

ReceiveData (&byteB);

ReceiveData (&byteC);

SendData(0x33);

 

byteA &=0x38;

 

 

if(byteA == 48) Samp_Rate = 50;

else if(byteA == 8) Samp_Rate = 150;

else if(byteA == 16) Samp_Rate = 275;

else if(byteA == 24) Samp_Rate = 350;

else if(byteA == 32) Samp_Rate = 500;

 

 

Timer3_Init (SYSCLK/1000/Samp_Rate); // Init Timer3 for 100ksps sample rate

 

ADC0_Init (); // configure ADC0 and ADC1 for differential

// measurement.

DMA0_Init (); // Configure DMA to move NUM_SAMP samples.

 

SFRPAGE = DMA0_PAGE; // Switch to DMA0 Page

 

while (!(DMA0CN & 0x40)); // Wait for DMA to obtain and move ADC samples

// by polling DMA0INT bit.

SFRPAGE = LEGACY_PAGE;

 

SampNum = byteB * 256 + byteC;

 

read_ptr = XRAM_START_ADD;

 

 

for (i=0; i < 2 * SampNum; i++)

{

SendData(*read_ptr);

read_ptr++;

}

 

// Send data via the UART0.

}

 

}

 

void PORT_Init (void)

{

unsigned char old_SFRPAGE = SFRPAGE;

 

SFRPAGE = CONFIG_PAGE; // Switch to configuration page

 

 

XBR0 = 0x04; // Enable UART0 on crossbar

XBR1 = 0x00;

XBR2 = 0x40; // Enable crossbar and weak pull-ups

P0MDOUT |= 0xFF; // enable Port0 outputs as push-pull

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

}

 

 

void UART0_Init (void)

{

unsigned char old_SFRPAGE = SFRPAGE;

 

SFRPAGE = UART0_PAGE; // Switch to UART0 page

 

SCON0 = 0x50; // SCON: mode 1, 8-bit UART, enable RX

SSTA0 = 0x10; // Timer 1 generates UART0 baud rate and

// UART0 baud rate divide by two disabled

 

SFRPAGE = TIMER01_PAGE; // Switch to Timer 0/1 page

 

TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload

TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate

TR1 = 1; // start Timer1

CKCON |= 0x10; // Timer1 uses SYSCLK as time base

PCON |= 0x80; // SMOD = 1

 

SFRPAGE = UART0_PAGE; // Switch to UART0 page

 

TI0 = 1; // Indicate TX ready

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

 

}

 

 

void SYSCLK_Init (void)

{

unsigned char old_SFRPAGE = SFRPAGE;

unsigned int i;

 

SFRPAGE = CONFIG_PAGE; // Switch to Configuration Page

 

OSCXCN = 0x67; // start external oscillator with

// 22.1184MHz crystal on TB

 

for (i=0; i <5000; i++); // XTLVLD blanking interval (>1ms)

 

while (!(OSCXCN & 0x80)); // Wait for crystal osc. to settle

 

RSTSRC = 0x04; // enable missing clock detector reset

 

CLKSEL = 0x01; // change to external crystal

 

OSCICN = 0x00; // disable internal oscillator

 

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

}

 

 

void ADC0_Init (void)

{

unsigned char old_SFRPAGE = SFRPAGE;

int i;

 

SFRPAGE = ADC0_PAGE; // Switch to ADC0 Page

 

ADC0CN = 0x44; // ADC Disabled, Timer3 start-of-conversion

// track 16 SAR clocks before data conversion

// upon Timer3 OV. DMA will enable ADC as needed

 

REF0CN = 0x03; // turn on bias generator and internal reference.

 

for(i=0;i<10000;i++); // Wait for Vref to settle (large cap used on target board)

 

AMX0SL = 0x00; // Single-ended mode

 

ADC0CF = (SYSCLK/25000000) << 4; // Select SAR clock frequency =~ 25MHz

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

}

 

 

void DMA0_Init (void)

{

char old_SFRPAGE = SFRPAGE;

 

SFRPAGE = DMA0_PAGE; // Switch to DMA0 Page

 

DMA0CN = 0x00; // Disable DMA interface

 

DMA0DA = XRAM_START_ADD; // Starting Point for XRAM addressing

 

DMA0CT = NUM_SAMPLES; // Get NUM_SAMPLES samples

 

DMA0IPT = 0x00; // Start writing at location 0

 

// Push instructions onto stack in order they will be executed

DMA0IDT = DMA0_GET_ADC0; // DMA to move ADC0 data.

DMA0IDT = DMA0_END_OF_OP;

 

DMA0BND = 0x00; // Begin instruction executions at address 0

DMA0CN = 0xA0; // Mode 1 Operations, Begin Executing DMA Ops

// (which will start ADC0)

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

}

 

 

void Timer3_Init (unsigned int counts)

{

char old_SFRPAGE = SFRPAGE;

 

SFRPAGE = TMR3_PAGE; // Switch to Timer 3 page

TMR3CN = 0x00; // Stop Timer3; Clear TF3;

TMR3CF = 0x08; // use SYSCLK as timebase

RCAP3 = -counts; // Init reload values

TMR3 = 0xffff; // set to reload immediately

TR3 = 1; // start Timer3

 

SFRPAGE = old_SFRPAGE; // restore SFRPAGE

}

 

 

void SendData(unsigned char byte)

{

unsigned char old_SFRPAGE = SFRPAGE;

SFRPAGE = UART0_PAGE;

TI0 = 0;

SBUF0 = byte;

while (!TI0);

SFRPAGE = old_SFRPAGE;

 

}

 

void ReceiveData(unsigned char *byte)

{

unsigned char old_SFRPAGE = SFRPAGE;

SFRPAGE = UART0_PAGE;

RI0 = 0;

REN0 = 1;

while(!RI0);

*byte = SBUF0;

REN0 = 0;

SFRPAGE = old_SFRPAGE;

 

}//End

 


Дата добавления: 2015-07-16; просмотров: 59 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Исходные тексты файлов программы для ПК.| ПМ. 02 Организация процесса приготовления и приготовление сложной кулинарной продукции

mybiblioteka.su - 2015-2024 год. (0.016 сек.)