با سلام
یه برنامه تو اینترنت پیدا کردم کد ریموت کنترل ir با فشردن کلیدی ذخیره میکنه و سپس با دیود فرستنده مادون کد را ارسال میکنه ولی از atmega 88p استفاده کرده که تو شهرستان بد گیر میاد و خیلی کاربردی نیست
چطور میتونم کد را به مگا 32 تبدیل کنم
کد برنامه
[code]
یه برنامه تو اینترنت پیدا کردم کد ریموت کنترل ir با فشردن کلیدی ذخیره میکنه و سپس با دیود فرستنده مادون کد را ارسال میکنه ولی از atmega 88p استفاده کرده که تو شهرستان بد گیر میاد و خیلی کاربردی نیست
چطور میتونم کد را به مگا 32 تبدیل کنم
کد برنامه
[
code]
[/
کد:
#include <mega88p.h>
#include <delay.h>
// **********************************************************************************************
// **** PROGRAM VARIABLES
// **********************************************************************************************
unsigned char RC5[750];
// **********************************************************************************************
// **** RECORD FUNCTION
// **********************************************************************************************
void RECORD(){
unsigned int CTR;
unsigned char TMR;
unsigned char REC;
unsigned char DIV;
// STATUS LED ON
PORTD.5 = 1;
REC = 0;
// ERASE STREAM ARRAY
for (CTR = 0; CTR < 750; CTR++) RC5[CTR] = 0;
// WAIT FOR START BITS
while (PIND.1 == 1) {}
// RECORD RC5 PULSE STREAM
for (CTR = 0; CTR < 375; CTR++) {
// RECORD MODULATED PULSE
TMR = 0;
while (PIND.1 == 0) {
// DIVIDE TIME BY 10
for (DIV = 0; DIV < 10; DIV++) { //$$$
// 40 KHZ DELAY
#asm
ldi r23,66 ;1
DL4:
dec r23 ;1
brne dl4 ;1/2
nop ;1
nop ;1
#endasm
}
TMR++;
}
// STORE TIME VALUE
RC5[CTR] = TMR;
// INCREMENT COUNTER
CTR++;
// RECORD UNMODULATED PULSE
TMR = 0;
while (PIND.1 == 1) {
// DIVIDE TIME BY 10
for (DIV = 0; DIV < 10; DIV++) { //$$$
// 40 KHZ DELAY
#asm
ldi r23,66 ;1
DL5:
dec r23 ;1
brne dl5 ;1/2
nop ;1
nop ;1
#endasm
}
TMR++;
}
// STORE TIME VALUE
RC5[CTR] = TMR;
// STATUS LED FLASH
REC++;
if (REC == 40) REC = 0;
if (REC == 0 ) PORTD.5 = 1;
if (REC == 20 ) PORTD.5 = 0;
}
// STATUS LED OFF
PORTD.5 = 0;
// WAIT FOR BUTTON RELEASE
while (PIND.2 == 0){}
delay_ms(500);
}
// **********************************************************************************************
// **** PLAYBACK FUNCTION
// **********************************************************************************************
void PLAYBACK(){
unsigned int CTR;
unsigned char TMR;
unsigned char DIV;
// STATUS LED ON
PORTD.5 = 1;
// PLAYBACK RC5 PULSE STREAM
for (CTR = 0; CTR < 375; CTR++) {
// SEND 40KHZ MODULATION
TMR = RC5[CTR];
while (TMR > 0) {
// DIVIDE TIME BY 10
for (DIV = 0; DIV < 10; DIV++) {
// 40 KHZ MODULATION CYCLE
PORTD.0 = 1;
#asm
ldi r23,33 ;1
DL1:
dec r23 ;1
brne dl1 ;1/2
nop ;1
#endasm
PORTD.0 = 0;
#asm
ldi r23,33 ;1
DL2:
dec r23 ;1
brne dl2 ;1/2
nop ;1
#endasm
}
TMR--;
}
// INCREMENT COUNTER
CTR++;
// SEND NO MODULATION
TMR = RC5[CTR];
while (TMR > 0) {
// DIVIDE TIME BY 10
for (DIV = 0; DIV < 10; DIV++) { //$$$
// NO MODULATION CYCLE
#asm
ldi r23,66 ;1
DL3:
dec r23 ;1
brne dl3 ;1/2
nop ;1
nop ;1
#endasm
}
TMR--;
}
}
// STATUS LED OFF
PORTD.5 = 0;
// REPEAT DELAY
delay_ms(100);
};
// **********************************************************************************************
// **** IO PORT SETUP
// **********************************************************************************************
void main(void)
{
DDRD.0 = 1; // IR LED OUTPUT
DDRD.1 = 0; // IR SENSOR INPUT
DDRD.2 = 0; // RECORD BUTTON INPUT
DDRD.3 = 0; // PLAYBACK BUTTON INPUT
DDRD.4 = 0; // MODE SWITCH INPUT (NOT USED)
DDRD.5 = 1; // STATUS LED OUTPUT
// ENABLE INPUT PULLUPS
PORTD.1 = 1;
PORTD.2 = 1;
PORTD.3 = 1;
PORTD.4 = 1;
// **********************************************************************************************
// **** MAIN PROGRAM LOOP
// **********************************************************************************************
while (1)
{
// CHECK RECORD AND PLAYBACK BUTTONS
if (PIND.2 == 0) RECORD();
if (PIND.3 == 0) PLAYBACK();
// END OF MAIN LOOP
};
};






دیدگاه