2
Practical – 01 Toggle Port LED Aim : Write a program in embedded C programming language to alternately ON/OFF …show more content…
LEDs connected to 2 different ports. Components Used: i)AT90S8535 Micro controller ii)LED‟S iii)Ground Code: #include #include void main(void) { DDRA = 0xff; PORTA = 0x00; DDRB = 0xff; PORTB = 0x00; while(1) { delay_ms(100); PORTA = 0x01; PORTB = 0x00; delay_ms(100); PORTA = 0x00; PORTB = 0x01; }; } Output:
Mithibai College:-MSC COMPUTER SCIENCE PART II
3
Practical – 02 Simulate Binary Counter at Port Aim : Write a program using embedded C to simulate a binary counter. Components Used: i)AT90S8535 Micro controller ii)LED‟S iii)Ground Code: #include #include void main() { DDRA = 0xff; PORTA=0x00; while(1) { delay_ms(100); if(PORTA == 0x80) PORTA = 0x01; else PORTA += 1; } } Description: First statement a unsigned char variable (unsigned integers are used to increase the range of numbers the variable can hold) is initialized to 0x01 . port A has been set to this variable . „+‟ operator stands for bit increment operation . we are incrimenting the bit of led_status to one position of binary number when the one at lsb reaches to the msb (0x80) of the variable we reinitialize the variable to 0x01.The Delay given is of one milli second so the bit shifts after every one second(1000ms) . Output:
Mithibai College:-MSC COMPUTER SCIENCE PART II
4
Practical – 03 Generate delay using TIMER_0 Aim : Write a program using embedded C to generate delay using TIMER0.
Components Used: i)AT90S8535 Micro controller ii)LED‟S iii)Ground Code: #include int timeCount = 0; interrupt[TIM0_OVF] void timer0_ovf_isr(void) { TCNT0 = 6; if(++timeCount == 1000) { PORTA =PORTA ^ 0x01; timeCount = 0; } } void main(void) { DDRA = 0x01; PORTA = 0x01; TCCR0 = 0x02; TIMSK = 0x01; #asm("sei"); while(1); } Description: A variable timecount is initialized to 0. In the main function the LSB of PORTA is chosen for output and it is set to 1. Then the TIMER COUNTER CONTROL REGISTER (TCCR0) is initialized in such a way that divide by 8 (CK/8)clock source is selected again the “timer interrupt mask is set to enable the timer0 counter. “#asm” is a assembly language instruction „sei‟ stands for set enable interrupts to enable all the interrupts. Finaly ainfinite while loop.Then the function with keword interrupt is created.This function will be called automatically when the timer0 overflow interrupt takes place. This function returns nothing, since it is not called by any function and you cant pass any thing to function for the same reason .The timer0 is initialized to 6 in this function .As we have chosen ck/8 system as mentioned above and the clock frequency is 4 Mhz that‟s why 4/8 Mhz so 500 Khz(0.5 Mhz) will be the effective frequency so for one tick of counter 1/0.5 micro sec are required(1/freq.= time) that equals to 2 micro secondes. A timer can
count 256 that‟s why total of 256*2 that is 512 micro seconds are required .So to make it a round figure i.e. 500 microsecs we
Mithibai College:-MSC COMPUTER SCIENCE PART II
5 have to omit 6 ticks of counters that is why we set timer (TCNT0 =6) to 6 so that it ticks from 6 to 256 hence ticks effectively for 250 times (250*2 = 500). and covers 500 micro secs ,when timecount is incremented up to 1000 (1000*500 micro secs = 0.5 secs).And led toggles after 0.5 secs. Output:
Mithibai College:-MSC COMPUTER SCIENCE PART II
6
Practical – 04 Stepper Motor (Clockwise/Anticlockwise) Aim : Write a program using embedded C to simulate Stepper Motor(Clockwise / AntiClockwise). Components Used: i)AT90S8535 Micro controller ii)LED‟S iii)Ground iv)STEPPER MOTOR Code: #include #include unsigned char motorStatus = 0x01; void main(void) { DDRA = 0x0f; DDRB = 0x0f; #asm("sei"); while(1) { PORTA = motorStatus; PORTB = motorStatus; delay_ms(200); motorStatus