1: To program any port to be set as output on 89cxx series microcontroller.
////////////main.c start////////////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void main( )
{
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
P1=0x01; //set port 1 = 1. That is 00000001 on 8bit Port 1
P2_1=0x01; // set port 2 bit 1 =1. That is 00000010 on 8bit Port 2
P3=P1; //Set port 3 same as port 1. That is 00000001 on 8bit port 3.
while(1)
{
//Go to infinity to stop the process here. If there is no infinity loop the code gets restarted again.
}
}
///////////main.c end//////////////
2: To blink a pin or port (the below code will turn on and off port 1 pin 0)
PLEASE NOTE: USE ONLY ONE #INCLUDE FILE I MENTIONED BELOW ACCORDING TO THE CONTROLLER NAME I MENTIONED BELOW. COMMENT THE ONE WHICH DOES NOT HAVE YOUR CONTROLLER NAME CATEGORY BELOW. THE LINES TO BE COMMENTED ARE COLORED IN GREEN. I HAVE ALREADY COMMENTED REGX52.H BY DEFAULT.
//////////main.c start/////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void delay(int n); //delay routine
void delay(int n)
{
int i,j;
for(i=0;i<=100;i++)
{
for(j=0;j<=n;j++); //the loop will be occurring at n * 100 times
}
}
void main( )
{
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
while(1)
{
P1=0x01; //set port 1 = 1. That is 00000001 on 8bit Port 1
delay(1000); //Call delay routine to pause port 1 state
P1 = 0x00; //set port 1 = 0. That is 00000000 on 8bit port 1
delay(1000); // Call delay routine to pause port 1 state
}
}
///////////main.c end//////////////
3: How to work with timers? Timers work on interrupt routines. You must follow this basic way below to make timer work.
PLEASE NOTE: USE ONLY ONE #INCLUDE FILE I MENTIONED BELOW ACCORDING TO THE CONTROLLER NAME I MENTIONED BELOW. COMMENT THE ONE WHICH DOES NOT HAVE YOUR CONTROLLER NAME CATEGORY BELOW. THE LINES TO BE COMMENTED ARE COLORED IN GREEN. I HAVE ALREADY COMMENTED REGX52.H BY DEFAULT.
//////////main.c start/////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void timer0_ISR (void) interrupt 1 // for timer 1 if implemented use void timer1_ISR(void)interrupt 2
{
P2_1=!P2_1; // SET PORT 2 PIN 1 = 1 AND THEN 0 ON NEXT INTERRUPT AND VICE VERSA
}
void main( )
{
TMOD = 0xe0; // Set T/C0 Mode 16bit timer
ET0 = 1; // Enable Timer 0 Interrupts
TR0 = 1; // Start Timer 0 Running
EA = 1; // Global Interrupt Enable
TH0 = 0; //Timer count register H byte
TL0 = 0; //Timer count register L byte
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
while(1)
{
// GO INFINITE LOOP AND WAIT FOR TIMER INTERRUPT
}
}
///////////main.c end//////////////
////////////main.c start////////////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void main( )
{
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
P1=0x01; //set port 1 = 1. That is 00000001 on 8bit Port 1
P2_1=0x01; // set port 2 bit 1 =1. That is 00000010 on 8bit Port 2
P3=P1; //Set port 3 same as port 1. That is 00000001 on 8bit port 3.
while(1)
{
//Go to infinity to stop the process here. If there is no infinity loop the code gets restarted again.
}
}
///////////main.c end//////////////
2: To blink a pin or port (the below code will turn on and off port 1 pin 0)
PLEASE NOTE: USE ONLY ONE #INCLUDE FILE I MENTIONED BELOW ACCORDING TO THE CONTROLLER NAME I MENTIONED BELOW. COMMENT THE ONE WHICH DOES NOT HAVE YOUR CONTROLLER NAME CATEGORY BELOW. THE LINES TO BE COMMENTED ARE COLORED IN GREEN. I HAVE ALREADY COMMENTED REGX52.H BY DEFAULT.
//////////main.c start/////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void delay(int n); //delay routine
void delay(int n)
{
int i,j;
for(i=0;i<=100;i++)
{
for(j=0;j<=n;j++); //the loop will be occurring at n * 100 times
}
}
void main( )
{
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
while(1)
{
P1=0x01; //set port 1 = 1. That is 00000001 on 8bit Port 1
delay(1000); //Call delay routine to pause port 1 state
P1 = 0x00; //set port 1 = 0. That is 00000000 on 8bit port 1
delay(1000); // Call delay routine to pause port 1 state
}
}
///////////main.c end//////////////
3: How to work with timers? Timers work on interrupt routines. You must follow this basic way below to make timer work.
PLEASE NOTE: USE ONLY ONE #INCLUDE FILE I MENTIONED BELOW ACCORDING TO THE CONTROLLER NAME I MENTIONED BELOW. COMMENT THE ONE WHICH DOES NOT HAVE YOUR CONTROLLER NAME CATEGORY BELOW. THE LINES TO BE COMMENTED ARE COLORED IN GREEN. I HAVE ALREADY COMMENTED REGX52.H BY DEFAULT.
//////////main.c start/////////
#include "REGX51.h" // for 89c2051,89c4051,89c51, 89s51 controller
//#include "REGX52.h" //for 89c52,89s52 controller
void timer0_ISR (void) interrupt 1 // for timer 1 if implemented use void timer1_ISR(void)interrupt 2
{
P2_1=!P2_1; // SET PORT 2 PIN 1 = 1 AND THEN 0 ON NEXT INTERRUPT AND VICE VERSA
}
void main( )
{
TMOD = 0xe0; // Set T/C0 Mode 16bit timer
ET0 = 1; // Enable Timer 0 Interrupts
TR0 = 1; // Start Timer 0 Running
EA = 1; // Global Interrupt Enable
TH0 = 0; //Timer count register H byte
TL0 = 0; //Timer count register L byte
P0=0x00; //Set port 0 to 0v logic
P1=0x00; //Set port 1 to 0v logic
P2=0x00; //Set port 2 to 0v logic
P3=0x00; //Set port 3 to 0v logic
while(1)
{
// GO INFINITE LOOP AND WAIT FOR TIMER INTERRUPT
}
}
///////////main.c end//////////////
No comments :
Post a Comment