امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تغییر کد c قابل فهم برای arm kail
نویسنده پیام
chroo آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 4
تاریخ عضویت: اردیبهشت ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
Sad  تغییر کد c قابل فهم برای arm kail
سلام دوستان
میخواهم کد زیر رو ( که زبان c است) رو واسه arm و kail تغییر بدم که بشه اجرا کرد. فکر نکنم زیاد سخت باشه ولی من یکی هنگ کردم

خواهشا کمکم کنید
خیلی ضروریه

کد:
/*********************************************
Project : Temperature by smt160

*********************************************/

#include <mega8.h>

#asm
.equ __lcd_port=0x12 ;PORTb
#endasm
#include <lcd.h>
#include <stdlib.h>
#include <stdio.h>
#include <delay.h>

unsigned int full,half;
unsigned char edge=1;
char dutycycle_str[10],temprature_str[10],mm[10];
float dutycycle,temprature,temp_buf;

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
TCCR1B=0x00;
if(edge>0)
{//10
full=TCNT1;
MCUCR =0x08; // Set interrupt on falling edge
edge=0;
}
else
{
half=TCNT1;
MCUCR =0x0c; // Set interrupt on rising edge
edge=1;
}
TCNT1=0;
TCCR1B=0x01;
}

interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
/*static unsigned char state=0;
TCCR1B&=~0x01;
switch(state){
case 0:
TCCR1B&=~0x40;
state=1;
full=TCNT1;
break;
case 1:
TCCR1B|=0x40;
state=0;
half=TCNT1;
break;
}
TCNT1=0;
TCCR1B|=0x01;*/
}

void main(void)
{
char i;
DDRD=0XF7;
DDRC.0=1;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x41;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;

// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;

//OSCCAL=255;

lcd_init(16);
lcd_putsf("Temp:\n");
lcd_putsf("D.C.:");
#asm("sei")
//delay_ms(1000);
while (1){
/*
frequency of the output signal of the sensor lies between 1 and 4 kHz.

D.C. = 0.320+0.00470*t D.C.= duty cycle
t = Temperature in °C
or
duty cycle (d.c.)= 0.31924 + (0.00472 * Temperature(oC))
*/
temp_buf=0;
for(i=0;i<10;i++){
#asm("cli");
dutycycle=(float)half/(float)(full+half);
#asm("sei");
temprature= dutycycle;
temprature-=0.31924;
temprature/=0.00472;
temp_buf+=temprature;
delay_ms(100);
}
temp_buf/=10;
ftoa(temp_buf,1,temprature_str);
ftoa(dutycycle*100 ,1,dutycycle_str);
lcd_gotoxy(7,0);
lcd_puts(temprature_str);
lcd_putsf(" C");
lcd_gotoxy(7,1);
lcd_puts(dutycycle_str);
lcd_putsf(" %");
/*ftoa(full ,1,mm);
lcd_gotoxy(0,0);
lcd_puts(mm);
ftoa(half ,1,mm);
lcd_gotoxy(0,1);
lcd_puts(mm);*/
//delay_ms(500);
}
}


فایل‌(های) پیوست شده
.txt   smt160.txt (اندازه: 3.42 KB / تعداد دفعات دریافت: 42)
۰۹-مرداد-۱۳۹۱, ۰۶:۱۴:۳۳
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #2
RE: تغییر کد c قابل فهم برای arm kail
من با LPC كار نكردم ، اما اگر خودتون كار با interrupt و راه اندازي تايمر رو بلد هستيد مشكل خاصي ندارهه...
اينم بگم كه لازمه برنامه رو فهميده باشيد.
كار با واحد تايمر ARM مشخصا با تايمر AVR خيلي متفاوت هست ( من فقط sam7 رو ديدم )
كانفيگ interrupt اش هم مقفاوت هست.
يعني نيازهه اين قسمت ها ، كدها رو كامل تغيير بديد.

موفق باشيد.

۰۹-مرداد-۱۳۹۱, ۱۲:۴۷:۵۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : salehjg


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS