السلام عليكم طلب ضرورى لو سمحتوا انا بدرس كورس الميكروكنترولر وحبيت ادرس interrupt اسكمال للكورس المتبع ولكن هناك مشكله عن فتح اى صوره او تحميل اى ملف بسبب انه مر عليه عام فرجاء لو حد يعرف يرفع الاشياء مره اخرى او يجدد الموضوع فجزاه الله خيرا
|
سلام قول من رب رحيم
اريد تشغيل 74ls138 في هدا البرنامج على portb
و تقبلوا خالص تحياتي
mask(int val
){
switch (val) {
case 0: return 0x0; break; // 0 = 0x3f // 1 = 0x06 // 2 = 0x5B // 3 = 0x4F // 4 = 0x66 // 5 = 0x6D
case 1: return 0x1; break; // 6 = 0x7D // 7 = 0x07 // 8 = 0x7F // 9 = 0x6F
case 2: return 0x2; break;
case 3: return 0x3; break;
case 4: return 0x4; break;
case 5: return 0x5; break;
case 6: return 0x6; break;
case 7: return 0x7; break;
case 8: return 0x8; break;
case 9: return 0x9; break;
default:0x4;
}
}
int x = 0;
int digit, portA_index, shifter, number;
int portA_array[5];
void interrupt(void) {
PORTB = 0; // clear porta
PORTA = portA_array [portA_index]; // send correct value to portd
PORTB = shifter;
shifter = shifter << 1;
if (shifter > 15){
shifter = 1;
}
portA_index++; // Increment portd_index
if (portA_index > 3){
portA_index = 0; //' Turn on 1st, turn off 4th 7segment display
}
TMR0 = 0; //' Reset TIMER0 value
T0IF_bit = 0; //' Clear Timer0 interrupt flag
}
void main()
{
cmcon=0x07;
TMR0 = 0; //Clear timer 0
OPTION_REG = 8;
GIE_bit = 1; //Enable Global Interrupt
T0IF_bit = 0; //clear interrupt flag
T0IE_bit = 1; //Enable TMR0 interrupt
PEIE_bit = 1; //Peripheral Interrupt Enable bit
OPTION_REG = 80;
T0CS_bit = 1; //Internal instruction cycle clock =0
T0CS_bit = 0;
PSA_bit = 0; //Prescaler is assigned to the Timer0
TRISA = 0; //PORT set to output
PORTB = 0; //Clear PORTA
TRISB = 0; //Set PORTA as output
PORTA = 0; //Clear PORTD
TRISA = 0; //set PORTD as output
TRISB = 0;
digit = 0; //' Initial value of variable digit
portA_index = 0; //' Turn on 1st LED display
shifter = 1; // ' Initial value of variable shifter
number = 0; //' Some initial value on LED display
while(1)
{
digit = (number / 10000u)%10u; //' Extract thousands //6.789
portA_array[3] = mask(digit);
digit = (number / 1000u)%10u; //' Extract thousands //6.789
portA_array[3] = mask(digit); //' and store it to PORTD array || mask(0xf4) get value from sub function
digit = (number / 100u)%10u; //' Extract hundreds //67.89
portA_array[2] = mask(digit); //' and store it to PORTD array
digit = (number / 10u)%10; //' Extract tens //678.90
portA_array[1] = mask(digit); //' and store it to PORTD array
digit = number %10u ; //mod 10; //' Extract ones //6789
portA_array[0] = mask(digit); //' and store it to PORTD array
Delay_ms(2000); //' One second delay
x=number+140;
number=number+20;
if (number > 9999) { //' Start to count from zero
number = 0;}
}
}