با سلام
یه برنامه تو اینترنت پیدا کردم کد ریموت کنترل 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 }; };

دیدگاه