mostafa272
یک شنبه 20 فروردین 1391, 22:55 عصر
با سلام
کد زیر مربوط به یه برنامه تبدیل آنالوگ به دیحیتال هست . ولی زیاد با توابع avr آشنا نیستم و نمی دونم این توابع چی کار می کنند. لطفا اگه ممکنه یکی از دوستان تابع Run رو توضیح بده خط به خط چیکار میکنه و اون توابع COMMAND و CHAR_0 کارشون چیه؟
با تشکر
register addresses for Atmega 8535 */
#include "io8535.h"
#define ADSC ADCSR_Bit6
#define DDD7 DDRD_Bit7
#define DDD3 DDRD_Bit3
#define PIND3 PIND_Bit3
#define I SREG_Bit7
// Declare variables
unsigned char flag;
unsigned int result;
__flash unsigned char msg1[]=" Volt meter ";
__flash unsigned char msg2[]=" ADC0: 0.000 [V]";
__flash unsigned char ASCII[]="0123456789ABCDEF"; // ASCII Code
// PC0-PC7 : Data bus, PB5=RS, PB6=RW, PB7=E
#include "LCD8.h"
// ADC conversion complete handler
#pragma vector = ADC_vect
__interrupt void A_D_C(void)
{
result = ADC;
flag = 1 ;
}
void RUN(void)
{
unsigned char bcdh,bcdl;
flag = 0;
ADSC = 1; // Start ADC conversion
while(!(flag));
ADSC = 0;
//
result &= 0x03ff;
result *= 5;
bcdh = result >> 10;
bcdh <<= 4;
result &= 0x03ff;
result *= 10;
bcdh |= result >> 10;
result &= 0x03ff;
result *= 10;
bcdl = result >> 10;
bcdl <<= 4;
result &= 0x03ff;
result *= 10;
bcdl |= result >> 10;
COMMAND(0xc7);
CHAR_O((bcdh >> 4)+0x30);
CHAR_O('.');
CHAR_O((bcdh & 0x0f)+0x30);
CHAR_O((bcdl >> 4)+0x30);
CHAR_O((bcdl & 0x0f)+0x30);
COMMAND(0xcf);
}
// Main
void main(void)
{
L_INIT();
DISPLAY();
DDRA = 0; // Set PA0 input
DDD7 = 1; // Set PD7 output
DDD3 = 0; // Set PD3 input
ADMUX = 0; // Channel 0
ADCSR = 0xbc;
I = 1; // Set global interrupt enable
// Scan key
do{
if (!PIND3) RUN();
}while(1);
}
کد زیر مربوط به یه برنامه تبدیل آنالوگ به دیحیتال هست . ولی زیاد با توابع avr آشنا نیستم و نمی دونم این توابع چی کار می کنند. لطفا اگه ممکنه یکی از دوستان تابع Run رو توضیح بده خط به خط چیکار میکنه و اون توابع COMMAND و CHAR_0 کارشون چیه؟
با تشکر
register addresses for Atmega 8535 */
#include "io8535.h"
#define ADSC ADCSR_Bit6
#define DDD7 DDRD_Bit7
#define DDD3 DDRD_Bit3
#define PIND3 PIND_Bit3
#define I SREG_Bit7
// Declare variables
unsigned char flag;
unsigned int result;
__flash unsigned char msg1[]=" Volt meter ";
__flash unsigned char msg2[]=" ADC0: 0.000 [V]";
__flash unsigned char ASCII[]="0123456789ABCDEF"; // ASCII Code
// PC0-PC7 : Data bus, PB5=RS, PB6=RW, PB7=E
#include "LCD8.h"
// ADC conversion complete handler
#pragma vector = ADC_vect
__interrupt void A_D_C(void)
{
result = ADC;
flag = 1 ;
}
void RUN(void)
{
unsigned char bcdh,bcdl;
flag = 0;
ADSC = 1; // Start ADC conversion
while(!(flag));
ADSC = 0;
//
result &= 0x03ff;
result *= 5;
bcdh = result >> 10;
bcdh <<= 4;
result &= 0x03ff;
result *= 10;
bcdh |= result >> 10;
result &= 0x03ff;
result *= 10;
bcdl = result >> 10;
bcdl <<= 4;
result &= 0x03ff;
result *= 10;
bcdl |= result >> 10;
COMMAND(0xc7);
CHAR_O((bcdh >> 4)+0x30);
CHAR_O('.');
CHAR_O((bcdh & 0x0f)+0x30);
CHAR_O((bcdl >> 4)+0x30);
CHAR_O((bcdl & 0x0f)+0x30);
COMMAND(0xcf);
}
// Main
void main(void)
{
L_INIT();
DISPLAY();
DDRA = 0; // Set PA0 input
DDD7 = 1; // Set PD7 output
DDD3 = 0; // Set PD3 input
ADMUX = 0; // Channel 0
ADCSR = 0xbc;
I = 1; // Set global interrupt enable
// Scan key
do{
if (!PIND3) RUN();
}while(1);
}