Исходник на С(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено L.A. 02 июля 2003 г. 10:40
В ответ на: Исходник на С посмотреть бы для прогона на другом компиляторе. отправлено Brend 02 июля 2003 г. 10:12


//********************************************************************//
// 3sprb628.c Тестовая программа для проверки PWM модуля //
// Выводит синус частотой около 30 Гц на выход PWM //
// Кварц частотой 10 МГц //
//********************************************************************//
#include // //
#include // //
#include // //
#include "config.h" // //
#include "delay.h" // //
#include "..\common\comdefs.h" // //
// // //
#define QFreq 1 // //
#include "..\common\sdelay.c" // //
//********************************************************************//
#define _16f628 //

__CONFIG(UNPROTECT & WDTEN & BORDIS & HS & MCLRIO & PWRTEN & LVPDIS);
//********************************************************************//
#define XTAL 10000000
//********************************************************************//
// Объявим биты //
//--------------------------------------------------------------------//
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
//
static bit OUT1 @ PORTBIT(PORTA,1);
static bit OUT2 @ PORTBIT(PORTA,2);
//
static bit BELL @ PORTBIT(PORTB,7);
//
static bit RTIF @ PORTBIT(INTCON,2);

//********************************************************************//
// Переменные //
//--------------------------------------------------------------------//
unsigned char TEMP1, CNT3, CNT1;

const unsigned char TABL1[248]={0x7e,0x81,0x84,0x87,0x8a,
0x8d,0x90,0x93,0x96,0x9a,0x9d,0xa0,0xa3,
0xa6,0xa9,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,
0xbf,0xc2,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,
0xd5,0xd7,0xda,0xdc,0xde,0xe0,0xe1,0xe3,0xe5,
0xe7,0xe8,0xea,0xeb,0xed,0xee,0xef,0xf1,0xf2,
0xf3,0xf4,0xf5,0xf6,0xf6,0xf7,0xf8,0xf8,0xf9,
0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
0xf9,0xf8,0xf8,0xf7,0xf6,0xf6,0xf5,0xf4,0xf3,
0xf2,0xf1,0xef,0xee,0xed,0xeb,0xea,0xe8,0xe7,
0xe5,0xe3,0xe1,0xe0,0xde,0xdc,0xda,0xd7,0xd5,
0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc2,0xbf,
0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa9,0xa6,
0xa3,0xa0,0x9d,0x9a,0x96,0x93,0x90,0x8d,0x8a,
0x87,0x84,0x81,0x7e,0x7a,0x77,0x74,0x71,0x6e,
0x6b,0x68,0x65,0x61,0x5e,0x5b,0x58,0x55,0x52,
0x50,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x39,
0x37,0x34,0x32,0x2f,0x2d,0x2a,0x28,0x26,0x24,
0x21,0x1f,0x1d,0x1b,0x1a,0x18,0x16,0x14,0x13,
0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,
0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,
0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,
0x0c,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,
0x1a,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x28,0x2a,
0x2d,0x2f,0x32,0x34,0x37,0x39,0x3c,0x3f,0x41,
0x44,0x47,0x4a,0x4d,0x50,0x52,0x55,0x58,0x5b,
0x5e,0x61,0x65,0x68,0x6b,0x6e,0x71,0x74,0x77,
0x7a};
//***********************************************************************;
// Подпрограмма задержки ;
//-----------------------------------------------------------------------;
DELAY_1(void) // ;
{ // ;
TMR0 = 70; // ;
do // ;
{ // ;
CLRWDT(); // ;
} // ;
while(TMR0<128); // ;
} // ;
//***********************************************************************;
// Главная программа ;
//-----------------------------------------------------------------------;
main(void) //---------------------------------------;
{ // ;
CMCON = 0b00110111; // Отключение компараторов ;
PIR1 = 0x00; // ;
TMR0 = 0x00; // Очистка рег-ра прерываний от периферии;
CLRWDT(); // ;
//---------------------------- // ;
TRISA = 0b11100000; // Конфигурация PORTA ;
TRISB = 0b00000000; // Конфигурация PORTB ;
OPTION = 0b11000000; // Предварит. делитель на входе TMR0 1:2;
VRCON = 0x00; // ;
PR2 = 128; //155; // ;
//---------------------------- // ;
T1CON = 0b00010101; // ;
T2CON = 0b00000100; // ;
// CCP1CON = 0b00011111; // ;
FSR = 0X28; //-------------------------------------- ;
INTCON = 0x00; // ;
// // ;
CNT1=0; //-------------------------------------- ;
//***********************************************************************;
// Основной цикл ;
//-----------------------------------------------------------------------;
for(;;) // ;
{ // CCP1CON bits */ ;
DELAY_1(); // CCP1X @ (unsigned)&CCP1CON*8+5; ;
CNT1++; // CCP1Y @ (unsigned)&CCP1CON*8+4; ;
// ;
if (CNT1>247) // ;
CNT1=0; // ;
//------------------------------// CCP1M1 @ (unsigned)&CCP1CON*8+1; ;
OUT2=1; // CCP1M0 @ (unsigned)&CCP1CON*8+0; ;
TEMP1=TABL1[CNT1]; // ;
CCPR1L= (TEMP1>>1) & 0x7F;// ;
// ;
CCP1CON = 0xCF; // ;
// ;
if ( TEMP1 & 0x80) // ;
CCP1Y = 1; // ;
//----------------------------- //---------------------------------------;
FSR++; // ;
if (FSR>0x5F) //
FSR=0x28; //
//
OUT2=0; //
//*******************************************************************
} // end of for(;;)
}



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru