INTCON = 0xA0;
OPTION_REG = 80 ;
|
اخي hunter27 بارك الله فيك واعتقد ان هناك مشكلة في الريجستر لان القيمة انت واضعها INTCON = 0xA0 وهي تقابل 10100000 بالتالي فان bit 4 بصفر وبالتالي RB0/INT External Interrupt غير مفعل
هل انت بتستخدم مقاطعة على RB0 او فقط مقاطعة T0 !!
عدد النبضات الداخلة في الثانية تعطينا التردد ...
طيب و كما هو معلوم ان الزمن هو مقلوب التردد فهل جربت هذه الطريقة ؟؟ظ
|
نعم اخي حيدر وهذا نفس الشئ اللي افكر فيه طيب شوف الكود هو بيقرا النبضات الداخلة كعدد اي اذا دخلت الاول يظهر على الشاشة 1 واذا دخلت النبضة الثانية يظهر على الشاشة 2 وهكذا.... لذالك انا احاول استخدم مقاطعة RB0 واشغل التايمر لكن لم اجد حل ياليت تشوف لي حل.
كود:
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
int maximum=0;
unsigned int TMR1_value;
char to_LCD[6];
void main() {
trisa=1;
trisb=0;
portb=0;
trisc.f0=1;
ADCON1.PCFG3=0; ADCON1.PCFG2=0;ADCON1.PCFG1=0; ADCON1.PCFG0=1;
T1CON.T1CKPS0=0; T1CON.T1CKPS1=0; T1CON.T1OSCEN=0; T1CON.T1SYNC=1; T1CON.TMR1CS=1;
TMR1H = TMR1L = 0;
Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF);
while(1) {
while(adc_read(0)> maximum) maximum = adc_read(0);
portb.f0=1;
T1CON.TMR1ON=1;
delay_ms(100);
portb.f0=0;
TMR1_value = (TMR1H << 8) + TMR1L;
WordToStr(TMR1_value, to_LCD);
LCD_Out(2, 1, to_LCD);
while((adc_read(0)< maximum-1) ){} maximum=0; } }